官术网_书友最值得收藏!

3.1 概述

對于虛擬化,每個人都可能會有自己的認識。但其實所謂的虛擬化已經存在了40多年的時間。比如,在計算機發展的“上古時代”,有一段時間開發者會擔心是否有足夠的可用內存來存放自己的程序指令和數據,于是在操作系統里引入了虛擬內存的概念,即為了滿足應用程序對操作系統的需求,對內存進行的虛擬和擴展。

再比如,因為購買大型機系統的價格十分昂貴,系統管理員又不希望各部門的用戶獨占資源,所以出現了所謂的虛擬服務器,能夠讓用戶更好地分時段共享(Time-sharing)昂貴的大型機系統。

當然,虛擬化的內涵遠遠不止虛擬內存和虛擬服務器這么簡單。如果我們在一個更廣泛的環境中,或者從更高級的抽象中,如任務負載虛擬化和信息虛擬化,來思考虛擬化,虛擬化就變成了一個非常強大的概念,可以為最終用戶、上層應用和企業帶來很多好處。

現代計算機系統是一個龐大的整體,整個系統的復雜性是不言而喻的。因此,計算機系統自下而上地被分成了多個層次,如圖3-1所示,該圖展現了一種常見的計算機系統層次結構。

img

圖3-1 計算機系統層次結構

每個層次都向上一層次呈現一個抽象,并且每個層次只需要知道下一層次抽象的接口,并不需要了解其內部運作機制。比如,操作系統所看到的硬件是一個硬件抽象層,它并不需要理解硬件的布線或電氣特性。

這種層次抽象的好處是,每個層次只需要考慮本層的設計,以及與相鄰層次間的交互接口,從而大大降低了系統設計的復雜性,提高了軟件的可移植性。從另一個方面來說,這樣的設計還給下一層次的軟件模塊為上一層次的軟件模塊創造“虛擬世界”提供了條件。

本質上,虛擬化就是由位于下一層次的軟件模塊,根據上一層次的軟件模塊的期待,抽象出一個虛擬的軟件或硬件接口,使上一層次的軟件模塊可以直接運行在與自己所期待的運行環境完全一致的虛擬環境上。

虛擬化可以發生在如圖3-1所示的各個層次上,不同層次的虛擬化會帶來不同的虛擬化概念。在學術界和工業界,也先后出現了形形色色的虛擬化概念,這也是我們前面為什么會說“對于虛擬化,每個人都可能會有自己的認識”。有人認為虛擬內存和虛擬服務器都是虛擬化,有人認為硬件抽象層上的虛擬化是一種虛擬化,也有人認為類似Java虛擬機這種軟件是一種虛擬化。

對于云計算而言,特別是提供“基礎架構即服務”的云計算,更關心的是硬件抽象層上的虛擬化。因為,只有把物理計算機系統虛擬化為多臺虛擬計算機系統,并通過網絡將這些虛擬計算機系統互聯互通,才能夠形成現代意義上的“基礎架構即服務”的云計算系統。

如圖3-2所示,硬件抽象層上的虛擬化是指通過虛擬硬件抽象層來實現虛擬機,為客戶機操作系統呈現與物理硬件相同或相近的硬件抽象層。由于客戶機操作系統所能看到的只是硬件抽象層,因此客戶機操作系統的行為和其在物理平臺上的行為并沒有什么區別。

img

圖3-2 硬件抽象層上的虛擬化

這種硬件抽象層上的虛擬化又被稱為系統虛擬化,即將一臺物理計算機系統虛擬化為一臺或多臺虛擬計算機系統。每臺虛擬計算機系統(簡稱為虛擬機,也就是上面所稱的客戶機)都擁有自己的虛擬硬件,如CPU、內存和設備等,并提供一個獨立的虛擬機執行環境。通過虛擬機監控器(Virtual Machine Monitor,簡稱為VMM,也可以稱為Hypervisor)的模擬,虛擬機中的操作系統(Guest OS,客戶機操作系統)會認為自己仍然是獨占一個系統來運行的。在一臺物理計算機上運行的每臺虛擬機中的操作系統可以是完全不同的,并且它們的執行環境是完全獨立的。

3.1.1 虛擬化的實現方式

