記憶體虛擬化硬體基礎 EPT

2021-10-03 11:57:50 字數 1870 閱讀 5098

ept位址轉換

ept轉換開關

ept轉換時機

根據pdpt位址載入pdpt內容,也是512個條目,將gpa的次9位作為索引,在pdpt中索引pdt(page directory table)的位址。

根據pdt位址載入pdt內容,同樣是512個條目,將gpa從高到低的第3個9位作為索引,在pdt中索引頁表的位址。

根據頁表的位址載入其內容,同樣是512個條目,將gpa從高到底的第4個9位作為索引,在頁表中找到頁的位址。

根據頁位址,載入頁的內容,將gpa的低12位作為索引,在頁中找到最終要訪問的頁的內容。

ept violation,這種情況典型場景就是頁結構不存在,類似於主機上的缺頁故障(#pf page fault),發生這種故障後cpu會退回到核心態,同時會在vm-exit qualification欄位記錄ept violation故障的詳細資訊。ept頁結構和主機上普通的頁結構類似,頁表都是故障觸發,逐漸填充頁結構的過程。在客戶態模式下,這是ept violation故障;在主機上,這就是缺頁故障。怎樣判斷頁結構不存在呢?通過檢視每個描述頁結構條目的低3位(read/write/execute),如果低3位全都為0,就表示指向的下一級頁結構不存在(not-present)。這是非頁表的情況,如果是頁表(page table),它的條目的最低位是present位,可以單獨用來表示指向的頁是否存在。

ept misconfiguration,另一種會導致頁故障的情況,它是在頁結構存在的情況下(頁結構低3位的任何一位非0),發現頁結構的內容設定不恰當而產生的故障,這種情況是ept的頁結構真的出了配置上的問題而產生的故障,對於ept misconfiguration,並不會記錄詳細資訊。vm-exit qualification欄位為未定義值。

注意,故障不同於異常,硬體故障後會跳轉到相應的處理例程,在處理完之後會重新執行出故障時的指令而非下一條,ept violation和主機頁表中的page fault一樣,都屬於故障。對於使用ept頁表或者主機頁表的使用者程式來說,當訪問到不存在的頁結構觸發了故障後,硬體會處理然後重新執行,使用者程式是感覺不到的。

mmu首先從cr3中取出頁目錄位址,訪問該頁目錄的內容,此時頁目錄位址被認為是gpa,會觸發ept頁表的查詢,返回的hpa指向頁目錄。mmu取32-bit線性位址的高10位作為索引,在頁目錄中查詢並獲取頁表位址

mmu拿到頁表位址後,訪問該頁表內容,此位址也被認為是gpa,會觸發ept頁表查詢,返回乙個hpa指向頁表。mmu取32-bit線性位址的中間10位作為索引,在頁表中查詢對應的條目,獲取物理頁位址

mmu拿到物理頁位址後,訪問該頁內的偏移,再次觸發ept頁表查詢,返回hpa指向主機的物理頁。mmu取32-bit線性位址的最低12位作為偏移,讀寫物理頁的內容。

注意,ept轉換只有在客戶態真正訪問gpa內容時才發生。mmu單單獲取gpa時不會觸發位址轉換。

q:ept violation和ept misconfig都是缺頁故障,兩者有什麼區別嗎?

a:從字面意思看,misconfig主要表達的是配置錯誤,因此當頁結構中的entry被寫入了違反intel手冊規範的值,可能出現misconfig,比如entry中的保留位被設定了就會觸發ept misconfig。還有種情況是記憶體只允許寫不允許讀(bit0:0,bit1:1)。寫這種記憶體頁會觸發ept misconfig,比如virtio-pci的notify配置空間位址。對於violation,它主要就是缺頁故障,當記憶體讀寫都不被允許時(bit0:0,bit1:0)就會觸發,也可以說,缺頁故障中,除了misconfig餘下的都是violation故障。

ept技術 硬體虛擬化EPT技術手冊(一)

ept extended page table 機制提供了對gos物理空間的虛擬化,通過ept機制實現gos實體地址空間的隔離。當使能ept後,gos使用的實體地址gpa並不是真實的記憶體實體地址,而是要通過ept轉換後才能訪問真正的實體地址。ept的頁表資料結構與64位下的頁表資料類似的,但是部分...

KVM 記憶體虛擬化

除了 cpu 虛擬化,另乙個關鍵是記憶體虛擬化,通過記憶體虛擬化共享物理系統記憶體,動態分配給虛擬機器。虛擬機器的記憶體虛擬化很象現在的作業系統支援的虛擬記憶體方式,應用程式看到鄰近的記憶體位址空間,這個位址空間無需和下面的物理機器記憶體直接對應,作業系統保持著虛擬頁到物理頁的對映。現在所有的 x8...

KVM 記憶體虛擬化

dev kvm 裝置 虛擬化分為軟體虛擬化和硬體虛擬化,而且遵循 intercept 和 virtualize 的規律。記憶體虛擬化也分為基於軟體的記憶體虛擬化和硬體輔助的記憶體虛擬化,其中,常用的基於軟體的記憶體虛擬化技術為 影子頁表 技術,硬體輔助記憶體虛擬化技術為 intel 的 ept ex...