一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

KVM基本原理及架構(gòu)四

 treereet 2022-12-06 發(fā)布于北京
        4 內(nèi)存虛擬化

4.1 客戶機(jī)物理地址空間

在物理機(jī)上,虛擬地址通過(guò)Guest頁(yè)表即可轉(zhuǎn)換為物理地址。但是在虛擬化環(huán)境中,由于VMMVM都需要獨(dú)立的地址空間,則產(chǎn)生了沖突。

為實(shí)現(xiàn)內(nèi)存虛擬化,讓客戶機(jī)使用一個(gè)隔離的、從零開(kāi)始且具有連續(xù)的內(nèi)存空間,KVM 引入一層新的地址空間,即客戶機(jī)物理地址空間 (Guest Physical Address, GPA),該地址空間并不是真正的物理地址空間,它只是宿主機(jī)(Host主機(jī))虛擬地址空間在Guest地址空間的一個(gè)映射。對(duì)Guest來(lái)說(shuō),客戶機(jī)物理地址空間都是從零開(kāi)始的連續(xù)地址空間,但對(duì)于宿主機(jī)來(lái)說(shuō),客戶機(jī)的物理地址空間并不一定是連續(xù)的,客戶機(jī)物理地址空間有可能映射在若干個(gè)不連續(xù)的宿主機(jī)地址區(qū)間,如下圖所示:



    由于物理
MMU只能通過(guò)Host機(jī)的物理地址(Host Physical Address, HPA)進(jìn)行尋址,所以實(shí)現(xiàn)內(nèi)存虛擬化,關(guān)鍵是需要將Guest機(jī)的虛擬地址(Guest Virtual Address, GVA)轉(zhuǎn)換為HPA。傳統(tǒng)的實(shí)現(xiàn)方案中,這個(gè)過(guò)程需要經(jīng)歷:GVAàGPAàHVAàHPA的轉(zhuǎn)換過(guò)程,需要對(duì)地址進(jìn)行多次轉(zhuǎn)換,而且需要KVM的介入,效率非常低。為提供GVAHPA的地址轉(zhuǎn)換效率,KVM提供了兩種地址轉(zhuǎn)換方式:

1、    影子頁(yè)表(Shadow Page Table),是純軟件的實(shí)現(xiàn)方式

2、    基于硬件特性的地址轉(zhuǎn)換。如基于Intel EPT(Extended Page Table,擴(kuò)展頁(yè)表),或AMD NPT(Nested Page Table,嵌套頁(yè)表)

4.2 影子頁(yè)表

4.2.1 基本原理

由于內(nèi)存虛擬化在將GVA轉(zhuǎn)換為HPA的過(guò)程中,需要經(jīng)歷多次轉(zhuǎn)換,無(wú)法直接使用Guest機(jī)頁(yè)表和CR3。使用影子頁(yè)表(Shadow Page Table)可以實(shí)現(xiàn)客戶機(jī)虛擬地址(GVA)到宿主機(jī)物理地址(HPA)的直接轉(zhuǎn)換,與傳統(tǒng)方式的轉(zhuǎn)換過(guò)程對(duì)比如下:



    影子頁(yè)表中記錄的是GVA跟HPA的對(duì)應(yīng)關(guān)系,每個(gè)頁(yè)表項(xiàng)指向的都是宿主機(jī)的物理地址。由于客戶機(jī)中每個(gè)進(jìn)程都有自己的虛擬地址空間,所以 KVM 需要為客戶機(jī)中的每個(gè)進(jìn)程頁(yè)表都要維護(hù)一套相應(yīng)的影子頁(yè)表。在Guest機(jī)訪問(wèn)內(nèi)存時(shí),VMM在物理MMU中載入的是Guest機(jī)當(dāng)前頁(yè)表所對(duì)應(yīng)的影子頁(yè)表,從而實(shí)現(xiàn)GVA到HPA的直接轉(zhuǎn)換。

Guest機(jī)中的每一個(gè)頁(yè)表項(xiàng)都有一個(gè)影子頁(yè)表項(xiàng)與之相對(duì)應(yīng)。為了快速檢索Guest機(jī)頁(yè)表所對(duì)應(yīng)的的影子頁(yè)表,KVM 為每個(gè)客戶機(jī)都維護(hù)了一個(gè)哈希表,影子頁(yè)表和Guest機(jī)頁(yè)表通過(guò)此哈希表進(jìn)行映射,基本原理如下:

