2 个 CPU 上的 50% 负载与一个 CPU 上的 100% 负载相同吗?

2 个 CPU 上的 50% 负载与一个 CPU 上的 100% 负载相同吗?

最基本的疑问:我有一个应用程序在具有 2 个 vCPU 的虚拟机上运行。两个 CPU 上的平均负载略低于 50%。

这是否意味着 1 个 CPU 足以满足我的应用程序的需求?或者更多 CPU 可从并行运行的线程中获益?

编辑:这是我的系统中的一个真实示例,该系统包含 8 个 CPU,持续一个月。数据已标准化为 100%=8CPU。我想知道这些信息是否足以解决我的问题,基本上就是系统是否过大。

CPU负载

CPU使用率

答案1

事情没那么简单。如果一个线程或进程烧毁尽可能多的 CPU,在双 CPU 系统上,CPU 占用率最高为 50%。或者,某些系统会将其显示为 100% CPU,因为那时 CPU 占用率最高为 200%。

如果你有两个线程以一个核心 50% 的 CPU 运行(这样它们就不会达到最大值),或许它们在单核上的运行速度差不多,但你会看到 100%。(这还没有考虑到机器还有其他事情要做,上下文切换会造成开销。)

例如,如果有两个线程,它们 50% 的时间处于睡眠状态,而用另外 50% 的时间进行计算,则一个 CPU 可以交替让这两个线程处于睡眠状态和计算状态,这样就可以使用 100% 的 CPU。

编辑:

我想展示一些示例图表来说明这一点。

这台服务器运行 16 个高 CPU 进程和几百个低 CPU 进程。3 月份,我决定将其升级到 8 个 CPU/核心(因此跃升至 800%),主要是因为我必须在它上面运行一段时间额外的软件,这一点您会看到。

8 个 CPU

从五月到七月的大部分时间里,4 个核心可以已经足够了。但是,我知道我的一些流程(进行批处理)可能会被延迟。

这是随附的负载图:

负荷图

它们具有相关性,但正如您所见,它不仅仅是百分比/100。

您希望这样的图表能够帮助您做出明智的决策。

编辑2,关于您的图表:

很有趣。这些图表是用什么做的?它们都以我习惯的相反方式表示数据:它似乎系统中的所有核心的 CPU 利用率都达到 100%,而不是像我的图表中那样每个核心都达到 100%。您可以通过运行dd if=/dev/urandom of=/dev/null几个小时来测试它;这将导致一个核心达到最大值,然后您就会看到效果。

负载图显示负载每个核心。我以前从未见过。uptime,,htopmunin它们都显示只是加载

答案2

实际上,仅通过查看 CPU 使用率你永远无法了解需求,现代 CPU 会根据要求以合适的方式生成线程。

核心越多,应用程序运行线程的优势就越大。

相关内容