按照實現方式,當前主流的虛擬化可以分為以下兩種。

· VMM直接運行在硬件平臺上,控制所有硬件并管理客戶機操作系統。客戶機操作系統運行在比VMM更高級別的硬件平臺上。這個模型也是虛擬化歷史里的經典模型,很多著名虛擬機都是根據這個模型來實現的,如Xen。

· VMM運行在一個傳統的操作系統里(第一軟件層),可以被看作第二軟件層,而客戶機操作系統則是第三軟件層。KVM和VirtualBox就采用這種實現方式。

虛擬化的兩種實現方式的具體區別如圖3-3所示。

img

圖3-3 虛擬化的兩種實現方式的具體區別

按照VMM所提供的虛擬平臺類型又可以將VMM分為兩類。

1.完全虛擬化(Full Virtualization)

VMM虛擬的是現實中存在的平臺,并且在客戶機操作系統看來,虛擬平臺和現實平臺是一樣的,客戶機操作系統感覺不到自己運行在一個虛擬平臺上,現有的操作系統無須進行任何修改就可以運行在這樣的虛擬平臺上,因此這種方式被稱為完全虛擬化。

在完全虛擬化中,VMM需要正確處理客戶機操作系統所有可能的行為,或者說正確處理所有可能的指令,因為客戶機操作系統會像正常的操作系統一樣去操作虛擬處理器、虛擬內存和虛擬外設。從實現方式來說,完全虛擬化經歷了兩個階段:軟件輔助的完全虛擬化與硬件輔助的完全虛擬化。

在x86虛擬化技術的早期,x86體系并沒有在硬件層次上對虛擬化提供支持,因此完全虛擬化只能通過軟件實現。一種典型的做法是優先級壓縮(Ring Compression)和二進制代碼翻譯(Binary Translation)相結合。

優先級壓縮的原理是:將VMM和客戶機的優先級放到同一個CPU中運行,對應于x86架構,通常是VMM在Ring 0,客戶機操作系統內核在Ring 1,客戶機操作系統應用程序在Ring 3。當客戶機操作系統的內核執行特權指令時,由于VMM處在非特權的Ring 1,這些特權指令通常會觸發異常,VMM在截獲后就可以進行特權指令的虛擬化。但是x86指令體系在設計之初并沒有考慮到虛擬化,一小部分特權指令在Ring 1中并沒有觸發異常,VMM也就不能截獲這些特權指令來進行虛擬化。所以這些特權指令不能通過優先級壓縮來進行虛擬化。

因此,二進制代碼翻譯被引入,用來處理這些虛擬化不友好的指令,即通過掃描并修改客戶機的二進制代碼,將難以虛擬化的指令轉化為支持虛擬化的指令。VMM通常會對操作系統的二進制代碼進行掃描,一旦發現虛擬化不友好的指令,就將其替換成支持虛擬化的指令塊(Cache Block)。這些指令塊可以與VMM合作訪問受限的虛擬資源,或者顯式地觸發異常,讓VMM進一步處理。

雖然優先級壓縮和二進制代碼翻譯能夠實現完全虛擬化,但是這種打補丁的方式很難在架構上保證其完整性。因此,x86廠商在硬件上加入了對虛擬化的支持,從而在硬件架構上實現了虛擬化。

對于很多問題而言,如果在本身的層次上難以解決,就可以增加一個層次,使其在下面一個層次變得容易解決。硬件輔助的完全虛擬化就是這樣一種方式,既然操作系統已經是硬件之上的底層系統軟件,則如果在硬件本身加入足夠的虛擬化功能,就可以截獲操作系統對敏感指令的執行或者對敏感資源的訪問,從而通過異常的方式報告給VMM,這樣就解決了虛擬化的問題。

英特爾的VTx技術是這一方式的代表。VTx技術在處理器上引入了一個新的執行模式用于運行虛擬機。當虛擬機運行在這個特殊模式下時,它仍然面對一套完整的處理器、寄存器和執行環境,只是任何特權操作都會被處理器截獲并報告給VMM。而VMM本身運行在正常模式下,在接收到處理器的報告后,就會通過對目標指令的解碼,找到相應的虛擬化模塊進行模擬,并把最終的效果反映在特殊模式的環境中。

