虛擬化原理淺析

一、引言
在生產環境中大多需要服務器來提供服務,但每一個服務可能需要的系統資源很少,獨佔一臺服務器會浪費資源增大耗費,但是想象一下如果一臺服務器上同時提供20個服務又會很混亂,因此期望提供服務的OS是獨立運行的同時又想減少服務器數量,以降低TOC(Total Cost of Ownership),於是可以利用虛擬化技術隱藏底層物理硬件,從而讓多個各自獨立運行的OS可以透明地使用和共享這些硬件資源。簡單來說,平臺虛擬化就是讓一臺物理計算機能併發運行多個OS。就拿熟悉的VMware Workstation在物理機上的架構來說,物理機的OS之上運行了多個進程,VMware只是其中一個,但是在VMware之上又可以運行多個虛擬機,虛擬機的OS各自獨立可以是Red Hat,CentOs,Ubuntu等等。VMware可以理解爲是一款模擬了一堆硬件的應用軟件,在這些硬件上可以運行額外的OS。下面的敘述中也將虛擬機稱爲Guest OS或者客戶機,宿主機也稱爲Host OS。
這裏寫圖片描述
二、虛擬化概述
Virtual Machine Monitor&&Hypervisor
http://www.ibm.com/developerworks/cn/linux/l-hypervisor/
在典型的分層架構中,提供平臺虛擬化的層稱爲hypervisor,它是一種運行在物理服務器和OS之間的中間軟件層,允許多個OS和應用共享一套基礎物理硬件,因此也可以看作是虛擬環境中的“元”操作系統,Hypervisor是所有虛擬化技術的核心,具有規劃、部署、管理和優化虛擬基礎結構等端到端功能。非中斷地支持多工作負載遷移的能力是Hypervisor的基本功能。當服務器啓動並執行Hypervisor時,它會給每一臺虛擬機分配適量的內存、CPU、網絡和磁盤,並加載所有虛擬機的Guest OS。有時Hypervisor也稱爲VMM,即虛擬機監控器,VMM既可以與虛擬機在同一臺主機上,也可以單獨運行在一臺主機上,VMM與虛擬機互不影響。1974年,Popek和Goldberg在一篇論文中定義了“經典虛擬化(Classical virtualization)”的基本需求,他們認爲,一款真正意義上的VMM至少要符合三個方面的標準:

  • 等價執行(Equivalient execution):除了資源的可用性及時間上的不同之外,程序在虛擬化環境中及真實環境中的執行是完全相同的;
  • 性能(Performance):指令集中的大部分指令要能夠直接運行於CPU上;
  • 安全(Safety):VMM要能夠完全控制系統資源;

