EPT爲了提升虛擬化內存映射的效率而提供的一項技術。
打開EPT後,GuestOS運行時,通過頁錶轉化出來的地址不再是真實的物理地址,而是被稱作爲guest-physical addresses,經過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對其進行記錄,不進行處理。