我们的 IT 创建了一个分配了 2 个 CPU 而不是我要求的 4 个 CPU 的 VM。他们的原因是虚拟机在使用 2 个 CPU 而不是 4 个 CPU 时性能更好(根据他们的说法)。基本原理是 VM 管理程序(在本例中为 VMWare)在使用任何 CPU 之前等待所有 CPU 可用。因此,等待 4 个而不是 2 个 CPU 需要更长的时间。
这种说法有意义吗?
我们的 IT 创建了一个分配了 2 个 CPU 而不是我要求的 4 个 CPU 的 VM。他们的原因是虚拟机在使用 2 个 CPU 而不是 4 个 CPU 时性能更好(根据他们的说法)。基本原理是 VM 管理程序(在本例中为 VMWare)在使用任何 CPU 之前等待所有 CPU 可用。因此,等待 4 个而不是 2 个 CPU 需要更长的时间。
这种说法有意义吗?
这曾经是正确的,但不再完全正确。
他们指的是Strict Co-Scheduling。
现在,如果主机只有 4 个线程,那么分配所有线程是愚蠢的。如果它有两个处理器和每个处理器 4 个线程,那么您可能不想分配单个处理器的所有内容,因为您的管理程序应该尝试将 vCPU 保持在同一个 NUMA 节点上以加快内存访问速度,而您正在通过将整个套接字分配给单个 VM 使这项工作变得更加困难(参见上面那个 PDF 的第 12 页)。
因此,在某些情况下,更少的 vCPU 比更多的 vCPU性能更好,但这并不是 100% 的情况。
说了这么多,我很少为每个客户分配超过 3 个 vCPU。默认情况下,每个人都获得 2,如果工作量很大,则获得 3,对于 SQL Server 或真正繁重的批处理 VM 或具有大量用户的终端服务器等事物,则获得 4。
这在很大程度上取决于底层管理程序和运行它的管理员,让我解释一下:
你能从中学到什么?始终使用最少的资源创建 VM,并根据需要增加。始终向外扩展而不是向上扩展,您将能够在任何地方运行您的应用程序。
由于虚拟机管理程序可以体验到锁定,因此 2 个 CPU 确实可以比 4 个 CPU 更快。
是的,这句话总体上是有道理的。但是,您应该针对您的确切配置和工作负载进行测试。有时,如果您可以真正利用它们,更多的 CPU 会更好。但是,如果您实际上没有那么多并行度,那么配置较少 CPU 的 VM 通常会表现得稍微好一些,因为它可以避免由于 CPU 就绪状态暂停而导致的减速。
我已经减少了许多虚拟机上的 vCPU,并且看到大多数虚拟机的吞吐量有所提高。少数变得更糟,需要增加 vCPU 数量。