ESXi 结合了传统的初始放置位置方法和动态重新平衡算法。系统定期(默认情况下每两秒一次)检查各个节点的负载,并且确定是否应通过将虚拟机从一个节点移至另一个节点来再平衡负载。
此计算考虑了虚拟机和资源池的资源设置,以便在不违反公平性或资源可用量的情况下改善性能。
再平衡器选择合适的虚拟机,并将其主节点更改为负载最少的节点。如果可以的话,再平衡器会移动目标节点上已经有一些内存的虚拟机。从此之后(除非再次移动),虚拟机将在新的主节点上分配内存,并且仅在新主节点内的处理器上运行。
再平衡是维持公平性和确保完全使用所有节点的有效解决方案。再平衡器可能需要将虚拟机移至已经分配少量内存或没有分配内存的节点上。这种情况下,虚拟机会遭受与大量远程内存访问相关联的性能损失。ESXi 通过将内存从虚拟机的原始节点以透明的方式迁移到新的主节点,可以消除该损失:
- 系统选择原始节点上的页(4 KB 连续内存),并将其数据复制到目标节点中的页上。
- 系统使用虚拟机监控层和处理器的内存管理硬件来无缝地重新映射虚拟机的内存视图,因此系统将目标节点上的页用于后续的所有引用,从而消除了远程访问内存所带来的损失。
当虚拟机移至新的节点时,ESXi 主机立即开始按此方式迁移其内存。主机会管理迁移速率,以避免让系统负担过重,特别是在虚拟机剩下很少的远程内存或目标节点的可用内存很少时。如果虚拟机只是短时间内移至新的节点,则内存迁移算法还可以确保 ESXi 主机不会无用地移动内存。
当初始放置位置、动态再平衡和智能内存迁移配合使用时,即使工作负载出现变化,也能确保 NUMA 系统的良好内存性能。当主要工作负载出现变化时(例如启动新的虚拟机时),系统需要一些时间来重新调整,将虚拟机和内存迁移到新的位置。经过很短的时间之后(通常是几秒钟或几分钟),系统就可以完成重新调整并达到稳定状况。