對(duì)于每一個(gè)Guest機(jī)來(lái)說(shuō),Guest機(jī)的頁(yè)目錄/頁(yè)表都有唯一的GPA,通過(guò)頁(yè)目錄/頁(yè)表的GPA就可以在哈希鏈表中快速地找到對(duì)應(yīng)的影子頁(yè)目錄/頁(yè)表。在檢索哈希表時(shí),KVM 把Guest頁(yè)目錄/頁(yè)表的客戶機(jī)物理地址低10位作為鍵值進(jìn)行索引,根據(jù)其鍵值定位到對(duì)應(yīng)的鏈表,然后遍歷此鏈表找到對(duì)應(yīng)的影子頁(yè)目錄/頁(yè)表。當(dāng)然,如果沒(méi)有找到對(duì)應(yīng)的影子頁(yè)目錄/頁(yè)表,則說(shuō)明影子頁(yè)表項(xiàng)和Guest頁(yè)表項(xiàng)的對(duì)應(yīng)關(guān)系還沒(méi)有建立 ,此時(shí)KVM 會(huì)為其分配新的物理頁(yè),并建立起Guest頁(yè)目錄/頁(yè)表和對(duì)應(yīng)的影子頁(yè)目錄/頁(yè)表之間的映射。

4.2.2 影子頁(yè)表的建立與更新

影子頁(yè)表的建立和更新過(guò)程交織在一起,影子頁(yè)表的建立和更新主要發(fā)生在如下3中情況下:

1、    Guest OS修改Guest CR3寄存器。由于相關(guān)指令為敏感指令,所以相關(guān)操作會(huì)被VMM截獲,此時(shí)VMM會(huì)根據(jù)相關(guān)情況進(jìn)行影子頁(yè)表的維護(hù)。比如,當(dāng)客戶機(jī)切換進(jìn)程時(shí),客戶機(jī)操作系統(tǒng)會(huì)把待切換進(jìn)程的頁(yè)表基址載入 CR3,而該特權(quán)指令將被VMM截獲,進(jìn)行新的處理,即在哈希表中找到與此頁(yè)表基址對(duì)應(yīng)的影子頁(yè)表基址,載入客戶機(jī) CR3,使客戶機(jī)在恢復(fù)運(yùn)行時(shí) CR3 實(shí)際指向的是新切換進(jìn)程對(duì)應(yīng)的影子頁(yè)表。

2、    因Guest機(jī)頁(yè)表和影子頁(yè)表不一致而觸發(fā)的缺頁(yè)異常,此時(shí)也會(huì)VM-Exit到VMM,進(jìn)而可進(jìn)行相關(guān)維護(hù)操作。

3、    Guest OS中執(zhí)行INVLPG指令刷新TLB時(shí),由于INVLPG指令為敏感指令,所以該操作也會(huì)被VMM進(jìn)行截獲,并進(jìn)行影子頁(yè)表相關(guān)維護(hù)操作。

其中,第2中情況發(fā)生幾率最高,相關(guān)處理也最復(fù)雜。如下做重點(diǎn)描述。不同的缺頁(yè)異常,處理方式不用,常見(jiàn)的缺頁(yè)異常包括如下3類:

1、    影子頁(yè)表初始化時(shí)產(chǎn)生的缺頁(yè)異常。在虛擬機(jī)運(yùn)行之初,VMM中與Guest機(jī)頁(yè)表對(duì)應(yīng)的影子頁(yè)表都沒(méi)有建立,而物理CR3中載入的卻是影子頁(yè)目錄地址,所以,此時(shí)任何的內(nèi)存操作都會(huì)引發(fā)異常,如果此時(shí)Guest機(jī)的相應(yīng)頁(yè)表已經(jīng)建立,那么處理這種異常即是建立相應(yīng)的影子頁(yè)表即可;如果Guest機(jī)的頁(yè)表項(xiàng)尚未建立,那就是Guest機(jī)自身的缺頁(yè)異常,即為如下的第2中情況。

2、    Guest機(jī)上的缺頁(yè)異常。如果Guest OS尚未給這個(gè)GVA分配Guest機(jī)物理頁(yè),即相應(yīng)的Guest機(jī)頁(yè)表項(xiàng)尚未建立,此時(shí)將引發(fā)缺頁(yè)異常。另外,當(dāng)Guest機(jī)訪問(wèn)的Guest頁(yè)表項(xiàng)存在位(Present Bit)為0,或相關(guān)訪問(wèn)權(quán)限不匹配時(shí),也將引發(fā)缺頁(yè)異常。

