本篇文章所有資料均收集自網(wǎng)上,本文僅做了一下梳理和匯總。本文首先介紹了虛擬化技術(shù):全虛擬化和半虛擬化,然后介紹了KVM、Xen、Hyper-V、VMWARE EXSI的原理和架構(gòu),接著重點對KVM和Xen做了比較,并對兩者的未來發(fā)展提供了一些業(yè)界人士的觀點,最后對Google、Amazon、IBM、Microsoft的云計算產(chǎn)品進行了介紹。
一、虛擬化技術(shù):全虛擬化、半虛擬化
1. 全虛擬化(Full Virtualization)
全虛擬化也成為原始虛擬化技術(shù),該模型使用虛擬機協(xié)調(diào)guest操作系統(tǒng)和原始硬件,VMM在guest操作系統(tǒng)和裸硬件之間用于工作協(xié)調(diào),一些受保護指令必須由Hypervisor(虛擬機管理程序)來捕獲處理。
全虛擬化模型
全虛擬化的運行速度要快于硬件模擬,但是性能方面不如裸機,因為Hypervisor需要占用一些資源
2. 半虛擬化(Para Virtualization)
半虛擬化是另一種類似于全虛擬化的技術(shù),它使用Hypervisor分享存取底層的硬件,但是它的guest操作系統(tǒng)集成了虛擬化方面的代碼。該方法無需重新編譯或引起陷阱,因為操作系統(tǒng)自身能夠與虛擬進程進行很好的協(xié)作。
半虛擬化模型
半虛擬化需要guest操作系統(tǒng)做一些修改,使guest操作系統(tǒng)意識到自己是處于虛擬化環(huán)境的,但是半虛擬化提供了與原操作系統(tǒng)相近的性能。
二、KVM、Xen、Hyper-V、VMware EXSI原理和架構(gòu)
1. KVM
KVM全稱是Kernel-based Virtual Machine,即基于內(nèi)核的虛擬機。
KVM是集成到Linux內(nèi)核的Hypervisor,是X86架構(gòu)且硬件支持虛擬化技術(shù)(Intel VT或AMD-V)的Linux的全虛擬化解決方案。它是Linux的一個很小的模塊,利用Linux做大量的事,如任務(wù)調(diào)度、內(nèi)存管理與硬件設(shè)備交互等。
KVM虛擬化平臺架構(gòu)
KVM 是一個獨特的管理程序,通過將 KVM 作為一個內(nèi)核模塊實現(xiàn),在虛擬環(huán)境下 Linux 內(nèi)核集成管理程序?qū)⑵渥鳛橐粋€可加載的模塊可以簡化管理和提升性能。在這種模式下,每個虛擬機都是一個常規(guī)的 Linux 進程,通過 Linux 調(diào)度程序進行調(diào)度。
2. Xen
Xen 是第一類運行再裸機上的虛擬化管理程序(Hypervisor)。它支持全虛擬化和半虛擬化,Xen支持hypervisor和虛擬機互相通 訊,而且提供在所有Linux版本上的免費產(chǎn)品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。Xen最重要的優(yōu)勢在于半虛擬化,此外未經(jīng)修改的操作系統(tǒng)也可以直接在xen上運行(如Windows),能讓虛擬機有效運行而不需要仿 真,因此虛擬機能感知到hypervisor,而不需要模擬虛擬硬件,從而能實現(xiàn)高性能。
1)XEN 的發(fā)展與現(xiàn)狀
XEN 最初是作為劍橋大學的一個項目,目前 XEN.ORG 社區(qū)在負責它的開發(fā)及維護,它已經(jīng)在開源社區(qū)中得到了極大的發(fā)展。XEN 是一種直接運行在硬件上一層軟件,它可以讓電腦硬件上同時跑多個用戶的操作系統(tǒng)。由于對 x86, x86-64, Itanium, Power PC, 和 ARM 這些處理器的支持,所以 XEN 管理工具可以支持的操作系統(tǒng)有 Linux, NetBSD,F(xiàn)reeBSD,Solaris, Windows 和其他一些運行在 XEN 上的正常的操作系統(tǒng)。如下圖所示 XEN 在系統(tǒng)中的位置:
XEN 在系統(tǒng)的位置
Xen 目前具有以下幾種產(chǎn)品:
- Xen Hypervisor —— 后面會詳細講解,在此不作贅述。會導致轉(zhuǎn)換有問題;
- XCI —— 種嵌入式管理工具,基于 Xen Hypervisor 的基礎(chǔ)之上修改而來,相對于標準的 Xen Hypervisor,它使用的庫更小,目前主要用在筆記本以及一些移動設(shè)備上,可以使用 Intel 或者 AMD 的架構(gòu);
- Xen Cloud Platform —— 目前它為 ISVs 和服務(wù)提供商提供了一套基于強大的管理棧的云架構(gòu)平臺,這個棧是基于開放的標準 API;
- 還有一些 Xen.org 上的項目,再此就不一一列舉了。
2)XEN 體系結(jié)構(gòu)
XEN 體系結(jié)構(gòu)圖
一個 XEN 虛擬機環(huán)境主要由以下幾部分組成:
- XEN Hypervisor;
- Domain 0 —— Domain Management and Control(XEN DM&C);
- Domain U Guest(Dom U)
- PV Guest
- HVM Guest
下圖顯示除了各部分之間的關(guān)系:
Xen 三部分組成之間關(guān)系圖
- XEN Hypervisor :
XEN Hypervisor 是介于操作系統(tǒng)和硬件之間的一個軟件描述層。它負責在各個虛擬機之間進行 CPU 調(diào)度和內(nèi)存分配。XEN Hypervisor 不僅抽象出虛擬機的硬件,同時還控制著各個虛擬機的執(zhí)行。XEN Hypervisor 不會處理網(wǎng)絡(luò)、存儲設(shè)備、視頻以及其他 I/O.
- Domain 0:
Domain 0 是一個修改過的 Linux kernel,是唯一運行在 Xen Hypervisor 之上的虛擬機,它擁有訪問物理 I/O 資源的權(quán)限,同時和系統(tǒng)上運行的其他虛擬機進行交互。Domain 0 需要在其它 Domain 啟動之前啟動。
- Domain U:
運 行在 Xen Hypervisor 上的所有半虛擬化(paravirtualized)虛擬機被稱為“Domain U PV Guests”,其上運行著被修改過內(nèi)核的操作系統(tǒng),如 Linux、Solaris、FreeBSD 等其它 UNIX 操作系統(tǒng)。所有的全虛擬化虛擬機被稱為“Domain U HVM Guests”,其上運行著不用修改內(nèi)核的操作系統(tǒng),如 Windows 等。
3)XEN 工作原理
上面我們針對 Xen 的體系結(jié)構(gòu)進行了簡單的描述,我們知道 Xen 主要由 Xen Hypervisor,Domain0,DomainU 三部分組成。下面通過 Domain 0 與 Domain U 的通信以及這三部分的交互來探討一下 Xen 的工作原理。
- 之前我們已經(jīng)提到過 Domain U 分為 PV 客戶系統(tǒng)和 HVM 客戶系統(tǒng)兩種,我們首先討論一下 PV 客戶系統(tǒng),也就是半虛擬化操作系統(tǒng)工作原理。
首 先我們需要知道在 Domain 0 中有兩個驅(qū)動 Network Backend Driver 和 Block Backend Driver,它們分別用來處理來自 Domain U 的網(wǎng)絡(luò)和本地磁盤請求。由于 Xen Hypervisor 不會支持網(wǎng)絡(luò)和磁盤請求的,因此一個 PV(半虛擬化)客戶系統(tǒng)必須通過和 Xen Hypervisor、Domain 0 通信,從而來實現(xiàn)網(wǎng)絡(luò)和磁盤請求。由于 Xen 文檔中已經(jīng)探討過 PV 客戶系統(tǒng)如何將一個數(shù)據(jù)寫到本地硬盤,下面我們就來討論一下 PV 客戶系統(tǒng)如何將一個數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)中去。在這之前我們首先要了解到一點,那就是 Domain U PV Guest 中也包括兩個驅(qū)動“PV Network Driver”和“PV Block Driver”,它們分別也是用來處理發(fā)送網(wǎng)絡(luò)和本地磁盤請求用的,這與 Domain 0 中的兩個驅(qū)動是相對應的。
當一個 PV 客戶系統(tǒng)的網(wǎng)絡(luò)設(shè)備驅(qū)動程序接收到一個發(fā)送數(shù)據(jù)請求的時候,并且通過 Xen Hypervisor 發(fā)送數(shù)據(jù)到本地網(wǎng)絡(luò)設(shè)備(網(wǎng)卡之類的設(shè)備)中,這個網(wǎng)絡(luò)設(shè)備是和 Domain 0 共享的。在 Domain 0 和 Domain U 之間存在一個事件通道(event channel),通過該通道二者進行異步的域間中斷通信。Domain 0 會接收到一個來自 Xen Hypervisor 的中斷,觸發(fā) PV Network Backend Driver 訪問上述網(wǎng)絡(luò)設(shè)備,讀取來自 PV 客戶系統(tǒng)的數(shù)據(jù),然后將這些數(shù)據(jù)發(fā)送出去。
下圖中事件通道表示為連接 Domain 0 與 Domain U 的一個區(qū)域,這是系統(tǒng)工作流的一個簡化。事實上事件通道運行在 Xen Hypervisor 中,通過 Xenstored(Xenstored 維護一個信息檔案,包括內(nèi)存和建立在 Domain 0 與 Domain U 之間的事件通道。Domain 0 通過改變這個檔案來設(shè)置和其他虛擬機的設(shè)備通道)中的特定中斷實現(xiàn),提供 Domain 0 與 Domain U 之間的快速共享網(wǎng)絡(luò)設(shè)備,見下圖。
Domain 0 與 Domain U PV Guest 通信示意圖
- 上面我們已經(jīng)分析了 PV 客戶系統(tǒng)的工作原理,下面我們再簡要的介紹一下 HVM 客戶系統(tǒng)的工作原理。
由 于一個 HVM Guests 虛擬機中沒有上面提到得 PV driver,所以 Xen 在 Domain 0 中為每一個 HVM Guest 都啟動一個守護進程 Qemu-dm 處理來自客戶系統(tǒng)的網(wǎng)絡(luò)和磁盤請求,所以當一個 HVM Guest 有相應的網(wǎng)絡(luò)和 I/O 請求的時候,它就會直接與 Domain0 中和它相對應的 Qemu-dm 來進行交互,通過 Domain 0 最終達到訪問網(wǎng)絡(luò)設(shè)備或者磁盤的目的。見下圖:
Domain 0 與 Domain U HVM Guest 通信示意圖
Xen 虛擬機安裝后在查看虛擬機時會發(fā)現(xiàn)有一個Domain-0