硬件輔助的虛擬化是一種完備的虛擬化方式,因為內存和外設的訪問本身是由指令來承載的,對處理器指令級別的截獲就意味著VMM可以模擬一個與真實主機完全一樣的環境。在這個環境中,任何操作系統只要可以在現實中的等同主機上運行,就可以在這個虛擬機環境中運行。

2.類虛擬化(Para-Virtualization)

第二類VMM虛擬出的平臺是現實中不存在的,是經過VMM重新定義的。這樣的虛擬平臺需要對所運行的客戶機操作系統進行或多或少的修改,使之適應虛擬環境,客戶機操作系統知道自己運行在虛擬平臺上,并且會主動適應。這種方式被稱為類虛擬化。

類虛擬化通過在源碼級別修改指令,以回避虛擬化漏洞的方式使VMM能夠對物理資源實現虛擬化。對于x86中難以虛擬化的指令,完全虛擬化通過Binary Translation在二進制代碼級別上避免虛擬化漏洞,類虛擬化采取的是另一種思路,即修改操作系統內核的代碼,使得操作系統內核完全避免這些難以虛擬化的指令。既然內核代碼已經需要修改,類虛擬化就可以進一步優化I/O。也就是說,類虛擬化不會去模擬真實世界中的設備,因為太多的寄存器模擬會降低性能。相反,類虛擬化可以自定義高度優化的I/O協議。這種I/O協議完全基于事務,可以達到近似于物理機的性能。

3.1.2 虛擬化的現狀和未來

虛擬化自20世紀60年代誕生以來,一直飛速發展。尤其是近年來,IT管理技術和云計算的大規模應用對虛擬化提出了更高的要求,也促使硬件廠商、軟件提供商使用更新的技術來提高虛擬化的安全、性能,從而產生了更多的應用場景。

1.虛擬化技術的發展

虛擬化中的核心技術,如CPU虛擬化、內存虛擬化、I/O虛擬化和網絡虛擬化都經歷了前面所提到的革新:由基于軟件的虛擬化全面轉向硬件輔助虛擬化。

1)CPU虛擬化

早先的CPU虛擬化由于硬件的限制,必須將客戶機操作系統中的特權指令替換成可以嵌入VMM的指令,從而讓VMM接管并進行相應的模擬工作,最后返回到客戶機操作系統中。這種做法性能差,工作量大,容易引起Bug。英特爾的VTx技術對現有的CPU進行了擴展,引入了特權級別和非特權級別,從而極大地簡化了VMM的實現。

2)內存虛擬化

內存虛擬化的目的是給客戶機操作系統提供一個從零開始的、連續的物理內存空間,并且在各個虛擬機之間進行有效的隔離。

客戶機物理地址空間并不是真正的物理地址空間,它和宿主機的物理地址空間還有一層映射關系。內存虛擬化需要通過兩次地址轉換來實現,即GVA(Guest Virtual Address,客戶機虛擬地址)到GPA(Guest Physical Address,客戶機物理地址)再到HPA(Host Physical Address,宿主機物理地址)的轉換。

其中,GVA到GPA的轉換是由客戶機軟件決定的,通常由客戶機看到的CR3指向的頁表來指定;GPA到HPA的轉換則是由VMM決定的。VMM在將物理內存分配給客戶機時就確定了GPA到HPA的轉換,并將這個映射關系記錄到內部數據結構中。

原有的x86架構只支持一次地址轉換,即通過CR3指定的頁表來實現客戶機虛擬地址到客戶機物理地址的轉換,這無法滿足虛擬化對兩次地址轉換的要求。因此原先的內存虛擬化就必須將兩次轉換合并為一次轉換來解決這個問題,即VMM根據GVA到GPA再到HPA的映射關系,得到GVA到HPA的映射關系,并將其寫入所謂的“影子頁表”(Shadow Page Table)。盡管影子頁表實現了傳統的內存虛擬化,但是其實現非常復雜,內存開銷很大,性能也會受到影響。

為了解決影子頁表的局限性,英特爾的VTx技術提供了EPT(Extended Page Table)技術,直接在硬件上支持GVA/GPA/HPA的兩次地址轉換,大大降低了內存虛擬化的難度,提高了相關性能。此外,為了進一步提高TLB的使用效率,VTx技術還引入了VPID(Virtual Processor ID)技術,進一步優化了內存虛擬化的性能。

