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

Gla*_*ost 2 cpu-usage

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

这是否意味着 1 个 CPU 足以满足我的应用程序?或者更多的 CPU 受益于并行运行的线程?

编辑:这是一个来自我的系统的真实示例,它由 8 个 CPU 组成,超过一个月。数据归一化为 100%=8CPU。我想知道这些信息是否足以解决我的问题,基本上是系统过大。

中央处理器负载

CPU使用率

Hal*_*aar 5

事情没那么简单。使用一个线程或进程尽可能多地消耗CPU,它在双 CPU 系统上将最大消耗 50% CPU。或者,有些系统会将其显示为 100% CPU,因为那时最大为 200% CPU。

如果您有两个线程在一个内核的 50% CPU 上运行(因此它们不会最大化),也许它们在单个内核上的运行速度会差不多,但是您会看到 100%。(这没有考虑到机器还有其他事情要做,上下文切换会导致开销。)

例如,如果您有两个线程在 50% 的时间内休眠并计算其他 50% 的内容,则一个 CPU 可以交替这两个线程的休眠和计算,以便使用 100% 的 CPU。

编辑:

我想我会展示一些示例图表来说明它。

该服务器运行 16 个高 CPU 进程和几百个低 CPU 进程。三月份,我决定将它升级到 8 个 CPU/内核(因此跃升到 800%),主要是因为我不得不在它上面运行额外的软件一段时间,你可以看到。

8 个 CPU

从 5 月到 7 月的大部分时间里,4 个内核足够了。但是,我确实知道我的某些流程(进行批处理)会被延迟。

这是随附的负载图:

负载图

它是相关的,但正如您所看到的,它不仅仅是百分比/100。

您希望此类图表能够做出明智的决定。

编辑 2,关于你的图表:

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

负载图显示每个内核的负载。我以前从未见过。uptime, htop, munin: 它们都显示只是加载