引言 現代計算機具有足夠強大的能力來利用虛擬化技術支持多個虛擬機(VM: virtual machines)
並且在每個虛擬機上各自運行單獨的操作系統實例
這直接導致了虛擬機技術發展的又一個春天
在本文中
我們提出了Xen
一個高性能的用於資源管理的虛擬機監視器(VMM: VM monitor)
Xen能夠支持的應用比如
server consolidation
co
located hosting facilities
distributed web services
secure computing platforms[
]和application mobility
成功地對一台機器進行劃分
使它能夠支持多個操作系統的並發執行
這個過程具有很多的挑戰
首先
虛擬機必須是彼此相隔離的
如果一個虛擬機的執行會影響另一個的性能
這是不可以被接受的
這一點在操作各個虛擬機的用戶相互間並不信任的情況下顯得特別重要
其次
它必須支持多種多樣的不同操作系統以提供給各種異構(heterogeneity)的流行應用的支持(//這裡的異構指的是應用開發依托的操作系統不同
因此在實現上也就有很大差異
使得應用並不能夠跨平台移植
因為Xen不需要對應用程序進行修改
那麼它就必須支持各種常用的操作系統
所謂流行的應用
就是那些大家常用的
必需的應用)
第三
由虛擬化技術引入的性能開銷必須要小
Xen操控(//host
操作和控制)的是常用的操作系統
但是需要對操作系統中的某些相關部分進行一些修改
在本文中描述和評估的Xen原型系統能夠支持多個我們研發的XenoLinux guest OS實例的並發執行
每個實例都給出了和非虛擬化情況下的Linux
中相同的應用二進制接口
目前
我們對Windows XP到Xen的移植還沒有完全完成
但是已經能夠運行簡單的用戶空間進程
移植NetBSD的工作也在進行中
Xen使得用戶能夠動態地實例化一個操作系統以執行他們需要的應用
在XenoServer項目[
]中
我們在ISP或者Internet exchange(//布置在這些場合中經濟劃算而且又具有戰略意義的地方)的標准服務器硬件上配置了Xen
我們在啟動一個新的虛擬機的時候需要執行許可控制(admission control)
希望每個虛擬機能夠以某種方式為它需要的資源付出代價
我們在其它文章中討論過我們在這個方向上的思路和方法[
]
現在這篇文章則將焦點關注於虛擬機
現在有一些方法用於構建能夠在共享的機器上操控多個應用和服務器(//server
這裡提到的server應該是大規模應用的意思
比如數據庫服務器)的系統
也許最簡單的方法就是部署一個或多個運行著標准操作系統(如Linux或者Windows)的主機
然後允許用戶們安裝文件和啟動進程— 應用間的保護是由傳統的操作系統技術提供的(//這裡提到的做法
就是類似並行機性質的
各個節點都是獨立的主機
但是一個應用可以在多個節點上面並行執行)
實驗顯示
由於要針對各個脫節(//supposedly disjoint
邏輯上脫節
指的是應用不具有連貫性/兼容性
所以針對每個應用都要單獨配置一次
如果能想辦法將前後有關聯的應用放在一起執行
可以大大減少相關的開銷
如配置開銷
通信開銷等等)的應用進行復雜的配置
這些配置過程導致的交互行為會使系統管理任務迅速成為時間消耗巨大的任務
更重要的是
這樣的系統不能夠充分地支持性能隔離
某個進程的調度優先級
存儲要求
網絡通信量和磁盤訪問等等特征都會影響到其它進程的性能
如果是在資源供應充足而且用戶群體是限定(比如計算網格或者PlanetLab平台實驗)的情況下
這個系統還是可以接受的
但是當資源是供不應求的時候
或者用戶間不相協作(//uncooperative
不相協作
比如用戶間的需求有沖突
那麼一定會互相影響的)的時候就不行了
一個解決這個問題的方法是改進對操作系統性能隔離的支持
這已經在resource containers
Linux/RK
QLinux和SILK中被或多或少地實現了
這些方法中存在著一個難點是難以確保所有的資源都能夠正確地分配給有相應資源需求的進程
例如
緩沖區cache或者存儲頁面的替換算法導致的在應用間的復雜的交互行為(//比如存儲頁面替換的時候
某個進程的頁面替換序列會干擾到其它進程的
要免除這個影響就需要有復雜的機制用於進程間的協調)
這就是存在於操作系統中的
QoS干擾問題(QoS crosstalk)
在低層采用多路執行技術能夠緩解這個問題帶來的影響
這已經在Exokerne和Nemesis操作系統中得到證明
在這些操作系統中
任務間無意識的或者不受歡迎的交互行為被最小化了
我們使用了同樣的基本方法來構建Xen
Xen就是以整個操作系統的粒度復用物理資源
它能夠提供在操作系統間的性能隔離
相對於進程級的資源復用
Xen要允許一定范圍內的guest OS
和平
共存
而並非去指定一個特殊的應用二進制接口(//如果限定了應用二進制接口
就意味著只能支持某個特定的操作系統)
為了獲得這種靈活性就必須付出一些代價 — 無論是在初始化過程(比如
boot和resume與fork和exec的比較)中
還是在資源消費上
運行一個完整的操作系統與運行一個進程相比分量都要重得多
為了達到我們的能夠支持多至
個被操控的操作系統實例的目標
我們認為這些代價是值得付出的
付出這些代價後獲得的系統允許單個用戶在資源受控的形式下
直接運行那些不需要修改的二進制代碼或者二進制代碼集合(例如
後端為PostgreSQL的Apache服務器)
更進一步的
因為用戶能夠動態地精確創建他們的軟件所需要的執行環境
所以這個系統也就提供了在非常高的層次上的靈活性
另外
在各種服務和應用間的配置交互也是可以避免的(例如
每個Windows實例都有它們自己的寄存器文件)
本文的余下部分是這樣組織的
第
部分解釋了我們的虛擬化方法和Xen的工作概況
第
部分描述了我們的設計和實現的關鍵特征
第
部分給出了使用業界標准的測試程序評估運行在Xen上的XenoLinux與單獨的Linux
VMware Workstation和用戶模式Linux(UML)的性能比較結果
最後的第
部分討論了未來的工作並作了總結
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19609.html