「華為雲計算」詳細解析虛擬化的起源和分類

虛擬化技術簡介

虛擬化技術發展史


虛擬化技術最早出現在大型機時代。上世紀60年代,IBM開始在其CP-40大型機系統中嘗試虛擬化的實現,後來在System/360-67中採用,並衍生出VM/CMS到後來的z/VM等產品線。大型機上的虛擬化技術在之後20多年的發展中愈發成熟,但隨著小型機以及x86的流行,大型機在新興的服務器市場中已經失去了影響力。


由於處理器架構的不同,在大型機上已經成熟的虛擬化技術卻並不能為小型機及x86所用。直到2001年,VMware發佈了第一個針對x86服務器的虛擬化產品。之後的幾年間,英國劍橋大學的一位講師發佈了同樣針對x86虛擬化的開源虛擬化項目Xen,併成立XenSource公司(07年Citrix將其收購);惠普發佈了針對HP-UX的Integrity虛擬機;Sun跟Solaris 10一同發佈了同時支持x86/x64和SPARC架構的Solaris Zone;而微軟也終於在2008年發佈的Windows Server 2008 R2中加入了Hyper-V。期間,VMware被EMC收購,XenSource則被思傑收購。


之後的幾年間,VMware逐漸在企業級市場中被廣泛的接受,Xen也逐漸在互聯網領域展露頭角。在成熟的服務器操作系統當中,Novell SUSE Linux Enterprise 10是第一個採用Xen技術的。當時的Xen還很不成熟,乃至於紅帽還為此取笑了Novell一番;不過幾個月後,到了RHEL 5.0發佈的時候,紅帽決定也將Xen加入到自己的默認特性當中——那是2006年。一時之間,在Linux服務器領域,Xen似乎成為了 VMware之外的最佳虛擬化選擇(事實上也沒多少其他可選的)。


但是,作為一項Linux平臺上的虛擬化技術,Xen在很長一段時間內一直沒有被接受到Linux內核的代碼當中,這對於Xen的維護者而言,不僅意味著要多做很多工作,還意味著用戶在廢了半天勁裝好Xen之後可能遇到意想不到的問題(注:2011年6月發佈的Linux內核3.0中已經加入了對Xen的支持——Xen的工程師們表示這是清理了7年遺留代碼、提交了600多個補丁的成果)。


而紅帽方面,也許是因為當時對這種脫離內核的維護方式很不爽,也許是因為採用Xen的RHEL在企業級虛擬化方面沒有贏得太多的市場,也許是因為思傑跟微軟走的太近了,種種原因,導致其萌生了放棄Xen的心思。2008年9月,紅帽收購了一家名叫Qumranet的以色列小公司,由此入手了一個叫做KVM的虛擬化技術(KVM,全稱Kernel-based Virtual Machine,意為基於內核的虛擬機)。


總之紅帽決定選擇了一個新興的基於內核的虛擬化技術:KVM。而在正式採用KVM一年後,就宣佈在新的產品線中徹底放棄Xen,集中資源和精力進行KVM的工作。至此各大虛擬化技術VMware,Xen,KVM等均出現,並找到自己位置。


全虛擬化(Full Virtualization)


全虛擬化也成為原始虛擬化技術,該模型使用虛擬機協調Guest操作系統和原始硬件,VMM在Guest操作系統和裸硬件之間用於工作協調,一些受保護指令必須由Hypervisor(虛擬機管理程序)來捕獲處理。


「華為雲計算」詳細解析虛擬化的起源和分類

全虛擬化主要是在客戶操作系統和硬件之間捕捉和處理那些對虛擬化敏感的特權指令,使客戶操作系統無需修改就能運行,速度會根據不同的實現而不同,但大致能滿足用戶的需求。這種方式是業界現今最成熟和最常見的,而且屬於 Hosted 模式和 Hypervisor 模式的都有,知名的產品有IBM CP/CMS、VirtualBox、KVM、VMware Workstation和VMware ESX(它在其4.0版,被改名為VMware vSphere)。


全虛擬化的運行速度要快於硬件模擬,但是性能方面不如裸機,因為Hypervisor需要佔用一些資源。


· 優點:Guest OS無需修改,速度和功能都非常不錯,更重要的是使用非常簡單,不論是 VMware 的產品,還是Oracle的 VirtualBox。


· 缺點:基於Hosted模式的全虛擬產品性能方面不是特別優異,特別是I/O方面。


未來:因為使用這種模式,不僅Guest OS免於修改,而且將通過引入硬件輔助虛擬化技術來提高其性能,在未來全虛擬化還是主流。


