十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
作者:聽(tīng)泉Rit 2018-05-08 15:16:59
云計(jì)算
虛擬化 經(jīng)過(guò)前面的介紹,我們差不多都應(yīng)該知道,針對(duì)不同的資源,虛擬化主要包含三個(gè)方面的內(nèi)容:計(jì)算虛擬化、存儲(chǔ)虛擬化和網(wǎng)絡(luò)虛擬化,接下來(lái)咱們就來(lái)看看,什么是計(jì)算虛擬化中“內(nèi)存”虛擬化。

葫蘆島ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!
經(jīng)過(guò)前面的介紹,我們差不多都應(yīng)該知道,針對(duì)不同的資源,虛擬化主要包含三個(gè)方面的內(nèi)容:計(jì)算虛擬化、存儲(chǔ)虛擬化和網(wǎng)絡(luò)虛擬化,接下來(lái)咱們就來(lái)看看,什么是計(jì)算虛擬化中“內(nèi)存”虛擬化。
1. 內(nèi)存虛擬化簡(jiǎn)介
內(nèi)存虛擬化的產(chǎn)生源于 VMM 與 Guest OS 在對(duì)物理內(nèi)存的認(rèn)識(shí)上存在沖突,造成物理內(nèi)存真正擁有者——VMM 必須對(duì)系統(tǒng)訪(fǎng)問(wèn)的內(nèi)存進(jìn)行一定程度上的虛擬化?!?/p>
咱們先來(lái)看看,在非虛擬化環(huán)境下的情況:
(1)首先:指令對(duì)內(nèi)存的訪(fǎng)問(wèn)通過(guò)處理器來(lái)轉(zhuǎn)發(fā);
(2)然后:處理器將解碼后的請(qǐng)求放到總線(xiàn)上;
(3)最后:芯片組負(fù)責(zé)轉(zhuǎn)發(fā)。
為了唯一標(biāo)識(shí),處理器將采用統(tǒng)一編址的方式將物理內(nèi)存映射成為一個(gè)地址空間(物理地址空間)。這包括兩層含義,其一,操作系統(tǒng)會(huì)假定內(nèi)存地址從 0 開(kāi)始;其二,內(nèi)存是連續(xù)的或者說(shuō)在一些大的粒度(比如 256M)上連續(xù)。
在虛擬環(huán)境里,VMM 就要通過(guò)模擬手段,使得虛擬出來(lái)的內(nèi)存仍符合 Guest OS 對(duì)內(nèi)存的假定和認(rèn)識(shí)。如此一來(lái),內(nèi)存虛擬化就需要解決如下的問(wèn)題,
(1)其一,物理內(nèi)存要被多個(gè) Guest OS 同時(shí)使用,但物理內(nèi)存只有 1 個(gè),地址 0 也只有一個(gè),無(wú)法滿(mǎn)足同時(shí)從 0 開(kāi)始的要求;
(2)其二,由于使用內(nèi)存分區(qū)方式,物理內(nèi)存分給多個(gè)系統(tǒng)使用,Guest OS 內(nèi)存連續(xù)性可解決但不靈活。
為了解決以上的問(wèn)題,咱們的攻城獅們引入了一層新的地址空間——客戶(hù)機(jī)物理地址空間(GPA)來(lái)解決讓 Guest OS 看到一個(gè)虛擬的物理地址,讓 VMM 負(fù)責(zé)轉(zhuǎn)化成物理地址給物理處理器執(zhí)行。Guest Machine 以為自己運(yùn)行在真實(shí)的物理地址空間中,實(shí)際上它是通過(guò) VMM 訪(fǎng)問(wèn)真實(shí)的物理地址的。在 VMM 中保存 Guest Machine 地址空間和物理機(jī)地址空間之間的映射表。如下圖所示:
因?yàn)?VMM 掌控所有系統(tǒng)資源,因此 VMM 握有整個(gè)內(nèi)存資源,其負(fù)責(zé)頁(yè)式內(nèi)存管理,維護(hù)虛擬地址到機(jī)器地址的映射關(guān)系。因 Guest OS 本身亦有頁(yè)式內(nèi)存管理機(jī)制,所以 VMM的整個(gè)系統(tǒng)就比正常系統(tǒng)多了一層映射:
(1)虛擬地址(VA),指 Guest OS 提供給其應(yīng)用程序使用的線(xiàn)性地址空間;
(2)客戶(hù)機(jī)物理地址(GPA),經(jīng) VMM 抽象的、虛擬機(jī)看到的偽物理地址;
(3)機(jī)器地址(MA),真實(shí)的機(jī)器地址,即地址總線(xiàn)上出現(xiàn)的地址信號(hào);
映射關(guān)系如下:Guest OS:GPA = f(VA)、VMM:MA = g(GPA)
VMM 維護(hù)一套頁(yè)表,負(fù)責(zé) GPA 到 MA 的映射。Guest OS 維護(hù)一套頁(yè)表,負(fù)責(zé) VA 到 GPA 的映射。實(shí)際運(yùn)行時(shí),用戶(hù)程序訪(fǎng)問(wèn) VA1,經(jīng) Guest OS 的頁(yè)表轉(zhuǎn)換得到 GPA1,再由 VMM 介入,使用 VMM 的頁(yè)表將 GPA1 轉(zhuǎn)換為 MA1。
2 內(nèi)存虛擬化的基礎(chǔ):頁(yè)表虛擬化技術(shù):
2.1 頁(yè)表虛擬化技術(shù)原理
普通 MMU(Memory Management Unit,即內(nèi)存管理單元)只能完成一次虛擬地址到物理地址的映射,在虛擬機(jī)環(huán)境下,經(jīng)過(guò) MMU 轉(zhuǎn)換所得到的“物理地址”并不是真正的機(jī)器地址。若需得到真正的機(jī)器地址,必須由 VMM 介入,再經(jīng)過(guò)一次映射才能得到總線(xiàn)上使用的機(jī)器地址。如果虛擬機(jī)的每個(gè)內(nèi)存訪(fǎng)問(wèn)都需要 VMM 介入,并由軟件模擬地址轉(zhuǎn)換的效率是很低下的,幾乎不具有實(shí)際可用性,為實(shí)現(xiàn)虛擬地址到機(jī)器地址的高效轉(zhuǎn)換,現(xiàn)普遍采用的思想是:由 VMM 根據(jù)映射 f 和 g 生成復(fù)合的映射 fg,并直接將這個(gè)映射關(guān)系寫(xiě)入 MMU。
2.2 內(nèi)存虛擬化分類(lèi)
當(dāng)前采用的頁(yè)表虛擬化方法主要是 MMU 半虛擬化(MMU Paravirtualization)和影子頁(yè)表(全虛擬化),后者已被內(nèi)存的芯片輔助虛擬化技術(shù)所替代。
(1)內(nèi)存全虛擬化技術(shù)(即影子頁(yè)表虛擬化)
通過(guò)使用影子頁(yè)表(Shadow Page Table)實(shí)現(xiàn)虛擬化。VMM 為每個(gè) Guest Machine 都維護(hù)一個(gè)影子頁(yè)表,影子頁(yè)表維護(hù)虛擬地址(VA)到機(jī)器地址(MA)的映射關(guān)系。而 Guest Machine 頁(yè)表則維護(hù) VA 到客戶(hù)機(jī)物理地址(GPA)的映射關(guān)系。下圖示意:
當(dāng) VMM 捕獲到 Guest Machine 頁(yè)表的修改后,VMM 會(huì)查找負(fù)責(zé) GPA 到 MA 映射的 P2M 頁(yè)表或者哈希函數(shù),找到與該 GPA 對(duì)應(yīng)的 MA,再將 MA 填充到真正在硬件上起作用的影子頁(yè)表中,從而形成 VA 到 MA 的映射關(guān)系。而客戶(hù)機(jī)頁(yè)表則無(wú)需變動(dòng)。
注意:影子頁(yè)表一般特指有多個(gè)頁(yè)表緩存的方案。
其優(yōu)點(diǎn)主要來(lái)自于性能上的提升。由于時(shí)間局部性,系統(tǒng)中經(jīng)常會(huì)是幾個(gè)進(jìn)程之間回來(lái)切換,所以哪怕是 4 組頁(yè)表緩存,其重用率也可達(dá)到 80~90%。
其缺點(diǎn)是由于要維護(hù)多份頁(yè)表緩存,還是存在一定的額外開(kāi)銷(xiāo),并且由于要存放這些緩存,內(nèi)存上也會(huì)有些消耗。這些缺點(diǎn)可以通過(guò) MMU 半虛擬化來(lái)解決。
(2)內(nèi)存半虛擬化技術(shù)(MMU 半虛擬化)
其基本原理是:當(dāng) Guest OS 創(chuàng)建一個(gè)新的頁(yè)表時(shí),會(huì)從它所維護(hù)的空閑內(nèi)存中分配一個(gè)頁(yè)面,并向 VMM 注冊(cè)該頁(yè)面,VMM 會(huì)剝奪 Guest OS 對(duì)該頁(yè)表的寫(xiě)權(quán)限,之后 Guest OS 對(duì)該頁(yè)表的寫(xiě)操作都會(huì)陷入到 VMM 加以驗(yàn)證和轉(zhuǎn)換。VMM 會(huì)檢查頁(yè)表中的每一項(xiàng),確保他們只映射了屬于該虛擬機(jī)的機(jī)器頁(yè)面,而且不得包含對(duì)頁(yè)表頁(yè)面的可寫(xiě)映射。后 VMM 會(huì)根據(jù)自己所維護(hù)的映射關(guān)系,將頁(yè)表項(xiàng)中的物理地址替換為相應(yīng)的機(jī)器地址,最后再把修改過(guò)的頁(yè)表載入 MMU。如此,MMU就可以根據(jù)修改過(guò)頁(yè)表直接完成虛擬地址到機(jī)器地址的轉(zhuǎn)換。
簡(jiǎn)單來(lái)說(shuō),如果通過(guò)使用頁(yè)表寫(xiě)入法實(shí)現(xiàn)虛擬化。即 Guest OS 在創(chuàng)建一個(gè)新的頁(yè)表時(shí),會(huì)向 VMM 注冊(cè)該頁(yè)表。之后在 Guest Machine 運(yùn)行的時(shí)候,VMM 將不斷的管理和維護(hù)這個(gè)表,使 Guest Machine上面的程序能直接訪(fǎng)問(wèn)到合適的地址。
Xen 是 MMU 半虛擬化的主要使用者。
(3)內(nèi)存硬件輔助虛擬化技術(shù)-內(nèi)存全虛擬化(影子頁(yè)表)的替代者
內(nèi)存的芯片輔助虛擬化技術(shù)是用于替代虛擬化技術(shù)中軟件實(shí)現(xiàn)的“影子頁(yè)表”的一種芯片輔助虛擬化技術(shù),其基本原理是:
GVA(客戶(hù)操作系統(tǒng)的虛擬地址)-> GPA(客戶(hù)操作系統(tǒng)的物理地址)-> HPA(宿主操作系統(tǒng)的物理地址)
其中兩次地址轉(zhuǎn)換都由 CPU 硬件自動(dòng)完成(軟件實(shí)現(xiàn)內(nèi)存開(kāi)銷(xiāo)大、性能差)。
在這種方案中,Guest OS 完成 VA 到 GPA 這第一層轉(zhuǎn)化,硬件幫忙完成 GPA 到 MA 這第二層轉(zhuǎn)化。第二層轉(zhuǎn)化對(duì)于 Guest OS 來(lái)說(shuō)是透明的。Guest OS 訪(fǎng)存時(shí)做的事和在裸機(jī)上跑時(shí)一樣,所以可以實(shí)現(xiàn)全虛擬化。這種特性 Intel 和 AMD 都有支持。Intel 稱(chēng)之為Extended Page Tables (EPT),AMD 稱(chēng)之為 Nested Page Tables (NPT)。其優(yōu)點(diǎn)是hypervisor 省了很多活,缺點(diǎn)是需要硬件支持。
以 VT-x 技術(shù)的頁(yè)表擴(kuò)充技術(shù) Extended Page Table(EPT)為例,首先 VMM 預(yù)先把客戶(hù)機(jī)物理地址轉(zhuǎn)換到機(jī)器地址的 EPT 頁(yè)表設(shè)置到 CPU 中;其次客戶(hù)機(jī)修改客戶(hù)機(jī)頁(yè)表無(wú)需 VMM 干預(yù);最后,地址轉(zhuǎn)換時(shí),CPU 自動(dòng)查找兩張頁(yè)表完成客戶(hù)機(jī)虛擬地址到機(jī)器地址的轉(zhuǎn)換。下圖示意:
使用內(nèi)存的芯片輔助虛擬化技術(shù),客戶(hù)機(jī)運(yùn)行過(guò)程中無(wú)需 VMM 干預(yù),去除了大量軟件開(kāi)銷(xiāo),內(nèi)存訪(fǎng)問(wèn)性能接近物理機(jī)。
KVM 主要使用內(nèi)存硬件輔助虛擬化。
圖片授權(quán)基于:CC0協(xié)議