
Virtualization and Consolidation with Hyper-V
微軟進入虛擬化領域已經很有一段時間了(微軟在2003年收購了推出了Virtual PC軟件的Connectix公司,並在其後推出了Virtual Server服務器虛擬化軟件),在Hpyer-V推出之前,微軟在虛擬化領域尤其是服務器虛擬化領域可說是略顯不自信,與競爭對手VMware的頻頻新品相比,Virtual PC和Virtual Server的發布和宣傳都十分低調,畢竟,VMware/Xen等產品憑借出色的性能已經占據了大半江山。而現在,隨著Hyper-V的正式推出,企業級虛擬化領域極可能會引起一場風暴,市場格局有可能迅速改變。
為什麼微軟的Hyper-V會具有這樣的能力呢?
注:什麼是虛擬化?
Hyper-V是一個Hypervisor(系統管理程序),開發代號為Viridian,它主要作用就是管理、調度虛擬機的創建和運行,並提供硬件資源的虛擬化。Hyper-V是微軟伴隨Windows Server 2008最新推出的服務器虛擬化解決方案,在Windows Server 2008發布的時候,集成了一個Beta版本的Hyper-V,微軟承諾在180天之內會提供正式版的Hyper-V。Window Server 2008是4月份發布的,180天就是不到6個月,因此微軟會在9月到10月之間發布正式版的Hyper-V,而目前已經到了RTM階段,可以正常使用了。
Hyper-V跟微軟自家的Virtual PC、Virtual Server等產品相比,有著很顯翍的區別,和競爭對手VMware Server/ESX Server也有很大不同:Hyper-V在構架上絕對是一個突破性的進展!

Hyper-V虛擬化細節架構
微軟發布的架構圖資料有很多,然而主要內容都很相似,就是上圖那樣。

Hyper-V之前、Virtual Server 2005 R2的架構
Hyper-V的本質是一個VMM(虛擬化管理程序),和微軟之前的Virtual Server系列產品,處在的層次不同,它更接近于硬件,這一點比較像VMware的ESX Server系列,實際上Hyper-V屬于微軟的第一個裸金屬虛擬化產品(Bare-Metal Virtualization)。然而,在一些基礎架構上,Hyper-V和ESX Server又有著明顯的不同,所以說,Hyper-V是很特別的。
作為一個虛擬化產品,Hyper-V具有一個很特別的要求:處理器必須支持AMD-V或者Intel VT技術,也就是說,處理器必須具備硬件輔助虛擬化技術。
對于一個虛擬化產品來說,要求一個硬件特性是比較奇特的事情(要求支持一個指令集不算),微軟之前的Virtual Server 2005R2不需要這個特性。對于VMware的產品來說,這也只是一個可選的特性,不像Hyper-V那樣,是一個硬性的要求。處理器不支持VT/AMD-V,就無法運行Hyper-V。

VT-x處理器輔助虛擬化技術,是Hyper-V的硬性要求
關于VT的具體作用,可以查看x86虛擬化難題解決:Intel VT或者《從VT-x到VT-d Intel虛擬化技術發展藍圖》。VT,或者AMD-V,是一種硬件輔助虛擬化技術,用來解決Ring Privilege的問題,傳統處理器下虛擬機通過使用指令轉換的方法來在Ring 3執行Ring 0特權指令,嚴重影響性能,而VT則解決了這個問題。對VT的依賴和支持是Hyper-V架構的基礎,也是Hyper-V最大的特點。
也因為Hyper-V需要處理器支持硬件虛擬化輔助,一部分處理器無法應用Hyper-V,只有較新、非Value型的處理器才能應用。例如訪問www.microsoft.com只有75%的幾率碰到部署在Hyper-V上的虛擬化服務器,剩下的25%都是未Hyper-V虛擬化的服務器。要在這些服務器上應用虛擬化,用戶只能選擇Virtual Server 2005 R2,或者其它公司的產品。
Microsoft Hyper-V和VMware ESX Server是比較相像的,都是Bare-Metal類型,但是它們的內核架構也有著明顯的不同。微軟在談到競爭對手ESX Server時,總會提到,Hyper-V是微內核架構的,而ESX Server是單內核架構,Hyper-V要更好。
這兩者具有什麼不同?到底誰更好呢?

