1、引言
虛擬化把事物從一種形式改變?yōu)榱硪环N形式,計算機的虛擬化使單個計算機看起來像多個計算機或完全不同的計算機,虛擬化技術(shù)也可以使多臺計算機看起來像一臺計算機,這叫做服務(wù)器聚合fserver aggregation)或網(wǎng)格計算(grid computing)。KVM是以色列開源組織Qumranet開發(fā)的一個開源虛擬機監(jiān)控器,從Linux一2.6.20開始被包含在Linux內(nèi)核中 因此KVM可以自然地使用Linux內(nèi)核提供的內(nèi)存管理、多處理器支持等功能,易于實現(xiàn),而且還可以隨著Linux內(nèi)核的發(fā)展而發(fā)展。KVM基于x86硬件虛擬化技術(shù),它的運行要求Intel VT—x或AMD SVM 的支持。IntelVT—x是英特爾虛擬化技術(shù),本文不考慮KVM 中與AMD SVM相關(guān)的實現(xiàn),有關(guān)術(shù)語的使用與Intel VT—X保持一致。
2、處理器優(yōu)化技術(shù)
處理器虛擬化的本質(zhì)是分時共享。實現(xiàn)虛擬化需要兩個必要條件,第一是能夠讀取和恢復(fù)處理器的當(dāng)前狀態(tài),第二是有某種機制防止虛擬機對系統(tǒng)全局狀態(tài)進(jìn)行修改。
第一個必要條件可以有硬件實現(xiàn),也可以由軟件來實現(xiàn),由硬件實現(xiàn)比軟件實現(xiàn)更為簡單 例如,x86處理器對應(yīng)用編程接口虛擬化,提供了硬件的支持,軟件通常只需要執(zhí)行一條指令,就可以實現(xiàn)任務(wù)切換,處理器硬件負(fù)責(zé)保存當(dāng)前應(yīng)用編程接口的狀態(tài),并為目標(biāo)任務(wù)恢復(fù)應(yīng)用編程接口的狀態(tài)。但操作系統(tǒng)并不一定要使用處理器提供的這種虛擬化機制,完全可以使用軟件來完成應(yīng)用接口狀態(tài)的切換。例如。Linux就沒有使用x86處理器提提供多任務(wù)機制,完全依賴軟件實現(xiàn)任務(wù)切換。
第二個必要條件一定要由硬件來實現(xiàn),通常處理器采用多模式操作(multi—mode operation)來確保這一點 在傳統(tǒng)x86處理器上,共有4種模式的操作,也就是常說的4個特權(quán)級。虛擬機(這里指進(jìn)程/線程)通常運行在特權(quán)級3上,而虛擬機監(jiān)控器(這里指操作系統(tǒng))運行于特權(quán)級O上,進(jìn)程/線程的所有訪問全局的操作,如訪問共享的操作系統(tǒng)所在的地址空間,訪問I/O等等,均會導(dǎo)致異常的發(fā)生,被操作系統(tǒng)所截獲并處理,使操作系統(tǒng)有機會向進(jìn)程/線程提供一個虛擬的世界。
2.1傳統(tǒng)處理器優(yōu)化及問題
傳統(tǒng)x86處理器為了保護(hù)指令的運行,提供了指令的4個不同Privilege特權(quán)級別,術(shù)語稱為Ring,從Ring 0~Ring 3。Ring 0的優(yōu)先級最高,Ring 3最低。各個級別對可以運行的指令有所限制,例如,GDT,IDT,LDT,TSS等這些指令就只能運行于Privilege 0,也就是Ring 0。要注意Ring/Privilege級別和我們通常認(rèn)知的進(jìn)程在操作系統(tǒng)中的優(yōu)先級并不同。
圖1操作系統(tǒng)內(nèi)核運行
操作系統(tǒng)必須要運行一些Privilege 0的特權(quán)指令,因此Ring 0是被用于運行操作系統(tǒng)內(nèi)核,Ring l和Ring 2是用于操作系統(tǒng)服務(wù),Ring 3則是用于應(yīng)用程序。然而實際上并沒有必要用完4個不同的等級,一般的操作系統(tǒng)實現(xiàn)都僅僅使用了兩個等級,即Ring O和Ring 3,如圖1所示在一個常規(guī)的x86操作系統(tǒng)中,系統(tǒng)內(nèi)核必須運行于Ring 0,而VMM軟件以及其管理下的Guest OS卻不能運行于Ring O—— 因為那樣就無法對所有虛擬機進(jìn)行有效的管理,就像以往的協(xié)同式多任務(wù)操作系統(tǒng)(如Windows 3.1)無法保證系統(tǒng)的穩(wěn)健運行一樣�,F(xiàn)在流行的解決方法是Ring Deprivileging(譯為特權(quán)等級下降),并具有兩種選擇:客戶OS運行于Privilege1(0/1/3模型),或者Privilege 3(0/3/3模型)。
無論是哪一種模型,客戶OS都無法運行于Privilege 0,這樣,如GDT,IDT,LDT,TSS這些特權(quán)指令就必須通過模擬的方式來運行,這會帶來很明顯的性能問題。特別是在負(fù)荷沉重、這些指令被大量執(zhí)行的時候。
雖然采用ring deprivileging方法可能實現(xiàn)系統(tǒng)虛擬化,但具有很多缺陷,且軟件上比較復(fù)雜。為此,Intel提出了VT—x技術(shù)來解決系統(tǒng)虛擬化問題,其主要思路是增加一個新的比0還高的特權(quán)級,通常稱之為特權(quán)級一1,并在硬件上支持系統(tǒng)編程接口狀態(tài)的保存和恢復(fù)。
2.2 Intel VT—X技術(shù)
首先,Intel VT—x提供了一套稱作VMX(Virtual Machine eXtension)的新的工作模式,工作在該模式下的處理器又具有兩類操作模式:VMXroot operation和VMX non—root operation。通常,虛擬機監(jiān)控器運行在VMX root operation模式下,即所謂的特權(quán)級一1-客戶操作系統(tǒng)運行在VMXnon-root operation模式下。VMX non—root operation模式仍保留4個特權(quán)級,對操作系統(tǒng)來說,VMXnon—root operation模式與傳統(tǒng)的x86處理器兼容,最大的差別在于當(dāng)虛擬機執(zhí)行一些訪問全局資源的指令時將導(dǎo)致虛擬機退出操作(VM exit),從而使虛擬機監(jiān)控器獲得控制權(quán)。以便對訪問全局資源的指令進(jìn)行模擬。以后,虛擬機監(jiān)控器可以通過虛擬機進(jìn)入操作(VM entry)使虛擬機重新獲得控制權(quán)。
其次,VT—x為系統(tǒng)編程接口狀態(tài)的切換提供硬件支持。VT—x為每個虛擬機維護(hù)至少一個VMCS(Virtual Machine Control Structure)結(jié)構(gòu),其中保存了虛擬機和虛擬機監(jiān)控器的系統(tǒng)編程接口狀態(tài)。當(dāng)執(zhí)行VM exit和VM entry操作時,VT—x自動根據(jù)VMCS中的內(nèi)容完成虛擬機和虛擬機監(jiān)控器問的系統(tǒng)編程接口狀態(tài)切換。為系統(tǒng)編程接口狀態(tài)的切換提供硬件支持是必要的,因為x86處理器的系統(tǒng)編程接口相比應(yīng)用編程接口要復(fù)雜的多,且在不停的變化,如較新的處理器可能增加一些MSR(Model Specific Register)、這使得單獨依靠軟件來實現(xiàn)系統(tǒng)編程接口的保存和恢復(fù)工作變得十分復(fù)雜。另外,VT—x還提供了一組指令,使得虛擬機監(jiān)控器通過一條指令就可以完成虛擬機問的切換。
VT—x解決了ring deprivileging方法的一系列問題,從硬件上堵住了所謂的x86平臺的虛擬化漏洞。由于操作系統(tǒng)所在的VMX non—root operation模式仍具有4個特權(quán)級,使得ring aliasing問題不存在了。同時,由于SYSENTER和SYSEXIT指令所引起的adverse impact on guest transitions問題也不存在了: 由于VT—x在VM exit和VMentry時完成系統(tǒng)編程接口的切換,也就是說虛擬機和虛擬機監(jiān)控器擁有各自的GDT,也就擁有了各自的地址空間,解決了address space compres—sion問題。同時,虛擬機和虛擬機監(jiān)控器擁有各自的GDTR/IDTR等寄存器,在虛擬機中訪問這些寄存器無需陷入,解決了nonfauhing accessing toprivileged state問題,再者,VMCS中保存了虛擬機的段描述符高速緩存,因此在虛擬機切換時不會出現(xiàn)access to hidden state問題:通過對VMCS進(jìn)行設(shè)置,可以使處理器在VMX non—root operation模式時的EFLAGS,IF失效,即該標(biāo)志位不再對中斷屏蔽產(chǎn)生影響,因此操作系統(tǒng)對EFLAGS,IF的頻繁操作不會導(dǎo)致頻繁的VM exit,解決了inter—rupt virtualization的問題。
VT—x提供了完備的處理器虛擬化機制,利用VT—x可以在單個硬件平臺上虛擬出任意數(shù)量的虛擬處理器VCPU VT—x除了解決了處理器虛擬化的問題之外,還為內(nèi)存虛擬化和I/O虛擬化提供了支撐。在內(nèi)存虛擬化方面,VT—x為影子頁表的實現(xiàn)提供了支撐,并且在較新的處理器中還提供了EPT機制,進(jìn)一步提高了內(nèi)存虛擬化的效率。在I/O虛擬化方面,通過I/O位圖機制可以方便地實現(xiàn)對Programmed I/O的虛擬化,除此之外,VT—x還提供了中斷事件退出機制和中斷事件注入機制,方便對設(shè)備中斷進(jìn)行虛擬化。
2.3 KVM實現(xiàn)
作為VMM,KVM分為兩部分,分別是運行于Kernel模式的KVM 內(nèi)核模塊和運行于User模式的Qemu模塊。這里的Kernel模式和User模式,實際上指的是VMX根模式下的特權(quán)級0和特權(quán)級3。另外,KVM將虛擬機所在的運行模式稱為Guest模式。所謂Guest模式,實際上指的是VMX的非根模式。
圖2 VCPU工作模型
利用VT—x技術(shù)的支持,KVM 中的每個虛擬機可具有多個虛擬處理器VCPU,每個VCPU對應(yīng)一個Qemu線程,VCPU的創(chuàng)建、初始化、運行以及退出處理都在Qemu線程上下文中進(jìn)行,需要Kernel、User和Guest三種模式相互配合,其工作模型如圖2所示。Qemu線程與KVM 內(nèi)核模塊間以ioctl的方式進(jìn)行交互,而KVM 內(nèi)核模塊與客戶軟件之問通過VM Exit和VM entrv操作進(jìn)行切換。
Qemu線程以ioctl的方式指示KVM 內(nèi)核模塊進(jìn)行VCPU的創(chuàng)建和初始化等操作,主要指VMM創(chuàng)建VCPU運行所需的各種數(shù)據(jù)結(jié)構(gòu)并初始化。其中很重要的一個數(shù)據(jù)結(jié)構(gòu)就是VMCS。
初始化工作完成之后,Oemu線程以ioctl的方式向KVM 內(nèi)核模塊發(fā)出運行VCPU的指示,后者執(zhí)行VM entry操作,將處理器由kernel模式切換到Guest模式,中止宿主機軟件,轉(zhuǎn)而運行客戶軟件。注意。宿主機軟件被中止時,正處于Qemu線程上下文,且正在執(zhí)行ioctl系統(tǒng)調(diào)用的kernel模式處理程序�?蛻糗浖谶\行過程中,如發(fā)生異�;蛲獠恐袛嗟仁录驁�(zhí)行I/0操作,可能導(dǎo)致VM exit,將處理器狀態(tài)由Guest模式切換回Kernel模式。KVM 內(nèi)核模塊檢查發(fā)生VM exit的原因,如果VM exit由于I/O操作導(dǎo)致,則執(zhí)行系統(tǒng)調(diào)用返回操作,將I/O操作交給處于User模式的Qemu線程來處理,Qemu線程在處理完I/O操作后再次執(zhí)行ioctl,指示KVM切換處理器到Guest模式,恢復(fù)客戶軟件的運行;如果VM exit由于其它原因?qū)е�,則由KVM內(nèi)核模塊負(fù)責(zé)處理,并在處理后切換處理器到Guest模式,恢復(fù)客戶機的運行。
3、結(jié)束語
KVM是解決虛擬化問題的一個重要解決方案,它是第一個進(jìn)入內(nèi)核的虛擬化解決方案,并能用于服務(wù)器虛擬化 KVM的另外一個優(yōu)點是它是內(nèi)核的一部分,因此可以利用內(nèi)核的優(yōu)化和改進(jìn)。與其它獨立的系統(tǒng)管理程序解決方案相比,這種方法是一種不會過時的技術(shù) KVM兩個最大的缺點是需要較新的能夠支持虛擬化得處理器,以及一個用戶空間的QEMU進(jìn)程來提供I/O虛擬化。不管好與壞,KVM位于內(nèi)核中,這對于現(xiàn)有解決方案來說是一個巨大的飛躍。
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://m.guhuozai8.cn/
本文標(biāo)題:淺析處理器虛擬優(yōu)化技術(shù)及KVM實現(xiàn)
本文網(wǎng)址:http://m.guhuozai8.cn/html/consultation/1083978525.html