這裏寫圖片描述
三、虛擬化分類
根據不同標準虛擬化的分類方式有很多,如:完全虛擬化,準/半虛擬化,硬件虛擬化,跨平臺虛擬化,應用程序虛擬化等。
1、Full virtualization
在完全虛擬化中,Guest OS不需要做任何修改,對於Guest OS來說,並不知道自己是運行在虛擬的平臺上。可以像正常的服務器一樣發送敏感指令,由VMM對虛擬機指令做全程過濾。比如Guest OS發出Power off指令,VMM會將該指令改爲僅僅關閉當前虛擬機的指令。對於完全虛擬化來說,從虛擬化支持的層次劃分,主要分爲軟件模擬和硬件支持。
Software Emulation virtualization
軟件仿真虛擬化簡單來說就是指通過軟件的方法模擬特權指令集,讓客戶機的特權指令陷入異常,從而觸發Host OS進行虛擬化處理。主要使用的技術是優先級壓縮和二進制翻譯(Binary Translation)。特權級壓縮是指讓Guest OS運行在Ring 1級別,由於處於非特權級別,所以客戶機的指令基本上都會觸發異常,然後Host OS進行接管。但是有些指令並不能觸發異常,因此就需要BT技術來對Guest OS中無法觸發異常的指令進行翻譯。其主要思想是在執行時將VM上執行的Guest OS指令,翻譯成x86 ISA的一個子集,其中的敏感指令會被替換成陷入指令,非敏感指令則不經翻譯直接執行,翻譯過程和指令執行交叉進行。VMM必須監視Guest OS對GDT、IDT等特權資源的設置,防止GuestOS運行在Ring 0級,同時又要保護降級後的Guest OS不受Guest進程的主動攻擊或無意破壞。但在技術層面上用軟件模擬實現完全虛擬化非常麻煩,而且巨大的開銷會消耗許多硬件資源。
這裏寫圖片描述
Hardware Virtual Machine
基於硬件的虛擬化是由CPU廠商直接在芯片上提供了對虛擬化的支持。比如Intel的Virtualization Technology和AMD的AMD-Virtualization都爲CPU增加了新的執行模式。Intel對指令集重新設計,使得原本不能通過先陷入後模擬的方式執行的指令都可以順利執行。Root模式位於Ring 0的下面,可以理解爲在硬件級別增添了Ring -1,讓VMM運行Ring -1(相當於普通服務器Ring 0),而Guest OS運行在Non-Root模式——Ring 0。當切換到Guest模式時,CPU提供了先前完整的特權等級,讓Guest OS可以不加修改的運行在物理的CPU上。此時,VMM通過一個位於內存的數據結構(Intel稱爲VMCS,AMD稱爲VMCB)來控制Guest OS與Host OS的交互,以完成整個平臺的虛擬化。
這裏寫圖片描述
**注意:**VT-x中並不僅僅只包含CPU虛擬化,還包括中斷虛擬化和內存虛擬化等內容,而AMD在AMD-V在官方資料中也是把CPU、內存和中斷等虛擬化技術全部放在了SVM技術規範中進行統一講解的。
內存虛擬化
http://www.ibm.com/developerworks/cn/linux/l-cn-kvm-mem/
傳統的OS通過硬件MMU完成虛擬地址到物理地址的映射。在虛擬化環境中,由於Host OS的MMU不能直接裝載Guest OS的頁表來進行內存訪問,所以當Guest OS訪問Host OS物理內存時,需要經過多次地址轉換。也即首先根據Guest OS頁表把Guest OS虛擬地址轉傳成Guest OS物理地址,然後再通過Guest OS物理地址到Host OS虛擬地址之間的映射轉換成Host OS虛擬地址,最後再根據Host OS頁表把Host OS虛擬地址轉換成Host OS物理地址。而通過影子頁表,則可以實現客戶機虛擬地址到宿主機物理地址的直接轉換。但作爲純粹用軟件方法實現的解決虛擬機使用物理內存的技術——Shadow Paging明顯的缺點是在傳統OS分頁處理的基礎上增加了額外的開銷,包括VMM對Guest OS頁表修改的截取以及相關的同步操作,對 CR3 切換的截取以及相關的 Shadow 頁表上下文切換操作, 這些操作通常是相當頻繁的。 爲了解決Shadow Paging的性能問題,Intel和AMD分別通過EPT(Extended Page Tables)和NPT(Nested Page Tables)技術對內存虛擬化提供了硬件支持,實現Guest OS虛擬地址到Host OS物理地址之間的轉換,並通過標記(tagged)TLB來避免虛擬機切換時頻繁清寫(flush)TLB以提高TLB緩存的命中率。
這裏寫圖片描述
2、Para Virtualization
完全虛擬化是CPU密集型技術,因爲它要求hypervisor(VMM)管理各個Cuest OS,並讓它們彼此獨立。準虛擬化就是減輕這種負擔的一種方法,即對Guest OS的內核進行修改,讓的內核可以意識到自己運行在虛擬化環境中。在正常情況下,進程不能直接訪問硬件,驅動程序不會做成系統調用,但在半虛擬化環境中將驅動程序做成系統調用hypercall,而後Guest OS的內核通過hypercall直接和虛擬化層hypervisor交互,hypervisor同時也提供了hypercall來滿足其他關鍵內核操作,比如內存管理、中斷和時間保持。可以理解爲在半虛擬環境中,基於一種類似於syscall這種方式,實現Guest OS從Non-Root模式到Root模式的切換。半虛擬化降低了虛擬化的損耗,但是其性能優勢很大程度上依賴於運行的負載。由於不是所有的OS都允許修改它的內核(例如Windows),因此它的兼容性和可移植性差。在實際的生產環境中,半虛擬化往往因爲要深入修改操作系統內核而會導致操作系統支持和維護的艱難。
這裏寫圖片描述
PV on HVM
http://wiki.xensource.com/wiki/PV_on_HVM
也稱爲PVHVM or PV-on-HVM drivers,是半虛擬化和完全硬件虛擬化的混合物。其主要目標是通過使用專門優化的半虛擬化設備驅動程序提高完全虛擬化HVM Guest性能。這些驅動針對全虛擬化環境繞過模擬磁盤和網絡IO,同時也可以使用CPU的功能支持,例如Intel EPT or AMD NPT。可以從下面的示例中權衡信息以提升性能

  • For workloads that favor PV MMUs, PV on HVM is similar to PV
  • For workloads that favor nested paging (in hardware with Intel EPT or
    AMD NPT support), PV on HVM performs better than PV