半虛擬化(Para Virtualization)


半虛擬化是另一種類似於全虛擬化技術,它使用Hypervisor分享存取底層硬件,但是它的Guest操作系統集成了虛擬化方面代碼。該方法無需重新編譯或引起陷阱,因為操作系統自身能夠與虛擬進程進行很好的協作。


「華為雲計算」詳細解析虛擬化的起源和分類


它與完全虛擬化有一些類似,它也利用Hypervisor來實現對底層硬件的共享訪問,但是由於在Hypervisor 上面運行的Guest OS已經集成與半虛擬化有關的代碼,使得Guest OS能夠非常好地配合Hyperivosr來實現虛擬化。通過這種方法將無需重新編譯或捕獲特權指令,使其性能非常接近物理機,其最經典的產品就是Xen,而且因為微軟的Hyper-V所採用技術和Xen類似,所以也可以把Hyper-V歸屬於半虛擬化。


(半虛擬化由於需要修改VM操作系統的內核,所以沒法支持windows這樣閉源OS,於是後來Xen也利用CPU虛擬化技術開始支持全虛擬化了,所以目前Xen支持半虛擬化和全虛擬化兩種)


半虛擬化需要Guest操作系統做一些修改,使Guest操作系統意識到自己是處於虛擬化環境的,但是半虛擬化提供了與原操作系統相近的性能。


· 優點:這種模式和全虛擬化相比架構更精簡,而且在整體速度上有一定的優勢。


· 缺點:需要對Guest OS進行修改,所以在用戶體驗方面比較麻煩。


未來:情況比較類似,在公有云(比如Amazon EC2)平臺上應該繼續佔有一席之地,但是很難在其他方面和類似VMware vSphere這樣的全虛擬化產品競爭,同時它也將會利用其它技術來提高速度,並簡化架構。


虛擬化廠商


VMware簡介


· VMware的歷史


「華為雲計算」詳細解析虛擬化的起源和分類


早在1998年時,畢業於MIT的Diane Greene察覺到計算機資源的使用率過低,因此和Dr. Mendel Rosenblum、Scott Devine、Dr. Edward Wang以及Edouard Bugnion等人成立了VMware公司,專精於OS in OS的軟件,期待能完全發揮硬件的性能,併為當時的專業IT人員提供一個測試、評估的低成本環境。


1.X86平臺上的第一個虛擬機產品:VMware Workstation


當時VMware Workstation一上市就打響,使得VMware直接成為虛擬機的代名詞。然而Windows系統的相對不穩定性,讓VMware的工程師們把目光投向了相對較穩定的Linux系統,因此在VMware Workstation成功推出不久之後,也出現了Linux版本的產品,讓Linux下的用戶也可以同時運行Windows或其他的Linux套件。


2.Linux下的虛擬機產品


雖然解決了Windows的問題,VMware Workstation仍然無法擺脫寄居在固定操作系統上的恐懼。既然選擇了較為穩定的Linux,VMware也順勢推出了運行在RedHat、Mandrake和SUSE Linux下的VMware GSX Server,並且也擁有Web端的管理和客戶端的管理程序。在Linux下,VMware較不需要擔心病毒或黑客的攻擊,而操作系統本身宕機帶來的危險性也相對較小,因此在2000年初期,Linux成為VMware產品充分發揮的最好舞臺。而VMware也在2000年的初期在Linux下推出了VMware GSX Server產品,這也是後來推出VMware Server版的基礎。當然在GSX Server上最大的特色,就是使用了Client/Server架構的管理界面,更可以使用瀏覽器來連入GSX Server來管理。


KVM


KVM Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模塊,自Linux 2.6.20之後集成在Linux的各個主要發行版本中。它使用Linux自身的調度器進行管理,所以相對於Xen,其核心源碼很少。KVM目前已成為學術界的主流VMM之一。06年之前,Linux內核中還沒有任何虛擬化實現,Xen和Vmware依靠自己獨有的技術分別在虛擬化不同領域如日中天,尤其值得一提的是,Xen在開源領域幾乎成為了虛擬化的事實標準。Avi Kivity和他所在的以色列初創公司Qumranet提出並推動KVM(基於Linux內核的全虛擬化方案),以其精簡的架構,清晰的定位很快獲得Linux社區多數開發人員的支持得以快速被合併進入主幹,以Avi Kivity為主的工程師僅僅花了不到一年時間就讓Linux社區接受KVM的設計方案並且通過了代碼Review,最終於2006年10月合併進入2.6.20主幹,時至今日,人們依然對於KVM合併進入Linux主幹的速度之快感到不可思議。


