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


67

我们的IT人员创建了一个分配了2个CPU的虚拟机,而不是我要求的4个。他们的理由是,VM在2个CPU而不是4个CPU上表现更好(根据它们)。理由是VM虚拟机管理程序(在这种情况下为VMWare)在使所有CPU投入使用之前等待所有CPU可用。因此,等待4个而不是2个CPU需要更长的时间。

这句话有意义吗?

Answers:


62

这曾经是正确的,但不再完全是正确的。

他们指的是严格的协同调度

最重要的是,在严格的协同调度算法中,滞后的vCPU的存在会导致整个虚拟机协同停止。在宽松的协同调度算法中,领先的vCPU根据对最慢的同级vCPU的偏斜来决定是否应自行停止

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

因此,在某些情况下,更少的vCPU 可以比更多的性能好,但这并不是100%的时间。

综上所述,我很少为每个来宾分配超过3个vCPU。默认情况下,每个人都得到2个,如果工作量很大,则每个人得到3个,而对于SQL Server或真正繁重的批处理VM​​或具有很多用户的终端服务器,则得到4个。


3
顺便说一句-即使存在虚拟化障碍,编写利用并行性的软件通常也很棘手。如果您的软件工程师还不够出色,那么让四个虚拟主机分别运行一个软件实例可能比一个主机运行四个执行线程更好。
a安2015年

4
@Luaan盒子上有SQL Server,所以我认为他们那里有一些不错的软件专家。
AngryHacker 2015年

1
@AngryHacker是的,假设您进行了适当的MAXDOP设置,SQL Server可以非常高效地使用所有4个内核。但是,根据工作负载,负担过重的SQL Server通常是数据库设计不佳的标志-索引错误,没有聚集索引,索引太多,没有优化等(不总是,但经常)。
马克·亨德森

1
@Luaan仍然是并行性...如果他们需要彼此交谈,则延迟要高得多。:)
reirab 2015年

@MarkHenderson它的优化效果很好,但是有些工作量太大,无法同时由2个CPU和大量其他查询轻松处理。
AngryHacker 2015年

15

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

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

您可以从中学到什么?始终以最少的资源创建VM,并根据需要增加VM。始终横向扩展而不是向上扩展,您将可以在任何地方运行您的应用程序。

由于虚拟机管理程序可能会遇到锁定,因此确实可以理解,2个CPU的速度可能比4个CPU的速度快。


4

是的,该声明通常是合理的。但是,您应该测试一下它的确切配置和工作负载。如果您可以真正利用它们,有时更多的CPU会更好。但是,如果实际上没有那么多的并行性,则配置有较少CPU的VM的性能通常会稍好一些,因为它可以避免由于CPU就绪状态暂停而导致的速度降低。

我减少了许多虚拟机上的vCPU,并看到大多数虚拟机的吞吐量都有所提高。少数情况变得更糟,需要提高vCPU数量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.