具有 2 个 CPU 的虚拟机真的比具有 4 个 CPU 的虚拟机更快吗?

具有 2 个 CPU 的虚拟机真的比具有 4 个 CPU 的虚拟机更快吗?

我们的 IT 部门创建了一个分配了 2 个 CPU 的虚拟机,而不是我要求的 4 个。他们的理由是,虚拟机使用 2 个 CPU 比使用 4 个 CPU 时性能更好(据他们说)。理由是虚拟机管理程序(在本例中为 VMWare)会等待所有 CPU 可用后才会使用其中任何一个。因此,等待 4 个 CPU 比等待 2 个 CPU 需要更长的时间。

这种说法有道理吗?

答案1

这曾经是正确的,但现在已不再是唯一正确的。

他们指的是严格协同调度

最重要的是,在严格的协同调度算法中,滞后的 vCPU 的存在会导致整个虚拟机被同时停止。在宽松的协同调度算法中,领先的 vCPU 会根据与最慢的兄弟 vCPU 之间的偏差来决定是否应该同时停止自己

现在,如果主机只有 4 个线程,那么分配所有线程就太愚蠢了。如果它有两个处理器,每个处理器有 4 个线程,那么你可能不想分配单个处理器的所有内容,因为您的虚拟机管理程序应该尝试将 vCPU 保持在同一个 NUMA 节点上以加快内存访问速度,而通过将整个插槽分配给单个 VM 使这项工作变得更加困难(请参阅上面该 PDF 的第 12 页)。

因此,在某些情况下,vCPU 较少表现优于更多,但并非 100% 的时间都是如此。

综上所述,我很少为每个客户机分配超过 3 个 vCPU。默认情况下,每个客户机分配 2 个 vCPU,如果工作负载很大,则分配 3 个,如果是 SQL Server 或非常繁重的批处理虚拟机,或者有大量用户的终端服务器,则分配 4 个。

答案2

这在很大程度上取决于底层的虚拟机管理程序和运行它的管理员,让我解释一下:

  1. 仅仅因为你请求就随意给你 4 个 CPU 是一种不好的做法。一般来说,你思考您需要 4 个;但资源监控显示您只需要 1 个。
  2. 以 VMware ESXi 为例当 vCPU 请求 CPU 资源时,需要锁定所有 pCPU;因此,在这个虚拟机管理程序上,它对性能不利。KVM 不像 ESXi 那样进行锁定;它使用底层内核调度程序,但从长远来看仍会产生 CPU 争用。
  3. 如果您从一开始就使用 4 个 CPU 构建系统,那么您实际上并不是在向外扩展,而是向上扩展(这是一种不好的做法,尤其是在虚拟机上)。您可能需要检查您正在构建的架构,以便可以将其构建为可扩展到当今的现代云基础架构。

你能从中学到什么?始终使用最少的资源创建虚拟机,并根据需要增加资源。始终横向扩展而不是纵向扩展,这样你就可以在任何地方运行你的应用。

由于虚拟机管理程序可能会出现锁定,因此 2 个 CPU 确实比 4 个 CPU 更快。

答案3

是的,这个说法总体上是有道理的。但是,你应该针对具体配置和工作量进行测试。有时,如果你能真正利用 CPU,那么 CPU 越多越好。但是,如果你实际上没有那么多并行性,那么配置较少 CPU 的虚拟机通常会表现得更好一些,因为它可以避免由于 CPU 就绪状态暂停而导致的速度减慢。

我减少了许多虚拟机上的 vCPU,发现大多数虚拟机的吞吐量都有所提高。少数虚拟机的吞吐量变差,需要增加 vCPU 数量。

相关内容