為什麼那麼多的大公司對KVM感興趣?其中最明顯並且最重要的因素就是KVM是Linux內核的一部分。這個輕量級的虛擬化管理程序模塊能直接與硬件交互,不需要修改虛擬化操作系統,因此性能更好,並且補丁包能夠和Linux內核兼容,輕鬆控制虛擬化進程,同時減輕管理負擔。


當然,KVM也有成長的煩惱。KVM究竟屬於Type 1還是Type 2hypervisor呢?出現這種疑惑的原因在於KVM的基因——它屬於操作系統的一部分,類似直接運行於硬件系統之上的裸機管理程序,不需要修改操作系統。這就符合Type 1 hypervisor的定義,也經常被稱為硬件虛擬化引擎,更像是個安裝在客戶端上的操作系統,性能佳,運行穩定,減少了運行管理程序本身所需的花銷。


而Type 2 hypervisor更像是個應用,運行在基礎操作系統上。如果將KVM看作Type 2,那麼所強調的高性能難達到,還可能存在安全風險。其實,對Type 1和Type 2的討論不是是否採納KVM的前提。無論KVM是“第一類”還是“第二類”,這都是語義上的概念。


此外,就是所有新生技術在發展中都會面臨的難題:技術不成熟。KVM的出現不過三四年時間,在可用資源、平臺支持、管理工具、實施經驗方面當然不能與出現八年之久的Xen相比。雖然目前KVM還缺少某些關鍵特性,例如存儲的動態遷移,但是在後續的版本中都會開發出來。


性能方面,KVM在逐漸顯示其威力。不久前的SPECvirt虛擬化對照基準測試中,紅帽企業Linux 6.1、其內嵌的KVM hypervisor以及惠普ProLiant DL980 G7服務器三者結合,創造了新的成績——最佳的虛擬化性能和最多的計算區塊數量,並且六臺虛擬機能同時運行一個應用程序。


雖然只是新生技術,但是由於其性能和實施的簡易性,加上Linux企業市場中份額最大的紅帽不遺餘力的推廣開發,KVM將會持續成長壯大。


Hyper-V


在2006年VMware將其Server產品免費化之後,整個虛擬機的市場立即產生了變化。原來大家心中的"OS in OS"觀念立即提升到新的境界。微軟是第一個發現這個龐大市場的競爭對手,也在當時立即宣稱投入企業級的虛擬機市場,並在2008年成功推出了Hyper-V。在2010年發佈的Windows Server 2008 R2發佈支持Live/Quick Migration的Hyper-V R2更新版,支持不需要重新啟動的立即轉移,


Hyper-V並不是一個獨立的產品,而是很適當地融入了Windows Server 2008系統中的"角色(Role)"。在Windows Server 2008中要安裝Hyper-V,必須以角色的方式將主機配置成虛擬機角色。這一點也讓初次接觸虛擬機的人直接懷疑Hyper-V原生是否真的是原生架構。既然需要一個Windows Server 2008當做宿主的操作系統,Hyper-V原生怎麼會是原生架構的呢?


1. Windows Server 2008是第一個虛擬機


原生架構的最重要特色反而不是宿主的OS,而是Hypervisor的位置。如果Hypervisor的位置是在Ring 0或是Ring 1,只要能掌控其上的客戶端OS,並且為客戶端OS提供監控和分配的服務,那麼運行了Hyper-V的Windows Server 2008本身,是可以被視為一個客戶端OS的。


在啟動Hyper-V之前,Windows Server 2008就是一個普通的Windows Server操作系統。整個操作系統掌握了所有的資源,所有的硬件都被操作系統直接訪問。此時,計算機是沒有虛擬機功能的,安裝Virtual Server/PC或是VMware Workstation/Server均可以順利運行。


2.特殊的原生角色


然而啟動了Hyper-V的角色之後,系統的本質即發生變化。首先在開機時,會載入hvboot.sys文件,這就是Hyper-V的Hypervisor;載入hvboot.sys之後,以後加載的操作系統都被視為虛擬機,包括已經安裝好的Windows Server 2008。


此時Windows Server 2008會繼續啟動,但已經變成了一個虛擬機了。在Hyper-V中,將啟動Hyper-V後的Windows Server 2008稱為"父虛擬分區(Parent partition)",算是一個最特殊的虛擬機。"父虛擬分區"這個虛擬機和其他之後安裝的虛擬機完全不同,其完全掌握著所有的資源,但CPU和網卡除外,因此這個Windows Server 2008也必須聽從Hypervisor的指揮。


注:借鑑華為內部資料


分享到:


相關文章: