我正在配置需要大约 12 个核心才能运行的软件,但我在 vSphere 虚拟机上运行它,这意味着最多可以配置 8 个(虚拟)核心。[1] 运行它的物理机有 24 个可用核心,并且只托管另一个虚拟机。该虚拟机也分配了 8 个核心。
由于我的机器有 8 个核心,另一台机器也有 8 个核心,这意味着 8 个核心似乎完全闲置。这似乎是错误的。
我猜 VMWare 做了一些聪明的事情——尽管我的机器只能分配 8 个核心,但实际上,如果后端有 24 个核心,那么我保证可以获得其中的 8 个,但如果没有其他机器使用它们,我可以使用其中的 24 个。
我一直在阅读有关 vSphere 中的共同共享[2] 的文章,但我有点不明白。
有人能解释一下这是如何运作的吗?
编辑:这是关于 8 CPU 限制的解释,但我需要确认。
vSphere 使用动态处理器负载平衡,允许客户机中分配的每个核心访问主机上的所有核心。虽然客户机操作系统只能看到 8 个物理处理器,但每个处理器都可以访问 24 个核心池。这与大型机的工作方式非常相似。
这暗示 8 个核心的行为更像 24 个核心,但现在这似乎是错误的。是吗?
参考:
答案1
这意味着您的虚拟机中永远不会有超过 8 个线程并行执行。但是,通过 ESX 资源分配的魔力,您可以为这些线程提供相当多的马力。您不受实际 CPU 的最大速率限制,ESX 的 CPU 负载平衡方法将允许以更快的速度运行……只要您使用它执行的操作能够进行这种略微无序的执行。
这是通过利用 CPU 资源的队列结构来实现的。工作根据需要分派到多个处理器。单个 vCPU 可以在任何系统上的物理 CPU(如果是 NUMA 系统,则是本地节点中的 CPU)。通过将工作从单个 vCPU 并行地或至少非常接近地分派到多个物理 CPU,可以实现超过物理 CPU 性能的 vCPU 性能。
当需要重新组合多个 CPU 返回的工作以模拟单个 vCPU 时,在 VM 看来,它就像一个工作速度非常快的 CPU。ESX 会将多个工作单元重新组合成正确的顺序。
当然,并非所有工作负载都适合这种方式。提交大量相互之间松散关联的迭代工作的作业可能是这种情况的最佳情况。涉及与早期指令紧密依赖的作业(例如加密算法的递归调用)将无法扩展。
答案2
vSphere 4.0 的硬性限制是 8 个 vCPU。这就是它所能使用的全部,而且这是一个相当合理的限制。vSphere 的设计更适合处理主机上的许多客户虚拟机,而不仅仅是几个。您可能想看看是否可以集群 3-6 个虚拟机,而不仅仅是 2 个。
答案3
这和他们授权软件的方式有关。你可以免费获得这么多功能。如果你想要更多,你就得付费。http://www.vmware.com/download/eula/multicore.html