全面分析微軟虛擬化技術Hyper-V

http://os.51cto.com/art/200809/88551.htm數據庫

毫無疑問,在業界,微軟Microsoft是當之無愧的軟件霸主,不只僅在操做系統上佔據巨大的市場份額,更在數據庫、遷入式移動計算、搜索引擎等各個方面都具備很強的影響力,在各個領域都不容忽視。因爲低估微軟在產品創新和銷售執行方面的能力,衆多的企業在與微軟的競爭中遭遇挫折。   安全

微軟進入虛擬化領域已經頗有一段時間了(微軟在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虛擬化細節架構ide

微軟發佈的架構圖資料有不少,然而主要內容都很類似,就是上圖那樣。模塊化


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 Communication)。最基本的思想就是要儘可能地小。一般微內核只包含了進程調度、內存管理和進程間通訊這幾個根本的功能。

這種設計具備許多好處,例如增長了靈活性,易於維護,易於移植。微內核的模塊化設計讓其餘核心功能模塊都只依賴於微內核模塊或其餘模塊,並不直接依賴硬件。要添加新的特性只須要另行編寫用戶模式的微內核服務器。而只需把微內核自己進行移植就可以完成將整個內核移植到新的平臺上。

因爲模塊化的設計,不包含在微內核內的驅動程序能夠動態地加載,或者卸載。同時,微內核也不依賴於固定的文件系統,用戶能夠隨意選擇對文件系統的支持。用戶甚至可以在系統運行時將研發出的新系統模塊或須要替換現有模塊的模塊直接並且迅速的加入系統。不須要的模塊將不會被加載到內存中,所以微內核就可以更有效的利用內存。微內核還具備的好處是實時性、安全性比較好,而且更適合於構建分佈式操做系統和麪向對象操做系統。

微內核操做系統的典型例子是,Mach(一個非原生的分佈式操做系統內核,被衆多操做系統採用,例如,被應用在Mac OS X上)、IBM AIX、BeOS,以及Windows NT(Windows Server 2003和Windows Server 2008都包含其內),還有著名的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也贊成Tanenbaum微內核架構更爲先進的論點。

掉書袋就到這裏,回到Hyper-V上來,經過採用微內核架構,Hyper-V在體積上頗有優點,它的大小隻有300k左右(彷佛新版本的更加小),而VMware ESX Server的Linux核心則很是大。就VMM虛擬化管理程序來講,須要的功能很少,所以採用微內核架構是很合適的,運行效率能夠很高。不過就理論上來講,合理配置的單內核其實和微內核也很類似。哪種性能更好?這要在測試以後才能知曉了,不過在這以前,咱們接下來能夠先看看微內核帶來的一個好處:設備驅動程序的變遷。

注:分佈式操做系統(Distributed Operation Systems)

分佈式操做系統DOS(可不是Disk Operation System)的具備多個定義,是是管理分佈式系統的資源的操做系統。這樣的說法比較抽象,咱們能夠經過與網絡操做系統(例如,咱們使用的Windows)對比來簡單闡述分佈式操做系統的特色:

(1)分佈性。分佈式操做系統的處理和控制功能均爲分佈式的;網絡操做系統其控制功能倒是集中在某個或某些主機或網絡服務器中,即集中式控制方式。

(2)並行性。分佈式操做系統具備任務分配功能,可將多個任務分配到多個處理單元上,使這些任務並行執行,從而加速了任務的執行;而網絡操做系統一般無任務分配功能,網絡中每一個用戶的一個或多個任務一般都在本地計算機上處理。

(3)透明性。分佈式操做系統一般能很好地隱藏系統內部的實現細節。包括對象的物理位置、併發控制和系統故障等對用戶都是透明的。例如,當用戶要訪問某個文件時,只需提供文件名而無須知道(所要訪問的對象)它是駐留在那個站點上,便可對它進行訪問,亦即具備物理位置的透明性。此外,當分佈式操做系統運行一個程序時,該程序無需通過特別設計以及通過用戶特別設置,就能夠自動劃分到多個處理器上並行運行。

(4)共享性。分佈式操做系統支持系統中全部用戶對分佈在各個站點上的軟硬件資源的共享和透明方式訪問。而網絡操做系統所提供的資源共享功能僅侷限於主機或網絡服務器中資源,對於其它機器上的資源一般僅有使用該機的用戶獨佔。

(5)健壯性。分佈式操做系統因爲處理器和控制功能的分佈性而具備較好的可用性和可靠性,即健壯性,只有全部的處理節點損壞,一個分佈式操做系統纔算是崩潰了。

典型的分佈式系統包括了SETI@Hom這樣的項目,Cluster、集羣、雲計算,也屬於分佈式操做系統的範疇。典型的分佈式操做系統有Amoeba、Mach、DCE等。

不管採用什麼內核,驅動程序和文件系統老是必要的,虛擬機須要使用服務器的硬件就須要驅動程序,虛擬機的文檔須要保存在適當的文件系統上。在單內核的VMware ESX Server上,驅動程序包含在單內核內部,虛擬機映像文件則保存在VMFS(一種相似EXT的文件系統)上,那麼微內核架構的Hyper-V呢?

這就要談到Hyper-V的VSP/VSC架構了,VSP是Virtualization Service Provider(虛擬化服務提供者),VSC則是Virtualization Services Consumer(虛擬化服務消費者),還有一個VMBus部件將放在「宿主操做系統」的VSP和虛擬機操做系統的VSC鏈接起來。實際上「宿主操做系統」也是一個虛擬機——就是你最初安裝的、帶有Hyper-V的Windows Server 2008,微軟將其稱爲Parent Partition操做系統,而每個虛擬機則稱爲Child 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就是這樣乾的)。咱們知道對於服務器而言,很重要的一個組成部分就是I/O,一個IO設備沒有驅動程序是沒法工做的。如今,只要設備能在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設備驅動的這個優勢正好就和微內核驅動程序架構的優勢同樣,模塊化,架構靈活,不須要更改就能夠提供新硬件的支持。敏銳地用戶可能會覺察到進程間通訊帶來的開銷——確實有這樣的問題,筆者曾詢問微軟的工程師,他們表示性能會有一點點地折扣。從筆者來看,經過內存地址轉換的方式,開銷有可能降到很是低。

順便提一下,設備虛擬硬件輔助VT-d技術在Hyper-V下的實現很輕鬆,只須要開發Windows Server 2008下的驅動程序,不須要對Hyper-V進行改動。

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也實現了這個自旋鎖啓發方法。

不知不覺間說了不少顯得有些深澀的內容,不過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的推出,這些看似不經意的動做,如今看來均是爲其全面的虛擬化戰略實施作鋪墊。而通過這樣一系列的鋪墊,微軟的從數據中心到桌面虛擬化、全面的端到端的虛擬化戰略已經正式部署完畢,咱們已經能夠看到,虛擬化市場即將到來的一場暴風雨。

相關文章
相關標籤/搜索