宿主架構和裸金屬架構。在宿主架構中的虛擬機作為主機操作系統的一個進程來調度和管理,裸金屬架構下則不存在主機操作系統,它是以Hypervisor直接運行在物理硬件之上,即使是有類似主機操作系統的父分區或Domain 0,也是作為裸金屬架構下的虛擬機存在的。宿主架構通常用于個人PC上的虛擬化,如WindowsVirtual PC,VMware Workstation,VirtualBox,Qemu等,而裸金屬架構通常用于服務器的虛擬化,如文中提及的4種虛擬化技術。
ESX是VMware的企業級虛擬化產品,2001年開始發布ESX 1.0,到2011年2月發布ESX
4.1 Update 1。
ESX服務器啟動時,首先啟動Linux Kernel,通過這個操作系統加載虛擬化組件,最重要的是ESX的Hypervisor組件,稱之為VMkernel,VMkernel會從LinuxKernel完全接管對硬件的控制權,而該Linux Kernel作為VMkernel的首個虛擬機,用于承載ESX的serviceConsole,實現本地的一些管理功能。
VMkernel負責為所承載的虛擬機調度所有的硬件資源,但不同類型的硬件會有些區別。
虛擬機對于CPU和內存資源是通過VMkernel直接訪問,最大程度地減少了開銷,CPU的直接訪問得益于CPU硬件輔助虛擬化(Intel VT-x和AMD AMD-V,第一代虛擬化技術),內存的直接訪問得益于MMU(內存管理單元,屬于CPU中的一項特征)硬件輔助虛擬化(Intel EPT和AMD RVI/NPT,第二代虛擬化技術)。
虛擬機對于I/O設備的訪問則有多種方式,以網卡為例,有兩種方式可供選擇:一是利用I/O MMU硬件輔助虛擬化(Intel VT-d和AMD-Vi)的VMDirectPath I/O,使得虛擬機可以直接訪問硬件設備,從而減少對CPU的開銷;二是利用半虛擬化的設備VMXNETx,網卡的物理驅動在VMkernel中,在虛擬機中裝載網卡的虛擬驅動,通過這二者的配對來訪問網卡,與仿真式網卡(IntelE1000)相比有著較高的效率。半虛擬化設備的安裝是由虛擬機中VMware tool來實現的,可以在Windows虛擬機的右下角找到它。網卡的這兩種方式,前者有著顯著的先進性,但后者用得更為普遍,因為VMDirectPath I/O與VMware虛擬化的一些核心功能不兼容,如:熱遷移、快照、容錯、內存過量使用等。
ESX的物理驅動是內置在Hypervisor中,所有設備驅動均是由VMware預植入的。因此,ESX對硬件有嚴格的兼容性列表,不在列表中的硬件,ESX將拒絕在其上面安裝。
Hyper-V是微軟新一代的服務器虛擬化技術,首個版本于2008年7月發布,目前最新版本是2011年4月發布R2 SP1版,Hyper-V有兩種發布版本:一是獨立版,如Hyper-V Server 2008,以命令行界面實現操作控制,是一個免費的版本;二是內嵌版,如Windows Server 2008,Hyper-V作為一個可選開啟的角色。
對于一臺沒有開啟Hyper-V角色的Windows Server 2008來說,這個操作系統將直接操作硬件設備,一旦在其中開啟了Hyper-V角色,系統會要求重新啟動服務器。雖然重啟后的系統在表面看來沒什么區別,但從體系架構上看則與之前的完全不同了。在這次重啟動過程中,Hyper-V的Hypervisor接管了硬件設備的控制權,先前的Windows Server 2008則成為Hyper-V的首個虛擬機,稱之為父分區,負責其他虛擬機(稱為子分區)以及I/O設備的管理。Hyper-V要求CPU必須具備硬件輔助虛擬化,但對MMU硬件輔助虛擬化則是一個增強選項。
其實Hypervisor僅實現了CPU的調度和內存的分配,而父分區控制著I/O設備,它通過物理驅動直接訪問網卡、存儲等。子分區要訪問I/O設備需要通過子分區操作系統內的VSC(虛擬化服務客戶端),對VSC的請求由VMBUS(虛擬機總線)傳遞到父分區操作系統內的VSP(虛擬化服務提供者),再由VSP重定向到父分區內的物理驅動,每種I/O設備均有各自的VSC和VSP配對,如存儲、網絡、視頻和輸入設備等,整個I/O設備訪問過程對于子分區的操作系統是透明的。其實在子分區操作系統內,VSC和VMBUS就是作為I/O設備的虛擬驅動,它是子分區操作系統首次啟動時由Hyper-V提供的集成 服務包安裝,這也算是一種半虛擬化的設備,使得虛擬機與物理I/O設備無關。如果子分區的操作系統沒有安裝Hyper-V集成服務包或者不支持Hyper-V集成服務包(對于這種操作系統,微軟稱之為Unenlightened OS,如未經認證支持的Linux版本和舊的Windows版本),則這個子分區只能運行在仿真狀態。其實微軟所宣稱的啟蒙式(Enlightenment)操作系統,就是支持半虛擬化驅動的操作系統。
Hyper-V的Hypervisor是一個非常精簡的軟件層,不包含任何物理驅動,物理服務器的設備驅動均是駐留在父分區的Windows Server 2008中,驅動程序的安裝和加載方式與傳統Windows系統沒有任何區別。
因此,只要是Windows支持的硬件,也都能被Hyper-V所兼容。
XEN最初是劍橋大學Xensource的一個開源研究項目,2003年9月發布了首個版本XEN 1.0,2007年Xensource被Citrix公司收購,開源XEN轉由http://www.xen.org繼續推進,該組織成員包括個人和公司(如Citrix、Oracle等)。目前該組織在2011年3月發布了最新版本XEN 4.1。
相對于ESX和Hyper-V來說,XEN支持更廣泛的CPU架構,前兩者只支持CISC的X86/X86_64 CPU架構,XEN除此之外還支持RISC CPU架構,如IA64、ARM等。
XEN的Hypervisor是服務器經過BIOS啟動之后載入的首個程序,然后啟動一個具有特定權限的虛擬機,稱之為Domain 0(簡稱Dom 0)。Dom 0的操作系統可以是Linux或Unix,它實現對Hypervisor控制和管理功能。在所承載的虛擬機中,Dom 0是唯一可以直接訪問物理硬件(如存儲和網卡)的虛擬機,它通過本身加載的物理驅動,為其它虛擬機(Domain U,簡稱DomU)提供訪問存儲和網卡的橋梁。
XEN支持兩種類型的虛擬機,一類是半虛擬化(PV,Paravirtualization),另一類是全虛擬化(XEN稱其為HVM,Hardware Virtual Machine)。半虛擬化需要特定內核的操作系統,如基于Linux paravirt_ops(Linux內核的一套編譯選項)框架的Linux內核,而Windows操作系統由于其封閉性則不能被XEN的半虛擬化所支持,XEN的半虛擬化有個特別之處就是不要求CPU具備硬件輔助虛擬化,這非常適用于2007年之前的舊服務器虛擬化改造。全虛擬化支持原生的操作系統,特別是針對Windows這類操作系統,XEN的全虛擬化要求CPU具備硬件輔助虛擬化,它修改的Qemu仿真所有硬件,包括:BIOS、IDE控制器、VGA顯示卡、USB控制器和網卡等。為了提升I/O性能,全虛擬化特別針對磁盤和網卡采用半虛擬化設備來代替仿真設備,這些設備驅動稱之為PV on HVM,為了使PV on HVM有最佳性能。CPU應具備MMU硬件輔助虛擬化。
XEN的Hypervisor層非常薄,少于15萬行的代碼量,不包含任何物理設備驅動,這一點與Hyper-V是非常類似的,物理設備的驅動均是駐留在Dom 0中,可以重用現有的Linux設備驅動程序。因此,XEN對硬件兼容性也是非常廣泛的,Linux支持的,它就支持。
KVM的全稱是Kernel-based Virtual Machine,字面意思是基于內核虛擬機。其最初是由Qumranet公司開發的一個開源項目,2007年1月首次被整合到Linux 2.6.20核心中;2008年,Qumranet被RedHat所收購,但KVM本身仍是一個開源項目,由RedHat、IBM等廠商支持。KVM作為Linux內核中的一個模塊,與Linux內核一起發布,至2011年1月的最新版本是kvm-kmod 2.6.37。
與XEN類似,KVM支持廣泛的CPU架構,除了X86/X86_64 CPU架構之外,還將會支持大型機(S/390)、小型機(PowerPC、IA64)及ARM等。
KVM充分利用了CPU的硬件輔助虛擬化能力,并重用了Linux內核的諸多功能,使得KVM本身是非常瘦小的,KVM的創始者Avi Kivity聲稱KVM模塊僅有約10000行代碼,但我們不能認為KVM的Hypervisor就是這個代碼量,因為從嚴格意義來說,KVM本身并不是Hypervisor,它僅是Linux內核中的一個可裝載模塊,其功能是將Linux內核轉換成一個裸金屬的Hypervisor。這相對于其它裸金屬架構來說,它是非常特別的,有些類似于宿主架構,業界甚至有人稱其是半裸金屬架構。
通過KVM模塊的加載將Linux內核轉變成Hypervisor,KVM在Linux內核的用戶(User)模式和內核(Kernel)模式基礎上增加了客戶(Guest)模式。Linux本身運行于內核模式,主機進程運行于用戶模式,虛擬機則運行于客戶模式,使得轉變后的Linux內核可以將主機進程和虛擬機進行統一的管理和調度,這也是KVM名稱的由來。
KVM利用修改的QEMU提供BIOS、顯卡、網絡、磁盤控制器等的仿真,但對于I/O設備(主要指網卡和磁盤控制器)來說,則必然帶來性能低下的問題。因此,KVM也引入了半虛擬化的設備驅動,通過虛擬機操作系統中的虛擬驅動與主機Linux內核中的物理驅動相配合,提供近似原生設備的性能。從此可以看出,KVM支持的物理設備也即是Linux所支持的物理設備。
本文所討論的4種虛擬化技術都用到了半虛擬化驅動,若要在不同虛擬化架構之間遷移虛擬機,這些半虛擬化驅動將必然帶來兼容性問題。因此,RedHat和IBM聯合Linux社區推出VirtIO半虛擬化驅動開發標準,基于VirtIO的半虛擬化驅動獨立于Hypervisor,跨平臺遷移時半虛擬化驅動仍可重用,使得不同虛擬化架構之間更容易實現互操作。
評論列表