單內核(分層的內核)與微內核
單內核和微內核實際上是操作系統內核術語,操作系統的內核〞〞實現核心功能的那部分〞〞可能是微內核(Micro kernel),也可能是單內核(Monolithic kernel,有時也叫宏內核Macro kernel)。按炤類似封裝的形式,這些術語定義如下:
微內核(Micro kernel)求求在微內核中,最常用的功能被精心挑選設計在內核模式(或者按炤上一頁的說法,在x86上是Ring 0模式)運行的一個或一組進程上,而其它大部分不怎麼重要的核心功能都作為單獨的進程在用戶模式下(類似地,Ring 3模式下)運行,它們通過消息傳遞進行通訊(例如,Windows採用的進程間通信IPC機制,IPC就是Inter Process Communicate)。最基本的思想就是要盡量地小。通常微內核只包含了進程調度、內存管理和進程間通信這幾個根本的功能。
這種設計具有許多好處,例如增加了靈活性,易于維護,易于移植。只需要把微內核本身進行移植就能夠完成將整個內核移植到新的平台上。同時微內核的模塊化設計讓其他核心功能模塊都只依賴于微內核模塊或其他模塊,並不直接依賴硬件。
同樣,由于模塊化的設計,不包含在微內核內的驅動程序可以動態地加載,或者卸載。同時,微內核也不依賴于固定的文件系統,用戶可以隨意選擇對文件系統的支持。用戶甚至能夠在系統運行時將研發出的新系統模塊或需要替換現有模塊的模塊直接而且迅速的加入系統。不需要的模塊將不會被加載到內存中,因此微內核就能夠更有效的利用內存。微內核還具有的好處是實時性、安全性比較好,並且更適合于構建分布式操作系統和面向對象操作系統。
微內核操作系統的典型例子是,Mach(一個非原生的分布式操作系統內核,也被應用在Mac OS X上)、IBM AIX、BeOS,以及Windows NT,還有翍名的Minix(一個主要用于教學的Unix系統)和Amoeba(一個原生的分布式操作系統)。
單內核(Monolithic kernel)求求單內核是個很大的進程。它的內部又能夠被分為若干模塊(或層次,或其他)。但是在運行的時候,它是一個單獨的大二進制映象。因為是在同一個進程內,其模塊間的通訊是通過直接調用其他模塊中的函數實現的,而不是微內核那樣在多個進程內進行消息傳遞。因此在運行效率上,單內核會具有一定的好處。
單內核操作系統的典型例子是,大部分Linux,包括BSD在內的幾乎所有的Unix,MS-DOS,Windows 9x。例如Sun Solaris的內核就運行著數百個線程以實現各種功能,而編譯過Linux內核的人就知道Linux內核有數十MB之大。
單內核和微內核哪個更好顯然是一個很有爭議性的問題,必須說明的很有趣的一點是,這種爭論經常會令人想到上一個時代CPU領域中RISC和CISC的斗爭。現代的成功CPU設計中包含了任何這兩種技術,就像現在Linux(單內核)和Windows NT(微內核)都是微內核和單內核的混合產物一樣。歷史上有過這樣的爭論,Linux(單內核)的作者Linus和Minix/Amoeba(均為微內核)的作者Andrew S. Tanenbaum博士對壘,最終Linus也同意微內核架構更為先進的論點。
掉書袋就到這里,回到Hyper-V上來,通過採用微內核架構,Hyper-V在體積上很有優勢,它的大小只有300k左右(似乎新版本的更加小),而VMware ESX Server的Linux核心則非常大。就VMM虛擬化管理程序來說,需要的功能不多,因此採用微內核架構是很合適的,運行效率可以很高。不過就理論上來說,合理配置的單內核其實和微內核也很相似。哪一種性能更好?這要在測試之後才能知曉了,不過在這之前,我們接下來可以先看看微內核帶來的一個好處:設備驅動程序的變遷。
無論採用什麼內核,驅動程序和文件系統總是必要的,虛擬機需要使用服務器的硬件就需要驅動程序,虛擬機的文檔需要保存在適當的文件系統上。在單內核的VMware ESX Server上,驅動程序包含在單內核內部,虛擬機映像文件則保存在VMFS(一種類似EXT的文件系統)上,那麼微內核架構的Hyper-V呢?
這就要談到Hyper-V的VSP/VSC架構了,VSP是Virtual Services Provider,VSC則是Virtual Services Client,還有一個VMBus部件,將放在“宿主操作系統”的VSP和虛擬機操作系統的VSC連接起來。實際上“宿主操作系統”也是一個虛擬機〞〞就是你最初安裝的、帶有Hyper-V的Windows Server 2008,微軟將其稱為Parent Partition操作系統,而每一個虛擬機則成為Child Partition。

VSP與VPC,注意VSP並不是Virtual Storage Provider的縮寫。Virtual Storage Provider屬于VSP
上圖很好地解釋了Hyper-V使用VSP/VSC架構解決驅動程序/文件系統的方式,通過加入VSP和VSC以及它們互相溝通的VMBus總線,Hyper-V將虛擬機的操作映射入Parent Partition的對應驅動程序/文件系統中,簡化起來就如下圖:

