VMware 虛擬化 x86

VMware虛擬化技術實作問答(上)

2012-01-18
硬體性能逐年甚至逐月地大幅提升,與電腦剛問世時相比,真是不可同日而語。為充分利用一般使用時大部分閒置的系統資源,虛擬化技術應運而生,在該項技術領域中,最廣為採用的就是VMware。本文將就VMware虛擬化技術實際應用所可能面臨的各項問題提出詳細的解決對策。
目前市面上已經開發出許多虛擬化相關技術,其中發展最成熟、產品線最為齊全的當屬VMware。雖然大多數人對於VMware所開發出來的技術已經很熟悉,但實作時無可避免地仍然會遭遇到一些細部難解的問題,有鑑於此,本文將分成上下集透過問答的方式來為大家解答疑惑。

Q1:x86虛擬化技術該使用哪種才好?

常常聽到半/全虛擬化技術、CPU硬體輔助虛擬化,到底虛擬化技術應該採用哪一種方案比較好?

在說明x86虛擬化技術之前,應該先從x86架構CPU特權模式(CPU Privileged Mode)談起,由於x86架構一開始設計架構是以「個人電腦」為定位,因此要做到硬體資源虛擬化有很大的困難。

▲圖1 在保護模式下x86架構可用的權限(Privilege rings for the x86 available in protected mode)。圖片來源:維基百科—Ring(Computer Security)

從如圖1的x86CPU特權模式中可以看出,在CPU運作架構上共有從Ring 0~Ring 3四個特權等級。

其中,權限最高為Ring 0,通常為作業系統,它可以與核心(Kernel)溝通,直接控制實體主機硬體資源的使用,如CPU、Memory和Device I/O。而Ring 1和Ring 2很少使用到,通常為周邊裝置的驅動程式。最後,使用者端所碰觸的應用程式則是處於Ring 3特權模式。

虛擬化技術則是在CPU架構中插入Hypervisor來管理硬體資源,Hypervisor為一介於軟體與韌體中一層極小的程式碼,可以提供動態的硬體資源配置及彈性設定和管理虛擬資源,並且由VMM(Virtual Machine Monitor)來取代本來由作業系統所掌管的Ring 0特權模式,而原來的作業系統則降一級成為Ring 1。

但是,某些作業系統中的指令必須在Ring 0特權模式才可正常執行,因此便衍生出半/全虛擬化技術(Para/Full Virtualization),Intel稱之為Software-only Virtualization,來解決特殊指令無法順利執行的問題。

半虛擬化技術(Para Virtualization)
因為必須修改作業系統核心而植入Hypercall,使得作業系統不必為了虛擬化而將CPU特權等級被調降到Ring 1(保持在Ring 0),並且透過Hypercall來存取硬體資源。

優點:此方式虛擬化對於硬體資源消耗相對較少。
缺點:因為必須修改作業系統核心,因此可於半虛擬化平台上運作的作業系統種類較少。

全虛擬化技術(Full Virtualization)
以VMware技術來說,為採用二進位轉譯(Binary Translation)技術,在因為虛擬化而降級的作業系統(Ring 1特權模式)存取硬體資源時,會由VMM將作業系統發出的CPU指令透過二進位轉譯技術進行轉換,進而順利存取硬體資源。簡言之,作業系統並不知道自己被調降到Ring 1特權模式中。(圖2)

圖2 純軟體虛擬化技術(Software-Only Virtualization)。圖片來源:Intel Virtualization Technology – Processor Virtualization

優點:不需要修改作業系統核心,因此可運作大部分的作業系統種類。
缺點:透過二進位轉譯會消耗較多的硬體資源。

CPU硬體輔助虛擬化(Hardware Assisted Virtualization)
因為軟體架構虛擬化的技術各有其優缺點,因此CPU大廠Intel和AMD決定從x86 CPU架構著手來改善x86虛擬化的門檻,分別提出了Intel-VT(Vanderpool)(圖3?4)以及AMD-V(Pacifica)虛擬化技術。

圖3 Intel虛擬化技術的演進。圖片來源:Intel Virtualization Technology – Processor Virtualization

▲圖4 採用Intel VT-x虛擬技術前後架構上的改變。圖片來源:Intel Virtualization Technology – Processor Virtualization

簡單來說,該技術是將原有的CPU特權模式分為兩個等級,原先的Ring 0?Ring 3稱為Non-Root Mode,新增的Ring -1則稱為Root Mode。

如此一來,VMM便使用Ring -1,而作業系統則維持原來的Ring 0,因此使用CPU硬體輔助虛擬化之後,半虛擬化技術不需要事先修改作業系統核心來符合運作架構,而全虛擬化技術也不用做二進位轉譯。並且,採用CPU硬體輔助虛擬化之後,兩者不論在運作效能或硬體資源消耗上其實都相差無幾。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!