毫無疑問在業界微軟Microsoft是當之無愧的軟件霸主不僅僅在操作系統上占據巨大的市場份額更在數據庫遷入式移動計算搜索引擎等各個方面都具有很強的影響力在各個領域都不容忽視由於低估微軟在產品創新和銷售執行方面的能力眾多的企業在與微軟的競爭中遭遇挫折
Virtualization and Consolidation with HyperV
微軟進入虛擬化領域已經很有一段時間了(微軟在年收購了推出了Virtual PC軟件的Connectix公司並在其後推出了Virtual Server服務器虛擬化軟件)在HpyerV推出之前微軟在虛擬化領域尤其是服務器虛擬化領域可說是略顯不自信與競爭對手VMware的頻頻新品相比Virtual PC和Virtual Server的發布和宣傳都十分低調畢竟VMware/Xen等產品憑借出色的性能已經占據了大半江山而現在隨著HyperV的正式推出企業級虛擬化領域極可能會引起一場風暴市場格局有可能迅速改變
為什麼微軟的HyperV會具有這樣的能力呢?
注什麼是虛擬化?
HyperV是一個Hypervisor(系統管理程序)開發代號為Viridian它主要作用就是管理調度虛擬機的創建和運行並提供硬件資源的虛擬化HyperV是微軟伴隨Windows Server 最新推出的服務器虛擬化解決方案在Windows Server 發布的時候集成了一個Beta版本的HyperV微軟承諾在天之內會提供正式版的HyperVWindow Server 是月份發布的天就是不到個月因此微軟會在月到月之間發布正式版的HyperV而目前已經到了RTM階段可以正常使用了
HyperV跟微軟自家的Virtual PCVirtual Server等產品相比有著很顯著的區別和競爭對手VMware Server/ESX Server也有很大不同HyperV在構架上絕對是一個突破性的進展!
HyperV虛擬化細節架構
微軟發布的架構圖資料有很多然而主要內容都很相似就是上圖那樣
HyperV之前Virtual Server R的架構
HyperV的本質是一個VMM(虛擬化管理程序)和微軟之前的Virtual Server系列產品處在的層次不同它更接近於硬件這一點比較像VMware的ESX Server系列實際上HyperV屬於微軟的第一個裸金屬虛擬化產品(BareMetal Virtualization)然而在一些基礎架構上HyperV和ESX Server又有著明顯的不同所以說HyperV是很特別的
作為一個虛擬化產品HyperV具有一個很特別的要求處理器必須支持AMDV或者Intel VT技術也就是說處理器必須具備硬件輔助虛擬化技術
對於一個虛擬化產品來說要求一個硬件特性是比較奇特的事情(要求支持一個指令集不算)微軟之前的Virtual Server R不需要這個特性對於VMware的產品來說這也只是一個可選的特性不像HyperV那樣是一個硬性的要求處理器不支持VT/AMDV就無法運行HyperV
VTx處理器輔助虛擬化技術是HyperV的硬性要求
關於VT的具體作用可以查看x虛擬化難題解決Intel VT或者《從VTx到VTd Intel虛擬化技術發展藍圖》VT或者AMDV是一種硬件輔助虛擬化技術用來解決Ring Privilege的問題傳統處理器下虛擬機通過使用指令轉換的方法來在Ring 執行Ring 特權指令嚴重影響性能而VT則解決了這個問題對VT的依賴和支持是HyperV架構的基礎也是HyperV最大的特點
也因為HyperV需要處理器支持硬件虛擬化輔助一部分處理器無法應用HyperV只有較新非Value型的處理器才能應用例如訪問只有%的幾率碰到部署在HyperV上的虛擬化服務器剩下的%都是未HyperV虛擬化的服務器要在這些服務器上應用虛擬化用戶只能選擇Virtual Server R或者其它公司的產品
Microsoft HyperV和VMware ESX Server是比較相像的都是BareMetal類型但是它們的內核架構也有著明顯的不同微軟在談到競爭對手ESX Server時總會提到HyperV是微內核架構的而ESX Server是單內核架構HyperV要更好
這兩者具有什麼不同?到底誰更好呢?
單內核(分層的內核)與微內核
單內核和微內核實際上是操作系統內核術語操作系統的內核——實現核心功能的那部分——可能是微內核(Micro kernel)也可能是單內核(Monolithic kernel有時也叫宏內核Macro kernel)按照類似封裝的形式這些術語定義如下
微內核(Micro kernel)――在微內核中最常用的功能被精心挑選設計在內核模式(或者按照上一頁的說法在x上是Ring 模式)運行的一個或一組進程上而其它大部分不怎麼重要的核心功能都作為單獨的進程在用戶模式下(類似地Ring 模式下)運行它們通過消息傳遞進行通訊(例如Windows采用的進程間通信IPC機制IPC就是Inter Process Communicate)最基本的思想就是要盡量地小通常微內核只包含了進程調度內存管理和進程間通信這幾個根本的功能
這種設計具有許多好處例如增加了靈活性易於維護易於移植只需要把微內核本身進行移植就能夠完成將整個內核移植到新的平台上同時微內核的模塊化設計讓其他核心功能模塊都只依賴於微內核模塊或其他模塊並不直接依賴硬件
同樣由於模塊化的設計不包含在微內核內的驅動程序可以動態地加載或者卸載同時微內核也不依賴於固定的文件系統用戶可以隨意選擇對文件系統的支持用戶甚至能夠在系統運行時將研發出的新系統模塊或需要替換現有模塊的模塊直接而且迅速的加入系統不需要的模塊將不會被加載到內存中因此微內核就能夠更有效的利用內存微內核還具有的好處是實時性安全性比較好並且更適合於構建分布式操作系統和面向對象操作系統
微內核操作系統的典型例子是Mach(一個非原生的分布式操作系統內核也被應用在Mac OS X上)IBM AIXBeOS以及Windows NT還有著名的Minix(一個主要用於教學的Unix系統)和Amoeba(一個原生的分布式操作系統)
單內核(Monolithic kernel)――單內核是個很大的進程它的內部又能夠被分為若干模塊(或層次或其他)但是在運行的時候它是一個單獨的大二進制映象因為是在同一個進程內其模塊間的通訊是通過直接調用其他模塊中的函數實現的而不是微內核那樣在多個進程內進行消息傳遞因此在運行效率上單內核會具有一定的好處
單內核操作系統的典型例子是大部分Linux包括BSD在內的幾乎所有的UnixMSDOSWindows x例如Sun Solaris的內核就運行著數百個線程以實現各種功能而編譯過Linux內核的人就知道Linux內核有數十MB之大
單內核和微內核哪個更好顯然是一個很有爭議性的問題必須說明的很有趣的一點是這種爭論經常會令人想到上一個時代CPU領域中RISC和CISC的斗爭現代的成功CPU設計中包含了任何這兩種技術就像現在Linux(單內核)和Windows NT(微內核)都是微內核和單內核的混合產物一樣歷史上有過這樣的爭論Linux(單內核)的作者Linus和Minix/Amoeba(均為微內核)的作者Andrew S Tanenbaum博士對壘最終Linus也同意微內核架構更為先進的論點
掉書袋就到這裡回到HyperV上來通過采用微內核架構HyperV在體積上很有優勢它的大小只有k左右(似乎新版本的更加小)而VMware ESX Server的Linux核心則非常大就VMM虛擬化管理程序來說需要的功能不多因此采用微內核架構是很合適的運行效率可以很高不過就理論上來說合理配置的單內核其實和微內核也很相似哪一種性能更好?這要在測試之後才能知曉了不過在這之前我們接下來可以先看看微內核帶來的一個好處設備驅動程序的變遷
無論采用什麼內核驅動程序和文件系統總是必要的虛擬機需要使用服務器的硬件就需要驅動程序虛擬機的文檔需要保存在適當的文件系統上在單內核的VMware ESX Server上驅動程序包含在單內核內部虛擬機映像文件則保存在VMFS(一種類似EXT的文件系統)上那麼微內核架構的HyperV呢?
這就要談到HyperV的VSP/VSC架構了VSP是Virtual Services ProviderVSC則是Virtual Services Client還有一個VMBus部件將放在宿主操作系統的VSP和虛擬機操作系統的VSC連接起來實際上宿主操作系統也是一個虛擬機——就是你最初安裝的帶有HyperV的Windows Server 微軟將其稱為Parent Partition操作系統而每一個虛擬機則成為Child Partition
VSP與VPC注意VSP並不是Virtual Storage Provider的縮寫Virtual Storage Provider屬於VSP
上圖很好地解釋了HyperV使用VSP/VSC架構解決驅動程序/文件系統的方式通過加入VSP和VSC以及它們互相溝通的VMBus總線HyperV將虛擬機的操作映射入Parent Partition的對應驅動程序/文件系統中簡化起來就如下圖
HyperV的VSPs/VSCsVMBus架構
這種方式具有不少好處例如最明顯地HyperV可以兼容大量的驅動程序而不必為虛擬機開發專用的驅動程序(ESX Server就是這樣干的)只要設備能在Windows Server 下工作那麼HyperV虛擬機就能使用這些設備資源再加上Windows驅動天生就比其他操作系統(如Linux)的驅動豐富因此在硬件支持上HyperV具有著無可比擬的優勢VMware ESX Server甚至不能直接應用Linux驅動程序需要另外進行額外的操作才能使用因此VMware ESX Server容易受到設備方面的問題當然用戶可以使用具備VMware認證的全套硬件以避免這個問題
有利就有弊VSP/VSC架構需要支持HyperV技術的客戶端的支持這樣就大為限制了虛擬機操作系統的選擇不支持HyperV的客戶操作系統只能使用設備模擬的方式性能和以前的Virtual Server R沒有太大的分別要享受到HyperV性能的提升需要虛擬機使用Windows Server 或者內含Xen的Linux/UnixHyperV的客戶機操作系統的選擇確實只注明了Windows和少數幾種Linux雖然筆者猜測或多或少有著商業策略上的因素不過從技術上來看確實也有一些限制
HyperV設備驅動的這個優點正好就和微內核驅動程序架構的優點一樣模塊化架構靈活不需要更改就可以提供新硬件的支持
順便提一下設備虛擬硬件輔助VTd技術在HyperV下的實現很輕松只需要開發Windows Server 下的驅動程序
HyperV還具有一個關於性能的重要特性多處理器虛擬機HyperV支持 CPU的Windows Server 虛擬機和 CPU的Windows Server 虛擬機多處理器虛擬機並不是一個HyperV才具有的特性VMware的ESX Server早已經實現 CPU的虛擬機並且是在各種操作系統下(WMware Workstation也能提供 CPU的虛擬機)
如果服務器工作負載需要很高的性能我們可以考慮使用多處理器的虛擬機數據庫服務器可以消耗掉大量的處理器資源這時多處理器虛擬機就是很必須的就像我們做過的測試那樣當然只有當工作負載確實需要的時候才應該使用多處理器虛機因為管理更多的處理器會帶來一些額外的開銷就像早期Window NT具有單處理器和多處理器兩種內核一樣(單處理器版本去掉了一些多處理器才有的如同步之類的模塊並作了相關優化)
進程狀態及其轉換示意圖進程的就在這些狀態之間旋轉
眾所周知為了保護共享數據需要一些同步機制例如鎖信號量等通常多處理器操作系統內核和驅動會采用自旋鎖(Spin Lock類似於互斥鎖但是保持時間更短更詳細的信息可以參考《Windows Internals》第四版P)的機制在獲得自旋鎖之前線程並不會阻塞而是一直處於自旋狀態前提是自旋鎖只會保持很短的時間然而在虛擬化條件下這個前提會被打破件因為虛擬處理器是按照時間片進行調度的如果在保持自旋鎖的時候競爭虛擬處理器則其他虛擬處理器就要自旋很長時間導致CPU循環的浪費
在Windows Server 內核以及HyperV Hypervisor中加入了一個創新設計盡可能防止出現自旋鎖的長時間等待條件如果確實存在長時間等待條件也會有效地加以檢測並對其進行處理這個方法叫做自旋鎖啟發方法未實現自旋鎖啟發方法的虛擬機作系統將停在一個緊湊循環上旋轉以等待其他虛擬處理器釋放自旋鎖通常這個旋轉可能會阻塞其中一個硬件 CPU從而降低了虛擬化性能而在自旋鎖啟發式操作系統中自旋鎖代碼會在將要發生旋轉時通過Hypercall API通知HyperV Hypervisor管理程序這樣Hypervisoer管理程序就可以立即調度執行另一個虛擬處理器並降低不必要的CPU使用HyperV還還在調度程序和內存虛擬化邏輯上進行了優化以使它們在大多數臨界區中都不會被鎖定從而確保多處理器系統能夠獲得很好的延展性
在前些天的媒體測試見面會上微軟中國的工程師展示了HyperV虛擬機的效率表明 CPU的Windows Server 虛擬機其延展性可以和物理 CPU系統一較高下當然具體的提升仍然需要通過測試來評估
注自旋鎖啟發方法其實不完全是HyperV的內容它更多是Windows Server 的核心內容Vista也實現了這個自旋鎖啟發方法
不知不覺間說了很多顯得有些深澀的內容不過HyperV的特點總結起來就是VT/AMDV實現微內核設計VSP/VSC虛擬設備驅動架構以及虛擬處理器自旋鎖啟發架構這些特性糅合在一起就形成了獨特的HyperV此外$的價格(或者購買Windows Server 免費)也很值得一提
微軟服務器虛擬化戰略的裡程碑HyperV
更好的性能更廣泛的兼容性更強的安全性以及更便宜——這就是HyperV從年收購Connetix後就沉寂的微軟並沒有睡著從最早的Terminal Services到早期的Virtual PCVirtual ServerSoftGrid到今天HyperV的推出這些看似不經意的動作現在看來均是為其全面的虛擬化戰略實施做鋪墊而經過這樣一系列的鋪墊微軟的從數據中心到桌面虛擬化全面的端到端的虛擬化戰略已經正式部署完畢我們已經可以看到虛擬化市場即將到來的一場暴風雨
From:http://tw.wingwit.com/Article/Common/201311/4688.html