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