XEN 方法和概述 在傳統的VMM中 虛擬硬件的功能是與底層機器上的真實硬件完全相同的 這種 完全虛擬化 (full virtualization)的方法最顯而易見的好處在於操作系統可以不經任何修改就直接在虛擬硬件上運行 但是它也有很多缺點 特別是針對那些當前被廣泛應用的IA (或者稱作x )架構 這種方法帶來的缺陷更是不容忽視 x 架構的設計從來就不支持完全的虛擬化 如果要正確實現x 架構虛擬化 VMM就必須能夠對某幾條特定的 超級指令(supervisor instruction) 進行操作 但是 如果在沒有足夠特權的情況下執行這些超級指令會導致 沈默的失敗(//fail silently 如果特權級不夠 那麽會直接導致執行失敗 不會產生其它響應) 而並非產生壹個便於我們使用的陷阱(trap) 另外 將x 架構中的MMU進行有效的虛擬化也是壹件很困難的事情 這些問題是可以被解決的 但是在解決的同時必須要付出操作復雜度增加和系統性能降低的代價 VMware ESX Server[ ]需要動態地重寫那些被VMM操控的機器碼部分 在其中有可能需要VMM幹涉的地方插入陷阱操作(//在什麽地方插入陷阱操作 是在程序運行起來後才知道的 所以需要動態地重寫相關代碼) 因為務必要對所有那些不能夠引起陷阱的特權指令進行捕捉和操作 所以這種轉換(//動態重寫代碼)要被應用於整個guest OS的內核(導致了相關的轉換 執行和緩存等開銷) ESX Server實現中采用的技術是建立系統結構(system structure)(比如頁表)的影子版本 通過為每壹次 更新 操作設立陷阱來解決虛擬頁表和物理頁表的壹致性問題(//具體細節還是要看ESX Server的說明) 但是在處理 更新密集 型的操作(如創建新的應用進程)的時候 該方法會帶來高昂的開銷 除了x 架構非常復雜的原因 還有壹些其它方面的爭論反對 完全虛擬化 其中值得壹提的是 *** 控的操作系統在壹些情況下需要接觸到真實的資源 例如 提供真實時間和虛擬時間以允許guest OS能夠更好地支持 時間敏感 型的任務 還可以正確地操作TCP超時和RTT估算 給出真實的機器地址以允許guest OS能夠利用超級頁(superpage)或者頁染色(page coloring)等方法改進性能 我們提出的虛擬機抽象能夠避免完全虛擬化帶來的種種缺陷 這種虛擬機抽象和底層硬件相似卻並不完全相同 因此被稱之為 準虛擬化 (//paravirtualization 或者翻譯為半虛擬化?後面譯文沿用準虛擬化)方法 這種方法雖然需要對guest OS進行壹些改動 但是它能夠改善性能 還有特別重要的壹點需要說明 準虛擬化方法不會對應用二進制接口(ABI)進行修改 因此用戶也就不用修改那些在guest OS上執行的應用程序 我們進行的關於準虛擬化方法的討論要遵循以下壹些規則 最基本的是要支持那些不經改動的應用二進制文件的執行 即用戶不用對應用程序做針對Xen的轉換 因此我們必須虛擬化現有的標準ABI所需的全部體系結構特征 很重要的壹點是要支持完整的多應用操作系統 這就需要將在單個guest OS實例中的復雜的服務器配置虛擬化(//例如 如果guest OS上配置了ftp服務 那麽虛擬硬件就要打開相應端口) 準虛擬化務必要有很高的性能 另外針對那些不協作(//uncooperative 這裏的不協作是指硬件架構不支持***享 所以才需要資源隔離)的機器架構 如x 架構 準虛擬化還需要能夠提供很強的資源隔離能力 在協作(cooperative)的機器架構上 準虛擬化方法要能夠完全地隱藏資源虛擬化帶來的影響 減少guest OS在正確性和性能上面臨的風險 請註意 我們在這裏提出的準虛擬化的x 抽象的方法是與最近在Denali項目中提出的方法有很大差異的 Denali是為了支持數以千計的運行著網絡服務的虛擬機而設計的 這些網絡服務中絕大部分是小規模的 不流行(//應用的不流行也就說明了運行該應用的環境比較少 所以只要針對這些相應的特定環境作專門的虛擬化即可)的應用 與之相反的是 Xen的設計最終要支持近 個運行著業界標準應用和服務的虛擬機 由於設計目標的極大差異 我們不妨將Denali的設計選擇和我們自己的設計規則做壹個有益的討論 首先 Denali不需要關註現有的ABI 因此他們的VM接口忽略掉了相關的架構特征 例如 Denali並不完全支持x 的分段機制 但是這壹點卻是在NetBSD Linux和Windows XP等操作系統的ABI中都有提出並且被廣泛使用 例如 線程庫中經常會使用分段機制來尋址線程局部數據 其次 Denali的實現沒有解決在單個guest OS中支持多個應用(application multiplexing)的問題 也沒有解決多地址空間的問題 應用被顯式地鏈接到Ilwaco guest OS實例上 這麽做在某種意義上類似於之前在Exokernel中的libOS[ ] 因此每個虛擬機只能操控壹個單用戶單應用的沒有保護措施的所謂的 操作系統 在Xen中 與之相反 每個虛擬機上能夠操控壹個真正的操作系統 這個操作系統上能夠安全地執行數以千計個不經改動的用戶級進程 雖然Denali號稱開發了壹個虛擬MMU原型能夠對其在該領域有所幫助 但是我們沒有看到公開的技術細節和評估報告 再次 在Denali體系結構中 是由VMM執行全部的內存與磁盤間的頁面調度的 這可能是與虛擬層缺乏存儲管理支持有關 由VMM完成頁面調度是與我們的性能隔離目標相違背的 那些 有惡意 的虛擬機可能會故意產生抖動行為 導致其它虛擬機的CPU時間和磁盤帶寬被不公平地剝奪(//VMM監控很多VM 各個VM上再跑操作系統 所以如果很多事情都放在VMM中做必然會影響到各個VM 所以要把壹些事情放在上面的操作系統做來達到隔離性) 在Xen中 我們希望每個guest OS在其自己分配到的內存空間和磁盤區域內執行它自己的頁面調度(此前已經有self paging的方法被提出) 最後 Denali為機器的全部資源虛擬了 名字空間 這樣的話 如果壹個VM不能夠 叫出 另壹個VM下轄的資源的名字 那麽該VM就不能夠訪問這些資源(例如 Denali中的VM並不知道硬件地址 它們只看得到Denali創建的虛擬地址) 與此相對 我們認為hypervisor中的安全訪問控制已經足以確保安全性 此外 就像之前討論過的 當前在guest OS是否應該能夠直接看到物理資源這壹點上存在著很熱烈的關於正確性和性能的爭論 在後續的章節裏 我們將描述Xen提出的虛擬機抽象 然後將討論如何將壹個guest OS作必要的改動以適應Xen 在這篇文章裏我們定義了壹些術語要提醒大家註意 例如 術語guest OS是指Xen能夠操控的操作系統之壹 術語domain是指壹個運行中的虛擬機 在其上有壹個guest OS在執行 program和process之間的區別和傳統系統中的區別類似 我們稱Xen本身為hypervisor 因為它運行的特權級要比它所操控的guest OS中的supervisor code運行的特權級更高 虛擬機接口 壹個準虛擬化的x 接口主要包括了系統中的三個大的方面 存儲管理 CPU和設備I/O 在下面 我們將依次介紹各個機器子系統的情況 並討論在我們的準虛擬化架構中是如何體現的 雖然在我們的實現中 有相當壹部分 如存儲管理 是專門針對x 的 但是實際上還有很多方面(比如我們虛擬的CPU和I/O設備)都是可以很容易地應用於其它機器架構上的 更進壹步地說 在與RISC架構在實現上有差異的很多地方 x 往往表現出的是該方面最壞情況時的情形 例如 對硬件頁表進行有效的虛擬化就比虛擬化壹個軟件管理的TLB困難很多 存儲 管理分段不能夠使用具有完全特權級的段描述符 不能夠與線性地址空間的最頂部交叠(//因為最頂部是Xen) 分頁guest OS直接對硬件頁表做讀訪問 但是更新(//就是寫)是分批進行的而且要經過hypervisor確認 壹個domain可以被分配在不連續的頁面上 CPU保護guest OS必須運行在低於Xen的特權級上 異常guest OS必須將異常句柄的描述符表在Xen中記錄 除了頁面錯誤外 其它句柄和真實的x 架構相同 系統調用guest OS為系統調用提供壹個 快速 的句柄 允許應用直接調用它所在的guest OS 而不必間接地通過Xen完成每次調用 中斷硬件中斷被壹個輕量級的事件系統替換 時間每個guest OS具有壹個定時器接口 可以得到 真實的 和 虛擬的 時間 設備I/O網絡 磁盤 ……虛擬設備訪問起來很簡單 數據傳遞使用的是異步I/O環 由壹個事件機制替換硬件中斷來發布通告 存儲管理 虛擬化存儲毫無疑問是準虛擬化壹個體系結構中最困難的部分 它包括hypervisor所需的機制和移植各個guest OS所需的改動 如果在架構中提供了由軟件管理的TLB的話 那麽這個任務會變得輕松些 它們可以以比較簡單的方式被有效地虛擬化[ ] 帶標記的TLB是另外壹個在大部分RISC架構(這些RISC架構主要用於構建服務器 比如Alpha MIPS和SPARC)中支持的有用特征 其中 每個TLB項都有和地址空間標識符相關的標記 這使得hypervisor和各個guest OS能夠有效地在被隔離開的地址空間內***存 這時在執行轉移(//transferring execution 在進程執行間切換的時候 執行的指令序列從壹個進程轉移到另壹個進程 稱為執行轉移)的時候 是不需要刷新(flush)整個TLB(//只對具有和自己的地址空間標識符相吻合的TLB項進行操作) 不幸的是 x 架構並沒有由軟件管理的TLB 取而代之的是在發生TLB失效的時候 處理器會自動通過遍歷硬件頁表結構來處理 因此為了獲得最好的可能達到的性能 當前地址空間內所有的有效頁傳輸)都要在硬件可訪問的頁表中給出(//最好情況理應如 lishixinzhi/Article/program/Java/JSP/201311/19726
上一篇:蒙古女孩名字有什麽?下一篇:被和被罩的尺寸怎麽找