虛擬化技術的基本概念

靜態遷移

靜態遷移:也叫做常規遷移、離線遷移(Offline Migration)。就是在虛擬機關機或暫停的情況下從一臺物理機遷移到另一臺物理機。因爲虛擬機的文件系統建立在虛擬機鏡像上面,所以在虛擬機關機的 情況下,只需要簡單的遷移虛擬機鏡像和相應的配置文件到另外一臺物理主機上;如果需要保存虛擬機遷移之前的狀態,在遷移之前將虛擬機暫停,然後拷貝狀態至目的主機,最後在目的主機重建虛擬機狀態,恢復執行。這種方式的遷移過程需要顯式的停止虛擬機的運行。從用戶角度看,有明確的一段停機時間,虛擬機上的服務不可用。這種遷移方式簡單易行,適用於對服務可用性要求不嚴格的場合。


共享存儲的動態遷移

動態遷移(Live Migration):也叫在線遷移(Online Migration)。就是在保證虛擬機上服務正常運行的同時,將一個虛擬機系統從一個物理主機移動到另一個物理主機的過程。該過程不會對最終用戶造成明 顯的影響,從而使得管理員能夠在不影響用戶正常使用的情況下,對物理服務器進行離線維修或者升級。與靜態遷移不同的是,爲了保證遷移過程中虛擬機服務的可 用,遷移過程僅有非常短暫的停機時間。遷移的前面階段,服務在源主機的虛擬機上運行,當遷移進行到一定階段,目的主機已經具備了運行虛擬機系統的必須資 源,經過一個非常短暫的切換,源主機將控制權轉移到目的主機,虛擬機系統在目的主機上繼續運行。對於虛擬機服務本身而言,由於切換的時間非常短暫,用戶感 覺不到服務的中斷,因而遷移過程對用戶是透明的。動態遷移適用於對虛擬機服務可用性要求很高的場合。


SR-IOV

SR-IOV組織PCI-SIGPCIeSR-IOVPCIe(Physical FunctionPF)PCIe(Virtual FunctionVF)PFVFVM使VMVMM/出內(Input/output memory management unitIOMMU)DMA與中VF I/OVM難。

虛擬機器監視器(Hypervisor

Hypervisor,又稱虛擬機器監視器(英語:virtual machine monitor,縮寫爲 VMM),它爲在系統上“虛擬”運行的系統提供一套虛擬化硬件件。被Hypervisor用來執行一個或多個虛擬機器的電腦稱爲主體機器(host machine),這些虛擬機器則稱爲客體機器(guest machine)。


Passthrough模型

Passthrough I/O模型是指在客戶機內部能夠直接對硬件進行操作,如下圖所示。


Passthrough模型將設備獨佔式地分配給指定的客戶域,使該域具有最高的I/O訪問性能。

這樣做的優點:

  1. 不需模擬設備進行請求轉換,故訪問速度高;

  2. 客戶機能根據最新硬件,加載對應驅動,可充分發揮新硬件的功能;

  3. 客戶機可直接操縱硬件設備,提供了I/O性能。

Passthrough技術與基於軟件的虛擬化I/O模型相比的優勢:

  1. 可直接對I/O設備進行操作,降低了CPU的開銷;

  2. I/O操作不需要經過一個有特權的客戶機,不存在I/O瓶頸問題;

  3. 不需要修改客戶機驅動;

  4. VMM的設計相對簡單,可移植性較好。

當然,Passthrough技術也存在不足:

  1. Passthrough最大程度上提供I/O性能是以犧牲設備共享能力爲代價的;

  2. Passthrough I/O中的設備只能被某個客戶機所獨佔,難以充分發揮I/O設備的利用率。


特權級別

大部分的現代計算機體系結構都有兩個或兩個以上的特權級別,用來分隔內核和應用軟件。以x86爲例,爲了得到更高的保護控制,在x86的保護模式下定義了當前特權級別(Current Previleged Level,簡稱CPL),一共有四個特級層次(0 to 3)被定義,我們一般稱之爲Ring。Ring後面的數字越大特權越小,我們的操作系統一般都運行在Ring0上,而Ring1和2一般用來支持設備驅動,Ring3上面跑的就是應用軟件了。而在現在的x86處理器中,64位架構已經非常普遍,64位CPU因爲必須支持頁表模式,所以只有兩個特權級別,我們可以簡單理解爲Ring0和Ring3(實際上另有明確定義),這種模型我們常稱爲0/3模型。

系統中有一些關鍵操作指令只能在最高特權級別上執行,它們一般被稱爲特權指令,特權指令僅僅在當前的特權級別爲零時(CPL=0)纔會執行。如果在非特權級別上試圖執行特權指令,將生成一個一般保護異常(這通常會生成一個應用程序錯誤),而非特權指令則可以在任何一個權限級別執行。


敏感指令

在虛擬化世界的VMM模型中,我們可以看到所有的客戶機操作系統都運行在非特權模式下,即非Ring0級。因爲Guest OS已經不處在特權級別,所以存在一部分原本應該在特權級別執行但現在因爲層級權限不夠必須轉交VMM進行處理的指令,這部分指令就叫敏感指令。


臨界指令

而根據Popek和Goldberg的定義,指令集支持虛擬化的前提是:所有敏感指令都是特權指令。很可惜x86指令集不能滿足這個要求,這是它和RISC架構相比的一個不足。


在IBM之類的RISC指令集方面,因爲敏感指令全部是特權指令,所以敏感指令的執行都可以被VMM捕獲,而在x86方面,因爲有一部分敏感指令不屬於特權指令,變成了非特權指令,而非特權指令在較低的特權級別上是可以直接執行的,也就是說VMM不會處理這些指令。這樣就勢必會帶來問題,試想一個不受虛擬化軟件層控制的指令卻工作在虛擬化層之上,這是怎樣一個情景?x86至少有十幾條敏感指令是不會引發異常的非特權指令,在IA-32指令集中,我們稱這些非特權級別的敏感指令爲臨界指令。


半虛擬化

前面提到x86體系結構中,部分敏感指令不是特權指令,這些指令不能自動產生異常,因此想要系統正常運行就必須要捕獲這些指令。於是Xen採用修改Guest OS內核的方法對這些有缺陷的指令進行替換。在這種模式下,Xen位於操作系統和硬件之間,爲其上運行的Guest OS內核提供虛擬化的硬件環境。這時候,Xen運行在最高特權級的ring0,操作系統被特權解除,運行在ring1,ring3運行應用程序,構成虛擬機系統中的“0/1/3模型”。當Xen佔據最高特權級時,在Xen下運行的Guest OS內核將無法運行某些特權指令,並將產生一般保護錯誤,Xen必須通過超級調用向提供執行這些特權指令的接口。下圖是虛擬化前後的特權級的變化。




參考文獻:

[1] http://www.cnblogs.com/zhuguihua/archive/2012/11/03/2752841.html

[2] http://www.voidcn.com/blog/u014276460/article/p-3964672.html

[3] http://www.mcplive.cn/index.PHP/article/index/id/5788/page/5


發佈了91 篇原創文章 · 獲贊 33 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章