KVM实战系列之内存

EPT和VPID介绍

EPT(Extended Page Tables,扩展页表),属于Intel的第二代硬件虚拟化技术,它是 针对内存管理单元(MMU)的虚拟化扩展。EPT降低了内存虚拟化的难度(与影子页表 相比),也提升了内存虚拟化的性能。从基于Intel的Nehalem[1]架构的平台开始,EPT就 作为CPU的一个特性加入CPU硬件中了。
和运行在真实物理硬件上的操作系统一样,在客户机操作系统看来,客户机可用的内 存空间也是一个从零地址开始的连续的物理内存空间。为了达到这个目的, Hypervisor(即KVM)引入了一层新的地址空间,即客户机物理地址空间,这个地址空间 不是真正的硬件上的地址空间,它们之间还有一层映射。所以,在虚拟化环境下,内存使 用就需要两层的地址转换,即客户机应用程序可见的客户机虚拟地址(Guest Virtual Address,GVA)到客户机物理地址(Guest Physical Address,GPA)的转换,再从客户机 物理地址(GPA)到宿主机物理地址(Host Physical Address,HPA)的转换。其中,前 一个转换由客户机操作系统来完成,而后一个转换由Hypervisor来负责。
在硬件EPT特性加入之前,影子页表(Shadow Page Tables)从软件上维护了从客户 机虚拟地址(GVA)到宿主机物理地址(HPA)之间的映射,每一份客户机操作系统的 页表也对应一份影子页表。有了影子页表,在普通的内存访问时都可实现从GVA到HPA 的直接转换,从而避免了上面前面提到的两次地址转换。
Hypervisor将影子页表载入物理 上的内存管理单元(Memory Management Unit,MMU)中进行地址翻译。图5-3展示了 GVA、GPA、HPA之间的转换,以及影子页表的作用。
尽管影子页表提供了在物理MMU硬件中能使用的页表,但是其缺点也是比较明显 的。首先影子页表的实现非常复杂,导致其开发、调试和维护都比较困难。其次,影子页 表的内存开销也比较大,因为需要为每个客户机进程对应的页表的都维护一个影子页表。
为了解决影子页表存在的问题,Intel的CPU提供了EPT技术(AMD提供的类似技术叫 作NPT,即Nested Page Tables),直接在硬件上支持GVA→GPA→HPA的两次地址转换, 从而降低内存虚拟化实现的复杂度,也进一步提升了内存虚拟化的性能。图5-4展示了 Intel EPT技术的基本原理。

你可能感兴趣的:(KVM实战系列之内存)