KVM虛擬化技術(shù)中如何進(jìn)行Hypervisor的實(shí)現(xiàn),針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供武夷山網(wǎng)站建設(shè)、武夷山做網(wǎng)站、武夷山網(wǎng)站設(shè)計(jì)、武夷山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、武夷山企業(yè)網(wǎng)站模板建站服務(wù),10余年武夷山做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
VMM(VirtualMachineMonitor)對(duì)物理資源的虛擬可以劃分為三個(gè)部分:
CPU虛擬化、內(nèi)存虛擬化和I/O設(shè)備虛擬化,其中以CPU的虛擬化最為關(guān)鍵。經(jīng)典的虛擬化方法:現(xiàn)代計(jì)算機(jī)體系結(jié)構(gòu)一般至少有兩個(gè)特權(quán)級(jí)(即用戶態(tài)和核心態(tài),x86有四個(gè)特權(quán)級(jí)Ring0~Ring3)用來分隔系統(tǒng)軟件和應(yīng)用軟件。那些只能在處理器的最高特權(quán)級(jí)(內(nèi)核態(tài))執(zhí)行的指令稱之為特權(quán)指令,一般可讀寫系統(tǒng)關(guān)鍵資源的指令(即敏感指令)決大多數(shù)都是特權(quán)指令(X86存在若干敏感指令是非特權(quán)指令的情況)。如果執(zhí)行特權(quán)指令時(shí)處理器的狀態(tài)不在內(nèi)核態(tài),通常會(huì)引發(fā)一個(gè)異常而交由系統(tǒng)軟件來處理這個(gè)非法訪問(陷入)。經(jīng)典的虛擬化方法就是使用“特權(quán)解除”和“陷入-模擬”的方式,即將GuestOS運(yùn)行在非特權(quán)級(jí),而將VMM運(yùn)行于最高特權(quán)級(jí)(完全控制系統(tǒng)資源)。解除了GuestOS的特權(quán)級(jí)后,GuestOS的大部分指令仍可以在硬件上直接運(yùn)行,只有執(zhí)行到特權(quán)指令時(shí),才會(huì)陷入到VMM模擬執(zhí)行(陷入-模擬)?!跋萑?模擬”的本質(zhì)是保證可能影響VMM正確運(yùn)行的指令由VMM模擬執(zhí)行,大部分的非敏感指令還是照常運(yùn)行。
因?yàn)閄86指令集中有若干條指令是需要被VMM捕獲的敏感指令,但是卻不是特權(quán)指令(稱為臨界指令),因此“特權(quán)解除”并不能導(dǎo)致他們發(fā)生陷入模擬,執(zhí)行它們不會(huì)發(fā)生自動(dòng)的“陷入”而被VMM捕獲,從而阻礙了指令的虛擬化,這也稱之為X86的虛擬化漏洞。
X86架構(gòu)虛擬化的實(shí)現(xiàn)方式可分為:
1、X86“全虛擬化”(指所抽象的VM具有完全的物理機(jī)特性,OS在其上運(yùn)行不需要任何修改)Full派秉承無需修改直接運(yùn)行的理念,對(duì)“運(yùn)行時(shí)監(jiān)測(cè),捕捉后模擬”的過程進(jìn)行優(yōu)化。該派內(nèi)部之實(shí)現(xiàn)又有些差別,其中以VMWare為代表的基于二進(jìn)制翻譯(BT)的全虛擬化為代表,其主要思想是在執(zhí)行時(shí)將VM上執(zhí)行的GuestOS指令,翻譯成x86指令集的一個(gè)子集,其中的敏感指令被替換成陷入指令。翻譯過程與指令執(zhí)行交叉進(jìn)行,不含敏感指令的用戶態(tài)程序可以不經(jīng)翻譯直接執(zhí)行。
2、X86“半虛擬化”(指需OS協(xié)助的虛擬化,在其上運(yùn)行的OS需要修改)半虛擬化的基本思想是通過修改GuestOS的代碼,將含有敏感指令的操作,替換為對(duì)VMM的超調(diào)用Hypercall,類似OS的系統(tǒng)調(diào)用,將控制權(quán)轉(zhuǎn)移到VMM,該技術(shù)因VMM項(xiàng)目而廣為人知。該技術(shù)的優(yōu)勢(shì)在于VM的性能能接近于物理機(jī),缺點(diǎn)在于需要修改GuestOS(如:Windows不支持修改)及增加的維護(hù)成本,關(guān)鍵修改GuestOS會(huì)導(dǎo)致操作系統(tǒng)對(duì)特定hypervisor的依賴性,因此很多虛擬化廠商基于VMM開發(fā)的虛擬化產(chǎn)品部分已經(jīng)放棄了Linux半虛擬化,而專注基于硬件輔助的全虛擬化開發(fā),來支持未經(jīng)修改的操作系統(tǒng)。
3、X86“硬件輔助虛擬化”:其基本思想就是引入新的處理器運(yùn)行模式和新的指令,使得VMM和GuestOS運(yùn)行于不同的模式下,GuestOS運(yùn)行于受控模式,原來的一些敏感指令在受控模式下全部會(huì)陷入VMM,這樣就解決了部分非特權(quán)的敏感指令的“陷入-模擬”難題,而且模式切換時(shí)上下文的保存恢復(fù)由硬件來完成,這樣就大大提高了“陷入-模擬”時(shí)上下文切換的效率。
以IntelVT-x硬件輔助虛擬化技術(shù)為例,該技術(shù)增加了在虛擬狀態(tài)下的兩種處理器工作模式:根(Root)操作模式和非根(Non-root)操作模式。VMM運(yùn)作在Root操作模式下,而GuestOS運(yùn)行在Non-root操作模式下。這兩個(gè)操作模式分別擁有自己的特權(quán)級(jí)環(huán),VMM和虛擬機(jī)的GuestOS分別運(yùn)行在這兩個(gè)操作模式的0環(huán)。這樣,既能使VMM運(yùn)行在0環(huán),也能使GuestOS運(yùn)行在0環(huán),避免了修改GuestOS。Root操作模式和Non-root操作模式的切換是通過新增的CPU指令(如:VMXON,VMXOFF)來完成。
硬件輔助虛擬化技術(shù)消除了操作系統(tǒng)的ring轉(zhuǎn)換問題,降低了虛擬化門檻,支持任何操作系統(tǒng)的虛擬化而無須修改OS內(nèi)核,得到了虛擬化軟件廠商的支持。硬件輔助虛擬化技術(shù)已經(jīng)逐漸消除軟件虛擬化技術(shù)之間的差別,并成為未來的發(fā)展趨勢(shì)。
2 vCPU機(jī)制
vCPU調(diào)度機(jī)制
對(duì)虛擬機(jī)來說,不直接感知物理CPU,虛擬機(jī)的計(jì)算單元通過vCPU對(duì)象來呈現(xiàn)。虛擬機(jī)只看到VMM呈現(xiàn)給它的vCPU。在VMM中,每個(gè)vCPU對(duì)應(yīng)一個(gè)VMCS(Virtual-MachineControlStructure)結(jié)構(gòu),當(dāng)vcpu被從物理CPU上切換下來的時(shí)候,其運(yùn)行上下文會(huì)被保存在其對(duì)應(yīng)的VMCS結(jié)構(gòu)中當(dāng)vcpu被切換到pcpu上運(yùn)行時(shí),其運(yùn)行上下文會(huì)從對(duì)應(yīng)的VMCS結(jié)構(gòu)中導(dǎo)入到物理CPU上。通過這種方式,實(shí)現(xiàn)各vCPU之間的獨(dú)立運(yùn)行。從虛擬機(jī)系統(tǒng)的結(jié)構(gòu)與功能劃分可以看出,客戶操作系統(tǒng)與虛擬機(jī)監(jiān)視器
共同構(gòu)成了虛擬機(jī)系統(tǒng)的兩級(jí)調(diào)度框架,如圖所示是一個(gè)多核環(huán)境下虛擬機(jī)系統(tǒng)的兩級(jí)調(diào)度框架。客戶操作系統(tǒng)負(fù)責(zé)第2級(jí)調(diào)度,即線程或進(jìn)程在vCPU上的調(diào)度(將核心線程映射到相應(yīng)的虛擬CPU上)。虛擬機(jī)監(jiān)視器負(fù)責(zé)第1級(jí)調(diào)度,即vCPU在物理處理單元上的調(diào)度。兩級(jí)調(diào)度的調(diào)度策略和機(jī)制不存在依賴關(guān)系。vCPU調(diào)度器負(fù)責(zé)物理處理器資源在各個(gè)虛擬機(jī)之間的分配與調(diào)度,本質(zhì)上即把各個(gè)虛擬機(jī)中的vCPU按照一定的策略和機(jī)制調(diào)度在物理處理單元上可以采用任意的策略來分配物理資源,滿足虛擬機(jī)的不同需求。vCPU可以調(diào)度在一個(gè)或多個(gè)物理處理單元執(zhí)行(分時(shí)復(fù)用或空間復(fù)用物理處理單元),也可以與物理處理單元建立一對(duì)一固定的映射關(guān)系(限制訪問指定的物理處理單元)。
2 內(nèi)存虛擬化
內(nèi)存虛擬化三層模型
因?yàn)閂MM(VirtualMachineMonitor)掌控所有系統(tǒng)資源,因此VMM握有整個(gè)內(nèi)存資源,其負(fù)責(zé)頁式內(nèi)存管理,維護(hù)虛擬地址到機(jī)器地址的映射關(guān)系。因GuestOS本身亦有頁式內(nèi)存管理機(jī)制,則有VMM的整個(gè)系統(tǒng)就比正常系統(tǒng)多了一層映射:
A.虛擬地址(VA),指GuestOS提供給其應(yīng)用程序使用的線性地址空間;B.物理地址(PA),經(jīng)VMM抽象的、虛擬機(jī)看到的偽物理地址;
C.機(jī)器地址(MA),真實(shí)的機(jī)器地址,即地址總線上出現(xiàn)的地址信號(hào);映射關(guān)系如下:GuestOS:PA=f(VA)、VMM:MA=g(PA)VMM維護(hù)一
套頁表,負(fù)責(zé)PA到MA的映射。GuestOS維護(hù)一套頁表,負(fù)責(zé)VA到PA的映射。實(shí)際運(yùn)行時(shí),用戶程序訪問VA1,經(jīng)GuestOS的頁表轉(zhuǎn)換得到PA1,再由VMM介入,使用VMM的頁表將PA1轉(zhuǎn)換為MA1。
2 頁表虛擬化技術(shù)
普通MMU只能完成一次虛擬地址到物理地址的映射,在虛擬機(jī)環(huán)境下,經(jīng)過MMU轉(zhuǎn)換所得到的“物理地址”并不是真正的機(jī)器地址。若需得到真正的機(jī)器地址,必須由VMM介入,再經(jīng)過一次映射才能得到總線上使用的機(jī)器地址。如果虛擬機(jī)的每個(gè)內(nèi)存訪問都需要VMM介入,并由軟件模擬地址轉(zhuǎn)換的效率是很低下的,幾乎不具有實(shí)際可用性,為實(shí)現(xiàn)虛擬地址到機(jī)器地址的高效轉(zhuǎn)換,現(xiàn)普遍采用的思想是:由VMM根據(jù)映射f和g生成復(fù)合的映射fg,并直接將這個(gè)映射關(guān)系寫入MMU。當(dāng)前采用的頁表虛擬化方法主要是MMU類虛擬化(MMUParavirtualization)和影子頁表,后者已被內(nèi)存的硬件輔助虛擬化技術(shù)所替代。
1、MMUParavirtualization
其基本原理是:當(dāng)GuestOS創(chuàng)建一個(gè)新的頁表時(shí),會(huì)從它所維護(hù)的空閑內(nèi)存中分配一個(gè)頁面,并向VMM注冊(cè)該頁面,VMM會(huì)剝奪GuestOS對(duì)該頁表的寫權(quán)限,之后GuestOS對(duì)該頁表的寫操作都會(huì)陷入到VMM加以驗(yàn)證和轉(zhuǎn)換。VMM會(huì)檢查頁表中的每一項(xiàng),確保他們只映射了屬于該虛擬機(jī)的機(jī)器頁面,而且不得包含對(duì)頁表頁面的可寫映射。后VMM會(huì)根據(jù)自己所維護(hù)的映射關(guān)系,將頁表項(xiàng)中的物理地址替換為相應(yīng)的機(jī)器地址,最后再把修改過的頁表載入MMU。如此,MMU就可以根據(jù)修改過頁表直接完成虛擬地址到機(jī)器地址的轉(zhuǎn)換。
2、內(nèi)存硬件輔助虛擬化
內(nèi)存硬件輔助虛擬化技術(shù)原理圖
內(nèi)存的硬件輔助虛擬化技術(shù)是用于替代虛擬化技術(shù)中軟件實(shí)現(xiàn)的“影子頁表”的一種硬件輔助虛擬化技術(shù),其基本原理是:GVA(客戶操作系統(tǒng)的虛擬地址)->GPA(客戶操作系統(tǒng)的物理地址)->HPA(宿主操作系統(tǒng)的物理地址)兩次地址轉(zhuǎn)換都由CPU硬件自動(dòng)完成(軟件實(shí)現(xiàn)內(nèi)存開銷大、性能差)。以VT-x技術(shù)的頁表擴(kuò)充技術(shù)ExtendedPageTable(EPT)為例,首先VMM預(yù)先把客戶機(jī)物理地址轉(zhuǎn)換到機(jī)器地址的EPT頁表設(shè)置到CPU中;其次客戶機(jī)修改客戶機(jī)頁表無需VMM干預(yù);最后,地址轉(zhuǎn)換時(shí),CPU自動(dòng)查找兩張頁表完成客戶機(jī)虛擬地址到機(jī)器地址的轉(zhuǎn)換。使用內(nèi)存的硬件輔助虛擬化技術(shù),客戶機(jī)運(yùn)行過程中無需VMM干預(yù),去除了大量軟件開銷,內(nèi)存訪問性能接近物理機(jī)。
I/O設(shè)備虛擬化
VMM通過I/O虛擬化來復(fù)用有限的外設(shè)資源,其通過截獲GuestOS對(duì)I/O設(shè)備的訪問請(qǐng)求,然后通過軟件模擬真實(shí)的硬件,目前I/O設(shè)備的虛擬化方式主要有三種:設(shè)備接口完全模擬、前端/后端模擬、直接劃分。
1、設(shè)備接口完全模擬:
即軟件精確模擬與物理設(shè)備完全一樣的接口,GuestOS驅(qū)動(dòng)無須修改就能驅(qū)動(dòng)這個(gè)虛擬設(shè)備。
優(yōu)點(diǎn):沒有額外的硬件開銷,可重用現(xiàn)有驅(qū)動(dòng)程序;
缺點(diǎn):為完成一次操作要涉及到多個(gè)寄存器的操作,使得VMM要截獲每個(gè)寄存器訪問并進(jìn)行相應(yīng)的模擬,這就導(dǎo)致多次上下文切換;由于是軟件模擬,性能較低。
2、前端/后端模擬:
VMM提供一個(gè)簡(jiǎn)化的驅(qū)動(dòng)程序(后端,Back-End),GuestOS中的驅(qū)動(dòng)程序?yàn)榍岸?Front-End,FE),前端驅(qū)動(dòng)將來自其他模塊的請(qǐng)求通過與GuestOS間的特殊通信機(jī)制直接發(fā)送給GuestOS的后端驅(qū)動(dòng),后端驅(qū)動(dòng)在處理完請(qǐng)求后再發(fā)回通知給前端,VMM即采用該方法。
優(yōu)點(diǎn):基于事務(wù)的通信機(jī)制,能在很大程度上減少上下文切換開銷,沒有額外的硬件開銷;
缺點(diǎn):需要GuestOS實(shí)現(xiàn)前端驅(qū)動(dòng),后端驅(qū)動(dòng)可能成為瓶頸。
3、直接劃分:
即直接將物理設(shè)備分配給某個(gè)GuestOS,由GuestOS直接訪問I/O設(shè)備(不經(jīng)VMM),目前與此相關(guān)的技術(shù)有IOMMU(IntelVT-d,PCI-SIG之SR-IOV等),旨在建立高效的I/O虛擬化直通道。
優(yōu)點(diǎn):可重用已有驅(qū)動(dòng),直接訪問減少了虛擬化開銷;
缺點(diǎn):需要購買較多額外的硬件。
關(guān)于KVM虛擬化技術(shù)中如何進(jìn)行Hypervisor的實(shí)現(xiàn)問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。