雲計算與虛拟化技術叢書 點選檢視第二章 點選檢視第三章 KVM實戰:原理、進階與性能調優
任永傑 程舟 著第1章
虛拟化簡介
在寫作上一本書的時候(2013年),雲計算雖然已經在國際上提出多年,但在國内還是剛剛興起。到寫作本書時這短短4年内,國内雲計算已經翹首追趕,緊跟國際的步伐。例如阿裡雲,截至筆者寫作時,阿裡雲已經連續7個季度3位數的同比增長率。老牌公司微軟也在這幾年加速追趕,在這個新的領域跻身一線。
1.1 雲計算概述
1.1.1 什麼是雲計算
一直以來,雲計算(Cloud Computing)的定義也如同它的名字一樣,雲裡霧裡,說不清楚。維基百科裡是這樣定義的:是一種基于網際網路的計算方式,通過這種方式,共享的軟硬體資源和資訊可以按需求提供給計算機各種終端和其他裝置。以前,我們的資訊處理(計算)是由一個實實在在的計算機來完成的,它看得見,摸得着。後來,随着計算硬體、網絡技術、存儲技術的飛速發展,人們發現,每個人獨自擁有一台計算機似乎有些浪費,因為它大多數時候是空閑的。那麼,如果将計算資源集中起來,大家共享,類似現代作業系統那樣分時複用,将是對資源的極大節省和效率的極大提升,經濟學上的解釋也就是邊際效應(成本)遞減。科技行業的發展,根源也是經濟利益的推動。在這樣的背景下,雲計算應運而生了。它就是把龐大的計算資源集中在某個地方或是某些地方,而不再是放在身邊的那台計算機了;使用者的每一次計算,都發生在那個被稱為雲的他看不見摸不着的某個地方。
以CPU為例,圖1-1和圖1-2摘選了從2000年到2017年上市的Intel桌面CPU的參數(主頻、核數、LLC、制造技術),從中可以大概看到CPU處理能力的飛速提升。它的另一面也就意味着,個人單獨擁有一台計算機,從資源利用效率角度來看,被大大閑置了的。
1.1.2 雲計算的曆史
正式的雲計算的産品始發于2006年,那年8月,亞馬遜(Amazon)釋出了“彈性計算雲”(Elastic Compute Cloud)。2008年10月,微軟宣布了名為Azure的雲計算産品,并在2010年2月正式釋出Windows Azure。Google也從2008年開始進入雲計算時代,那年4月,其釋出了Google App Engine Beta,但直到2013年12月,其Google Compute Engine對标AWS EC2才正式可用。
2010年7月,NASA和Rackspace共同釋出了著名的開源項目Openstack。
從國内來看,2009年,阿裡巴巴率先成立了阿裡雲部門,一開始隻對内服務于其自身的電商業務,如淘寶、天貓。2011年7月,阿裡雲開始正式對外銷售雲服務。
無論是國内還是國外,雲計算的市場都快速發展。“Amazon把雲計算做成一個大生意沒有花太長的時間:不到兩年時間,Amazon上的注冊開發人員達44萬人,還有為數衆多的企業級使用者。有第三方統計機構提供的資料顯示,Amazon與雲計算相關的業務收入已達
1億美元。雲計算是Amazon增長最快的業務之一。”國内的阿裡雲也在2013年以後快速蓬勃發展。無論是國際巨頭AWS(亞馬遜)還是國内的阿裡雲,這些年都是快速增長,尤其阿裡雲,雖然體量暫時還遠不及AWS,但一直都是超過100%的增長,讓人側目,如圖1-3所示。
1.1.3 雲計算的幾種服務模型
“雲計算是推動IT轉向以業務為中心模式的一次重大變革。它着眼于營運效率、競争力和快速響應等實際成果。這意味着IT的作用正在從提供IT服務逐漸過渡到根據業務需求優化服務的傳遞和使用。這種全新的模式将以前的資訊孤島轉化為靈活高效的資源池和具備自我管理能力的虛拟基礎架構,進而以更低的成本和以服務的形式提供給使用者。IT即服務将提供業務所需要的一切,并在不喪失對系統的控制力的同時,保持系統的靈活性和靈活性。”
雲計算的模型是以服務為導向的,根據提供的服務層次不同,可分為:IaaS(Infrastructure as a Service,基礎架構即服務)、PaaS(Platform as a Service,平台即服務)、SaaS(Software as a Service,軟體即服務)。它們提供的服務越來越抽象,使用者實際控制的範圍也越來越小,如圖1-4所示。
1. SaaS,軟體即服務
雲服務提供商提供給客戶直接使用軟體服務,如Google Docs、Microsoft CRM、Salesforce.com等。使用者不必自己維護軟體本身,隻管使用軟體提供的服務。使用者為該軟體提供的服務付費。
2. PaaS,平台即服務
雲服務提供商提供給客戶開發、運維應用程式的運作環境,使用者負責維護自己的應用程式,但并不掌控作業系統、硬體以及運作的網絡基礎架構。如Google App Engine等。平台是指應用程式運作環境(圖1-4中的Runtime)。通常,這類使用者在雲環境中運維的應用程式會再提供軟體服務給他的下級客戶。使用者為自己的程式的運作環境付費。
3. IaaS,基礎設施即服務
使用者有更大的自主權,能控制自己的作業系統、網絡連接配接(虛拟的)、硬體(虛拟的)環境等,雲服務提供商提供的是一個虛拟的主機環境。如Google Compute Engine、AWS EC2等。使用者為一個主機環境付費。
從圖1-4中可以看到,無論是哪種雲計算服務模型,虛拟化(Virtualization)都是其基礎。那麼什麼是虛拟化呢?
1.2 虛拟化技術
1.2.1 什麼是虛拟化
維基百科關于虛拟化的定義是:“In computing, virtualization refers to the act of creating a virtual (rather than actual) version of something, including virtual computer hardware platforms, storage devices, and computer network resources。”(在計算機領域,虛拟化指建立某事物的虛拟(而非實際)版本,包括虛拟的計算機硬體平台、儲存設備,以及計算機網絡資源)可見,虛拟化是一種資源管理技術,它将計算機的各種實體資源(CPU、記憶體、存儲、網絡等)予以抽象和轉化出來,并提供分割、重新組合,以達到最大化利用實體資源的目的。
廣義來說,我們一直以來對實體硬碟所做的邏輯分區,以及後來的LVM(Logical Volume Manager),都可以納入虛拟化的範疇。
結合圖1-4來看,在沒有虛拟化以前(我們抽掉Virtualization層),一個實體的主機(Sever、Storage、Network層)上面隻能支援一個作業系統及其之上的一系列運作環境和應用程式;有了虛拟化技術,一個實體主機可以被抽象、分割成多個虛拟的邏輯意義上的主機,向上支撐多個作業系統及其之上的運作環境和應用程式,則其資源可以被最大化地利用。
如圖1-5所示的Virtual Machine Monitor(VMM,虛拟機監控器,也稱為Hypervisor)層,就是為了達到虛拟化而引入的一個軟體層。它向下掌控實際的實體資源(相當于原本的作業系統);向上呈現給虛拟機N份邏輯的資源。為了做到這一點,就需要将虛拟機對實體資源的通路“偷梁換柱”—截取并重定向,讓虛拟機誤以為自己是在獨享實體資源。虛拟機監控器運作的實際實體環境,稱為主控端;其上虛拟出來的邏輯主機,稱為客戶機。
虛拟化技術有很多種實作方式,比如軟體虛拟化和硬體虛拟化,再比如準虛拟化和全虛拟化。下面将針對每種實作方式做一個簡單的介紹。
1.2.2 軟體虛拟化和硬體虛拟化
1.軟體虛拟化技術
軟體虛拟化,顧名思義,就是通過軟體模拟來實作VMM層,通過純軟體的環境來模拟執行客戶機裡的指令。
最純粹的軟體虛拟化實作當屬QEMU。在沒有啟用硬體虛拟化輔助的時候,它通過軟體的二進制翻譯仿真出目标平台呈現給客戶機,客戶機的每一條目标平台指令都會被QEMU截取,并翻譯成主控端平台的指令,然後交給實際的實體平台執行。由于每一條都需要這麼操作一下,其虛拟化性能是比較差的,同時其軟體複雜度也大大增加。但好處是可以呈現各種平台給客戶機,隻要其二進制翻譯支援。
2.硬體虛拟化技術
硬體虛拟化技術就是指計算機硬體本身提供能力讓客戶機指令獨立執行,而不需要(嚴格來說是不完全需要)VMM截獲重定向。
以x86架構為例,它提供一個略微受限制的硬體運作環境供客戶機運作(non-root mode),在絕大多數情況下,客戶機在此受限環境中運作與原生系統在非虛拟化環境中運作沒有什麼兩樣,不需要像軟體虛拟化那樣每條指令都先翻譯再執行,而VMM運作在root mode,擁有完整的硬體通路控制權限。僅僅在少數必要的時候,某些客戶機指令的運作才需要被VMM截獲并做相應處理,之後客戶機傳回并繼續在non-root mode中運作。可以想見,硬體虛拟化技術的性能接近于原生系統,并且,極大地簡化了VMM的軟體設計架構。
Intel從2005年就開始在其x86 CPU中加入硬體虛拟化的支援—Intel Virtualization Technology,簡稱Intel VT。到目前為止,在所有的Intel CPU中,都可以看到Intel VT的身影。并且,每一代新的CPU中,都會有新的關于硬體虛拟化支援、改進的feature加入。也因如此,Intel x86平台是對虛拟化支援最為成熟的平台,本書将以Intel x86平台為例介紹KVM的虛拟化。
1.2.3 半虛拟化和全虛拟化
1.半虛拟化
通過上一節的描述,大家可以了解,最理想的虛拟化的兩個目标如下:
1)客戶機完全不知道自己運作在虛拟化環境中,還以為自己運作在原生環境裡。
2)完全不需要VMM介入客戶機的運作過程。
純軟體的虛拟化可以做到第一個目标,但性能不是很好,而且軟體設計的複雜度大大增加。
那麼如果放棄第一個目标呢?讓客戶機意識到自己是運作在虛拟化環境裡,并做相應修改以配合VMM,這就是半虛拟化(Para-Virtualization)。一方面,可以提升性能和簡化VMM軟體複雜度;另一方面,也不需要太依賴硬體虛拟化的支援,進而使得其軟體設計(至少是VMM這一側)可以跨平台且是優雅的。“本質上,準虛拟化弱化了對虛拟機特殊指令的被動截獲要求,将其轉化成客戶機作業系統的主動通知。但是,準虛拟化需要修改客戶機作業系統的源代碼來實作主動通知。”典型的半虛拟化技術就是virtio,使用virtio需要在主控端/VMM和客戶機裡都相應地裝上驅動。
2.全虛拟化
與半虛拟化相反的,全虛拟化(Full Virtualization)堅持第一個理想化目标:客戶機的作業系統完全不需要改動。敏感指令在作業系統和硬體之間被VMM捕捉處理,客戶作業系統無須修改,所有軟體都能在虛拟機中運作。是以,全虛拟化需要模拟出完整的、和實體平台一模一樣的平台給客戶機,這在達到了第一個目标的同時也增加了虛拟化層(VMM)的複雜度。
性能上,2005年硬體虛拟化興起之前,軟體實作的全虛拟化完敗于VMM和客戶機作業系統協同運作的半虛拟化,這種情況一直延續到2006年。之後以Intel VT-x、VT-d為代表的硬體虛拟化技術的興起,讓由硬體虛拟化輔助的全虛拟化全面超過了半虛拟化。但是,以virtio為代表的半虛拟化技術也一直在演進發展,性能上隻是略遜于全虛拟化,加之其較少的平台依賴性,依然受到廣泛的歡迎。
1.2.4 Type1和Type2虛拟化
從軟體架構的角度上,根據虛拟化層是直接位于硬體之上還是在一個宿主作業系統之上,将虛拟化劃分為Typel和Type2,如圖1-6所示。
Type1(類型1)Hypervisor也叫native或bare-metal Hypervisor。這類虛拟化層直接運作在硬體之上,沒有所謂的主控端作業系統。它們直接控制硬體資源以及客戶機。典型地如Xen(見1.4.1節)和VMware ESX。
Type2(類型2)Hypervisor運作在一個主控端作業系統之上,如VMware Workstation;或系統裡,如KVM。這類Hypervisor通常就是主控端作業系統的一個應用程式,像其他應用程式一樣受主控端作業系統的管理。比如VMware Workstation就是運作在Windows或者Linux作業系統上的一個程式而已。客戶機是在主控端作業系統上的一個抽象,通常抽象為程序。
1.3 KVM簡介
1.3.1 KVM的曆史
KVM全稱是Kernel-based Virtual Machine,即基于核心的虛拟機,是采用硬體虛拟化技術的全虛拟化解決方案。
KVM最初是由Qumranet公司的Avi Kivity開發的,作為他們的VDI産品的背景虛拟化解決方案。為了簡化開發,Avi Kivity并沒有選擇從底層開始新寫一個Hypervisor,而是選擇了基于Linux kernel,通過加載子產品使Linux kernel本身變成一個Hypervisor。2006年10月,在先後完成了基本功能、動态遷移以及主要的性能優化之後,Qumranet正式對外宣布了KVM的誕生。同月,KVM子產品的源代碼被正式納入Linux kernel,成為核心源代碼的一部分。作為一個功能和成熟度都遜于Xen的項目,在這麼快的時間内被核心社群接納,主要原因在于:
1)在虛拟化方興未艾的當時,核心社群急于将虛拟化的支援包含在内,但是Xen取代核心由自身管理系統資源的架構引起了核心開發人員的不滿和抵觸。
2)Xen誕生于硬體虛拟化技術出現之前,是以它在設計上采用了半虛拟化的方式,這讓Xen采用硬體虛拟化技術有了更多的曆史包袱,不如KVM新兵上陣一身輕。
2008年9月4日,Redhat公司以1.07億美元收購了Qumranet公司,包括它的KVM開源項目和開發人員。自此,Redhat開始在其RHEL發行版中內建KVM,逐漸取代Xen,并從RHEL7開始,正式不支援Xen。
1.3.2 KVM的功能概覽
KVM從誕生開始就定位于基于硬體虛拟化支援的全虛拟化實作。它以核心子產品的形式加載之後,就将Linux核心變成了一個Hypervisor,但硬體管理等還是通過Linux kernel來完成的,是以它是一個典型的Type 2 Hypervisor,如圖1-7所示。
一個KVM客戶機對應于一個Linux程序,每個vCPU則是這個程序下的一個線程,還有單獨的處理IO的線程,也在一個線程組内。是以,主控端上各個客戶機是由主控端核心像排程普通程序一樣排程的,即可以通過Linux的各種程序排程的手段來實作不同客戶機的權限限定、優先級等功能。
客戶機所看到的硬體裝置是QEMU模拟出來的(不包括VT-d透傳的裝置,詳見6.2節),當客戶機對模拟裝置進行操作時,由QEMU截獲并轉換為對實際的實體裝置(可能設定都不實際實體地存在)的驅動操作來完成。
下面介紹一些KVM的功能特性。
1.記憶體管理
KVM依賴Linux核心進行記憶體管理。上面提到,一個KVM客戶機就是一個普通的Linux程序,是以,客戶機的“實體記憶體”就是主控端核心管理的普通程序的虛拟記憶體。進而,Linux記憶體管理的機制,如大頁、KSM(Kernel Same Page Merge,核心的同頁合并)、NUMA(Non-Uniform Memory Arch,非一緻性記憶體架構)、通過mmap的程序間共享記憶體,統統可以應用到客戶機記憶體管理上。
早期時候,客戶機自身記憶體通路落實到真實的主控端的實體記憶體的機制叫影子頁表(Shadow Page Table)。KVM Hypervisor為每個客戶機準備一份影子頁表,與客戶機自身頁表建立一一對應的關系。客戶機自身頁表描述的是GVA→GPA的映射關系;影子頁表描述的是GPA→HPA的映射關系。當客戶機操作自身頁表的時候,KVM就相應地更新影子頁表。比如,當客戶機第一次通路某個實體頁的時候,由于Linux給程序的記憶體通常都是拖延到最後要通路的一刻才實際配置設定的,是以,此時影子頁表中這個頁表項是空的,KVM Hypervisor會像處理通常的缺頁異常那樣,把這個實體頁補上,再傳回客戶機執行的上下文中,由客戶機繼續完成它的缺頁異常。
影子頁表的機制是比較拗口,執行的代價也是比較大的。是以,後來,這種靠軟體的GVA→GPA→HVA→HPA的轉換被硬體邏輯取代了,大大提高了執行效率。這就是Intel的EPT或者AMD的NPT技術,兩家的方法類似,都是通過一組可以被硬體識别的資料結構,不用KVM建立并維護額外的影子頁表,由硬體自動算出GPA→HPA。現在的KVM預設都打開了EPT/NPT功能。
2.存儲和客戶機鏡像的格式
嚴格來說,這是QEMU的功能特性。
KVM能夠使用Linux支援的任何存儲來存儲虛拟機鏡像,包括具有IDE、SCSI和 SATA的本地磁盤,網絡附加存儲(NAS)(包括NFS和SAMBA/CIFS),或者支援iSCSI和光線通道的SAN。多路徑I/O可用于改進存儲吞吐量和提供備援。
由于KVM是Linux核心的一部分,它可以利用所有領先存儲供應商都支援的一種成熟且可靠的存儲基礎架構,它的存儲堆棧在生産部署方面具有良好的記錄。
KVM還支援全局檔案系統(GFS2)等共享檔案系統上的虛拟機鏡像,以允許客戶機鏡像在多個主控端之間共享或使用邏輯卷共享。磁盤鏡像支援稀疏檔案形式,支援通過僅在虛拟機需要時配置設定存儲空間,而不是提前配置設定整個存儲空間,這就提高了存儲使用率。KVM 的原生磁盤格式為QCOW2,它支援快照,允許多級快照、壓縮和加密。
3.實時遷移
KVM支援實時遷移,這提供了在主控端之間轉移正在運作的客戶機而不中斷服務的能力。實時遷移對使用者是透明的,客戶機保持打開,網絡連接配接保持活動,使用者應用程式也持續運作,但客戶機轉移到了一個新的主控端上。
除了實時遷移,KVM支援将客戶機的目前狀态(快照,snapshot)儲存到磁盤,以允許存儲并在以後恢複它。
4.裝置驅動程式
KVM支援混合虛拟化,其中半虛拟化的驅動程式安裝在客戶機作業系統中,允許虛拟機使用優化的 I/O 接口而不使用模拟的裝置,進而為網絡和塊裝置提供高性能的 I/O。
KVM 使用的半虛拟化的驅動程式是IBM和Redhat聯合Linux社群開發的VirtIO标準;它是一個與Hypervisor獨立的、建構裝置驅動程式的接口,允許多種Hypervisor使用一組相同的裝置驅動程式,能夠實作更好的對客戶機的互操作性。
同時,KVM也支援Intel的VT-d 技術,通過将主控端的PCI總線上的裝置透傳(pass-through)給客戶機,讓客戶機可以直接使用原生的驅動程式高效地使用這些裝置。這種使用是幾乎不需要Hypervisor的介入的。
5.性能和可伸縮性
KVM也繼承了Linux的性能和可伸縮性。KVM在CPU、記憶體、網絡、磁盤等虛拟化性能上表現出色,大多都在原生系統的95%以上。KVM的伸縮性也非常好,支援擁有多達288個vCPU和4TB RAM的客戶機,對于主控端上可以同時運作的客戶機數量,軟體上無上限。
這意味着,任何要求非常苛刻的應用程式工作負載都可以運作在KVM虛拟機上。
1.3.3 KVM的現狀
至本書寫作時,KVM已經10周歲了。10年之間,得益于與Linux天然一體以及Redhat的傾力打造,KVM已經成為Openstack使用者選擇的最主流的Hypervisor(因為KVM是Openstack的預設Hypervisor)。來自Openstack的調查顯示,KVM占到87%以上的部署份額,并且(筆者認為)還會繼續增大。可以說,KVM已經主宰了公有雲部署的Hypervisor市場;而在私有雲部署方面,尤其大公司内部私有雲部署,還是VMware的地盤,目前受到HyperV的競争。
功能上,虛拟化發展到今天,各個Hypervisor的主要功能都趨同。KVM作為後起之秀,并且在公有雲上廣泛部署,其功能的完備性是毋庸置疑的。并且由于其開源性,反而較少一些出于商業目的的限制,比如一篇文章(ftp://public.dhe.ibm.com/linux/pdfs/Clabby_Analytics_-_VMware_v_KVM.pdf)
中比較VMware EXS 與KVM,就是一個例子。
性能上,作為同樣開源的Hypervisor,KVM和Xen都很優秀,都能達到原生系統95%以上的效率(CPU、記憶體、網絡、磁盤等benchmark衡量),KVM甚至還略微好過Xen一點點。與微軟的Hyper-V相比,KVM似乎略遜于最新的Windows 2016上的HyperV,而好于Windows 2012 R2上的HyperV,但這是微軟的一家之言,筆者沒有重新測試驗證。其他與諸如VMware EXS等的性能比較,網上也可以找到很多,讀者可以自行搜尋。總的來說,即使各有優劣,虛拟化技術發展到今天已經成熟,KVM也是如此。
1.3.4 KVM的展望
經過10年的發展,KVM已經成熟。那麼,接下來KVM會怎樣進一步發展呢?
1)大規模部署尚有挑戰。KVM是Openstack和oVirt選擇的預設Hypervisor,因而實際的廣泛部署常常是大規模的(large scale, scalability)。這種大規模,一方面指高并發、高密度,即一台主控端上支援盡可能多的客戶機;另一方面,也指大規模的單個客戶機,即單個客戶機配備盡可能多的vCPU和記憶體等資源,典型的,這類需求來自高性能計算(HPC)領域。随着硬體尤其是CPU硬體技術的不停發展(實體的processor越來越多),這種虛拟化的大規模方面的需求也在不停地增大,并且這不是簡單數量的增加,這種增加會伴随着新的挑戰等着KVM開發者去解決,比如熱遷移的當機時間(downtime)就是其中一例。
2)實時性(Realtime)。近幾年一個新的趨勢就是NFV(Network Functions Virtualization,網絡功能的虛拟化),它指将原先實體的網絡裝置搬到一個個虛拟的客戶機上,以便更好地實作軟體定義網絡的願景。網絡裝置對實時性的要求是非常高的;而不巧,NFV的開源平台OPNFV選擇了Openstack,盡管Openstack向下支援各種Hypervisor,但如前文所說,KVM是其預設以及主要部署的選擇,是以NFV實時性的要求責無旁貸地落到了KVM頭上,NFV-KVM項目應運而生,它作為OPNFV的子項目主要解決KVM在實時性方面受到的挑戰。
3)安全是永恒的主題/話題。就像網絡病毒永遠不停地演變推陳出新一樣,新時代的IT架構的主體,雲/虛拟化,也會一直受到各類惡意攻擊的騷擾,進而陷入道高一尺魔高一丈的循環。Hypervisor的開發者、應用者會一直從如何更好地隔離客戶機、更少的Hypervisor幹預等方面入手,增加虛拟化的安全性。KVM作為Type 2的Hypervisor,天然地與Host OS有關聯,安全性方面的話題更引人注目。同時,硬體廠商如Intel,也會從硬體層面不停地推出新的安全方面的功能(feature),KVM從軟體方面也要跟上腳步,使能(enable)之。
4)性能調優。如同一句廣告詞說的:“進無止境”。一方面,新的功能代碼的不停引入總會給性能調優開辟新的空間;另一方面,老的功能的實作也許還有更好的方法。還有,新的硬體功能的出現,也是性能調優永恒的動力源泉。
1.4 其他的虛拟化解決方案簡介
1.4.1 Xen
Xen的出現要早于KVM,可以追溯到20世紀90年代。劍橋大學的Ian Pratt和Keir Fraser在一個叫作Xenoserver的研究項目中開發了Xen虛拟機。在那個年代,硬體虛拟化還沒有出現,是以Xen最開始采用的是半虛拟化的解決方案。
Xen 在2002年開源,并在2003年釋出了1.0版本、2004年釋出了2.0版本,随即被Redhat、Novell和Sun的Linux 發行版內建,作為其虛拟化元件。2005年的3.0版本開始加入Intel和AMD的硬體虛拟化的支援,以及Intel的IA64架構,從此,Xen也提供全虛拟化解決方案(HVM),可以運作完全沒有修改的客戶機作業系統。2007年10月,思傑公司出資5億美元收購了XenSource,變成了Xen項目的東家。2013年,Xen成為Linux基金會贊助的合作項目。
Xen在架構上是一個典型的Type 1 Hypervisor,與KVM形成鮮明對比,如圖1-8所示。嚴格來說,它沒有主控端的概念,而是由Xen Hypervisor(VMM)完全管控硬體,但使用者卻看不見、摸不着它,隻能通過特殊的0号虛拟機(Dom0),通過其中xl 工具棧(tool stack)與Xen Hypervisor互動來管理其他普通虛拟機(DomU)。0号虛拟機是一個運作修改過的半虛拟化的核心的Linux虛拟機。從架構上,Xen的虛拟化方案既利用了Linux核心的IO部分(Dom0的核心),将Linux核心的CPU、記憶體管理等核心部分排除在外由自己接手(Xen Hypervisor),是以,一開始就受到了Linux核心開發人員的抵制,緻使Linux核心作為Dom0對Xen的支援部分一直不能合入Linux核心社群。一直到2010年,在采用基于核心的PVOPs方式大量重寫了Xen代碼以後,才勉強合入Linux核心社群。2011年,從Linux核心2.6.37版本開始,正式支援Xen Dom0。
1.4.2 VMware
VMware成立于1998年,是最早專注于虛拟化商業軟體(并成功)的公司,從它的名字也可以看出它對自己的定位和目标。從十幾年前虛拟化軟體興起開始,它就是這個市場的霸主。筆者早年的認知也是虛拟化=VMware。直到最近,在公有雲興起的背景之下,VMware開始受到KVM和Xen等開源項目以及微軟Azure/HyperV的挑戰。VMware最初是由一對夫婦等幾人創立的,2004年被EMC收購。2016 年,EMC又被Dell收購,是以現在VMware是Dell旗下的子公司。
VMware從誕生起就一直專注于虛拟化,其産品線非常全,既有PaaS産品,也有IaaS産品;既有Hypervisor,也有應用管理、存儲管理等配套軟體;既有面向個人使用者的桌面級虛拟化産品,也有面向企業的伺服器級産品;既有運作于Linux平台上的産品,也有Windows和Mac平台上的産品。本書隻選擇最著名的兩款産品給大家簡單介紹下,更多更詳細的資訊大家可以到它的官網檢視。
1. VMware Workstation
VMware Workstation是VMware最早的産品,也是最廣為人知的産品,1999年釋出。在剛開始的時候,還沒有硬體虛拟化技術,是以它是采用二進制翻譯的方式實作虛拟化的。但是由于它的二進制翻譯技術獨步當時,性能還很出色,尤其跟當時同類産品相比。可以說,是VMware Workstation奠定了VMware在虛拟化軟體行業的地位。VMware Workstation是桌面級虛拟化産品,運作在Windows、Linux和Mac作業系統上,是Type 2 Hypervisor。使用它需要購買License,但VMware同時提供了與Workstation功能類似,隻是有所删減的Workstation Player,供大家非商業化地免費使用。
2. VMware ESXi
VMware ESXi是伺服器級的虛拟化軟體。與Workstation不同,它直接運作在硬體平台上,是Type1 Hypervisor。在架構上與Xen有些相像,是現在VMware的拳頭産品,大多數大公司的私有雲都是用它搭建的。除了vMotion(即Live Migration功能)、HA(High Availability,指軟硬體運作的不間斷地備援備份)等業界常見功能外,ESXi還支援Cisco Nexus 1000v,作為分布式虛拟交換機運作在ESXi叢集中。
1.4.3 HyperV
與VMware一樣,HyperV也是閉源(Close Source,與Opensource相對)的商業軟體。微軟從Windows 8/Windows Server 2008開始,用它取代原來的Virtual PC,成為Server OS版本自帶的平台虛拟化軟體。
HyperV在架構上與Xen類似,也是Type 1 Hypervisor。它有Partition的概念,有一個Parent Partition,類似于Xen Dom0,有管理硬體資源的權限;HyperV的Child Partion就類似于普通的客戶機DomU。對Hypervisor的請求以及對客戶機的管理都要通過Parent Partition,硬體的驅動也由Parent Partition來完成。客戶機看到的都是虛拟出來的硬體資源,它們對其虛拟硬體資源的通路都會被重定向到Parent Partition,由它來完成實際的操作,這種重定向是通過VMBus連接配接Parent Partition的VSP(Virtualization Service Provider)和child partition的VSC(Virtualization Service Consumer)來完成的,而這個過程對客戶機OS都是透明的。圖1-9中,HyperV Hypervisor運作在Ring -1,也就是Intel VMX技術的root mode(特權模式),而parent partition和child partition的核心都運作在non-root mode的Ring 0和Ring 3,也就是非特權模式的核心态和使用者态。這樣的架構安全性是比較好的。性能上如1.3.3節提到的那樣,據微軟自己說是略好于KVM的。
1.4.4 Container
Container嚴格來說與前面提到的虛拟化軟體不是一個大類,首先,它不是某個虛拟化軟體,而是某類軟體的統稱,包括Docker和LXC等;其次,它不是硬體平台級的虛拟化技術,而是軟體運作環境的虛拟化,是一種作業系統級的虛拟化技術,與前面提到的不是一個層次的。
Container技術利用了Linux kernel提供的cgroup、namespace等機制,将應用之間隔離起來,好像自己是作業系統上的唯一一個應用似的。而Linux kernel除了封裝出這些應用單獨的運作環境以外,還可以控制配置設定給各個應用的資源配額,比如CPU使用率、記憶體、網絡帶寬等。
與平台虛拟化技術相比,Container技術省去了啟動和維護整個虛拟客戶機的開銷(硬體初始化、Kernel boot、init等),因而它非常輕量級,非常适用于PaaS服務模型。但另一方面,由于各個Contained instance其實還是共用一個OS、一個Kernel,是以安全性比不上平台虛拟化技術。總而言之,Container和KVM等平台虛拟化技術,目前還是各有所長,還處在互相取長補短的過程中。
1.5 本章小結
本章從雲計算的基本概念入手,給讀者講解了SaaS、PaaS、IaaS這3種雲服務類型,還講到了作為雲計算底層的虛拟化技術。對于虛拟化技術,着重對KVM的基礎架構進行了介紹,同時對Xen、VMware、HyperV等虛拟化技術以及容器技術也進行了簡介。本章目的在于讓讀者在開始學習KVM虛拟化技術之前,對虛拟化技術有一個整體的簡明扼要的認識。