3)I/O虛擬化

傳統的I/O虛擬化方法主要有“設備模擬”和“類虛擬化”。前者通用性強,但性能不理想;后者性能不錯,但缺乏通用性。如果要兼顧通用性和高性能,最好的方法就是讓客戶機直接使用真實的硬件設備。這樣客戶機的I/O操作路徑幾乎和沒有虛擬機的環境下的相同,從而可以獲得幾乎相同的性能。因為這些是真實存在的設備,客戶機可以使用自帶的驅動程序去發現并使用它們,通用性的問題也就得以解決。但是客戶機直接操作硬件設備需要解決以下兩個問題。

· 如何讓客戶機直接訪問設備真實的I/O地址空間(包括I/O端口和MMIO)。

· 如何讓設備的DMA操作直接訪問客戶機的內存空間。因為無論當前運行的是虛擬機還是真實操作系統,設備都會用驅動提供給它的物理地址進行DMA操作。

VTx技術已經解決了第一個問題,允許客戶機直接訪問物理的I/O空間。英特爾的VTd技術則解決了第二個問題,它提供了DMA重映射(Remapping)技術,以幫助VMM的實現者達到目的。

VTd技術通過在北橋引入DMA重映射硬件來提供設備重映射和設備直接分配的功能。在啟用VTd技術的平臺上,設備的所有DMA傳輸都會被DMA重映射硬件截獲,然后根據設備對應的I/O頁表,對DMA中的地址進行轉換,使設備只能訪問限定的內存。這樣,設備就可以被直接分配給客戶機使用,并且驅動提供給設備的GPA經過重映射會變為HPA,使得DMA操作可以順利完成。

4)網絡虛擬化

早期的網絡虛擬化都是通過重新配置宿主機的網絡拓撲結構來實現的,比如,將宿主機的網絡接口和代表客戶機的網絡接口配置在一個橋接(Bridge)下面,可以使客戶機擁有獨立的MAC地址,并且在網絡中就像一個真正的物理機一樣。但是這種方法增加了宿主機網絡驅動的負擔,降低了系統性能。

VTd技術可以將一個網卡直接分配給客戶機使用,從而達到和物理機一樣的性能。但是它的可擴展性比較差,因為一個物理網卡只能被分配給一個客戶機,而且服務器能夠支持的PCI設備數是有限的,遠遠不能滿足越來越多的客戶機數量。因此,SRIOV(Single Root I/O Virtualization)被引入,用來解決上述問題。

SRIOV是PCIe(PCI Express)規范的一個擴展,定義了本質上可以共享的新型設備。它允許一個PCIe設備,通常是網卡,可以為每個與其連接的客戶機復制一份資源(如內存空間,中斷和DMA數據流),使得數據處理可以不再依賴VMM。SRIOV定義了以下兩種Function的類別。

· PF(Physical Function):完整的PCIe Function,定義了SRIOV的能力,用于配置和管理SRIOV。

· VF(Virtual Function):輕量級的PCIe Function,只包括了進行數據處理(Data Movement)的必要資源,會與PF或其他VF共享另外的物理資源,可以被看作設備的一個虛擬化實例。

在虛擬化的環境下,一個VF會被當作一個虛擬網卡分配給客戶機操作系統,所有的VF和PF會被連接在SRIOV網卡內部的一個橋接(Bridge)中,這樣各個VF的通信可以互不干擾,網絡數據流也繞開了原先的VMM中的軟件交換機實現,并且直接在VF和客戶機操作系統間傳遞。因此,這種方式消除了原來的軟件模擬層,達到了幾乎和非虛擬化環境一樣的網絡性能。具體的使用可以參考如圖3-4所示的VTd實現。

img

圖3-4 VTd實現

5)GPU虛擬化

GPU虛擬化的常用方法如圖3-5所示。

img

圖3-5 GPU虛擬化的常用方法

設備模擬(Device Emulation)是最傳統的方法,QEMU就是典型代表。它模擬了一個比較簡單的VGA設備模型,可以截獲客戶機操作系統對VGA設備的操作,然后利用宿主機上的圖形庫繪制最終的顯示結果。即使繪制最簡單的圖形,也要經過多次客戶機、宿主機間的通信,而且沒有硬件幫助進行加速,所以性能很差。

