MMU Virtualization via Intel EPT: Implementation - Part 1
概述
本文将介绍通过Intel扩展页表(EPT)实现MMU虚拟化的各种需求与可用功能。由于需要涵盖初始化、能力检查、MTRR设置、页面拆分等大部分细节,本文篇幅较长。我们将从检查功能可用性和最新Intel处理器支持的能力开始,重构部分VMM结构以支持EPT,然后进入页表分配阶段。
本文使用Windows内存管理API来分配和跟踪资源。强烈建议读者研究并实现不依赖操作系统资源分配的自定义内存分配器,因为这些可能成为恶意第三方的攻击向量。但为了简单起见,我们将采用最直接的方法。
免责声明
读者必须具备虚拟内存、分页、地址转换和页表的基础知识。这些信息可在Intel SDM第4.1.0节V-3A中找到。
本项目的研究和开发在最新的Windows 10 Build 21343.1000上进行。为确保所有功能的兼容性,请注意作者使用的是支持最新虚拟化扩展的Intel i9-10850k(Comet Lake)处理器。在能力/功能支持检查过程中,如果您的处理器显示不可用,请不要担心——只要支持基线EPT就没问题。
功能可用性
首先,我们需要检查几项内容以确保支持EPT和不同的EPT策略。本项目有一个函数在启动前设置所有可用的VMX能力——检查WB缓存类型、各种处理器控制,以及本文相关的EPT、VPID、INVPCID支持。
这些能力位于辅助处理器控制中,我们将从IA32_VMX_PROCBASED_CTLS2 MSR读取。低32位表示这些控制的允许0设置,高32位表示允许1设置。您应该已经设置了算法来检查和启用各种控制功能。如果没有,请参考本系列第一篇关于CPU虚拟化的文章。
可能的不兼容性
如果您的处理器不支持辅助处理器控制,将无法实现EPT。除非使用非常旧的处理器,否则出现此问题的可能性很小。
验证并启用能力和策略后,我们将启用EPT。但在此之前会有信息转储,因为理解扩展分页作为现有分页机制的扩展以及hypervisor的结构变化至关重要。我们需要在客户描述符中分配一个包含EPTP的数据结构。
内存虚拟化
虚拟内存和分页是现代工作环境中必要的抽象。它们使现代计算机系统能够高效利用物理内存,隔离进程和执行上下文,并将内存管理最复杂的部分交给操作系统处理。
虚拟内存与分页
在现代系统中,启用分页后,每个进程都有自己专用的虚拟地址空间,以特定粒度管理。这种粒度通常为4kB,如果您听说过"页对齐"这个术语,那么您已经使用过分页机制。
地址转换可视化
如上所述,页表是每个进程(或每个上下文)的结构,包含进程的所有虚拟到物理映射。操作系统管理它,硬件执行页表遍历;在某些情况下,操作系统获取转换。
扩展页表(EPT)
Intel和其他硬件制造商引入了虚拟化扩展,允许多个操作系统在单个硬件设置上执行。为了比软件虚拟化解决方案表现更好,引入了许多不同的设施——其中之一是EPT。
EPT和分页数据结构
如果您回忆第一系列虚拟化内容,我们有一个单独的函数来初始化VMXON、VMCS和其他相关数据结构。在启用VMX操作之前,但在为VMXON和VMCS以及任何其他主机相关结构分配区域之后,我们将初始化EPT资源。
EPT页层次结构
确定功能可用后,我们需要初始化EPT指针。本文将仅涵盖单个页层次结构的初始化。在未来的文章中,我们将涵盖多个EPT指针的初始化,以允许使用多种页层次结构的切换方法。
分页结构差异
使用EPT时,结构上有细微变化。其中之一是页表条目结构的差异。
EPT身份映射(4kB)
在分页方面有很多互换的术语,身份映射就是其中之一。它有时被称为身份分页或直接映射。
结论
还有一些工作要做,现在我终于有时间继续写作,希望能在几周内完成下一部分。下一篇文章将花时间澄清任何困惑和剩余要求,以使EPT正常运行,包括平台上存在的页遍历机制的细节、逻辑以及如何实现我们自己的GVA→HPA平滑转换。
一如既往,请务必查看推荐阅读!请原谅本文的混乱。我写了很长时间,并删除了各种编写后认为不必要的部分。最后,它仍然很长,我想在新的文章中重新开始,而不是全部塞进一篇文章——您可能也不希望这样。
推荐阅读
- Increasing TLB Reach by Exploiting Clustering in Page Translations (论文)
- Virtual Memory: Address Translation Walkthrough (David Black-Schaffer)
- Virtual Memory: Multi-level Page Tables (David Black-Schaffer)
- Introduction to Paging on Windows x64 (Connor McGarr)
- Hypervisor from Scratch – Part 4 (Mohammad Karvandi)
- §28.3.1 Extended Page Table Mechanism (Intel SDM Vol. 3C)
- Alternative EPT Setup Reference (HyperPlatform via @standasat)