类似于 AMD SVM-V 和 Intel Xeon 5500 系列之类的部分 CPU 通过使用两层页表来提供对内存虚拟化的硬件支持。

第一层页表存储客户机虚拟-物理转换,而第二层页表存储客户机物理-计算机转换。TLB(translation look-aside buffer,转换旁视缓冲区)是由处理器的内存管理单元 (MMU) 硬件维护的转换缓存。TLB 缺失是此缓存中的缺失,而且硬件需要访问内存(可能是多次)来查找所需转换。如果 TLB 中没有某个客户机虚拟地址,则硬件会查看这两个页表,将客户机虚拟地址转换成主机物理地址。

该图说明了 ESXi 如何实施内存虚拟化。

图 1. ESXi 内存映射


此图说明了如何实施内存虚拟化。

  • 方框表示页,而箭头表示不同的内存映射。

  • 从客户机虚拟内存到客户机物理内存的箭头表示客户机操作系统中的页表所保持的映射。(未显示 x86 架构处理器从虚拟内存到线性内存的映射。)

  • 从客户机物理内存到计算机内存的箭头表示由 VMM 保持的映射。

  • 虚线箭头表示从客户机虚拟内存到计算机内存的映射,该映射也由 VMM 保持。运行虚拟机的基础处理器使用卷影页表映射。

因为虚拟化引入了额外级别的内存映射,所以 ESXi 可以跨所有虚拟机来管理内存。虚拟机的一些物理内存可能映射到共享页面或未映射或换出的页面。

主机执行虚拟内存管理时无需了解客户机操作系统,也不会干涉客户机操作系统自身的内存管理子系统。

性能注意事项

使用硬件辅助时,会消除软件内存虚拟化的开销。特别是,硬件辅助消除了使卷影页表与客户机页表保持同步所需的开销。但是,使用硬件辅助时 TLB 缺失滞后时间明显较长。因此,工作负载是否受益于硬件辅助主要取决于在使用软件内存虚拟化时由内存虚拟化引起的开销。如果工作负载涉及少量页表活动(例如进程创建、映射内存或上下文切换),则软件虚拟化不会引起显著开销。相反,具有大量页表活动的工作负载可能会因使用硬件辅助而受益。