因为虚拟化引入了额外级别的内存映射,所以可以跨虚拟机来管理内存。
虚拟机的一些物理内存可能映射到共享页面或未映射或交换的页面。
主机执行内存管理时无需了解客户机操作系统,也不会干涉客户机操作系统自身的内存管理子系统。
每个虚拟机的VMM保持了从客户机操作系统的物理内存页到基础计算机上物理内存页的映射。
每个虚拟机均有连续的可寻址的物理内存空间,该空间从零开始。每个虚拟机使用的服务器上的基础内存不一定是连续的。
客户机虚拟地址到客户机物理地址的转换由客户机操作系统管理。管理程序仅负责将客户机物理地址转换为计算机地址。硬件辅助的内存虚拟化将利用硬件基础设施生成具有由管理程序维护的客户机页表和嵌套页表的组合映射。
- 方框表示页,而箭头表示不同内存的映射。
- 从客户机虚拟内存到客户机物理内存的箭头表示客户机操作系统中的页表所保持的映射。
- 从客户机物理内存到计算机内存的箭头表示由VMM保持的映射。
- 虚线箭头表示从客户机虚拟内存到计算机内存的映射,该映射也由VMM保持。运行虚拟机的基础处理器使用
卷影表映射。
硬件辅助的内存虚拟化
类似于CPU通过使用两层页表来提供对内存虚拟化的硬件支持。
第一层页表存储客户机虚拟-物理转换,而第二层页表存储客户机物理-计算机转换。TLB(translation lookaside buffer,转换旁视缓冲区)是由处理器的内存管理单元(MMU)硬件维护的转换缓存。TBL缺失是缓存中的缺失,而且硬件需要访问内存(可能是多次)来查找所需的转换。如果TLB中没有某个客户机虚拟地址,则硬件会查看这两个页表,将客户机虚拟地址转换成计算机地址。第一层页表由客户机操作系统维护,VMM仅维护第二层页表。
性能注意事项
使用硬件辅助时,会消除软件内存虚拟化的开销,特别是,硬件辅助消除了是卷影页表与客户机页表保持同步所需的开销。但是,使用硬件辅助时TLB缺失延迟时间明显较长。默认情况下,管理程序在硬件辅助模式下使用大页以减少TLB缺失的成本。因此工作负载是否受益于硬件辅助主要取决于在使用软件虚拟化时由内存虚拟化引起的开销。如果工作负载设计少量页表活动(例如进程创建、映射内存页或上下文切换),则软件虚拟化不会引起显著开销,相反,具有大量页表活动的工作负载可能会因使用硬件辅助而受益。