分離驅動模型(Split Driver Model)類似于前面提到的“類虛擬化”驅動,只是它工作在API的層面。前端驅動(Front End Driver)將客戶機操作系統的DirectX/OpenGL調用轉發到宿主機的后端驅動(Back End Driver)。后端驅動就像一個在宿主機上運行的3D程序一樣,可以進行繪制工作。這種方法可以利用宿主機的DirectX/OpenGL實現硬件加速,但是只能針對特定的API加速,對宿主機、客戶機和運行其中的3D程序會有各種限制。

直接分配(Direct Pass-Through)基于前面提到的VTd或SRIOV等技術,直接將一個硬件分配給客戶機操作系統使用。VTd技術可以將整個PCI顯卡分配給客戶機使用,性能很好,但是可擴展性較差。SRIOV標準使得PCI設備在本質上可以在各個客戶機之間共享,但是由于顯示硬件過于復雜,眾多廠商不愿意在顯卡中實現SRIOV的擴展。

中介分配(Mediated Pass-Through)是對直接分配的一種改進形式,允許每臺虛擬機訪問部分的顯示設備資源,而無須經過VMM的任何干涉。但對于特權操作,需要引入新的軟件模塊作為中介(Mediator)來進行相關模擬工作。中介分配保留了直接分配的高性能,并且避免了SRIOV實現的硬件復雜性,是一種比較成熟的解決方案。英特爾的GVT-g(Graphics Virtualization Technology)就是這種方法的典型代表。

(1)Intel XenGT。

XenGT是由Intel GVT-g的Xen實現的,架構如圖3-6所示。

img

圖3-6 XenGT架構

客戶機操作系統不需要進行任何改動,原有的圖形驅動就可以直接工作,并且達到很好的性能。對于部分關乎性能的重要資源,客戶機可以不經過VMM而直接訪問。但特權操作會被Xen截獲,并且轉發到中介(Mediator)。中介會為每臺客戶機創建一個虛擬的GPU上下文(Context),并在其中模擬特權操作。當VM發生切換時,中介也會切換GPU上下文。XenGT會將中介的實現放在Dom0中,這樣就可以避免在VMM里面增加復雜的設備邏輯,從而減輕了發布時的工作量。

目前XenGT已經開始了對Xen的集成,相信在不久的將來,Xen的用戶就可以享受到使用一臺客戶機進行3D運算,使用另一臺客戶機運行3D游戲的樂趣。

(2)Intel KVMGT。

KVMGT是由Intel GVT-g的KVM實現的,KVMGT只支持英特爾的GPU,并且從Haswell就開始支持,其架構如圖3-7所示。

img

圖3-7 KVMGT架構

2.虛擬化引入的新特性

1)動態遷移

動態遷移是虛擬化的新特性,它將一臺虛擬機從一臺物理機快速遷移到另一臺物理機,但是虛擬機里面的程序和網絡都會保持連接。從用戶的角度來看,動態遷移對虛擬機的可用性沒有任何影響,不會令用戶察覺任何的服務中斷,如圖3-8所示。

img

圖3-8 動態遷移

動態遷移的最大好處就是提高服務器的可維護性。當用戶察覺到即將發生硬件故障時,可以把虛擬機動態遷移到其他機器,從而避免服務中斷。另外,動態遷移也可以用于負載均衡。比如,當各個服務器之間的CPU利用率差別過大時,或者當用戶訪問量較少時,可以將所有的虛擬機通過動態遷移集中到幾個服務器上,然后把其他服務器關掉以節省電力。

動態遷移的實現方法是在目的服務器上建立一臺同樣配置的新虛擬機,然后不斷地在兩臺虛擬機之間同步各種內部狀態,如內存、外設、CPU等。在狀態同步完成后,關掉舊的虛擬機,啟動新的虛擬機。

實現的難度在于內存的同步:一是因為內存很大,不可能在可以接受的宕機時間內迅速同步到目的虛擬機,必須迭代進行;二是因為在每次迭代過程中,客戶機操作系統又會寫內存,造成新的“臟頁”,需要重新同步。因此需要一個方法來確定“臟頁”,并以最高效的迭代算法同步到目的虛擬機。

