XEN與VMware ESXi、Hyper-V 以及 KVM 架構與特點比較
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
XEN 與 VMware ESXi,Hyper-V 以及 KVM 特點比較:
a.XEN 有簡化虛擬模式,不需要設備驅動,能夠保證每個虛擬用戶系統相互獨立,依賴於 service domains 來完成一些功能;
b.Vmware ESXI 與 XEN 比較類似,包含設備驅動以及管理棧等基本要素,硬件支持依賴於 VMware 創建的驅動;
c.Hyper-V 是基於 XEN 管理棧的修改;
d.KVM 與 XEN 方式不同,KVM 是以 Linux 內核作為管理工具的。
虛擬機的體系結構
1.XEN 體系結構
圖 1. XEN 體系結構圖
一個 XEN 虛擬機環境主要由以下幾部分組成:
XEN Hypervisor;
Domain 0 —— Domain Management and Control(XEN DM&C);
Domain U Guest(Dom U)
a. PV Guest
b. HVM Guest
下圖 2 顯示除了各部分之間的關系:
圖 2. Xen 三部分組成之間關系圖
XEN Hypervisor :
XEN Hypervisor 是介於操作系統和硬件之間的一個軟件描述層。它負責在各個虛擬機之間進行 CPU 調度和內存分配。XEN Hypervisor 不僅抽象出虛擬機的硬件,同時還控制着各個虛擬機的執行。XEN Hypervisor 不會處理網絡、存儲設備、視頻以及其他 I/O.
Domain 0:
Domain 0 是一個修改過的 Linux kernel,是唯一運行在 Xen Hypervisor 之上的虛擬機,它擁有訪問物理 I/O 資源的權限,同時和系統上運行的其他虛擬機進行交互。Domain 0 需要在其它 Domain 啟動之前啟動。
Domain U:
運行在 Xen Hypervisor 上的所有半虛擬化(paravirtualized)虛擬機被稱為“Domain U PV Guests”,其上運行着被修改過內核的操作系統,如 Linux、Solaris、FreeBSD 等其它 UNIX 操作系統。所有的全虛擬化虛擬機被稱為“Domain U HVM Guests”,其上運行着不用修改內核的操作系統,如 Windows 等。
2.Hyper-V 體系結構
圖 3. Hyper-V 體系結構圖
Hyper-V 是微軟提出的一種系統管理程序虛擬化技術,采用微內核的架構,兼顧了安全性和性能的要求。Hyper-V 底層的 Hypervisor 運行在最高的特權級別下,微軟將其稱為 ring -1(而 Intel 則將其稱為 root mode),而虛機的 OS 內核和驅動運行在 ring 0,應用程序運行在 ring 3 下,這種架構就不需要采用復雜的 BT(二進制特權指令翻譯)技術,可以進一步提高安全性。從架構上講 Hyper-V 只有“硬件-Hyper-V-虛擬機”三層,本身非常小巧,代碼簡單,且不包含任何第三方驅動,所以安全可靠、執行效率高,能充分利用硬件資源,使虛擬機系統性能更接近真實系統性能。
Hyper-V 支持分區層面的隔離。分區是邏輯隔離單位,受虛擬機監控程序支持,並且操作系統在其中執行。Microsoft 虛擬機監控程序必須至少有一個父 / 根分區,用於運行 64 位版本的 Windows Server 2008 操作系統。虛擬化堆棧在父分區中運行,並且可以直接訪問硬件設備。隨后,根分區會創建子分區用於承載來賓操作系統。根分區使用虛擬化調用應用程序編程接口 (API) 來創建子分區。
分區對物理處理器沒有訪問權限,也不能處理處理器中斷。相反,它們具有處理器的虛擬視圖,並運行於每個來賓分區專用的虛擬內存地址區域。虛擬機監控程序負責處理處理器中斷,並將其重定向到相應的分區。Hyper-V 還可以通過輸入輸出內存管理單元 (IOMMU) 利用硬件加速來加快各個來賓虛擬地址空間相互之間的地址轉換。IOMMU 獨立於 CPU 使用的內存管理硬件運行,並用於將物理內存地址重新映射到子分區使用的地址。從系統的結構圖,我們可以看出來 Hyper-V 與 Xen 的架構很相似。
a.Vmware ESXI 體系結構
圖 4. Vmware ESXI 體系結構圖
由上圖我們可以看出來管理工具也是直接嵌入到了 ESXi vmKernel 中,沒有再分化出單獨的管理工具,這一點與 Xen 是相區別的。
a.KVM 體系結構
圖 5. KVM 體系結構圖
KVM 是一個獨特的管理程序,通過將 KVM 作為一個內核模塊實現,在虛擬環境下 Linux 內核集成管理程序將其作為一個可加載的模塊可以簡化管理和提升性能。在這種模式下,每個虛擬機都是一個常規的 Linux 進程,通過 Linux 調度程序進行調度。
通過以上四種虛擬機的體系結構圖,我們可以看出他們在整個系統中的位置,以及相互之間的區別。
--------------------------------------------------------------------------------
XEN 工作原理
上面我們針對 Xen 的體系結構進行了簡單的描述,我們知道 Xen 主要由 Xen Hypervisor,Domain0,DomainU 三部分組成。下面通過 Domain 0 與 Domain U 的通信以及這三部分的交互來探討一下 Xen 的工作原理。
之前我們已經提到過 Domain U 分為 PV 客戶系統和 HVM 客戶系統兩種,我們首先討論一下 PV 客戶系統,也就是半虛擬化操作系統工作原理。
首先我們需要知道在 Domain 0 中有兩個驅動 Network Backend Driver 和 Block Backend Driver,它們分別用來處理來自 Domain U 的網絡和本地磁盤請求。由於 Xen Hypervisor 不會支持網絡和磁盤請求的,因此一個 PV(半虛擬化)客戶系統必須通過和 Xen Hypervisor、Domain 0 通信,從而來實現網絡和磁盤請求。由於 Xen 文檔中已經探討過 PV 客戶系統如何將一個數據寫到本地硬盤,下面我們就來討論一下 PV 客戶系統如何將一個數據發送到網絡中去。在這之前我們首先要了解到一點,那就是 Domain U PV Guest 中也包括兩個驅動“PV Network Driver”和“PV Block Driver”,它們分別也是用來處理發送網絡和本地磁盤請求用的,這與 Domain 0 中的兩個驅動是相對應的。
當一個 PV 客戶系統的網絡設備驅動程序接收到一個發送數據請求的時候,並且通過 Xen Hypervisor 發送數據到本地網絡設備(網卡之類的設備)中,這個網絡設備是和 Domain 0 共享的。在 Domain 0 和 Domain U 之間存在一個事件通道(event channel),通過該通道二者進行異步的域間中斷通信。Domain 0 會接收到一個來自 Xen Hypervisor 的中斷,觸發 PV Network Backend Driver 訪問上述網絡設備,讀取來自 PV 客戶系統的數據,然后將這些數據發送出去。
下圖中事件通道表示為連接 Domain 0 與 Domain U 的一個區域,這是系統工作流的一個簡化。事實上事件通道運行在 Xen Hypervisor 中,通過 Xenstored(Xenstored 維護一個信息檔案,包括內存和建立在 Domain 0 與 Domain U 之間的事件通道。Domain 0 通過改變這個檔案來設置和其他虛擬機的設備通道)中的特定中斷實現,提供 Domain 0 與 Domain U 之間的快速共享網絡設備,見圖6。
圖 6. Domain 0 與 Domain U PV Guest 通信示意圖
上面我們已經分析了 PV 客戶系統的工作原理,下面我們再簡要的介紹一下 HVM 客戶系統的工作原理。
由於一個 HVM Guests 虛擬機中沒有上面提到得 PV driver,所以 Xen 在 Domain 0 中為每一個 HVM Guest 都啟動一個守護進程 Qemu-dm 處理來自客戶系統的網絡和磁盤請求,所以當一個 HVM Guest 有相應的網絡和 I/O 請求的時候,它就會直接與 Domain0 中和它相對應的 Qemu-dm 來進行交互,通過 Domain 0 最終達到訪問網絡設備或者磁盤的目的。見下圖 7:
圖 7. Domain 0 與 Domain U HVM Guest 通信示意圖
a.XEN 有簡化虛擬模式,不需要設備驅動,能夠保證每個虛擬用戶系統相互獨立,依賴於 service domains 來完成一些功能;
b.Vmware ESXI 與 XEN 比較類似,包含設備驅動以及管理棧等基本要素,硬件支持依賴於 VMware 創建的驅動;
c.Hyper-V 是基於 XEN 管理棧的修改;
d.KVM 與 XEN 方式不同,KVM 是以 Linux 內核作為管理工具的。
虛擬機的體系結構
1.XEN 體系結構
圖 1. XEN 體系結構圖

