EPT为了提升虚拟化内存映射的效率而提供的一项技术。
打开EPT后,GuestOS运行时,通过页表转化出来的地址不再是真实的物理地址,而是被称作为guest-physical addresses,经过EPT的转化后才成为真实的物理地址。
可以使用 $cat /proc/cpuinfo | grep ept检查硬件是否支持ept机制。如果支持那么kvm会自动的利用EPT。
如果CR0.PG=0,GuestOS分页机制没有打开,直接使用线性地址作为guest-physical addresses,
如果CR0.PG=1,使用分页机制转化后的地址作为guest-physical addresses。
EPT的表和页表基本类似,具体可以参见Intel的编程手册。
EPT的建立:
EPT misconfigurations and EPT violations.
EPT misconfigurations 出现在对应的表项不合法,EPT violations出现在表项不允许访问或者不存在。
对于EPT violations引起的vm exit:
gpa = vmcs_read64(GUEST_PHYSICAL_ADDRESS);
kvm_mmu_page_fault(vcpu, gpa & PAGE_MASK, 0);
tdp_page_fault处理如下,gpa 根据计算出来pfn,然后调用__direct_map函数,填充对应的表项。
KVM对EPT misconfigurations的处理:
EPT misconfigurations 出现在对应的表项不合法,正常情况下不应该出现,KVM对其进行记录,不进行处理。