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