一個 XEN 虛擬機環境主要由以下幾部分組成:
XEN Hypervisor;
Domain 0 —— Domain Management and Control(XEN DM&C);
Domain U Guest(Dom U)
a. PV Guest
b. HVM Guest
下圖 2 顯示除了各部分之間的關系:
圖 2. Xen 三部分組成之間關系圖

XEN Hypervisor :
XEN Hypervisor 是介於操作系統和硬件之間的一個軟件描述層。它負責在各個虛擬機之間進行 CPU 調度和內存分配。XEN Hypervisor 不僅抽象出虛擬機的硬件,同時還控制着各個虛擬機的執行。XEN Hypervisor 不會處理網絡、存儲設備、視頻以及其他 I/O.
Domain 0:
Domain 0 是一個修改過的 Linux kernel,是唯一運行在 Xen Hypervisor 之上的虛擬機,它擁有訪問物理 I/O 資源的權限,同時和系統上運行的其他虛擬機進行交互。Domain 0 需要在其它 Domain 啟動之前啟動。
Domain U:
運行在 Xen Hypervisor 上的所有半虛擬化(paravirtualized)虛擬機被稱為“Domain U PV Guests”,其上運行着被修改過內核的操作系統,如 Linux、Solaris、FreeBSD 等其它 UNIX 操作系統。所有的全虛擬化虛擬機被稱為“Domain U HVM Guests”,其上運行着不用修改內核的操作系統,如 Windows 等。
2.Hyper-V 體系結構
圖 3. Hyper-V 體系結構圖

