虛擬化-內存虛擬化

縮寫說明:

* pfn: host page frame number,宿主機中某個物理頁的幀數
* hpa: host physical address,宿主機的物理地址
* hva: host virtual address,宿主機的虛擬地址
* gfn: guest page frame number,虛擬機中某個物理頁的幀數
* gpa: guest physical address,虛擬機的物理地址
* gva: guest virtual address,虛擬機的虛擬地址
* pte: page table entry,指向下一級頁表或者頁的物理地址,以及相應的權限位
* gpte: guest pte,指向GPT中下一級頁表或者頁的gpa,以及相應的權限位
* spte: shadow pte,指向EPT中下一級頁表或者頁的hpa,以及相應的權限位
* tdp: two dimentional paging,也就是我們所說的EPT機制

問題:

1.什麼是MMU?

Memory manage unit
,也就是內存管理單元,一般封裝於cpu的內部,主要職責爲將虛擬地址翻譯爲物理地址,相當於一個cpu和內存之前的一箇中間轉換層,對軟件來說是不可見的,對上層軟件的開發者來說並不需要關心他,但是對於OS移植或底層驅動開發者來說,則必須清楚如何輔助MMU完成地址轉換。

2,頁/頁幀/頁表/頁表項

MMU值負責把虛擬地址映射爲物理地址,但凡涉及到映射都需要解決兩個問題:映射的最小單位,映射的規則。

  • 頁(Page):

MMU中映射的最小單位爲頁(Page),也就是說映射的最小粒度爲單個徐你也到單個物理頁,大小通常爲4K, 即從0開始以4K對齊劃分頁塊,頁內便宜不變。
頁是最小單位,不能把VA中的某一頁劃分成幾小塊分別映射到不同的PA,也不能把VA中屬於不同頁的碎塊PA的某一頁的不同部分,必須是整頁對整頁的映射。

  • 頁幀(Page Frame):

頁幀指的是物理內存中的一頁內存,MMU虛擬地址映射就是尋找尋找物理頁幀的過程。

  • 頁表(Page Table):

MMU軟件配置的核心是頁表,它描述MMU的映射規則,即描述虛擬內存的那個頁到物理內存的那個頁,頁表由一條條代表映射規則的記錄組成,每一條稱爲一個頁表條目(Page
Table Entry),整個頁表保存在片外內存,MMU通過查找頁表確定映射關係,以及是否有權限映射。

  • TLB(Transslation Lookaside Buffers)轉換塊表,簡稱塊表

如果MMU每次地址轉換都去片外內存上的頁表上查找對應的頁表條目,那麼轉換速度會大大降低,於是就有了TLB。
TLB,簡稱塊表,可以理解爲MMU內部專用的存放頁表的cache,保存着最近使用的頁表條目,或者全部頁表。當MMU接收到虛擬地址後首先在TLB中查找,如果找到該VA對應的轉換條目則可以直接轉換,當找不到時在去外部頁表查找,並置換進TLB。由於TLB訪問速度快,通過TLB緩存的頁表可以爲MMU的地址轉換加速。

3.什麼是內存虛擬化,內存虛擬化的目的?

內存虛擬化是將真實的物理內存,通過虛擬化技術,虛擬出一個虛擬的內存區間,這個虛擬機的內存則用來作爲客戶虛擬機的物理內存(這裏是針對客戶機開說),也就是說,
爲了讓客戶機使用一個隔離的、從零開始且具有連續的內存空間,KVM 引入一層新的地址空間,即客戶機物理地址空間 (Guest Physical
Address, GPA),而這個地址空間並不是真正的物理地址空間,它只是宿主機虛擬地址空間在客戶機地址空間的一個映射。
GVA –> GPA –> HVA –> HPA
GVA到GPA的轉化是由客戶機的頁表實現的

4.影子頁表是什麼?

由於宿主機 MMU
不能直接裝載客戶機的頁表來進行內存訪問,所以當客戶機訪問宿主機物理內存時,需要經過多次地址轉換。也即首先根據客戶機頁表把客戶機虛擬地址轉傳成客戶機物理地址,然後再通過客戶機物理地址到宿主機虛擬地址之間的映射轉換成宿主機虛擬地址,最後再根據宿主機頁表把宿主機虛擬地址轉換成宿主機物理地址。而通過影子頁表,則可以實現客戶機虛擬地址到宿主機物理地址的直接轉換。
影子頁表實質上是一個客戶機虛擬地址到宿主機物理地址的映射關係
VMM維護影子頁表,影子頁表是虛擬機正真使用的頁表
VFN-虛擬頁框號,PFN-物理頁框號,MFN-機器頁框號
客戶OS創建之後,VMM創建其對應影子頁表。剛開始影子頁表是空的,此時任何客戶OS的訪存操作都會發生缺頁中斷,然後VMM捕獲缺頁異常,根據VFN在客戶機頁表中得到PFN,然後在P2M表中得到MFN,寫入影子頁表。這樣逐步完成客戶機所有虛擬地址到宿主機機器地址的映射。
影子頁表與客戶機頁表的同步。基本原理是對客戶機頁表進行寫保護,VMM就會捕獲到客戶機頁表項的修改,然後陷入到VMM中對影子頁表進行相應修改以保持同步。

> 5.EPT是什麼?

EPT 技術是在原有客戶機頁表對客戶機虛擬地址到客戶機物理地址映射的基礎上,又引入了 EPT
頁表利用硬件來實現客戶機物理地址到宿主機物理地址的另一次映射,這兩次地址映射都是由硬件自動完成。在客戶機物理地址到宿主機物理地址轉換的過程中,由於缺頁、寫權限不足等原因也會導致客戶機退出,產生
EPT 異常,對於 EPT 缺頁異常,KVM
首先根據引起異常的客戶機物理地址,映射到對應的宿主機虛擬地址,然後爲此虛擬地址分配新的物理頁,最後 KVM 再更新 EPT
頁表,建立起引起異常的客戶機物理地址到宿主機物理地址之間的映射。對 EPT 寫權限引起的異常,KVM 則通過更新相應的 EPT 頁表來解決。

在KVM最新的內存虛擬化技術中,採用的是兩級頁表映射,客戶端採用的是傳統操作系統的頁表,被稱作guest page
table(GPT),記錄的是客戶機虛擬地址到客戶機物理地址的映射,而KVM維護的是第二級頁表extended page table
(EPT)(注:在AMD架構中被稱爲NPT ,nested page table),該表記錄的是客戶機的物理地址到宿主機的物理地址的映射
KVM在還沒有EPT硬件支持時,採用的是影子頁表機制,爲了和之前代碼兼容,在當前的實現中。EPT機制是在影子頁表的基礎之上實現
和傳統的頁表一樣,EPT的頁表結構也是分爲四層(PML4,PDPT,PD,PT)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章