熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

虛擬機監視器Xen和虛擬化技術(二)

2022-06-13   來源: JSP教程 

   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的分段機制但是這一點卻是在NetBSDLinux和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在其自己分配到的內存空間和磁盤區域內執行它自己的頁面調度(此前已經有selfpaging的方法被提出)
  
  最後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架構主要用於構建服務器比如AlphaMIPS和SPARC)中支持的有用特征其中每個TLB項都有和地址空間標識符相關的標記這使得hypervisor和各個guest OS能夠有效地在被隔離開的地址空間內共存這時在執行轉移(//transferring execution在進程執行間切換的時候執行的指令序列從一個進程轉移到另一個進程稱為執行轉移)的時候是不需要刷新(flush)整個TLB(//只對具有和自己的地址空間標識符相吻合的TLB項進行操作)
  
  不幸的是x架構並沒有由軟件管理的TLB取而代之的是在發生TLB失效的時候處理器會自動通過遍歷硬件頁表結構來處理因此為了獲得最好的可能達到的性能當前地址空間內所有的有效頁傳輸)都要在硬件可訪問的頁表中給出(//最好情況理應如
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19726.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.