[轉]漫談虛擬化-計算虛擬化中的 I/O 虛擬化

如果你認爲本系列文章對你有所幫助,請大家有錢的捧個錢場,點擊此處贊助,贊助額0.1元起步,多少隨意

聲明:本文只用於個人學習交流,若不慎造成侵權,請及時聯繫我,立即予以改正

鋒影

email:[email protected]

 

今天,咱們繼續計算虛擬化這個話題,主要來聊一下 I/O 虛擬化。

1 I/O 虛擬化

1.1 I/O 虛擬化簡介

現實中的外設資源是有限的,例如服務器單個千兆以太網端口肯定能夠支持單個應用,但是當被分割爲 10 個、15 個或者更多的服務器負載時(這其中包括網絡、存儲以及服務器之間的流量)可能就不夠用了,這就是所謂的 I/O 瓶頸。

當遇到 I/O 瓶頸時,CPU 就會空閒下來等待數據,計算效率則會大大降低。也就是說,I/O 瓶頸最終會拖累其他資源虛擬化所帶來的資源使用效率的提升。所以虛擬化也必須擴展至 I/O 系統,在工作負載、存儲以及服務器之間動態共享帶寬,能夠最大化地利用網絡接口。通過緩解服務器 I/O 潛在的性能瓶頸,服務器能夠承載更多的工作負載並提升其性能。

I/O 虛擬化的目的可以歸納爲兩個:

其一,是設備發現,即需要控制各 VM 能夠訪問的設備

其二,是訪問截獲,即可以通過 I/O 端口截獲 VM 對設備的訪問指令

1.2 I/O 虛擬化的分類

1.2.1 I/O 全虛擬化

即通過 VMM 模擬 I/O 設備(磁盤和網卡等)實現虛擬化。這種模式下,Guest OS 所能看到的就是一組統一的 I/O 設備。VMM 截獲 Guest OS 對 I/O 設備的訪問請求,然後通過軟件模擬真實的硬件。這種方式對 Guest OS 而言非常透明,無需考慮底層硬件的情況。如下圖所示,這是一個 Xen 的 I/O 全虛擬化模型:

 

當虛擬機訪問虛擬設備時,訪問請求被虛擬機監視器截獲,然後監視器程序將 I/O 請求交由 domain0 來模擬完成,最後將結果返回給虛擬機

其最大的優點在於不需要對操作系統內核做修改,也不需要爲其改寫驅動程序,因此,這是可移植性與兼容性最佳的一種 I/O 設備虛擬模型,這也是它被如此廣泛使用的主要原因。但是 I/O 全虛擬化有一個很大的不足之處,就是性能較差,主要原因有兩方面:

(1)第一、模擬方式是用軟件行爲進行模擬,這種方式本身就無法得到很高的性能;

(2)第二、這種模型下 I/O 請求的完成需要虛擬機與監視器程序多次的交互,產生大量的上下文切換,造成巨大開銷。

1.2.2 I/O 半虛擬化技術

即前端(Front-End)和後端(Back-End)模型,模擬實現虛擬化。如下圖所示:

 

其中,Guest OS 中的驅動程序爲前端,VMM 提供的與 Guest 通信的驅動程序爲後端

前端驅動將 Guest OS 的請求通過與 VMM 間的特殊通信機制和接口發送給 VMM 的後端驅動,後端驅動對 VM 的數據進行分時分通道處理,處理完請求後再發送給物理驅動。

該模型採用了 I/O 環機制,減少了虛擬機與虛擬機監視器之間的切換;同時該模型摒棄了傳統的中斷機制,而採用事件或回調機制來實現設備與客戶機間的通信。進行中斷處理時,傳統的中斷服務程序需要進行中斷確認和上下文切換,而採用事件或回調機制,無需進行上下文切換。

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

1.2.3 I/O 硬件輔助虛擬化技術

這種技術直接給虛擬機分配物理設備,例如直接分配一個硬盤或網卡給虛擬機。在 Xen 下由 Dom0 分配,但是訪問使用直接使用,不經過 Dom0。需要硬件支持。

這種模式,主要有三種網卡硬件作爲輔助:普通網卡、VMDq 直通 和 SR-IOV,相關技術說明如下:

(1)普通網卡(IO-through,即 I/O 透傳)

Dom0 網橋隊列,就是把某一個設備直接分配給一個虛擬機,讓虛擬機可以直接訪問該物理設備而不需要通過虛擬機監視器或被虛擬機監視器截獲。如下圖所示

 

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

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

所以,業界又推出瞭如下兩種辦法來解決這個問題。

(2)VMDq虛擬機設備隊列

VMM 在服務器的物理網卡中爲每個虛擬機分配一個獨立的隊列,虛擬機出來的流量可直接經過軟件交換機發送到指定隊列上,軟件交換機無需進行排序和路由操作。VMM 和虛擬交換機仍然需要將網絡流量在 VMDq 和虛擬機之間進行復制。

(3)SR-IOV(原生共享):也叫單根 I/O 虛擬化

爲降低虛擬機 I/O 的性能開銷,學術界和工業界從軟硬件方面對虛擬機 I/O 模型做了大量的改進。Intel VT-d 技術和 Passthrough 技術通過降低 I/O 操作中 VMM 的參與提升了虛擬機的 I/O 性能。

SR-IOV 這種技術更爲徹底,它通過創建不同虛擬功能(VF)的方式,一個物理網卡可以虛擬出多個網卡,分配給虛擬機的就是獨立網卡,實現虛擬機直接跟硬件網卡通信,不再經過軟件交換機,減少了 Hypervisor 層的地址轉換。

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

 

SR-IOV 的軟件架構分成四個部分:PF、VF、控制面板以及 PF 和 VF 間的通信機制。其中:

1)PF(物理功能),是 Domain 0 中負責管理 SR-IOV 設備的特殊驅動,其主要功能是爲特權 Domain 0 提供設備訪問功能和全局貢獻資源配置的功能,虛擬機所有影響設備狀態的操作均需通過通信機制向 PF 發出請求完成。

2)VF(虛擬功能),是輕量級的 PCIe 功能,其功能包含三個方面:

— 向虛擬機操作系統提供的接口;

— 數據的發送、接收功能;

— 與 PF 進行通信,完成全局相關操作。

由於 VF 的資源僅是設備資源的子集,因此 VF 驅動能夠訪問的資源有限,對其它資源的訪問要求通過 PF 完成。

3)控制面板,同 PF 一樣位於特權 Domain 0 中,其主要功能是負責生成 PCIe 配置空間並將 VF 抽象成 PCIe 設備,並向用戶提供 VF 分配、回收等接口。

4)通信機制,一旦在 PF 中啓用了 SR-IOV,就可以通過 PF 的總線、設備和功能編號(路由 ID)訪問各個 VF 的 PCI 配置空間。每個 VF 都具有一個 PCI 內存空間,用於映射其寄存器集。VF 設備驅動程序對寄存器集進行操作以啓用其功能,並且顯示爲實際存在的 PCI 設備。創建 VF 後,可以直接將其指定給 I/O 來賓域或各個應用程序。此功能使得虛擬功能可以共享物理設備,並在沒有 CPU 和虛擬機管理程序軟件開銷的情況下執行 I/O。

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