摘 要:為解決在現有透明計算系統中磁盤等設備的虛擬化,需要對操作系統進行修改才能在端計算機上運行的問題,提出透明計算系統中一種基于虛擬機技術的設備子系統。以Intel VT硬件級虛擬支持和Xen虛擬化技術為基礎, 在全虛擬化的虛擬機上運行用戶操作系統: 通過運行在管理域用戶空間中設備模型的虛擬磁盤和網絡驅動,將用戶域訪問磁盤和網絡的I/O請求跨網絡地重定向到服務器進行處理, 從而實現端計算機上多操作系統的遠程運行。在VT硬件平臺和Xen虛擬機監控器上實現了原型系統,驗證了該方法的可行性。
關鍵詞:透明計算; 設備模型;虛擬機
中圖分類號:TP393 文獻標志碼:A 文章編號:1001-3695(2008)08-2550-04
Design and implementation ofdevice sub-system of transparent
computing system based on machine virtualization
XU Guang-bin1, WEI Li1,ZHOU Yue-zhi1, TAO Ran2
(1. Dept. of Computer Science Technology, Tsinghua University, Beijing 100084, China; 2.School of Computer, Wuhan University, Wuhan 430072, China)
Abstract:To host an operating system on client devices in a transparent system, the operating system needs to be modified to support device I/O redirection to the server: corresponding virtualized device drivers must be ported to replace original dri-vers.Besides, this method was difficult to be implemented in an operating systems without open interfaces, such as Windows XP. This paper presented a virtualized machine-based device subsystem to solve this problem. By leveraging hardware-supported virtualization of Intel VT and full virtualization approach of Xen,the I/O requested to disk and network devices in the guest domain were redirected to the transparent computing server through presented virtual device drivers integrated into the service domain. As a result, operating systems could run in a transparent client device unmodified. It also implemented a prototype, which verified feasibility of the new method.
Key words:transparent computing; device model; virtual machine
在基于普適計算模式的網絡計算中,用戶希望通過各種形態的計算設備隨時隨地從普適計算的基礎設施中獲取包括操作系統在內的各種個性化計算服務。文獻[1]中提出普適計算的一種新的實現模式——透明計算。透明計算將存儲與計算分離, 計算機使用的包括操作系統在內的程序都從網絡中的服務器按需下載運行, 使得通過同一端設備可獲得來自于不同操作系統平臺的各種服務。
基于透明計算模式,清華大學研制了x86硬件平臺上的可管理多媒體網絡計算機MMNC(manageable multimedia network computer)[2]系統,目前已獲得廣泛應用。但MMNC需要修改操作系統,對磁盤數據的訪問借助于在要加載的操作系統中加入虛擬磁盤驅動來替換操作系統自帶磁盤驅動,因此需要進行有針對性的移植和開發,這對于未開發底層接口的操作系統來說難度很大。為解決該問題,使得能以一種統一的方式在透明計算系統中增加新的操作系統,并簡化開發難度,本文提出基于虛擬機的透明計算系統——MMNC-VX,設計并實現了MMNC-VX的I/O設備子系統,利用Intel VT[3]硬件平臺對虛擬化的支持和Xen[4]在硬件虛擬機(HVM)模式下的虛擬化技術實現跨網絡環境下端計算機對虛擬磁盤、網絡等各種設備的I/O訪問,無須修改操作系統即可在透明計算環境中運行,實現了系統原型,證明了該方法的可行性和有效性。
1 基于透明計算的系統
透明計算在硬件系統上與傳統的端計算機/服務器相似, 分為端計算機(透明計算機或TC)和服務器(透明服務器或TS)。用戶可選擇需要的操作系統(如Linux或Windows)和應用(一個終端得到不同類型的服務), 然后像使用PC機一樣使用透明計算機。程序根據用戶需按塊流(block-streaming)的方式加載到客戶端上執行。用戶可以在不同的客戶端上獲得同樣的服務。所有計算對用戶透明, 用戶只管使用服務, 所有的應用由管理員在服務器端管理。作為普適計算的一種實現模式, 透明計算以一種個性化、 主動化的方式向終端用戶提供跨操作系統平臺的各種應用, 豐富了用戶的體驗。透明計算的概念如圖1所示。
基于透明計算模式,清華大學網絡系統組研制了MMNC系統,目前已廣泛應用于教育、軍事、電子政務等領域,并獲得較好反映。
MMNC中,端計算機的設備子系統通過基于塊的虛擬設備——虛擬磁盤,提供對磁盤數據的訪問,其內容實際上存儲于由服務器保存和管理的虛擬磁盤鏡像中。虛擬磁盤驅動則被實現在端計算機上加載的操作系統中。因此,在MMNC系統中加入一種新操作系統時,就需要熟悉其底層接口,并將透明計算的虛擬磁盤驅動等相關模塊移植到新操作系統上。這個方法不僅繁瑣,而且難以在操作系統底層接口不開放的Windows XP等系統內實施。
2 基于虛擬機的設備子系統結構
為了能以一種統一的方式在透明計算系統中添加新操作系統并簡化開發難度,本文提出基于虛擬機技術的透明計算系統——MMNC-VX。其中的一個關鍵性問題是需要一個在透明計算環境下的基于虛擬機的設備子系統,可以通過在運行的用戶操作系統之下為其提供跨網絡的設備虛擬,無須對上層用戶操作系統進行修改。如圖2所示, MMNC-VX中端計算機和服務器通過計算機網絡連接,服務器可以是一臺普通的PC,應用計算和各種操作系統與支持工具都在服務器端。端計算機本地無二級存儲器,也不駐留任何軟件,只是帶有基本輸入/輸出系統固件芯片的主板等物理設備。
MMNC-VX中,服務器的關鍵功能是跨網絡提供端計算機啟動和運行所需的各種軟件資源,包括通過引導服務向端計算機提供啟動時所需的虛擬機內核模塊。此外,服務器在端計算機運行時,通過基于IP的網絡存儲訪問協議(NSAP)向端計算機提供對虛擬磁盤數據的訪問。其中,服務器根據封裝到NSAP協議包中的來自于不同端計算機的磁盤I/O請求,進行到具體磁盤映像的映射并完成相應的I/O處理,然后將I/O處理的結果封裝到NSAP包中發送回端計算機。此外,所有的系統維護和管理工作都集中在服務器上進行,根據功能大致分為用戶管理、資源管理、虛擬磁盤管理、I/O管理。這種集中式管理使得用戶使用的端計算機上無須進行任何的管理和維護,實現了計算機的零管理,減少了系統的總體擁有成本。
MMNC-VX中供用戶使用的計算設備是端計算機,如圖2所示。其功能結構從下向上大致分為四個層次,即硬件平臺層、基本輸入/輸出系統(BIOS)固件層、虛擬機監控器(VMM)層和虛擬操作系統層。
硬件平臺層由帶有Intel的VT技術[3]的CPU、主板及外設構成。VT對Intel的IA-32架構進行了擴展以提供對虛擬化的硬件支持。它對處理器操作形式進行劃分使得可以在Xen等VMM上按照HVM方式運行未經修改的操作系統,即按照root的虛擬機擴展(VMX)形式運行VMM;按照非root的VMX操作運行上層的虛擬機。
MMNC-VX采用Intel的EFI[5]作為BIOS固件層。除了完成正常的環境初始化和自檢等功能作為擴展,BIOS固件層還包括一個遠程引導模塊XenOS Loader。它的功能是在開機后自動在網上發現服務器,并通過服務器上的引導服務從服務器上引導虛擬機內核。XenOS Loader被作為EFI平臺上的自動加載模塊。開機后,XenOS Loader模塊被自動加載運行,先通過DHCP完成端計算機網絡參數的配置,然后通過引導服務下載并執行虛擬機內核模塊。之后,通過域0中內嵌的虛擬磁盤驅動和網絡驅動,以及NSAP協議遠程使用服務器上的虛擬磁盤,從而完成根文件系統的掛載及域0的啟動。
虛擬機監控器層對CPU、內存、I/O設備等本機的硬件資源進行虛擬化,使得上層的虛擬機可以動態地進行共享。MMNC-VX采用開源的Xen作為虛擬機監控器。
在虛擬操作系統層,運行在Xen上層的虛擬機被稱為虛擬域。其中虛擬域0是作為監控器擴展的服務和管理域。域0包括Xen控制工具(xend/xm),它可通過VMM層中的控制接口對CPU、內存、I/O設備的共享進行控制。域0還可在監控器上生成多個用戶域,每個用戶域為操作系統提供了一個完整的虛擬環境,使得操作系統和操作系統中的應用程序無須任何修改就可直接運行在其中。它由域0根據用戶選擇以及相應的域配置文件自動生成。MMNC-VX中,域0通過運行在其用戶空間的設備仿真模塊為用戶域提供磁盤和網絡等設備的訪問,用戶域的操作系統則透明地運行在VMM上供用戶使用。
3 端計算機上設備的虛擬化
如圖3所示,MMNC-VX中端計算機上基于VT的硬件平臺層除了提供端計算機與服務器之間的物理網絡連接的功能,向上則定義了可以用于虛擬機監控器創建和管理虛擬機的處理器抽象層接口, 使Xen虛擬機監控器可以直接運行在其上。端計算完成啟動后,Xen監控器被運行在x86指令架構的0環(ring0)以下,而域0和用戶域則被運行在0環上。Xen監控器提供設備的虛擬化,并對運行的域進行CPU的調度。其中,Xen監控器通過VT中的VMEntry指令來調度執行一個域,同時自動保存自身處理器狀態并加載域處理器狀態。用戶域向上虛擬出一臺完整的機器,從而操作系統,如Windows XP可以不經修改就直接運行在用戶域中,用戶則可以像普通PC那樣透明地對端計算機進行使用。
域0用戶空間上的設備模型,即虛擬I/O設備為用戶域提供了對PC平臺的抽象,使得用戶域中的操作系統所看到的是具有鍵盤、鼠標、實時時鐘、8259中斷控制器、8254時鐘、CMOS、IDE disk、軟盤、CDRom和VGA/顯卡的一個PC平臺。
具體地,VT通過VMExit事件支持對平臺的虛擬化。在用戶域操作系統的運行期間,三類指令的執行將觸發VT中的VMExit事件:無條件的CPU特權指令,如CPUID;某些虛擬機控制指令,如HLT;某些異常或I/O特權指令。其中,異常指令和I/O特權指令分別通過對與其相應的位圖進行設置來截獲。當對應I/O設備端口被設置時,VT自動硬件捕捉訪問該I/O設備端口的發生,并作為VMExit類型事件退出用戶域,然后通過監控器調用相應的VMExit事件處理程序來完成虛擬化的工作。在MMNC-VX設備子系統中,通過對I/O設備位圖(I/O bitmap)進行設置,通過Xen監控器將用戶域的磁盤和網絡等主要I/O設備訪問事件的處理轉換為利用本地物理網卡進行跨網絡的操作。
域0中,設備模型的主要功能是等待來自于用戶域的I/O事件,并將其分派給適當的設備仿真模塊。其中, 虛擬磁盤向端計算機提供可平面尋址的數據塊存儲。一旦設備仿真模型完成I/O請求,它將I/O處理的響應結果通過Xen的I/O請求通信機制返回給用戶域驅動程序。設備模型與監控器之間使用共享內存來交互I/O請求和響應。
3.1 I/O請求處理
Xen提供了域與監控器、域與域之間的通用通信機制:超調用(hypercall)、事件(event或upcall)、事件通道以及共享內存(shared ring)。在MMNC-VX設備子系統中, hypercall用于域對監控器的調用;upcall用于監控器向域0通知 I/O請求的產生和設備中斷的發生;事件通道是用于虛擬域內部、Xen與域和虛擬域之間的一種通用異步事件通知機制,還附屬有一個共享的內存環以實現附屬數據的傳遞。對于I/O請求和低速類I/O數據的傳送,Xen采用一種稱為I/O描述符(I/O descriptor)的環狀結構來作為用戶域與域0之間的信息載體。作為一種共享內存環,I/O描述符通過兩對生產者—消費者(producer-consumer)的指針來實現。借助Xen監控器,用戶域的I/O請求被放在一個環上,其生產者指針向前移動一位。域0將請求取出處理時,對應的消費者指針前移一位。另一方面,域0將響應(處理結果)放在相同的環上,并將另一個生產者指針前移一位并等待Xen監控器為用戶域將響應取走,這時與該生產者指針相對應的另一個消費者指針將前移一位。I/O請求可以單個或成批地被處理。I/O描述符以及兩對指針的關系如圖4所示。
由于域0可以訪問所有的內存空間,對于高速的DMA等數據傳遞,域0中的設備模型可以和用戶域地址空間之間進行內存映射輸入/輸出操作(MMIO)來實現。
在端計算機上,用戶域本身并不能直接訪問物理資源以及Xen監控器。x86架構提供了16位的I/O端口空間。當操作系統對磁盤和網絡設備進行I/O端口訪問時,對端口的訪問指令將被作為特權指令而觸發VMExit事件,導致控制權從用戶域轉向監控器。VMExit對I/O設備的訪問截獲主要通過設置監視器的虛擬機控制結構VMCS中的I/O bitmap進行,它設置了需要對哪些設備端口訪問會觸發VMExit事件。MMNC-VX中設置對磁盤和網絡設備訪問時觸發VMExit事件。
Xen監控器接收到用戶域由于訪問設備產生的VMExit事件后,通過Xen的事件通道通知域0在I/O描述符中將I/O請求發給運行在域0用戶空間的設備模型進行處理。
3.2 磁盤訪問
MMNC-VX的一次磁盤訪問操作涉及域、監控器和進程之間的切換,以及跨網絡在服務器端的處理。以讀操作為例,一次磁盤I/O過程開始于用戶域的文件系統請求磁盤塊時,具體經過以下的步驟:
a)用戶操作系統對磁盤設備的I/O端口進行讀取,觸發VMExit事件,控制權從用戶域轉到監控器。
b)進入VMExit事件處理程序。對觸發VMExit的指令進行解析;構造I/O請求數據結構來描述該磁盤設備事件,參數包括端口號、訪問尺寸、方向、是否字符串等,將該結構通過I/O描述符發送給域0的設備模型。
c)將控制權調度給域0,域0輪詢到有發送給設備模型的事件到來,并將需要完成的操作分發到設備模型。
d)域0中進行進程切換,將控制權轉移給設備模型。
e)設備模型調用Vdisk驅動,并喚醒Vdisk的I/O端口和MMIO操作。Vdisk負責將I/O請求和數據封裝到NSAP包,包括邏輯塊號的訪問請求被封裝到NSAP包中,并調用域0中物理網卡的驅動發送給服務器上的虛擬磁盤服務。
f)服務器解析收到的NSAP包,根據用戶身份和I/O請求內容將磁盤I/O請求重定向到對應的虛擬磁盤進行處理,完成后處理結果發回給端計算機,包括虛擬磁盤鏡像中對應塊的內容。
g)設備模型從Vdisk驅動中獲得處理結果,對單個I/O請求的跨網絡處理結束。當用戶域一次發送過來的一批I/O請求都處理完畢,設備模型的一次仿真過程結束。
h)用戶域被調度執行,用戶域上的一次I/O過程結束。
MMNC-VX用戶域的整個磁盤I/O過程對上層操作系統透明,因此無須對用戶操作系統作修改;且與進程級虛擬機方式相比,通過硬件捕獲I/O事件效率更高、更安全。
3.3 網絡訪問
與磁盤的情況類似,MMNC-VX中用戶域操作系統對網絡設備的I/O請求進行處理,也是通過在監控器中設置設備的I/O bitmap來進行硬件截獲,并通過Xen的通信機制傳遞給域0中的設備模型進行處理。所不同的是,由于虛擬網卡是一種混雜設備,I/O數據不能像磁盤那樣采用MMIO進行基于內存映射的高速數據存取,而是采用了一種零拷貝的策略:域0的虛擬網卡訪問用戶域空間的一個I/O請求的I/O buffer時,先申請等大小的一個空白內存區域,在訪問I/O數據時,通過交換內存區塊的所有權來完成數據的傳遞。此外,與Xen本地HVM模式的虛擬機所不同的是,由于透明計算端計算機本地無硬盤,域0和用戶域操作系統加載之后都需要跨網絡通過域0中的Vdisk訪問磁盤數據。傳統方式下用橋接模式虛擬網卡的辦法會使已經建立的連接中斷而造成系統崩潰。MMNC-VX在域0的設備模型中利用Tap/Tun設備為用戶域創建專用的虛擬網卡。同時,類似于磁盤的I/O處理,通過I/O描述符將用戶域來往于Tap/Tun虛擬網卡的ARP和IP等數據包以路由的方法轉換為利用域
0的物理網卡驅動進行轉發。
4 實現及測試結果
基于Intel支持VT的硬件平臺實現了MMNC-VX原型。端計算配置為:主板Intel 945GCZ,處理器Intel PentiumD 3 GHz雙核,帶VT支持,BIOS固件采用EFI標準的Intel Tiano[7],內存768 MB,網卡Intel Pro100,虛擬機監控器Xen-3.0.4,域0的Fedora Linux內核linux-2.6.16.33。設備模型中,虛擬磁盤和網卡實現為用戶空間的單線程程序,其他虛擬設備用Qemu[6]進行虛擬。用戶域操作系統為Windows XP Professional+SP2,內存512 MB。服務器采用相同配置的一臺普通PC,兩者通過百兆局域網交換機連接。
實現的MMNC-VX中,端計算機可以透明地像普通PC一樣使用,各種軟件如電子辦公、多媒體播放、網絡應用等都可正常使用。本文還利用PCMark05[8]對端計算機基于硬件虛擬化的整機運行性能進行了測試,并與相同硬件的普通PC,以及帶本地硬盤的HVM模式的Xen虛擬化Windows XP的情況作了對比測試,結果如表1所示。與真實PC相比,MMNC-VX除了視頻由于Qemu虛擬出的顯示適配卡為較老的Cirrus Logic5446(4 MB),達不到PCMark05測試要求以外,對CPU和內存等的虛擬都獲得了與真實機器幾乎相同的結果,硬盤的虛擬效率也十分接近。兩種虛擬化模式間各項測試的效率較為接近。
表1 MMNC-VX、PC以及本地Xen虛擬機性能比較表
test unitPClocal HVM MMNC-VXCPU Score3 4773 4653 368Memory Score3 6803 4903 428Graphics Score1 019N/AN/AHDD Score4 6462 7822 539HDD-XP Startup/MBps7.9285.0274.696HDD-General Usage/MBps4.8083.8633.326File Compressing/MBps7.6927.4227.180Application Loading/MBps5.6954.4374.4435 結束語
本文設計了一種基于虛擬機技術的透明計算系統的設備子系統。該方法實現用戶操作系統與透明計算的硬件無關,使操作系統無須修改就可運行在透明計算的端計算機上。在Intel的VT硬件平臺和Xen虛擬機監控器上實現了原型系統,驗證了該方法的可行性。下一步的工作主要在于提高原型的性能,包括虛擬磁盤客戶端加入多線程處理和緩存機制,將用戶域中網卡、顯卡等物理設備改為不通過域0而使監控器直接與物理網卡交互完成,以及對內存管理和I/O處理進行優化等。
參考文獻:
[1]張堯學.透明計算:概念,結構和示例[J].電子學報, 2004,32(12A):169-173.
[2]張堯學,彭玉坤,周悅芝.可管理多媒體網絡計算機[J].電子學報, 2003,31(12A): 2054-2058.
[3]UHLIGR, NEIGERG, RODGERSD, et al. Intel virtualization technology[J]. IEEE Computer ,2005, 38(5): 48-56.
[4]BARHAM P, DRAGOVIC B, FRASER K, et al. Xen and the art of virtualization[C]// Proc of ACM SOSP.2003.
[5]Intel Corp. Extensible firmware interface specification[EB/OL] .[2007-05-01].http://www.intel.com/technology/efi/.
[6]FABRICE B. QEMU, a fast and portable dynamic translator[C]//Proc of USENIX. 2005:41-46.
[7]Intel Corp. Tiano EDK[EB/OL].[2007-03-20]. http://www.tianocore.org.
[8]Futuremark Corp. PCMark05 whitepaper v1.0[DB/OL] [2007-06-23].http://www.futuremark.com/products/pcmark05/.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文