当只提供两个内核而不是四个内核时,VM 能否表现得更好?

arc*_*ain 7 vmware-esxi

我们有一个 VMWare VM 工作,分配给它的两个内核在 IIS 中运行一个非常令人发指的进程。在负载下,该过程将两个内核的 CPU 使用率最大化,因此我们要求我们的系统工程师将物理处理器的另外两个内核呈现给 VM。工程师立即表示,这根本不会提高性能,反而会使 VM 性能变差。他驳斥了他的说法与 ESX 服务器的容量或资源争用有关的原因。

那句话对我来说没有多大意义,我想知道工程师所说的怎么可能是真的。实际上是否存在向 VM 提供四个内核会导致性能比同一物理硬件上的两个内核更差的情况?让我们假设一种理想情况,即主机服务器上只有一个 VM,因此不会与其他操作系统实例共享任何内容。

我相信物理服务器有一个四核处理器,并且很可能托管多个 VM。我真的不知道主机上运行的是哪个版本的 ESX,也不确定物理处理器配置是什么,但是从我可以访问的 VM 中,我看到了两个 3.33 GHz AMD 处理器。

最后,我从来没有测试过工程师的断言,因为(当我们尝试升级 VM 时)我们能够优化过程并减少它的 CPU 消耗,并且 2)我们最终迁移到不同的 VM另一个具有四个内核的 ESX 服务器。

小智 9

我将在此插话并说您的工程师可能在谈论这样一个事实,即具有多个 vCPU 的 VM 在调度 CPU 周期时具有明显的劣势。一个 1 vCPU 虚拟机可以在单核可用时立即执行指令。如果 VM 有 4 个 vCPU,那么它实际上无法执行任何指令,直到有 4 个内核可用。

如果你的机器上有相当数量的 VM,这肯定会减慢你的 b/c 你的 VM 将不得不排队等待 4 个内核释放。它还可能减慢其他 VM 的速度,因为它将同时绑定所有 4 个内核。

我不想进入超线程和所有这些,但上面是我认为你的家伙可能指的是什么的简单解释。尽管他可能没有尽最大努力解释它。

  • 您所指的在 VMware 术语中称为严格协同调度,并且在最新版本的 VMware 中并不完全准确。调度多个 vCPU 更难(Rex 的回答总结了大部分原因),但自 ESX 3.5 以来,绝对严格的协同调度不再受到约束。仍然存在限制,但允许 vCPU 之间存在一些偏差,这使得调度问题比以前少了很多。你几乎肯定是正确的,这就是有问题的工程师的想法。 (4认同)

Rex*_*Rex 6

每个 VMWare 的vSphere 的最佳做法是使用尽可能少的虚拟 CPU。如果应用程序不是为 SMP 应用程序构建的,那么如果您将多个 vCPU 分配给来宾,则会产生负面影响。

即使某些 vCPU 未被使用,使用它们配置虚拟机仍会对 ESX 施加一些小的资源要求: * 未使用的 vCPU 仍会消耗计时器中断。* 在多个 vCPU 之间保持一致的内存视图会消耗资源。* 一些较旧的客户操作系统在未使用的 vCPU 上执行空闲循环,从而消耗原本可用于其他用途(其他虚拟机、VMkernel、控制台等)的资源。* 来宾调度程序可能会在多个 vCPU 之间迁移单线程工作负载,从而丢失缓存局部性。

如果主机将所有物理 CPU 周期最大化,则可能会导致其他性能问题,因为主机开始陷入困境,进而导致所有来宾开始陷入困境。

编辑:您的工程师至少应该愿意进行测试。

再次阅读您的帖子时,您说它只有 1 个四核 CPU .. 如果是这样,我可能会和您的工程师一起说将所有 4 个物理 CPU 分配给一个客人是个主意。当只有 4 个物理内核时,主机上管理所有 4 个 vCPU 的开销会降低整体性能。

问题是,当主机总共只有 4 个内核时,突然添加 4 个 vCPU 是您将所有物理 CPU 资源分配给一台机器。让管理程序管理所有 4 个 vCPU 的开销最终会占用资源,并且您实现的收益很可能是最小的