3、    VMM將Host機(jī)物理頁(yè)換出到硬盤上時(shí)引發(fā)的缺頁(yè)異常。

影子頁(yè)表缺頁(yè)異常的默認(rèn)處理流程

VMM截獲缺頁(yè)異常(VM-Exit),并檢查此異常是否由Guest即自身引發(fā),如果是,則將直接返回Guest OS(Vm-Entry),然后由Guest OS自身的page fault流程處理;如果不是,則為影子頁(yè)表和Guest機(jī)頁(yè)表不一致導(dǎo)致,這樣的異常也叫“影子缺頁(yè)異常”,此時(shí),VMM會(huì)根據(jù)Guest機(jī)頁(yè)表同步影子頁(yè)表,過(guò)程如下:

1、    VMM根據(jù)Guest機(jī)頁(yè)表項(xiàng)建立影子頁(yè)目錄和頁(yè)表結(jié)構(gòu)

2、    VMM根據(jù)發(fā)生缺頁(yè)異常的GVA,在Guest機(jī)頁(yè)表的相應(yīng)表項(xiàng)中得到對(duì)應(yīng)的GPA

3、    VMM根據(jù)GPA,在GPA與HPA的映射表中(通過(guò)之前描述的HASH表建立),得到相應(yīng)的HPA,再將HPA填入到影子頁(yè)表的相應(yīng)表項(xiàng)中。

影子頁(yè)表和Guest機(jī)頁(yè)表不是時(shí)刻同步的,只有在需要時(shí)才進(jìn)行通過(guò),從某種角度看,影子頁(yè)表可以看做是Guest頁(yè)表的TLB,常稱為虛擬TLB(VTLB)。

影子頁(yè)表解決了傳統(tǒng)IA32架構(gòu)下的內(nèi)存虛擬化問(wèn)題,由于影子頁(yè)表可被載入物理 MMU 為客戶機(jī)直接尋址使用, 所以客戶機(jī)的大多數(shù)內(nèi)存訪問(wèn)都可以在沒(méi)有 KVM 介入的情況下正常執(zhí)行,沒(méi)有額外的地址轉(zhuǎn)換開(kāi)銷,也就大大提高了客戶機(jī)運(yùn)行的效率。但也有比較明顯的缺點(diǎn):

1、    實(shí)現(xiàn)復(fù)雜。影子頁(yè)表同步需要考慮各種情況。

2、    內(nèi)存開(kāi)銷大。需要為每個(gè)Guest機(jī)進(jìn)程維護(hù)一個(gè)影子頁(yè)表。

4.3 EPT 頁(yè)表

4.3.1 基本原理

為解決影子頁(yè)表的問(wèn)題,Intel和AMD都提供了相應(yīng)的硬件技術(shù),直接在硬件上支持GPA到HPA的轉(zhuǎn)換,從而大大降低了內(nèi)存虛擬化的難度,并提升了相關(guān)性能。本文主要描述Intel EPT技術(shù)。

EPT 技術(shù)在原有Guest機(jī)頁(yè)表對(duì)GVA到GPA轉(zhuǎn)換的基礎(chǔ)上,又引入了 EPT 頁(yè)表來(lái)實(shí)現(xiàn)GPA到HPA轉(zhuǎn)換,這兩次地址轉(zhuǎn)換都是由硬件自動(dòng)完成,可高效的實(shí)現(xiàn)地址轉(zhuǎn)換。Guest運(yùn)行時(shí),Guest頁(yè)表被載入 CR3,而 EPT 頁(yè)表被載入專門的 EPT 頁(yè)表指針寄存器 EPTP。從GVA到HPA的具體轉(zhuǎn)換過(guò)程如下(以經(jīng)典的2級(jí)頁(yè)表為例):

完整的地址翻譯流程描述為:

1、    Guest OS加載Guest進(jìn)程的gCR3,gCR3中存放的是Guest進(jìn)程頁(yè)目錄表的GPA。

2、    處于非根模式的CPU的MMU查詢硬件EPT TLB,如果有所請(qǐng)求的GPA到HPA的映射,則使用其對(duì)應(yīng)的HPA作為Guest頁(yè)目錄表的基址。

3、    如沒(méi)有所請(qǐng)求的GPA到HPA的映射,則查詢EPT,獲得gCR3所映射的HPA,并將其作為Guest頁(yè)目錄表的基址。

4、    根據(jù)GVA獲得頁(yè)目錄偏移(圖中的Dir Offset),獲得用于索引Guest頁(yè)表的基址,該地址為GPA。