常見的虛擬機實現都會提供一個Log Dirty機制,用來記錄哪些內存頁被寫過。每次迭代都會查看上次到現在所產生的“臟頁”,并跳過它們,留到下次迭代再傳送。在通常情況下,這是一個收斂的過程,“臟頁”會越來越少,當達到一定的標準,比如,“臟頁”占據的內存空間小于總內存空間的1%,迭代次數已經超過多少次或者遷移的時間已經太久等,就會暫停虛擬機,然后把剩余的“臟頁”和虛擬機的其他狀態一起傳送到目的虛擬機。

如果動態遷移的虛擬機擁有VTd設備,則遷移不可能成功。這是因為不能保證目的物理機也有完全一樣的設備。即使有這樣的設備,也不能保證可以完整地保存、恢復設備狀態,從而在兩臺設備之間做到完美的同步。針對VTd的網卡,英特爾利用OS內部的Bonding Driver和Hotplug機制,提供了一套軟件的解決方案。

Bonding Driver可以將多個網卡綁定成一個網絡接口,提供一些高級功能,如熱備份,當一個網卡失效,網絡接口可以自動切換到另一個,從而保證網絡連接的通暢。VTd網卡的動態遷移,就是事先在客戶機操作系統中將VTd網卡綁定在一個熱備份的Bonding接口下,并且使用一個虛擬網卡作為熱備份。在遷移前,通過一個hot remove(熱插拔)的操作將VTd網卡移除,使Bonding接口自動切換到虛擬網卡,就可以進行動態遷移了。在遷移成功后,再hot add(熱添加)一個VTd的網卡到目的虛擬機中,并將其加入Bonding接口中作為默認的網卡。這樣就巧妙地實現了VTd網卡的動態遷移。

2)虛擬機快照(Snapshot)

虛擬機快照,即在某一時刻把虛擬機的狀態像照片一樣保存下來。通常快照需要保存所有的硬盤信息、內存信息和CPU信息。虛擬機快照可以便捷地產生一套同樣的虛擬機環境,因此被廣泛地應用于測試、備份和安全等各種場景。

3)虛擬機克隆

虛擬機克隆,即把一臺虛擬機的狀態完全不變地復制到另一臺虛擬機中,形成兩個完全相同的系統,并且它們可以同時運行。為了達到同時運行的目的,新虛擬機的某些配置,如MAC地址,可能需要改動以避免和舊虛擬機的沖突。

如今的數據中心都由數以萬計的機器組成,所以部署工作需要耗費大量的時間和精力。有了虛擬機克隆技術,則只需要先安裝、配置好一臺虛擬機,然后將其克隆到其他數以萬計的虛擬機中即可,大大減少了整個數據中心的安裝和配置時間。

4)P2V(Physical to Virtual Machine)

P2V,即將一個物理服務器的操作系統、應用程序和數據從物理硬盤遷移到一臺虛擬機的硬盤鏡像中。P2V技術極大地降低了服務器虛擬化的使用門檻,使得用戶可以方便地將現有的物理機轉化成虛擬機,從而使用各種虛擬機相關技術進行管理。

3.典型的虛擬化產品

虛擬化經過多年的發展,已經出現了很多成熟的產品,其應用也從最初的服務器擴展到了桌面等更為廣泛的領域。下面介紹幾種典型的虛擬化產品及其特點。

1)VMware

VMware是x86虛擬化軟件的主流廠商之一,成立于1998年,并于2003年被EMC收購。VMware提供了一系列的虛擬化產品,從服務器到桌面,可以運行于包括Windows、Linux和macOS在內的各種平臺。近年來,VMware的產品線延伸到數據中心和云計算等方面,形成了各個層次、各個領域的全覆蓋。VMware的虛擬化產品主要包括以下幾種。

· VMware ESX Server:VMware的旗艦產品,基于Hypervisor模型(類型1 VMM),直接運行在物理硬件上,無須操作系統,在性能和安全方面得到了全面的優化。

· VMware Workstation:面向桌面的主打產品,基于宿主模型(類型2 VMM),宿主機操作系統可以是Windows或Linux。由于它支持完全虛擬化,因此可以使用各種客戶機操作系統,包括Windows、Linux、Solaris和FreeBSD。

