在研究和學(xué)習(xí)虛擬化技術(shù)的過程中看了很多文檔,很多是翻譯成中文的,對那些無私的為大家服務(wù)的貢獻(xiàn)者很是敬佩,同時也觸發(fā)了我為大家做些貢獻(xiàn)的愿望。事實上翻譯和整理的過程也是自己進(jìn)一步學(xué)習(xí)的過程。由于自己的水平有限,翻譯過程中的錯誤歡迎大家批評指正。
開源,很好! 概要 本文檔描述的是Xen hypervisor的宏觀體系結(jié)構(gòu)、輔助工具以及構(gòu)建一個完整虛擬化環(huán)境所需的應(yīng)用程序。本文的綜合介紹了基于Xen3.2(2008年1月)的Xen體系結(jié)構(gòu),更詳盡的描述請參考Xen books。 Xen組成要素 一個Xen虛擬化環(huán)境由以下相互配合的元素構(gòu)成: Xen Hypervisor Domain 0 Domain管理和控制工具 Domain U PV客戶系統(tǒng) Domain U HVM客戶系統(tǒng) 下面的圖形是對這些要素基本組織的描述 ![]() Xen Hypervisor Xen Hypervisor是一個介于硬件和操作系統(tǒng)之間的軟件層,它負(fù)責(zé)在各虛擬機(jī)之間進(jìn)行CPU調(diào)度和內(nèi)存分配(partitioning)。Xen Hypervisor不僅抽象出硬件層,同時控制虛擬機(jī)的執(zhí)行,因為這些虛擬機(jī)共享同一個處理環(huán)境。Xen Hypervisor不會處理網(wǎng)絡(luò)、存儲設(shè)備、視頻以及其他I/O。 Domain 0 Domain 0是一個修改過的Linux kernel,是唯一運(yùn)行在Xen Hypervisor之上的虛擬機(jī),它擁有訪問物理I/O資源的權(quán)限,同時和系統(tǒng)上運(yùn)行的其他虛擬機(jī)進(jìn)行交互。Domain 0需要在其它Domain啟動之前啟動。 Domain 0中包含兩個驅(qū)動:Network Backend Driver和Block Backend Driver,分別負(fù)責(zé)處理來自Domain U的網(wǎng)絡(luò)和本地磁盤請求。Network Backend Driver直接和本地網(wǎng)絡(luò)硬件進(jìn)行通信以處理所有來自Domain U上客戶操作系統(tǒng)的網(wǎng)絡(luò)請求。Block Backend Driver和本地存儲設(shè)備進(jìn)行通信以處理來自Domain U的讀寫請求。 ![]() Domain U 運(yùn)行在Xen Hypervisor上的所有半虛擬化(paravirtualized)虛擬機(jī)被稱為“Domain U PV Guests”,其上運(yùn)行著被修改過內(nèi)核的操作系統(tǒng),如Linux、Solaris、FreeBSD等其它UNIX操作系統(tǒng)。所有的全虛擬化虛擬機(jī)被稱為“Domain U HVM Guests”,其上運(yùn)行著不用修改內(nèi)核的操作系統(tǒng),如Windows等。 Domain U PV Guests的內(nèi)核知道它自己不能直接訪問物理硬件,因為他知道有其他的虛擬機(jī)也運(yùn)行在同一個環(huán)境中。而Domain U HVM Guests的內(nèi)核不知道他正在和其他虛擬機(jī)共享一個處理環(huán)境,它認(rèn)為它運(yùn)轉(zhuǎn)在物理硬件上。 Domain U PV Guests包含兩個驅(qū)動:“PV Network Driver”和“PV Block Driver”。 ![]() Domain U HVM Guests虛擬機(jī)內(nèi)沒有PV Driver,而是在Domain 0里為每一個HVM Guest啟動一個特殊守護(hù)進(jìn)程:Qemu-dm,由Qemu-dm負(fù)責(zé)客戶操作系統(tǒng)的網(wǎng)絡(luò)和磁盤請求。 Domain U HVM Guests必須進(jìn)行初始化為某類機(jī)器,所以要在Domain U上附加一個軟件:Xen虛擬固件,來模擬BIOS。關(guān)于Xen虛擬化固件的更多信息請參考后面的內(nèi)容。 ![]() 域(Domain)管理和控制 開源社區(qū)提供了一系列的域管理和控制工具(Linux守護(hù)程序)。這些服務(wù)運(yùn)行在Domain 0,他們支持所有對虛擬化環(huán)境的管理和控制,下面的幾個圖中為了更清楚的說明將這些守護(hù)進(jìn)程畫在了Domain 0的外部。 Xend Xend是一個python應(yīng)用程序,它是Xen虛擬化環(huán)境的系統(tǒng)管理工具。它通過對libxenctrl庫的調(diào)用實現(xiàn)對Xen Hypervisor的請求。Xend處理的所有請求都是通過Xm工具提供的XML RPC接口提交的,見下圖。 ![]() Xm Xm是一個命令行工具,它接受用戶的輸入并把指令通過XML RPC傳輸給Xend。 Xenstored Xenstored維護(hù)一個信息檔案,包括內(nèi)存和建立在Domain 0與Domain U之間的事件通道。Domain 0通過改變這個檔案來設(shè)置和其他虛擬機(jī)的設(shè)備通道。(具體信息請參考Domain 0和Domain U的通信) Libxenctrl Libxenctrl是一個C語言的庫,它為Xend提供與Xen Hypervisor通信的能力。privcmd是Domain 0中的一個特殊驅(qū)動,它負(fù)責(zé)提交請求到hypervisor。 ![]() Qemu-dm 每一個運(yùn)行在Xen虛擬化環(huán)境下的HVM客戶系統(tǒng)都有他自己的Qemu守護(hù)進(jìn)程。該進(jìn)程處理來自HVM客戶系統(tǒng)的所有網(wǎng)絡(luò)和磁盤請求,以支持Xen虛擬化環(huán)境下的全虛擬化。Qemu必須存在于Xen hypervisor之外,因為它需要訪問網(wǎng)絡(luò)和I/O設(shè)備,所以他運(yùn)行在Domain 0 。 現(xiàn)在已經(jīng)有一個新的工具來代替Qemu對HVM客戶系統(tǒng)的支持,這就是Stub-dm。它是為Xen的將來版本開發(fā)的,Xen3.2還不具備該特性,可能發(fā)布在Xen3.3中。 Xen虛擬化固件 Xen虛擬化固件是一個虛擬的BIOS,它被加載到每一個Domain U HVM Guest以提供標(biāo)準(zhǔn)的啟動指令,保證客戶操作系統(tǒng)在正常啟動過程中能得到標(biāo)準(zhǔn)的PC兼容的軟件環(huán)境。 Xen操作 這部分描述一個半虛擬化的Domain U如何通過Xen hypervisor、Domain 0 與外部的網(wǎng)絡(luò)以及存儲進(jìn)行通信的。 Domain 0與Domain U的通信 前面講到過,Xen Hypervisor不會支持網(wǎng)絡(luò)和磁盤請求的,因此一個PV客戶系統(tǒng)必須通過和Xen Hypervisor、Domain 0通信,來實現(xiàn)網(wǎng)絡(luò)和磁盤請求。下面這個例子描述了PV客戶系統(tǒng)如何將一個數(shù)據(jù)寫到本地硬盤。 PV客戶系統(tǒng)的開設(shè)備驅(qū)動程序接收到一個寫請求,并且通過Xen Hypervisor寫數(shù)據(jù)到適當(dāng)?shù)谋镜貎?nèi)存中,該內(nèi)存是和Domain 0共享的。在Domain 0 和Domain U之間存在一個事件通道(event channel),通過該通道二者進(jìn)行異步的域間中斷通信。Domain 0會接收到一個來自Xen Hypervisor的中斷,觸發(fā)PV Block Backend Driver訪問上述的內(nèi)存,讀取來自PV客戶系統(tǒng)的數(shù)據(jù),然后將這些數(shù)據(jù)寫入硬件磁盤。 下圖中事件通道表示為連接Domain 0與Domain U的一個區(qū)域,這是系統(tǒng)工作流的一個簡化。事實上事件通道運(yùn)行在Xen Hypervisor,通過Xenstored中的特定中斷實現(xiàn),提供Domain 0與Domain U之間的快速共享內(nèi)存。 見下圖。 ![]() 術(shù)語表 C: ![]() Daemons: ![]() Driver: ![]() Full Virtualization: ![]() Interrupt: ![]() Kernel: ![]() Paravirtualized: ![]() Python: ![]() ROM BIOS: ![]() XML PRC: ![]() 譯者:BiaBear 博客: ![]() 原文地址: ![]() |
|