220 likes | 449 Views
基於 Intel VT — x 的 VMM 架構. 張力升 Dept. of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C 2013.07.16. 摘要. 電腦硬體性能的迅速增強使得通過虛擬化技術建立多個相互隔離的計算域成為未來個人電腦的一種重要發展趨勢 作者設計並實現了基於 Intel VT-x 技術的 VMM 架構 - Pcanel / V2
E N D
基於Intel VT—x的VMM架構 張力升 Dept. of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C 2013.07.16
摘要 • 電腦硬體性能的迅速增強使得通過虛擬化技術建立多個相互隔離的計算域成為未來個人電腦的一種重要發展趨勢 • 作者設計並實現了基於Intel VT-x技術的VMM架構- Pcanel/V2 • 該架構利用最新的硬體虛擬化技術,通過配置出一個可控制的虛擬運行環境,可以直接虛擬運行多個不修改原始程式碼的客戶作業系統. • Pcanel/V2實現了Linux和Vxworks的同時運行,相應的資料測試表明Pcanel/V2架構在簡化了VMM設計複雜度的同時總體運行效率比軟體虛擬化技術提高了約10%. 2
1. 引言 • 虛擬化技術可以提高電腦物理資源的利用率和共用率,並且為提高系統的可靠性、操作性、安全性和即時服務品質提供了新的途徑. • 因為原有IA-32架構的設計原因,大大增加了VMM(Virtual Machine Monitor)的設計難度 • 兩大處理器廠商都推出了硬體的虛擬化技術—Intel的VT技術和AMD的Pacifica技術 • Intel VT技術的一個重要的設計目標就是消除半虛擬化和二進位轉化技術,簡化VMM的實現, 3
2. Intel VT-x技術簡介 • 具有VT技術的處理器有兩種運行模式: • VMX模式: • VMX root操作模式: 其功能與沒有VT技術的IA-32非常相似 • VMX non-root操作模式:提供了一個選擇性的IA-32環境,設計用來支持虛擬機器 • 非VMX模式:和不具備VT技術的處理器運行方式完全相同 • VT技術定義: VMX root操作模式VMX non-root操作模式:VM entry VMX non-root操作模式VMXroot操作模式:VM exit • 這兩種轉換被叫做虛擬機器控制結構(virtual—machine control structure VMCS)的一個資料結構控制. • VMCS包括一組客戶機狀態(guest-state area)和一組主機狀態(host—state area),兩種狀態都對應著處理器不同組件的值 4
3. 總體設計 (1/2) • Pcanel/V2的設計思想有以下3條原則: • 在虛擬機器中運行的Guest OS不需要改變原始程式碼. • 充分利用VT技術提供的各項功能,減少設計複雜度. • 盡可能利用Guest OS 而不是Pcanel /V2來處理操作系統運行過程中遇到的各種情況 • Pcanel /V2的總體架構圖如圖1所示. • Pcanel /V2運行在VMX root操作模式的特權級0上 • Guest OS (例如 Linux),運行在VMX non-root操作模式的其所設計希望運行的特權級上(一般為特權級0和3) 5
4. 運行時狀態轉換(1/2) • 圖2顯示了Pcanel/V2的運行流程 • ①開機初始化後Pcanel/V2判斷處理器是否支援VT技術,如果不支援就進入非MVX模式運行. • ②否則可以進入到VMX模式. • ③在進行了VMCS的配置之後,就可以通過VM entry進入到Guest OS運行. • ④Guest OS運行過程中,如果遇到異常,或者資源訪問等情況就會導致VM exit. • ⑤Peanel/V2會對各種情況進行相應的處理後再返回到Guest OS運行. • 系統穩定後在④和⑤之間不斷切換 7
5. VMCS的配置 (1/2) • VMCS的配置是整個Pcanel/V2設計的關鍵,它控制了VMX root . VMX non-root之間的相互轉換,以及在VMX non-root操作模式中的處理器行為 • 如果有多個Guest OS共同運行,則每個Guest OS對應著一個VMCS並受其控制 • VMCS中的資料可以分為6組,所有域的值都是在VMX root操作模式下通過VMWRITE指令寫入的,Pcanel/V2對這6組資料欄進行了如下: • Guest-state域: 當VM entry時,會將guest—state域中的資訊導入至處理器的各狀態;當VM exit時,處理器的各個狀態會保存到guest—state域中 • Host-state域:每次VM exit後,通過導入host—state域值進入到相同的處理環境中來對導致VM exit的各種原因進行處理. 9
5. VMCS的配置 (2/2) • VM - execution control域.控制處理器在VMX non-root操作模式時的各種行為.決定了何種情況下會導致VM exit.承之前所說的Pcanel/V2的設計原則的第3條,我們設計在Guest OS中運行以下敏感指令都不會導致VM exit, • VM - exit control域.控制VM exit.使得處理器在64位元運行模式下運行,如果有外部中斷產生,會將該中斷資訊保存在VM—exit interruptioninformation中,供Pcanel/V2處理. • VM - entry control域.控制VM entry.使得處理器在IA一32e運行模式下運行. • VM - exit information域.唯讀,描述了導致VM exit的各種原因. 10
6. VM entry操作和VM exit操作 • VM entry實現了進入到Guest OS的運行.每次VM entry時,首先進行基本的檢查,以確保VMCS中各個域的值都配置正確.然後通過3個途徑導人處理器狀態: • 從VM—entry control域中 • 從guest—state域中 • 從特定的控制寄存器中導入頁目錄表指針 • 導致VM exit的原因是當Guest OS在VMXnon-root操作運行過程中,有些指令的執行或者事件的發生. • 如CPUID、VMCALL等會無條件地導致VM exit; • HLT、IN等會根據VMCS中的配置來決定是否導致VM exit. • 當VM exit發生時,會把導致VM exit的原因記錄在VM—exit information域中,並且保存處理器的各個狀態至guest—state域中.然後通過3個途徑導入處理器狀態: 11
7. VM exit後Pcanel/V2的處理(1/3) • 每次VM exit結束進入到的出口環境後,其代碼的最主要功能是,根據VM-exit information域中的資訊進行處理,可能是類比某條指令,或是進行記憶體操作,也可能會將某中斷發回給Guest OS,然後通過VM entry繼續Guest OS的運行 • 下面給出Pcanel/V2在VM exit後的處理方式.先給出導致VM exit的原因,然後給出對應處理方式. • (1)VMX指令的運行.讀取vm—exit instruction length域值.然後修改guest-state域中的RIP,加上vm—exit instruction length域值,這樣就相當於使得Guest OS跳過該條指令的執行. • (2)CPUID指令的運行.①讀取guest state中的RAX.②執行CPUID指令.③將執行結果寫入到guest—state域中的RAX、RBX、RCX、RDX中去. 12
7. VM exit後Pcanel/V2的處理(2/3) • (3)INVD指令的運行.Pcanel/V2不允許GuestOS具有清空快取記憶體的能力(因為物理處理器高速緩存中的資料有可能包含其他Guest OS和Pcanel/V2),所以Pcanel/V2的處理與對VMX指令的處理方式相同. • (4)MOV from CR3指令的運行.發送給記憶體虛擬模組處理. • (5)I/O指令的運行.Peanel/V2讀取exit qualification域獲取埠號,通過對端El號的查詢,確定Guest OS是對哪個虛擬裝置進行操作,然後發送給相應的虛擬裝置模組來完成操作,返回給Guest OS.具體步驟在設備虛擬章節中有描述. • (6)INLVPG指令的運行.發送給記憶體虛擬模組處理. • (7)WRMSR指令的運行.Pcanel/V2使WRMSR指令無效,處理方式與對VMX指令的處理相同. 13
7. VM exit後Pcanel/V2的處理(3/3) • (8)外部中斷.Pcanel/V2判斷中斷向量號並做出兩種處理方式:直接發回給Guest OS處理,例如鍵盤中斷,具體步驟是,將VM—exit interruption information域中的資訊拷貝到VM—entry interruption-information域中,然後通過“注入”發送虛擬中斷給Guest OS;第2種處理方式是,Peanel/V2使用自身的IDT來處理,例如時鐘中斷. • (9)異常.發送給記憶體虛擬模組處理.其中,對於缺頁異常,在exit qualification域中保存著導致缺頁的線性位址. • (10)MOV to CR0指令的運行.Guest OS的上述操作Pcanel/V2無法完成,會導致異常. • (11)MOV to CR3指令的運行.這是Guest OS切換頁表的操作,Pcanel/V2發送給記憶體虛擬模塊處理. 14
8.記憶體虛擬 (1/4) • 記憶體虛擬模組的設計基於兩個原則:(1)Pcanel/V2掌握對實體記憶體的控制;(2)支援Guest OS記憶體位址轉換的功能. • 為了使Pcanel/V2對實體記憶體的完全控制,Pcanel/V2就必須掌握處理器的位址轉換機制. • 所以,只有Pcanel/V2可以存取CR3(保存著頁目錄表的基底位址)和執行INVLPG(唯一可以直接操作TLB的指令). • 同時,Guest OS自身也希望可以實現對記憶體位址轉換的控制,它也會存取CR3,也會執行INVLPG.Pcanel/V2必須允許並且支持這些操作.基於以上原則 • Pcanel/V2的記憶體虛擬模組的設計如圖3所示. 15
8. 記憶體虛擬 (3/4) • Guest OS頁表結構的功能就是“欺騙”Guest OS,使其認為掌握了對記憶體位址轉換的控制. • 事實上,Guest OS頁表結構被處理器的TLB和Pcanel/V2頁表結構所控制(TLB中的映射關係是從Pcanel/V2頁表結構中導入的). • 在VM exit後Pcanel/V2處理步驟中,有4種情況是要交給記憶體虛擬模組處理的,具體的處理方式如表1所述. 17
9. 設備虛擬 • Guest OS對所有I/O埠的存取都會導致VM exit.在每次VM exit時,在exit qualification域中都會收集一些關於退出條件的資訊(埠號、存取大小、方向、是否為串),Pcanel/V2將這些資訊打包成一個I/O請求包並發給相應的設備類比模組.對Guest OS的一個I/O請求的處理過程如下: • (1)I/O存取導致VM exit. • (2)通過讀取exit reason域和exit qualification域來對指令解碼. • (3)創建一個描述該事件的I/O請求包. • (4)將請求包發給相應的設備類比模組處理. • (5)等待來自設備類比模組相關I/O埠的回複或者MMIO(Memory-Map I/O)操作. • (6)通過VM entry使得Guest OS繼續運行. 19
10. 實例研究 (1/2) • 性能測試方面,我們選擇以下系統作為對比:軟體半虛擬技術的代表系統Xen,在其上運行Linux系統;基於VT技術的Xen-VT,在其上運行Linux系統直接運行於硬體機器平臺上的Linux. • 使用的測試程式為SPEC2000和SYSBENCH測試程式組,它們是: • (1)CPU(2)THREADS(3)MUTEX(4)MEMORY(5)FILEIO(6)OLTP(7)SPECINT(8)SPECFP • 我們把測試資料按照在硬體平臺上直接運行Linux的資料進行直條化,結果如圖4所示. 20
11. 結束語 • Pcanel/V2是我們對硬體虛擬技術進行的初步實踐,基本實現了硬體虛擬的目的,為今後的進一步最佳化打下了基礎.今後我們還將在以下幾個方面進行優化和完善:I/O操作效率的進一步提高、對非真實硬體的虛擬化、對多核架構的支持、對GUI的支持等. 22