Hyper-V 是微軟提出的一種系統管理程序虛擬化技術,采用微內核的架構,兼顧了安全性和性能的要求。Hyper-V 底層的 Hypervisor 運行在最高的特權級別下,微軟將其稱為 ring -1(而 Intel 則將其稱為 root mode),而虛機的 OS 內核和驅動運行在 ring 0,應用程序運行在 ring 3 下,這種架構就不需要采用復雜的 BT(二進制特權指令翻譯)技術,可以進一步提高安全性。從架構上講 Hyper-V 只有“硬件-Hyper-V-虛擬機”三層,本身非常小巧,代碼簡單,且不包含任何第三方驅動,所以安全可靠、執行效率高,能充分利用硬件資源,使虛擬機系統性能更接近真實系統性能。
Hyper-V 支持分區層面的隔離。分區是邏輯隔離單位,受虛擬機監控程序支持,並且操作系統在其中執行。Microsoft 虛擬機監控程序必須至少有一個父 / 根分區,用於運行 64 位版本的 Windows Server 2008 操作系統。虛擬化堆棧在父分區中運行,並且可以直接訪問硬件設備。隨后,根分區會創建子分區用於承載來賓操作系統。根分區使用虛擬化調用應用程序編程接口 (API) 來創建子分區。
分區對物理處理器沒有訪問權限,也不能處理處理器中斷。相反,它們具有處理器的虛擬視圖,並運行於每個來賓分區專用的虛擬內存地址區域。虛擬機監控程序負責處理處理器中斷,並將其重定向到相應的分區。Hyper-V 還可以通過輸入輸出內存管理單元 (IOMMU) 利用硬件加速來加快各個來賓虛擬地址空間相互之間的地址轉換。IOMMU 獨立於 CPU 使用的內存管理硬件運行,並用於將物理內存地址重新映射到子分區使用的地址。從系統的結構圖,我們可以看出來 Hyper-V 與 Xen 的架構很相似。
a.Vmware ESXI 體系結構
圖 4. Vmware ESXI 體系結構圖

