我们的IT创build了一个虚拟机,分配了2个CPU,而不是我要求的4个。 他们的理由是虚拟机在2个CPU上运行得更好,而不是4个(据他们说)。 理由是VM虚拟机pipe理程序(在这种情况下,VMWare)等待所有的CPU在使用它们之前可用。 因此,等待4个而不是2个CPU需要更长的时间。
这个说法是否有意义?
这曾经是真实的,但不再是完全正确的。
他们指的是严格的协同调度 。
最重要的是,在严格的协同调度algorithm中,存在滞后的vCPU会导致整个虚拟机器被共同停止。 在宽松的协同调度algorithm中,一个领先的vCPU决定是否应该根据最慢的同级vCPU
现在, 如果主机只有4个线程,那么分配所有的线程是愚蠢的。 如果每个处理器有两个处理器和四个线程,那么您可能不想分配单个处理器的所有内容,因为您的虚拟机pipe理程序应该尝试将vCPU保留在同一个NUMA节点上,以加快内存访问速度通过将整个套接字分配给单个虚拟机(参见上面的PDF第12页),使得这项工作更加困难。
所以有些情况下,vCPU的性能可能会比更好,但在100%的时间内并不正确。
说了这么多,我很less为每个guest虚拟机分配超过3个vCPU。 默认情况下,每个人得到2个,如果工作量很大,则每个人得到2个;对于SQL Server或真正的批量处理虚拟机,或者拥有大量用户的terminal服务器,则是4个。
这在很大程度上取决于底层的pipe理程序和运行它的pipe理员,让我解释一下:
你能从中学到什么? 始终以最less的资源创build虚拟机,并根据需要进行增加。 总是向外扩展,而不是向上,你将能够在任何地方运行你的应用程序。
由于虚拟机pipe理程序可以实现locking,所以2个CPU的速度确实比4个CPU快。
是的,这个陈述是一般意义上的。 然而,这是你应该testing你的确切configuration和工作量。 如果你真的能够利用这些CPU,有时候更多的CPU会更好。 但是,如果实际上并没有那么多的并行性,那么configuration了较lessCPU的虚拟机通常会稍微好一点,因为它避免了由于CPU就绪状态暂停而造成的减速。
我已经减less了一些虚拟机上的vCPU,并且大部分的吞吐量都有所提高。 less数情况变得更糟,需要按vCPU计数。