《KVM實戰:原理、進階與性能調優》 —2 KVM原理簡介
第2章
KVM原理簡介
2.1 硬件虛擬化技術
通過第1章的介紹,大家已經知道KVM虛擬化必須依賴于硬件輔助的虛擬化技術,本節就來介紹一下硬件虛擬化技術。
最早的硬件虛擬化技術出現在1972年的大型機IBM System/370 系統上,而真正讓硬件虛擬化技術“走入尋常百姓家”的是2005年年末Intel發布的VT-x硬件虛擬化技術,以及AMD于2006年發布的AMD-V。本書中除了特別說明,默認以Intel的硬件虛擬化技術作為代表來介紹。
2.1.1 CPU虛擬化
CPU是計算機系統最核心的模塊,我們的程序執行到最后都是翻譯為機器語言在CPU上執行的。在沒有CPU硬件虛擬化技術之前,通常使用指令的二進制翻譯(binary translation)來實現虛擬客戶機中CPU指令的執行,很早期的VMware就使用這樣的方案,其指令執行的翻譯比較復雜,效率比較低。所以Intel最早發布的虛擬化技術就是CPU虛擬化方面的,這才為本書的主角—KVM的出現創造了必要的硬件條件。
Intel在處理器級別提供了對虛擬化技術的支持,被稱為VMX(virtual-machine extensions)。有兩種VMX操作模式:VMX 根操作(root operation) 與VMX 非根操作(non-root operation)。作為虛擬機監控器中的KVM就是運行在根操作模式下,而虛擬機客戶機的整個軟件棧(包括操作系統和應用程序)則運行在非根操作模式下。進入VMX非根操作模式被稱為“VM Entry”;從非根操作模式退出,被稱為“VM Exit”。
VMX的根操作模式與非VMX模式下最初的處理器執行模式基本一樣,只是它現在支持了新的VMX相關的指令集以及一些對相關控制寄存器的操作。VMX的非根操作模式是一個相對受限的執行環境,為了適應虛擬化而專門做了一定的修改;在客戶機中執行的一些特殊的敏感指令或者一些異常會觸發“VM Exit”退到虛擬機監控器中,從而運行在VMX根模式。正是這樣的限制,讓虛擬機監控器保持了對處理器資源的控制。
一個虛擬機監控器軟件的最基礎的運行生命周期及其與客戶機的交互如圖2-1所示。
圖2-1 VMM與Guest之間的交互
軟件通過執行VMXON指令進入VMX操作模式下;在VMX模式下通過VMLAUNCH 和VMRESUME指令進入客戶機執行模式,即VMX非根模式;當在非根模式下觸發VM Exit時,處理器執行控制權再次回到宿主機的虛擬機監控器上;最后虛擬機監控可以執行VMXOFF指令退出VMX執行模式。
邏輯處理器在根模式和非根模式之間的切換通過一個叫作VMCS(virtual-machine control data structure)的數據結構來控制;而VMCS的訪問是通過VMCS指針來操作的。VMCS指針是一個指向VMCS結構的64位的地址,使用VMPTRST和VMPTRLD指令對VMCS指針進行讀寫,使用MREAD、VMWRITE和VMCLEAR等指令對VMCS實現配置。
對于一個邏輯處理器,它可以維護多個VMCS數據結構,但是在任何時刻只有一個VMCS在當前真正生效。多個VMCS之間也是可以相互切換的,VMPTRLD指令就讓某個VMCS在當前生效,而其他VMCS就自然成為不是當前生效的。一個虛擬機監控器會為一個虛擬客戶機上的每一個邏輯處理器維護一個VMCS數據結構。
根據Intel的官方文檔,我們這里列舉部分在非根模式下會導致“VM Exit”的敏感指令和一些異常供讀者朋友參考,這對于理解KVM的執行機制是必要的,因為KVM也必須按照CPU的硬件規范來實現虛擬化軟件邏輯。
1)一定會導致VM Exit的指令:CPUID、GETSEC、INVD、XSETBV等,以及VMX 模式引入的INVEPT、INVVPID、VMCALL、VMCLEAR、VMLAUNCH、VMPTRLD、VMPTRST、VMRESUME、VMXOFF、VMXON等。
2)在一定的設置條件下會導致VM Exit的指令:CLTS、HLT、IN、OUT、INVLPG、INVPCID、LGDT、LMSW、MONITOR、MOV from CR3、MOV to CR3、MWAIT、MWAIT、RDMSR、RWMSR、VMREAD、VMWRITE、RDRAND、RDTSC、XSAVES、XRSTORS等。如在處理器的虛擬機執行控制寄存器中的“HLT exiting”比特位被置為1時,HLT的執行就會導致VM Exit。
3)可能會導致VM Exit的事件:一些異常、三次故障(Triple fault)、外部中斷、不可屏蔽中斷(NMI)、INIT信號、系統管理中斷(SMI)等。如在虛擬機執行控制寄存器中的“NMI exiting”比特位被置為1時,不可屏蔽中斷就會導致VM Exit。
最后提一下,由于發生一次VM Exit的代價是比較高的(可能會消耗成百上千個CPU執行周期,而平時很多指令是幾個CPU執行周期就能完成),所以對于VM Exit的分析是虛擬化中性能分析和調優的一個關鍵點。
KVM
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。