- 論壇徽章:
- 0
|
1 基本概念
1.1 虛擬化
虛擬化 (Virtualization) 是資源的邏輯表示,其不受物理限制的約束。
虛擬化技術(shù)的實(shí)現(xiàn)形式是在系統(tǒng)中加入一個(gè)虛擬化層,將下層的資源抽象成另一形式的資源,提供給上層使用。
本質(zhì)上,虛擬化就是由位于下層的軟件模塊,通過(guò)向上一層軟件模塊提供一個(gè)與它原先所期待的運(yùn)行環(huán)境完全一致的接口的方法,抽象出一個(gè)虛擬的軟件或硬件接口,使得上層軟件可以直接運(yùn)行在虛擬環(huán)境上。
通過(guò)空間上的分割、時(shí)間上的分時(shí)以及模擬,虛擬化可將一份資源抽象成多份,亦可將多份資源抽象成一份。
虛擬化中的兩個(gè)重要的定語(yǔ)名詞:宿主 (Host) 和客戶 (Guest)
Host 用在物理資源前,Guest 則用于虛擬出來(lái)的資源前。如將一個(gè)物理機(jī)器虛擬成多個(gè)虛擬機(jī)器,則稱物理機(jī)為物理機(jī) (Host Machine),運(yùn)行其上的 OS 為 Host OS;稱多個(gè)虛擬機(jī)為 Guest Machine,運(yùn)行其上的 OS 為 Guest OS
1.2 虛擬機(jī)
虛擬機(jī) (Virtual Machine) 是由虛擬化層提供的高效、獨(dú)立的虛擬計(jì)算機(jī)系統(tǒng),其皆擁有自己的虛擬硬件(CPU,內(nèi)存,I/O 設(shè)備)。通過(guò)虛擬化層的模擬,虛擬機(jī)在上層軟件看來(lái),其就是一個(gè)真實(shí)的機(jī)器。這個(gè)虛擬化層一般稱為虛擬機(jī)監(jiān)控器 (Virtual Machine Monitor, VMM)
![]()
1974 年,Popek 和 Goldberg 在論文 "Formal Requirements for Virtualizable Third Generation
Architectures" 中將 VM 定義為物理機(jī)的一種高效、隔離的復(fù)制,且指出 VM 的三個(gè)特征:
I. 同質(zhì) (Equivalence)
即 VM 的運(yùn)行環(huán)境和物理機(jī)的環(huán)境在本質(zhì)上是相同的,表現(xiàn)上可以有一些差異。如 CPU 的 ISA 必須一致,CPU core 的個(gè)數(shù)可以不同。
II. 高效 (Efficiency)
即 VM 的性能必須接近物理機(jī)。因此,常見(jiàn)的模擬器 (boches, simics ...) 就不能稱為 VM
為達(dá)此目的,軟件在 VM 上運(yùn)行時(shí),大多數(shù)指令要直接在硬件上執(zhí)行,只有少量指令需要 VMM 的模擬或處理。
III. 資源受控 (Resource control)
即 VMM 對(duì)物理機(jī)的所有資源有絕對(duì)的控制力
1.3 Full virtualization and Paravirtualization
Full virtualization: 所抽象的 VM 具有完全的物理機(jī)特性,OS 在其上運(yùn)行不需要任何修改。典型的有 VMWare, Virtualbox, Virtual PC, KVM-x86 ...)
Paravirtualization: 需 OS 協(xié)助的虛擬化,在其上運(yùn)行的 OS 需要修改。起初采用主要是為了解決 x86 體系結(jié)構(gòu)上完全虛擬化的困難(沒(méi)有 Intel VT & AMD-V 硬件虛擬化支持前;且不屑于動(dòng)態(tài)掃描指令修補(bǔ)之方法的性能),后來(lái)則主要是為了提高虛擬化的效率。典型的有 Xen, KVM-PowerPC 等。下表是市面上流行的虛擬化技術(shù)的一個(gè)概況:
![]()
數(shù)據(jù)來(lái)自 "VIRTUALIZATION WITH LOGICAL DOMAINS AND SUN COOLTHREADS SERVERS"
1.4 硬件虛擬化概況
1.4.1 x86
鑒于 x86 本身完全虛擬化的困難以及虛擬化性能的考慮,Intel 在 2006 年是引入 VT (VT-x for IA32, VT-i for Itanium)來(lái)解決之,AMD 以 AMD-V 緊隨之。
其后 Intel 又引入 VT-d (AMD 為 IOMMU) 對(duì) x86 平臺(tái)上的 I/O 虛擬化作了增強(qiáng)。
1.4.2 PowerPC
2001 年 IBM 在 Power4 中加入虛擬化支持,并在 2004 年的 Power5 中推出增強(qiáng)的虛擬化支持,且在 2009 年發(fā)布的 Power ISA v2.06 中規(guī)范化。Freescale 亦在 e500mc 中實(shí)現(xiàn) PowerISA v2.06 的虛擬化增強(qiáng)。
1.4.3 SPARC
2005 年 SUN 即在 SPARC 中引入虛擬化支持。
2 虛擬化技術(shù)概要之處理器虛擬化
VMM 對(duì)物理資源的虛擬可以劃分為三個(gè)部分:處理器虛擬化、內(nèi)存虛擬化和 I/O 虛擬化(設(shè)備)。其中以處理器的虛擬化最為關(guān)鍵。
體系結(jié)構(gòu)背景
簡(jiǎn)而言之,處理器呈現(xiàn)給軟件的接口就是一堆的指令(指令集)和一堆的寄存器(含用于通用運(yùn)算的寄存器和用于控制處理器行為的狀態(tài)和控制寄存器)。而 I/O 設(shè)備呈現(xiàn)給軟件的接口也就是一堆的狀態(tài)和控制寄存器(有些設(shè)備亦有內(nèi)部存儲(chǔ))。這些都是系統(tǒng)的資源,其中影響處理器和設(shè)備狀態(tài)和行為的寄存器稱為關(guān)鍵資源 或特權(quán)資源,如 x86 之 CR0 ~ CR4,MIPS 的 CP0 寄存器,PowerPC 的 Privileged SPR(SPR 編號(hào)第 5 位為 1)。
可以讀寫(xiě)系統(tǒng)關(guān)鍵資源的指令叫做敏感指令,如 x86 的 lgdt/sgdt/lidt/sidt/in/out,MIPS 的 mtc0/mfc0,PowerPC 的 mtmsr/mfmsr,SPARC 的 rdpr/wrpr 等,此類(lèi)又可稱為控制敏感指令。
還有一類(lèi)行為敏感指令,該類(lèi)指令的執(zhí)行結(jié)果依賴于系統(tǒng)的狀態(tài)(如 x86 之 popf)
現(xiàn)代計(jì)算機(jī)體系結(jié)構(gòu)一般至少有兩個(gè)特權(quán)級(jí),(即用戶態(tài)和核心態(tài),未加虛擬化擴(kuò)展的 SPARC和PowerPC 即是,MIPS 有三個(gè)特權(quán)級(jí)(外加一個(gè) Supervisor 態(tài),沒(méi)什么用),而 x86 有四個(gè)特權(quán)級(jí) (Ring0 ~ Ring3))用來(lái)分隔系統(tǒng)軟件和應(yīng)用軟件。
決大多數(shù)的敏感指令是特權(quán)指令,特權(quán)指令只能在處理器的最高特權(quán)級(jí)(內(nèi)核態(tài))執(zhí)行,如果執(zhí)行特權(quán)指令時(shí)處理器的狀態(tài)不在內(nèi)核態(tài),通常會(huì)引發(fā)一個(gè)異常而交由系統(tǒng)軟件來(lái)處理這個(gè)“非法訪問(wèn)”(陷入)。
少數(shù)敏感指令是非特權(quán)指令,如 x86 的 sgdt/sidt 等,非特權(quán)指令可以在用戶態(tài)讀取處理器的狀態(tài),如 sgdt/sidt 則可在用戶態(tài) (Ring3) 將 GDTR 和 IDTR 的值讀取到通用寄存器中。
對(duì)于一般 RISC 處理器,如 MIPS,PowerPC 以及 SPARC,敏感指令肯定是特權(quán)指令,唯 x86 例外。
2.1 經(jīng)典的虛擬化方法
經(jīng)典的虛擬化方法主要使用“特權(quán)解除” (Privilege deprivileging) 和“陷入-模擬” (Trap-and-Emulation) 的方式。即:將 Guest OS 運(yùn)行在非特權(quán)級(jí)(特權(quán)解除),而將 VMM 運(yùn)行于最高特權(quán)級(jí)(完全控制系統(tǒng)資源)。解除了 Guest OS 的特權(quán)后,Guest OS 的大部分指令仍可以在硬件上直接運(yùn)行,只有當(dāng)執(zhí)行到特權(quán)指令時(shí),才會(huì)陷入到 VMM 模擬執(zhí)行(陷入-模擬)。其早期的代表系統(tǒng)是 IBM VM/370
由此可引入虛擬化對(duì)體系結(jié)構(gòu) (ISA) 的要求:
A. 須支持多個(gè)特權(quán)級(jí)
此亦是現(xiàn)代操作系統(tǒng)的要求
B. 非敏感指令的執(zhí)行結(jié)果不依賴于 CPU 的特權(quán)級(jí)
“陷入-模擬” 的本質(zhì)是保證可能影響 VMM 正確運(yùn)行的指令由 VMM 模擬執(zhí)行,大部分的非敏感指令還是照常運(yùn)行。
C. CPU 需支持一種保護(hù)機(jī)制,如 MMU,可將物理系統(tǒng)和其它 VM 與當(dāng)前活動(dòng)的 VM 隔離
以上三個(gè)條件,現(xiàn)代體系結(jié)構(gòu)一般都滿足,唯有最后一個(gè)也是最重要的條件:
D. 敏感指令需皆為特權(quán)指令
此為保證敏感指令在 VM 上執(zhí)行時(shí),能陷入到 VMM.
因控制敏感指令的執(zhí)行可能改變系統(tǒng)(處理器和設(shè)備)的狀態(tài),為保證 VMM 對(duì)資源的絕對(duì)控制力維護(hù) VM 的正常運(yùn)行,這類(lèi)指令的執(zhí)行需要陷入而將控制權(quán)轉(zhuǎn)移到 VMM,并由其模擬處理之。
行為敏感指令的執(zhí)行結(jié)果依賴于 CPU 的最高特權(quán)級(jí),而 Guest OS 運(yùn)行于非最高特權(quán)級(jí),為保證其結(jié)果正確,亦需要陷入 VMM,并由其模擬之。
2. 2 x86 ISA 分析
x86 ISA 中有十多條敏感指令不是特權(quán)指令,因此 x86 無(wú)法使用經(jīng)典的虛擬化技術(shù)完全虛擬化。
如:sgdt/sidt/sldt 可以在用戶態(tài)讀取特權(quán)寄存器 GDTR/IDTR/LDTR 的值;popf/pushf 在 Ring0 和 Ring3 的執(zhí)行結(jié)果不同;其它的還有 smsw, lar, lsl, verr, verw, pop, push, call, jmp, int n, ret, str, move
關(guān)于這些指令的詳細(xì)分析可以參見(jiàn):"Analysis of the Intel Pentium's Ability to Support a Secure Virtual Machine Monitor"
2.3 x86 虛擬化方法
鑒于 x86 本身的局限,長(zhǎng)期以來(lái)對(duì) x86 的虛擬化都是通過(guò)軟件方式實(shí)現(xiàn),后來(lái) Intel 和 AMD 都引入各自的硬件虛擬化技術(shù)來(lái)彌補(bǔ)處理器的缺陷。
2.3.1 基于二進(jìn)制翻譯 (BT) 的全虛擬化 (Full virtualization)
其主要思想是在執(zhí)行時(shí)將 VM 上執(zhí)行的 Guest OS 之指令,翻譯成 x86 ISA 的一個(gè)子集,其中的敏感指令被替換成陷入指令。翻譯過(guò)程與指令執(zhí)行交叉進(jìn)行。不含敏感指令的用戶態(tài)程序可以不經(jīng)翻譯直接執(zhí)行。該技術(shù)為 VMWare Workstation,VMWare ESX Server 早期版本,Virtual PC 以及 QEMU 所采用。
2.3.2 基于掃描與修補(bǔ) (Scan-and-Patch) 的全虛擬化 (Full virtualization)
主要思想:
(1) VMM 會(huì)在 VM 運(yùn)行每塊指令之前對(duì)其掃描,查找敏感指令
(2) 補(bǔ)丁指令塊會(huì)在 VMM 中動(dòng)態(tài)生成,通常每一個(gè)需要修補(bǔ)的指令會(huì)對(duì)應(yīng)一塊補(bǔ)丁指令
(3) 敏感指令被替換成一個(gè)外跳轉(zhuǎn),從 VM 跳轉(zhuǎn)到 VMM,在 VMM 中執(zhí)行動(dòng)態(tài)生成的補(bǔ)丁指令塊
(4) 當(dāng)補(bǔ)丁指令塊執(zhí)行完后,執(zhí)行流再跳轉(zhuǎn)回 VM 的下一條指令處繼續(xù)執(zhí)行
SUN 之 Virtualbox 即采用該技術(shù)。
2.3.2 OS 協(xié)助的類(lèi)虛擬化 (Paravirtualization)
其基本思想是通過(guò)修改 Guest OS 的代碼,將含有敏感指令的操作,替換為對(duì) VMM 的超調(diào)用 (Hypercall,類(lèi)似 OS 的系統(tǒng)調(diào)用,可將控制權(quán)轉(zhuǎn)移到 VMM)。該技術(shù)的優(yōu)勢(shì)在于 VM 的性能能接近于物理機(jī),缺點(diǎn)在于需要修改 Guest OS.
該技術(shù)因 Xen 項(xiàng)目而廣為人知。
目前嵌入式領(lǐng)域的虛擬化,考慮到性能的因素,亦會(huì)在可以使用經(jīng)典虛擬化方法實(shí)現(xiàn)全虛擬的體系結(jié)構(gòu)上采用類(lèi)虛擬化技術(shù)。
2.3.3 硬件協(xié)助的虛擬化
鑒于 x86 在虛擬化上的缺陷,Intel 和 AMD 都引入自己的硬件虛擬化技術(shù)來(lái)協(xié)助完成虛擬化。
Intel VT-x (Virtualization Technology for x86)
Intel VT-i (Virtualization Technology for Itanium)
Intel VT-d (Virtualization Technology for Directed I/O)
AMD-V (AMD Virtualization)
其基本思想就是引入新的處理器運(yùn)行模式和新的指令,使得 VMM 和 Guest OS 運(yùn)行于不同的模式下,Guest OS 運(yùn)行于受控模式,原來(lái)的一些敏感指令在受控模式下全部會(huì)陷入 VMM。而且模式切換時(shí)上下文的保存恢復(fù)由硬件來(lái)完成。
該技術(shù)的引入使 x86 可以很容易地實(shí)現(xiàn)完全虛擬化。其被 KVM-x86,新版 VMWare ESX Server 3,Xen 3.0 以及大量 x86 平臺(tái)上的虛擬化軟件所采用。
2.4 其它體系結(jié)構(gòu)分析
其它 RISC 之體系結(jié)構(gòu),如 MIPS, PowerPC, SPARC 等,似乎不存在有敏感指令為非特權(quán)指令的情形。即它們應(yīng)該不存在虛擬化的困難。.
2.5 其它體系所采用之虛擬化方法
目前可見(jiàn)的非 x86 體系的虛擬化產(chǎn)品,似乎都傾向于使用類(lèi)虛擬化的技術(shù)手段。
3 虛擬化技術(shù)概要之內(nèi)存虛擬化
3.1 概述
因?yàn)?VMM (Virtual Machine Monitor) 掌控有所有系統(tǒng)資源,因此 VMM 握有整個(gè)內(nèi)存資源,其負(fù)責(zé)頁(yè)式內(nèi)存管理,維護(hù)虛擬地址到機(jī)器地址的映射關(guān)系。
因 Guest OS 本身亦有頁(yè)式內(nèi)存管理機(jī)制,則有 VMM 的整個(gè)系統(tǒng)就比正常系統(tǒng)多了一層映射:
A. 虛擬地址 (VA),指 Guest OS 提供給其應(yīng)用程序使用的線性地址空間
B. 物理地址 (PA),經(jīng) VMM 抽象的、虛擬機(jī)看到的偽物理地址
C. 機(jī)器地址 (MA) ,真實(shí)的機(jī)器地址,即地址總線上出現(xiàn)的地址信號(hào)
映射關(guān)系如下:
Guest OS: PA = f(VA)
VMM: MA = g(PA)
VMM 維護(hù)一套頁(yè)表,負(fù)責(zé) PA 到 MA 的映射。
Guest OS 維護(hù)一套頁(yè)表,負(fù)責(zé) VA 到 PA 的映射。
實(shí)際運(yùn)行時(shí),用戶程序訪問(wèn) VA1,經(jīng) Guest OS 的頁(yè)表轉(zhuǎn)換得到 PA1,再由 VMM 介入,使用 VMM 的頁(yè)表將 PA1 轉(zhuǎn)換為 MA1.
3.2 頁(yè)表虛擬化基本思想
普通 MMU 只能完成一次虛擬地址到物理地址的映射,在虛擬機(jī)環(huán)境下,經(jīng)過(guò) MMU 轉(zhuǎn)換所得到的“物理地址”并不是真正的機(jī)器地址。若需得到真正的機(jī)器地址,必須由 VMM 介入,再經(jīng)過(guò)一次映射才能得到總線上使用的機(jī)器地址。
顯然,如果虛擬機(jī)的每個(gè)內(nèi)存訪問(wèn)都需要 VMM 介入,并由軟件模擬地址轉(zhuǎn)換的效率是很低下的,幾乎不具有實(shí)際可用性,為實(shí)現(xiàn)虛擬地址到機(jī)器地址的高效轉(zhuǎn)換,現(xiàn)普遍采用的思想是:
由 VMM 根據(jù)映射 f 和 g 生成復(fù)合的映射 fg,并直接將這個(gè)映射關(guān)系寫(xiě)入 MMU
其可行性在于:
VMM 維護(hù)著映射 g
VMM 能夠訪問(wèn) Guest OS 的內(nèi)存,因此可以直接查詢 Guest OS 的頁(yè)表,從而獲得映射 f
計(jì)算復(fù)合映射 fg 能夠在恰當(dāng)?shù)臅r(shí)候高效地進(jìn)行
3.3 頁(yè)表虛擬化實(shí)現(xiàn)
目前采用的頁(yè)表虛擬化方法主要有兩個(gè): MMU 類(lèi)虛擬化 (MMU Paravirtualization) 和影子頁(yè)表
3.3.1 MMU Paravirtualization
該技術(shù)為 Xen 所采用。其基本原理是:當(dāng) Guest OS 創(chuàng)建一個(gè)新的頁(yè)表時(shí),會(huì)從它所維護(hù)的空閑內(nèi)存中分配一個(gè)頁(yè)面,并向 Xen 注冊(cè)該頁(yè)面,Xen 會(huì)剝奪 Guest OS 對(duì)該頁(yè)表的寫(xiě)權(quán)限,之后 Guest OS 對(duì)該頁(yè)表的寫(xiě)操作都會(huì)陷入到 Xen 加以驗(yàn)證和轉(zhuǎn)換。Xen 會(huì)檢查頁(yè)表中的每一項(xiàng),確保他們只映射了屬于該虛擬機(jī)的機(jī)器頁(yè)面,而且不得包含對(duì)頁(yè)表頁(yè)面的可寫(xiě)映射。后,Xen 會(huì)根據(jù)自己所維護(hù)的映射關(guān)系 g,將頁(yè)表項(xiàng)中的物理地址替換為相應(yīng)的機(jī)器地址,最后再把修改過(guò)的頁(yè)表載入 MMU。如此,MMU 就可以根據(jù)修改過(guò)頁(yè)表直接完成虛擬地址到機(jī)器地址的轉(zhuǎn)換。
3.3.2 影子頁(yè)表
類(lèi)虛擬化需要修改 Guest OS。對(duì)全虛擬化,則使用影子頁(yè)表 (Shadow Page Table) 技術(shù)來(lái)實(shí)現(xiàn)。
VMWare Workstation, VMWare ESX Server 和 KVM for x86 都是使用該技術(shù)。
與類(lèi)虛擬化類(lèi)似,影子頁(yè)表技術(shù)也是采用將復(fù)合映射 fg 直接寫(xiě)入 MMU 的思路。不同在于類(lèi)虛擬化技術(shù)直接將 fg 更新到 Guest OS 的頁(yè)表項(xiàng)中,而影子頁(yè)表則是 VMM 為 Guest OS 的每個(gè)頁(yè)表維護(hù)一個(gè)“影子頁(yè)表“,并將合成后的映射關(guān)系寫(xiě)入到”影子“中,Guest OS 的頁(yè)表內(nèi)容則保持不變。最后 VMM 將影子頁(yè)表寫(xiě)入 MMU
影子頁(yè)表的實(shí)現(xiàn)挑戰(zhàn)在于其時(shí)間和空間的開(kāi)銷(xiāo)很大。
時(shí)間:由于 Guest OS 構(gòu)造頁(yè)表時(shí)不會(huì)主動(dòng)通知 VMM,VMM 必須等到 Guest OS 發(fā)生缺頁(yè)時(shí)通過(guò)分析缺頁(yè)原因,再為其補(bǔ)全影子頁(yè)表。
空間:VMM 需要支持多個(gè)虛擬機(jī)同時(shí)運(yùn)行,而每個(gè)虛擬機(jī)的 Guest OS 通常會(huì)為其上運(yùn)行的每個(gè)進(jìn)程都創(chuàng)建一套頁(yè)表系統(tǒng),因此影子頁(yè)表的空間開(kāi)銷(xiāo)會(huì)隨著進(jìn)程數(shù)量的增多而迅速增大。
在時(shí)間開(kāi)銷(xiāo)和空間開(kāi)銷(xiāo)中做出權(quán)衡的方法是使用影子頁(yè)表緩存 (Shadow Page Table Cache),即 VMM 在內(nèi)存中維護(hù)部分最近使用過(guò)的影子頁(yè)表,只有當(dāng)影子頁(yè)表在緩存中找不到時(shí),才構(gòu)建一個(gè)新的,當(dāng)前主要的全虛擬化都采用了影子頁(yè)表緩存技術(shù)。
4 虛擬化技術(shù)概要之VMM結(jié)構(gòu)
4.1 概述
當(dāng)前主流的 VMM (Virtual Machine Monitor) 實(shí)現(xiàn)結(jié)構(gòu)可以分為三類(lèi):
宿主模型 (OS-hosted VMMs)
Hypervisor 模型 (Hypervisor VMMs)
混合模型 (Hybrid VMMs)
4.2 宿主模型
![]()
該結(jié)構(gòu)的 VMM,物理資源由 Host OS (Windows, Linux etc.) 管理
實(shí)際的虛擬化功能由 VMM 提供,其通常是 Host OS 的獨(dú)立內(nèi)核模塊(有的實(shí)現(xiàn)還含用戶進(jìn)程,如負(fù)責(zé) I/O 虛擬化的用戶態(tài)設(shè)備模型)
VMM 通過(guò)調(diào)用 Host OS 的服務(wù)來(lái)獲得資源,實(shí)現(xiàn) CPU,內(nèi)存和 I/O 設(shè)備的虛擬化
VMM 創(chuàng)建出 VM 后,通常將 VM 作為 Host OS 的一個(gè)進(jìn)程參與調(diào)度
如上圖所示,VMM 模塊負(fù)責(zé) CPU 和內(nèi)存虛擬化,由 ULM 請(qǐng)求 Host OS 設(shè)備驅(qū)動(dòng),實(shí)現(xiàn) I/O 設(shè)備的虛擬化。
優(yōu)點(diǎn):可以充分利用現(xiàn)有 OS 的設(shè)備驅(qū)動(dòng),VMM 無(wú)需自己實(shí)現(xiàn)大量的設(shè)備驅(qū)動(dòng),輕松實(shí)現(xiàn) I/O 設(shè)備的虛擬化。
缺點(diǎn):因資源受 Host OS 控制,VMM 需調(diào)用 Host OS 的服務(wù)來(lái)獲取資源進(jìn)行虛擬化,其效率和功能會(huì)受到一定影響。
采用該結(jié)構(gòu)的 VMM 有:VMware Workstation, VMWare Server (GSX), Virtual PC, Virtual Server, KVM(早期)
4.3 Hypervisor 模型
![]()
該結(jié)構(gòu)中,VMM 可以看作一個(gè)為虛擬化而生的完整 OS,掌控有所有資源(CPU,內(nèi)存,I/O 設(shè)備)
VMM 承擔(dān)管理資源的重任,其還需向上提供 VM 用于運(yùn)行 Guest OS,因此 VMM 還負(fù)責(zé)虛擬環(huán)境的創(chuàng)建和管理。
優(yōu)點(diǎn):因 VMM 同時(shí)具有物理資源的管理功能和虛擬化功能,故虛擬化的效率會(huì)較高;安全性方面,VM 的安全只依賴于 VMM 的安全
缺點(diǎn):因 VMM 完全擁有物理資源,因此,VMM 需要進(jìn)行物理資源的管理,包括設(shè)備的驅(qū)動(dòng),而設(shè)備驅(qū)動(dòng)的開(kāi)發(fā)工作量是很大的,這對(duì) VMM 是個(gè)很大的挑戰(zhàn)。
采用該結(jié)構(gòu)的 VMM 有:VMWare ESX Server, WindRiver Hypervisor, KVM(后期)
4.4 混合模型
該結(jié)構(gòu)是上述兩種模式的混合體,VMM 依然位于最底層,擁有所有物理資源,但 VMM 會(huì)主動(dòng)讓出大部分 I/O 設(shè)備的控制權(quán),將它們交由一個(gè)運(yùn)行在特權(quán) VM 上的特權(quán) OS 來(lái)控制。
VMM 只負(fù)責(zé) CPU 和內(nèi)存的虛擬化,I/O 設(shè)備的虛擬化由 VMM 和特權(quán) OS 共同完成:
![]()
優(yōu)點(diǎn):可利用現(xiàn)有 OS 的 I/O 設(shè)備驅(qū)動(dòng);VMM 直接控制 CPU 和內(nèi)存等物理資源,虛擬化效率較高;若對(duì)特權(quán) OS 的權(quán)限控制得當(dāng),虛擬機(jī)的安全性只依賴于 VMM。
缺點(diǎn):因特權(quán) OS 運(yùn)行于 VM 上,當(dāng)需要特權(quán) OS 提供服務(wù)時(shí),VMM 需要切換到特權(quán) OS,這里面就產(chǎn)生上下文切換的開(kāi)銷(xiāo)。
采用該結(jié)構(gòu)的 VMM 有:Xen, SUN Logical Domain
5 虛擬化技術(shù)概要之I/O虛擬化
概述
VMM 通過(guò) I/O 虛擬化來(lái)復(fù)用有限的外設(shè)資源,其通過(guò)截獲 Guest OS 對(duì) I/O 設(shè)備的訪問(wèn)請(qǐng)求,然后通過(guò)軟件模擬真實(shí)的硬件。
軟件通過(guò) I/O設(shè)備的一堆的狀態(tài)寄存器、控制寄存器、中斷(有些設(shè)備有內(nèi)部存儲(chǔ))與其交互。
目前 I/O 設(shè)備的虛擬化方式主要有三種:
設(shè)備接口完全模擬
前端/后端模擬
直接劃分
5.1 設(shè)備接口完全模擬
即軟件精確模擬與物理設(shè)備完全一樣的接口,Guest OS 驅(qū)動(dòng)無(wú)須修改就能驅(qū)動(dòng)這個(gè)虛擬設(shè)備。
優(yōu)點(diǎn):沒(méi)有額外的硬件開(kāi)銷(xiāo),可重用現(xiàn)有驅(qū)動(dòng)程序
缺點(diǎn):為完成一次操作要涉及到多個(gè)寄存器的操作,使得 VMM 要截獲每個(gè)寄存器訪問(wèn)并進(jìn)行相應(yīng)的模擬,這就導(dǎo)致多次上下文切換;由于是軟件模擬,性能較低。
5.2 前端/后端模擬
VMM 提供一個(gè)簡(jiǎn)化的驅(qū)動(dòng)程序(后端, Back-End)
Guest OS 中的驅(qū)動(dòng)程序?yàn)榍岸?(Front-End, FE)
前端驅(qū)動(dòng)將來(lái)自其他模塊的請(qǐng)求通過(guò)與 Guest OS 間的特殊通信機(jī)制直接發(fā)送給 Guest OS 的后端驅(qū)動(dòng),后端驅(qū)動(dòng)在處理完請(qǐng)求后再發(fā)回通知給前端。
Xen 即采用該方法。
優(yōu)點(diǎn):基于事務(wù)的通信機(jī)制,能在很大程度上減少上下文切換開(kāi)銷(xiāo);沒(méi)有額外的硬件開(kāi)銷(xiāo)
缺點(diǎn):需要 VMM 實(shí)現(xiàn)前端驅(qū)動(dòng);后端驅(qū)動(dòng)容易成為瓶頸
5.3 直接劃分
即直接將物理設(shè)備分配給某個(gè) Guest OS,由 Guest OS 直接訪問(wèn)I/O 設(shè)備(不經(jīng) VMM)
目前與此相關(guān)的技術(shù)有 IOMMU(Intel VT-d, PCI-SIG 之 SR-IOV 等)
優(yōu)點(diǎn):重用已有驅(qū)動(dòng);直接訪問(wèn)減少了虛擬化開(kāi)銷(xiāo);
缺點(diǎn):需要購(gòu)買(mǎi)較多額外硬件。
本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u3/110913/showart_2185421.html |
|