有 2 个 CPU 的 VM 真的比有 4 个 CPU 的 VM 快吗?

Ang*_*ker 67 windows windows-server-2008 virtual-machines

我们的 IT 创建了一个分配了 2 个 CPU 而不是我请求的 4 个 CPU 的 VM。他们的原因是 VM 使用 2 个 CPU 而不是 4 个 CPU 时性能更好(根据他们的说法)。基本原理是 VM 管理程序(在本例中为 VMWare)在使用任何 CPU 之前等待所有 CPU 可用。因此,等待 4 个而不是 2 个 CPU 需要更长的时间。

这个说法有意义吗?

Mar*_*son 62

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

他们所指的是Strict Co-Scheduling

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

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

因此,有场景中较少的vCPU可以执行超过更好,但它不是时间真的100%。

说了这么多,我很少为每个来宾分配超过 3 个 vCPU。默认情况下,每个人都获得 2 个,如果工作负载很重,则获得 3 个,而对于 SQL Server 或非常繁重的批处理 VM 或具有大量用户的终端服务器之类的东西,则获得 4 个。

  • @Luaan 盒子上有 SQL Server,所以我认为他们那里有一些优秀的软件人员。 (4认同)
  • 顺便说一句 - 即使除了虚拟化障碍之外,编写利用并行性的软件通常也很棘手。如果您的软件人员不够好,实际上让四台虚拟主机分别运行一个软件实例可能比一台主机运行四个执行线程要好。 (3认同)

小智 15

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

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

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

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