· VMware Fusion:面向桌面的一款產品,功能和VMware Workstation基本相同,但是VMware Fusion的宿主機操作系統是macOS,并且有很多針對macOS的優化。

VMware產品具有很多優點,如下所述。

· 功能豐富。很多新的虛擬化功能都是最先由VMware開發的。

· 配置和使用方便。VMware開發了非常易于使用的配置工具和用戶界面。

· 穩定,適合企業級應用。VMware產品非常成熟,很多企業選擇使用VMware ESX Server來運行關鍵應用。

2)Microsoft

微軟在虛擬化方面起步比VMware晚,但在認識到虛擬化的重要性之后,微軟通過外部收購和內部開發,推出了一系列產品,涵蓋了用戶狀態(User State)虛擬化、應用程序(Applications)虛擬化和操作系統虛擬化。操作系統虛擬化產品主要包括面向桌面的Virtual PC和面向服務器的Virtual Server。這些產品的特點在于和Windows結合得非常好,在Windows下非常易于配置和使用。

3)Xen

Xen起源于英國劍橋大學的一個研究項目,并逐漸發展成一個開源軟件項目,吸引了許多公司和科研院所加入,發展非常迅速。

從技術角度來說,Xen基于混合模型,其特權操作系統(Domain 0或者說Dom0)具有類似于宿主機操作系統的很多管理功能,并通過其他非特權的虛擬機(DomU)運行用戶的程序。Xen最初是基于類虛擬化實現的,通過修改Linux內核,實現處理器和內存的虛擬化,通過引入I/O的前端/后端驅動(Front/Backend)架構實現設備的虛擬化。利用類虛擬化的優勢,Xen可以達到近似于物理機的性能,其構架如圖3-9所示。

img

圖3-9 Xen架構

隨著Xen社區的發展壯大,硬件完全虛擬化技術也被加入Xen中,如Intel VT和AMD-V,因此未加修改的操作系統也可以在Xen上面運行了。

Xen支持多種硬件平臺,官方的支持版本包括x86_32、x86_64、IA64、PowerPC和ARM架構。Xen目前已經比較成熟,基于Xen的虛擬化產品很多,如Ctrix、VirtualIron、Red Hat和Novell等都有相應的產品。

作為開源軟件,Xen的主要特點如下所述。

· 可移植性非常好,開發者可以將其移植到其他平臺,也可以將其修改并用于項目研究。

· 獨特的類虛擬化支持,提供了近似物理機的性能。但Xen的易用性和其他成熟的商業產品相比還有一定的差距,有待加強。

4)KVM

KVM(Kernel-based Virtual Machine)也是一款基于GPL的開源虛擬機軟件。它最早由Qumranet公司開發,在2006年10月出現在Linux內核的郵件列表上,并于2007年2月被集成到Linux 2.6.20內核中,成為內核的一部分。

KVM架構如圖3-10所示。它是基于Intel VT等技術的硬件虛擬化,并利用QEMU來提供設備虛擬化。此外,在Linux社區中已經發布了KVM的類虛擬化擴展。

img

圖3-10 KVM架構

從架構上看,KVM屬于宿主模型(類型2 VMM),因為Linux在設計之初并沒有針對虛擬化的支持模塊,所以KVM是以內核模塊的形式存在的。但是隨著越來越多的虛擬化功能被加入Linux內核中,也可以把Linux內核看作一個Hypervisor。因此KVM也可以被看作Hypervisor模型(類型1 VMM)。

主站蜘蛛池模板: 金山区| 五原县| 河东区| 正宁县| 绥滨县| 罗田县| 光泽县| 通许县| 昌邑市| 海阳市| 盘锦市| 台东市| 黄山市| 龙南县| 大田县| 永州市| 潜山县| 西宁市| 襄汾县| 东乡族自治县| 高青县| 平遥县| 左云县| 雷山县| 武夷山市| 徐州市| 瑞丽市| 禹城市| 白银市| 阿巴嘎旗| 平远县| 庆元县| 扬州市| 舟曲县| 新田县| 南投市| 虞城县| 武隆县| 资阳市| 读书| 尉犁县|