ESXi 使用复杂的 NUMA 调度程序来动态平衡处理器负载、内存局部性或处理器负载。
- 由 NUMA 调度程序管理的每个虚拟机均分配有主节点。主节点是系统的 NUMA 节点之一,其中包含处理器和本地内存,如系统资源分配表 (SRAT) 所示。
- 将内存分配给虚拟机时,ESXi 主机会优先从主节点分配内存。虚拟机的虚拟 CPU 被限制在主节点上运行以使内存局部性最大化。
- NUMA 调度程序可以动态更改虚拟机的主节点以响应系统负载的变化。该调度程序可能会将虚拟机迁移到新的主节点,以减少处理器负载的不平衡。因为这可能会导致使用更多远程内存,所以调度程序可能会将虚拟机的内存动态迁移到新的主节点,以改善内存局部性。在改善总体内存局部性的同时,NUMA 调度程序还可能在节点之间交换虚拟机。
一些虚拟机不受 ESXi NUMA 调度程序管理。例如,如果为虚拟机手动设置了处理器或内存关联性,NUMA 调度程序可能无法管理该虚拟机。未受 NUMA 调度程序管理的虚拟机仍然可以正确运行。但是,这些虚拟机不能从 ESXi 的 NUMA 优化中受益。
ESXi 中的 NUMA 调度和内存放置策略可以透明地管理所有虚拟机,因此管理员不需要明确处理在节点之间平衡虚拟机的复杂事情。
无论客户机操作系统的类型如何,优化措施都可以顺利发挥作用。ESXi 甚至为不支持 NUMA 硬件的虚拟机(例如 Windows NT 4.0)也提供了 NUMA 支持。因此,即使是使用旧版操作系统,也可以利用新的硬件。
如果虚拟机上的虚拟处理器数量超过单个硬件节点上可用的物理处理器内核数,则可以自动管理该虚拟机。NUMA 调度程序调控此类虚拟机的方法是使其跨越各 NUMA 节点。即,虚拟机分为多个 NUMA 客户端,每个客户端都分配到一个节点,然后由调度程序将其作为正常、非跨越客户端进行管理。这可提高某些具有较高局部性且占用大量内存的工作负载的性能。有关配置此功能的行为的信息,请参见高级虚拟机属性。
ESXi 5.0 及更高版本包括对向客户机操作系统公开虚拟 NUMA 拓扑的支持。有关虚拟 NUMA 控制的详细信息,请参见使用虚拟 NUMA。