5、    再由VCPU的MMU查詢硬件EPT TLB,如果有所請(qǐng)求的GPA到HPA的映射,則使用其對(duì)應(yīng)的HPA作為Guest頁(yè)表的基址。

6、    如沒(méi)有所請(qǐng)求的GPA到HPA的映射,則查詢EPT,將其轉(zhuǎn)換為HPA,使用該HPA再加上GVA中的頁(yè)表偏移(圖中的Table Offset),即可得到PTE(頁(yè)表項(xiàng))的GPA。

7、    再由VCPU的MMU查詢硬件EPT TLB,如果有所請(qǐng)求的GPA到HPA的映射,則其對(duì)應(yīng)的HPA加上GVA中的Offset即為最終的宿主機(jī)物理地址(HPA)。

8、    如沒(méi)有所請(qǐng)求的GPA到HPA的映射,則查詢EPT,將其轉(zhuǎn)換為HPA,使用該HPA加上GVA中的Offset即為最終的宿主機(jī)物理地址(HPA)。

EPT頁(yè)表實(shí)現(xiàn)GPA到HPA的轉(zhuǎn)換的原理,與Guest頁(yè)表實(shí)現(xiàn)GVA到GPA的轉(zhuǎn)換原理相同,需要經(jīng)歷多級(jí)頁(yè)表的查詢,圖中沒(méi)有詳細(xì)畫出。假設(shè)Guest機(jī)有m級(jí)頁(yè)表,宿主機(jī)EPT有n級(jí),在TLB均miss的最壞情況下,會(huì)產(chǎn)生m*n次內(nèi)存訪問(wèn),完成一次客戶機(jī)的地址翻譯,EPT硬件通過(guò)增大硬件EPT TLB來(lái)盡量減少內(nèi)存訪問(wèn)。

4.3.2 EPT缺頁(yè)異常處理

在GPA到HPA轉(zhuǎn)換的過(guò)程中,由于缺頁(yè)、寫權(quán)限不足等原因也會(huì)導(dǎo)致客戶機(jī)退出,產(chǎn)生 EPT 異常。對(duì)于 EPT 缺頁(yè)異常,處理過(guò)程大致如下:

1、    KVM 首先根據(jù)引起異常的GHA,映射到對(duì)應(yīng)的HVA;

2、    然后為此虛擬地址分配新的物理頁(yè);

3、    最后 KVM 再更新 EPT 頁(yè)表,建立起引起異常的GPA到HPA的映射。

EPT 頁(yè)表相對(duì)于影子頁(yè)表,其實(shí)現(xiàn)方式大大簡(jiǎn)化,主要地址轉(zhuǎn)換工作都由硬件自動(dòng)完成,而且Guest內(nèi)部的缺頁(yè)異常也不會(huì)導(dǎo)致VM-Exit,因此Guest運(yùn)行性能更好,開(kāi)銷更小。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美一区二区三区99| 国产精品日韩精品一区| 殴美女美女大码性淫生活在线播放| 东京热加勒比一区二区| 黑丝国产精品一区二区| 欧美日韩国产黑人一区| 妻子的新妈妈中文字幕| 国产在线日韩精品欧美| 亚洲一区二区欧美在线| 色综合久久超碰色婷婷| 国产综合一区二区三区av| 欧美日韩亚洲精品在线观看| 男人操女人下面国产剧情| 日韩精品在线观看完整版| 粉嫩国产一区二区三区在线| 视频一区二区 国产精品| 日本黄色美女日本黄色| 91日韩在线观看你懂的| 护士又紧又深又湿又爽的视频| 九九蜜桃视频香蕉视频| 韩国日本欧美国产三级| 国产成人亚洲精品青草天美| 日韩特级黄片免费在线观看| 亚洲最新中文字幕在线视频| 亚洲成人黄色一级大片| 亚洲欧洲日韩综合二区| 午夜福利视频日本一区| 国产欧美日韩一级小黄片| 日韩一区二区三区有码| 91人妻人澡人人爽人人精品| 国产亚洲精品岁国产微拍精品| 国产欧美日产久久婷婷| 国产在线小视频你懂的| 极品熟女一区二区三区| 在线免费观看一二区视频| 午夜小视频成人免费看| 又色又爽又无遮挡的视频| 人妻精品一区二区三区视频免精 | 厕所偷拍一区二区三区视频| 欧美二区视频在线观看| 色好吊视频这里只有精|