由上圖我們可以看出來管理工具也是直接嵌入到了 ESXi vmKernel 中,沒有再分化出單獨的管理工具,這一點與 Xen 是相區別的。
a.KVM 體系結構
圖 5. KVM 體系結構圖

KVM 是一個獨特的管理程序,通過將 KVM 作為一個內核模塊實現,在虛擬環境下 Linux 內核集成管理程序將其作為一個可加載的模塊可以簡化管理和提升性能。在這種模式下,每個虛擬機都是一個常規的 Linux 進程,通過 Linux 調度程序進行調度。
通過以上四種虛擬機的體系結構圖,我們可以看出他們在整個系統中的位置,以及相互之間的區別。
--------------------------------------------------------------------------------
XEN 工作原理
上面我們針對 Xen 的體系結構進行了簡單的描述,我們知道 Xen 主要由 Xen Hypervisor,Domain0,DomainU 三部分組成。下面通過 Domain 0 與 Domain U 的通信以及這三部分的交互來探討一下 Xen 的工作原理。
之前我們已經提到過 Domain U 分為 PV 客戶系統和 HVM 客戶系統兩種,我們首先討論一下 PV 客戶系統,也就是半虛擬化操作系統工作原理。
首先我們需要知道在 Domain 0 中有兩個驅動 Network Backend Driver 和 Block Backend Driver,它們分別用來處理來自 Domain U 的網絡和本地磁盤請求。由於 Xen Hypervisor 不會支持網絡和磁盤請求的,因此一個 PV(半虛擬化)客戶系統必須通過和 Xen Hypervisor、Domain 0 通信,從而來實現網絡和磁盤請求。由於 Xen 文檔中已經探討過 PV 客戶系統如何將一個數據寫到本地硬盤,下面我們就來討論一下 PV 客戶系統如何將一個數據發送到網絡中去。在這之前我們首先要了解到一點,那就是 Domain U PV Guest 中也包括兩個驅動“PV Network Driver”和“PV Block Driver”,它們分別也是用來處理發送網絡和本地磁盤請求用的,這與 Domain 0 中的兩個驅動是相對應的。
當一個 PV 客戶系統的網絡設備驅動程序接收到一個發送數據請求的時候,並且通過 Xen Hypervisor 發送數據到本地網絡設備(網卡之類的設備)中,這個網絡設備是和 Domain 0 共享的。在 Domain 0 和 Domain U 之間存在一個事件通道(event channel),通過該通道二者進行異步的域間中斷通信。Domain 0 會接收到一個來自 Xen Hypervisor 的中斷,觸發 PV Network Backend Driver 訪問上述網絡設備,讀取來自 PV 客戶系統的數據,然后將這些數據發送出去。
下圖中事件通道表示為連接 Domain 0 與 Domain U 的一個區域,這是系統工作流的一個簡化。事實上事件通道運行在 Xen Hypervisor 中,通過 Xenstored(Xenstored 維護一個信息檔案,包括內存和建立在 Domain 0 與 Domain U 之間的事件通道。Domain 0 通過改變這個檔案來設置和其他虛擬機的設備通道)中的特定中斷實現,提供 Domain 0 與 Domain U 之間的快速共享網絡設備,見圖6。
圖 6. Domain 0 與 Domain U PV Guest 通信示意圖

上面我們已經分析了 PV 客戶系統的工作原理,下面我們再簡要的介紹一下 HVM 客戶系統的工作原理。
由於一個 HVM Guests 虛擬機中沒有上面提到得 PV driver,所以 Xen 在 Domain 0 中為每一個 HVM Guest 都啟動一個守護進程 Qemu-dm 處理來自客戶系統的網絡和磁盤請求,所以當一個 HVM Guest 有相應的網絡和 I/O 請求的時候,它就會直接與 Domain0 中和它相對應的 Qemu-dm 來進行交互,通過 Domain 0 最終達到訪問網絡設備或者磁盤的目的。見下圖 7:
圖 7. Domain 0 與 Domain U HVM Guest 通信示意圖
