IO虛擬化及虛擬化模型

1、I/O虛擬化簡介 

      I/O虛擬化(Input/output virtualization,簡稱IOV)是虛擬化的一種新形式,是來自物理連接或物理運輸上層協議的抽象,讓物理服務器和虛擬機可以共享I/O資源

       在現實生活中,可用的物理資源往往是有限的,虛擬機的個數往往會比實際的物理設備個數要多。爲了提高資源的利用率,滿足多個虛擬機操作系統對外部設備的訪問需求,虛擬機監視器必須通過I/O虛擬化的方式來實現資源的複用,讓有限的資源能被多個虛擬機共享。爲了達到這個目的,監視器程序需要截獲虛擬機操作系統對外部設備的訪問請求,通過軟件的方式模擬出真實的物理設備的效果,這樣,虛擬機看到的實際只是一個虛擬設備,而是真正的物理設備,這種模擬的方式就是I/O虛擬化的一種實現,下圖所示就是一個典型的虛擬機I/O模型。


       如上圖所示,虛擬化技術通過在物理硬件上抽象出一個虛擬化層,來實現對整個物理平臺的虛擬化,這個虛擬化層通常被稱爲虛擬機監視器(VMM)。通過對硬件層的模擬,將一臺物理計算機抽象成了多臺虛擬計算機,每個虛擬機都運行獨立的操作系統,有各自的I/O子系統。I/O虛擬化並不需要完整地虛擬化出所有外設的所有接口,究竟怎樣做完全取決於設備與VMM的策略以及客戶機操作系統的需求

2、I/O虛擬化的基本要求

        I/O虛擬化雖然有着顯著的優點,但是具體實現並沒有那麼簡單,要考慮的因素也很多的,基本要求主要有以下的三點:

(1) 保真性,要求在虛擬化平臺下進行的I/O訪問與非虛擬化條件下的I/O訪問除了完成時間差別外,其它效果相同;

(2) 安全性,要求各虛擬機操作系統只能訪問虛擬機監視器分配給其的I/O資源,而各I/O設備也只能與屬於同一個虛擬機的其它資源進行交互,如存儲空間和CPU,而不能越界訪問屬於其它虛擬機的資源;

(3) 性能,要求虛擬化系統下I/O訪問的性能與非虛擬化系統下的I/O訪問性能接近。

在這三個基本要求之中最爲重要的就是安全性方面的要求,這是保證虛擬化環境可以正常運行的根本,只有首先滿足這一要求才能保證虛擬化I/O的保真性,對於性能的要求纔會有意義。虛擬化環境下之所以會出現安全性的問題是因爲虛擬機操作系統可見的地址並不是實際的機器物理地址,而是客戶物理地址,設備若無法獲知客戶物理地址和機器物理地址間的轉換關係,會直接使用客戶物理地址進行內存訪問,這會導致非法地址訪問、破壞正常數據。

       正是由於I/O虛擬化對於I/O空間安全隔離性方面的要求,所以對於虛擬機操作系統的I/O訪問操作一般都需要虛擬機監視器的干預,而不允許虛擬機操作系統與I/O設備直接進行交互,這也就使得虛擬化系統下的I/O性能與非虛擬化系統的I/O性能有着較大的差距。在設備直接分配模型中,有IOMMU的硬件輔助,實現了域間隔離和設備地址轉換,保證被分配給虛擬機的設備不會訪問不屬於該虛擬機的存儲器空間。

3、I/O虛擬化的性能

       因爲I/O虛擬化安全性的要求,導致虛擬機操作系統的I/O訪問會受到虛擬機監視器干預,導致性能與非虛擬化環境有較大差距。而虛擬機監視器介入之所以會導致性能嚴重損失的根本原因就是發生了上下文切換。

      上下文切換分爲兩種,虛擬機與虛擬機之間發生的上下文切換以及虛擬機與虛擬機監視器之間發生的上下文切換。在I/O虛擬化中影響性能的就是虛擬機和虛擬機監視器之間的上下文切換。虛擬機操作系統產生的I/O請求會被監視器截獲,監視器將I/O請求交由驅動域去處理,驅動域完成I/O請求要返回執行結果,這些過程都是造成上下文切換。虛擬機和監視器之間的上下文切換的開銷主要分爲以下三個部分:

(1)直接開銷,這個部分主要由CPU的切換造成,CPU需要停滯虛擬機切換到虛擬機監視器去執行,之後又要從監視器程序轉回虛擬機執行下一條指令;

(2)間接開銷,兩種環境的切換導致需要保存上下文環境。

(3)同步開銷,這個部分主要是虛擬機監視器處理VM EXIT造成的。

因此,一旦發生大量的上下文切換,將嚴重影響I/O虛擬化的性能,尤其在I/O密集型的任務中,上下文切換導致的開銷往往是無法忍受的

4、主流的I/O設備虛擬化模型

(1)模擬模型   

      模擬模型是使用最爲廣泛的I/O設備虛擬化模型,該模型採用軟件的方式模擬設備行爲,爲虛擬機模擬出與底層硬件完全一致的虛擬化環境,保證虛擬機操作系統的行爲與非虛擬化環境下完全一致。在模擬模型中,虛擬設備必須以某種方式讓虛擬機可以發現,導致虛擬機被“欺騙”。當虛擬機訪問虛擬設備時,訪問請求被虛擬機監視器截獲,然後監視器程序將I/O請求交由domain0來模擬完成,最後將結果返回給虛擬機。如下圖所示是一個基於設備模擬的xen的I/O虛擬化模型。


       模擬模型最大的優點在於不需要對操作系統內核做修改,也不需要爲其改寫驅動程序,因此,全虛擬化下的模擬模型成爲了可移植性與兼容性最佳的一種I/O設備虛擬模型,這也是它被如此廣泛使用的主要原因。

       但是設備模擬模型有一個很大的不足之處,即性能不夠高,主要原因有兩方面:第一、模擬方式是用軟件行爲進行模擬,這種方式本身就無法得到很高的性能;第二、這種模型下I/O請求的完成需要虛擬機與監視器程序多次的交互,產生大量的上下文切換,造成巨大開銷。