這裏寫圖片描述
I/O虛擬化
http://www.ibm.com/developerworks/cn/linux/l-pci-passthrough/
Emulation:通過軟件模擬的傳統設備,由VMM捕捉Guest的IO請求,將其經過Host OS上的User Space傳遞到Kernel Space,最終到達物理設備。
Hypervisor:半虛擬化,I/O請求由Guest OS的Kernel Space直接調用Host OS提供的hypercall,性能較模擬相比有了很大提升。
Passthrough: I/O透傳,Guest OS直接繞過Host OS使用硬件設備,但是在Host OS上可以管理硬件,通過管理接口向一個特定Guest OS提供一種設備隔離,以便該設備能夠被那個Guest OS獨佔使用。使用設備透傳可以獲得近乎本機的性能,但是如果系統上有多個虛擬機使用透傳技術則需要有足夠多的硬件。
這裏寫圖片描述
Intel 和 AMD 都在它們的新一代處理器架構中提供對設備透傳的支持(以及輔助管理程序的新指令)。Intel 將這種支持稱爲 Virtualization Technology for Directed I/O (VT-d),而 AMD 稱之爲 I/O Memory Management Unit (IOMMU)。不管是哪種情況,新的 CPU 都提供將 PCI 物理地址映射到客戶虛擬系統的方法。當這種映射發生時,硬件將負責訪問(和保護),客戶操作系統在使用該設備時,就彷彿它不是一個虛擬系統一樣。除了將客 戶機映射到物理內存外,新的架構還提供隔離機制,以便預先阻止其他客戶機(或管理程序)訪問該內存。
四、虛擬化模型
宿主模型(OS-hosted VMMs)
該結構的VMM,物理資源由Host OS(Windows, Linux etc.) 管理,實際的虛擬化功能由VMM提供,其通常是Host OS的獨立內核模塊(有的實現還含用戶進程,如負責 I/O 虛擬化的用戶態設備模型)。VMM模塊負責 CPU和內存虛擬化,由 ULM 請求 Host OS 設備驅動,實現 I/O 設備的虛擬化。VMM創建出VM後,通常將VM作爲Host OS的一個進程參與調度。
這裏寫圖片描述
優點:可以充分利用現有OS的設備驅動,VMM無需自己實現大量的設備驅動,輕鬆實現 I/O 設備的虛擬化。
缺點:因資源受Host OS控制,VMM需調用Host OS的服務來獲取資源進行虛擬化,其效率和功能會受到一定影響。
常見產品:

  • VMware Workstation
  • VMWare Server (GSX)
  • Microsoft Virtual PC
  • SUN Virtual Box(已被Oracle收購)
  • QEMU (常於xen結合使用,爲xen模擬硬件,作者法布里斯·貝拉)
  • WINE(Library Virtulization)

Hypervisor模型
Hypervisor/VMM是直接運行在物理硬件之上的,可以將其看作一個專門服務於虛擬化的完整 OS,掌控有所有資源(CPU,內存,I/O 設備)。
Hypervisor除了需要管理資源,其還需向上提供VM用於運行Guest OS,因此Hypervisor還負責虛擬環境的創建和管理。
這裏寫圖片描述
優點:因Hypervisor同時具有物理資源的管理功能和虛擬化功能,故虛擬化的效率會較高;安全性方面,VM的安全只依賴於Hypervisor的安全。
缺點:因Hypervisor完全擁有物理資源,因此,Hypervisor需要進行物理資源的管理,包括設備的驅動,而設備驅動的開發工作量是很大的,這對Hypervisor是個很大的挑戰。
常見產品:

  • VMware vSphere
  • VMWare ESX(商業)、VMware ESXi(免費)
  • WindRiver Hypervisor
  • KVM(基於內核的虛擬機)

混合模型(Hybrid VMMs)
該結構是上述兩種模式的混合體,VMM依然位於最底層,擁有所有物理資源,但VMM會主動讓出大部分I/O設備的控制權,將它們交由一個運行在特權VM上的特權OS來控制。VMM只負責CPU和內存的虛擬化,I/O 設備的虛擬化由VMM和特權OS共同完成。
這裏寫圖片描述
優點:可利用現有OS的I/O設備驅動;VMM直接控制CPU和內存等物理資源,虛擬化效率較高;若對特權OS的權限控制得當,虛擬機的安全性只依賴於VMM。
缺點:因特權OS運行於VM上,當需要特權OS提供服務時,VMM需要切換到特權OS,這裏面就產生上下文切換的開銷。
常見產品:

  • Xen
  • Sun Logical Domain

主要參考
http://blog.chinaunix.net/uid-20071539-id-1978450.html
http://blog.chinaunix.net/uid-26000137-id-3761117.html
http://blog.sina.com.cn/s/blog_722dabf20100p3ti.html
http://www.mcplive.cn/?controller=Article&id=5994&page=5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章