Hyper-V的VSPs/VSCs、VMBus架構
這種方式具有不少好處,例如,最明顯地,Hyper-V可以兼容大量的驅動程序,而不必為虛擬機開發專用的驅動程序(ESX Server就是這樣干的),只要設備能在Windows Server 2008下工作,那麼Hyper-V虛擬機就能使用這些設備資源,再加上Windows驅動天生就比其他操作系統(如Linux)的驅動豐富,因此在硬件支持上Hyper-V具有著無可比擬的優勢。VMware ESX Server甚至不能直接應用Linux驅動程序,需要另外進行額外的操作才能使用,因此VMware ESX Server容易受到設備方面的問題,當然用戶可以使用具備VMware認證的全套硬件以避免這個問題。
有利就有弊,VSP/VSC架構需要支持Hyper-V技術的客戶端的支持,這樣就大為限制了虛擬機操作系統的選擇,不支持Hyper-V的客戶操作系統只能使用設備模擬的方式,性能和以前的Virtual Server 2005 R2沒有太大的分別,要享受到Hyper-V性能的提升,需要虛擬機使用Windows Server 2008,或者內含Xen的Linux/Unix。Hyper-V的客戶機操作系統的選擇確實只注明了Windows和少數幾種Linux,雖然筆者猜測或多或少有著商業策略上的因素,不過從技術上來看,確實也有一些限制。
Hyper-V設備驅動的這個優點正好就和微內核驅動程序架構的優點一樣,模塊化,架構靈活,不需要更改就可以提供新硬件的支持。
順便提一下,設備虛擬硬件輔助VTd技術在Hyper-V下的實現很輕松,只需要開發Windows Server 2008下的驅動程序。
Hyper-V還具有一個關于性能的重要特性:多處理器虛擬機,Hyper-V支持4 CPU的Windows Server 2008虛擬機,和2 CPU的Windows Server 2003虛擬機。多處理器虛擬機並不是一個Hyper-V才具有的特性,VMware的ESX Server早已經實現4 CPU的虛擬機,並且是在各種操作系統下(WMware Workstation也能提供2 CPU的虛擬機)。
如果服務器工作負載需要很高的性能,我們可以考慮使用多處理器的虛擬機。數據庫服務器可以消耗掉大量的處理器資源,這時,多處理器虛擬機就是很必須的,就像我們做過的測試那樣。當然,只有當工作負載確實需要的時候,才應該使用多處理器虛機,因為管理更多的處理器會帶來一些額外的開銷。就像早期Window NT具有單處理器和多處理器兩種內核一樣(單處理器版本去掉了一些多處理器才有的如同步之類的模塊,並作了相關優化)。

進程狀態及其轉換示意圖,進程的就在這些狀態之間“旋轉”
眾所周知,為了保護共享數據,需要一些同步機制,例如鎖、信號量等。通常,多處理器操作系統內核和驅動會採用自旋鎖(Spin Lock,類似于互斥鎖,但是保持時間更短。更詳細的信息可以參考《Windows Internals》第四版,P152)的機制,在獲得自旋鎖之前,線程並不會阻塞,而是一直處于自旋狀態,前提是自旋鎖只會保持很短的時間。然而在虛擬化條件下,這個前提會被打破件,因為虛擬處理器是按炤時間片進行調度的。如果在保持自旋鎖的時候競爭虛擬處理器,則其他虛擬處理器就要自旋很長時間,導致CPU循環的浪費。
在Windows Server 2008內核以及Hyper-V Hypervisor中加入了一個創新設計,盡可能防止出現自旋鎖的長時間等待條件,如果確實存在長時間等待條件,也會有效地加以檢測並對其進行處理。這個方法叫做自旋鎖啟發方法,未實現自旋鎖啟發方法的虛擬機作系統將停在一個緊湊循環上旋轉以等待其他虛擬處理器釋放自旋鎖,通常這個旋轉可能會阻塞其中一個硬件 CPU,從而降低了虛擬化性能。而在自旋鎖啟發式操作系統中,自旋鎖代碼會在將要發生旋轉時通過Hypercall API通知Hyper-V Hypervisor管理程序,這樣Hypervisoer管理程序就可以立即調度執行另一個虛擬處理器並降低不必要的CPU使用。Hyper-V還還在調度程序和內存虛擬化邏輯上進行了優化以使它們在大多數臨界區中都不會被鎖定,從而確保多處理器系統能夠獲得很好的延展性。
在前些天的媒體測試見面會上,微軟中國的工程師展示了Hyper-V虛擬機的效率,表明4 CPU的Windows Server 2008虛擬機,其延展性可以和物理4 CPU系統一較高下。當然,具體的提升仍然需要通過測試來評估。
注:自旋鎖啟發方法其實不完全是Hyper-V的內容,它更多是Windows Server 2008的核心內容。Vista也實現了這個自旋鎖啟發方法。
【IT168評測中心】不知不覺間說了很多顯得有些深澀的內容,不過Hyper-V的特點總結起來就是:VT/AMD-V實現、微內核設計、VSP/VSC虛擬設備驅動架構以及虛擬處理器自旋鎖啟發架構,這些特性糅合在一起就形成了獨特的Hyper-V。此外,$28的價格(或者,購買Windows Server 2008:免費)也很值得一提。

微軟服務器虛擬化戰略的里程碑:Hyper-V
更好的性能、更廣泛的兼容性、更強的安全性,以及更便宜〞〞這就是Hyper-V,從2003年收購Connetix後就沈寂的微軟並沒有睡著。從最早的Terminal Services,到早期的Virtual PC、Virtual Server、SoftGrid,到今天Hyper-V的推出,這些看似不經意的動作,現在看來均是為其全面的虛擬化戰略實施做鋪墊。而經過這樣一系列的鋪墊,微軟的從數據中心到桌面虛擬化、全面的端到端的虛擬化戰略已經正式部署完畢,我們已經可以看到,虛擬化市場即將到來的一場暴風雨。