(2)泛虛擬化模型

        泛虛擬化模型是被廣泛使用的另一種I/O設備虛擬化模型。相比於設備模擬模型而言,泛虛擬化模型在性能上有很大的提升。主要有以下兩個原因:

(1)該模型採用了I/O環機制,減少了虛擬機與虛擬機監視器之間的切換;

(2)該模型摒棄了傳統的中斷機制,而採用事件或回調機制來實現設備與客戶機間的通信。進行中斷處理時,傳統的中斷服務程序需要進行中斷確認和上下文切換,而採用事件或回調機制,無需進行上下文切換。

如下圖所示是一個基於泛虛擬化的Xen的I/O虛擬化模型。


       泛虛擬化模型雖然在性能上比模擬模型要好,但是這種I/O模型有一個很大的缺點,要修改操作系統內核以及驅動程序,因此會存在移植性和適用性方面的問題,導致其使用受限。

(3)設備直接分配模型

       傳統的實現I/O虛擬化的技術中,所有的虛擬機都共享物理平臺上的硬件設備。如果物理條件好,有足夠的硬件,就可以考慮讓每個虛擬機獨佔一個物理設備,這樣無疑會提高系統的性能。把某一個設備直接分配給一個虛擬機,讓虛擬機可以直接訪問該物理設備而不需要通過虛擬機監視器或被虛擬機監視器截獲,這就是設備直接分配技術。如下圖所示爲設備直接分配的I/O模型。



      在設備直接分配模型中,虛擬機操作系統可直接擁有某一物理設備的訪問控制權限,虛擬機監視器不再幹涉其訪問操作。因此,該模型可以較大地改善虛擬化設備的性能,降低監視器程序的複雜性,易於實現,並且不需要修改操作系統,保證了高可用性。

     設備直接分配模型雖然在性能上相比主流的兩種I/O設備虛擬化模型有着很大的提升,但是該模型的使用也是有一定限制的。因爲該模型將一件物理設備直接分配給了一個虛擬機,其它虛擬機是無法使用該設備的,所產生的一個問題就是如果其它虛擬機需要訪問該設備則無法滿足需求,解決的辦法就是服務器上還有一個同樣的設備以供其它虛擬機使用。因此,設備直接分配模型的使用必須滿足物理資源較爲充足的前提條件,對於那些緊缺的物理資源,該模型是不適用的。

(4)SR-IOV

       爲降低虛擬機I/O的性能開銷,學術界和工業界從軟硬件方面對虛擬機I/O模型做了大量的改進。Intel VT-d技術和Passthrough技術通過降低I/O操作中VMM的參與提升了虛擬機的I/O性能, SR-IOV標準在此基礎上支持虛擬機對I/O設備的原生共享。

        SR-IOV標準定義了設備原生共享所需的軟硬件支持。硬件支持包括芯片組對SR-IOV設備的識別,BIOS爲SR-IOV分配足夠的資源,此外爲保證對設備的安全、隔離訪問還需要北橋芯片的VT-d支持。軟件方面,VMM將驅動管理權限交給域0,域0操作系統必須支持SR-IOV功能。域0通過物理功能(physical function,PF)驅動發現設備的SR-IOV功能後將包括髮送、接收隊列在內的物理資源依據VF數目劃分成多個子集,然後PF驅動將這些資源子集抽象成設備即系統中所見的虛擬功能(virtual function,VF)設備,創建VF設備後,域0可將VF設備以Passthrough方式分配給虛擬機。

       SR-IOV的軟件架構如下圖所示,分成四個部分:PF、VF、控制面板以及PF和VF間的通信機制。其中,PF是域0中負責管理SR-IOV設備的特殊驅動,其主要功能是爲特權域0提供設備訪問功能和全局貢獻資源配置的功能,虛擬機所有影響設備狀態的操作均需通過通信機制向PF發出請求完成。VF是輕量級的PCIe功能,其功能包含三個方面:向虛擬機操作系統提供的接口;數據的發送、接收功能;與PF進行通信,完成全局相關操作,由於VF的資源僅是設備資源的子集,因此VF驅動能夠訪問的資源有限,對其它資源的訪問要求通過PF完成。控制面板同PF一樣位於特權域0中,其主要功能是負責生成PCIe配置空間並將VF抽象成PCIe設備,並向用戶提供VF分配、回收等接口。

     

       儘管Intel VT-d技術和Passthrough技術消除了虛擬機I/O中VMM干預引起的額外開銷,但在I/O操作中I/O設備會產生大量的中斷,出於安全等因素考慮,虛擬機無法直接處理中斷,因此中斷請求需要由VMM安全、隔離地路由至合適的虛擬機。若CPU運行虛擬機時接收中斷請求,Xen將強制將虛擬機切換出來並且陷入到VMM中執行中斷處理程序,待處理完畢後再恢復虛擬機的執行,因而增加了虛擬機的I/O延遲。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章