歡迎您光臨本站 註冊首頁

Linux 虛擬化和 PCI 透傳技術

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
處理器已經演變為針對虛擬環境提高性能,但 I/O 方面發生了什麼變化呢?了解一種名為設備(或 PCI)透傳(passthrough)的 I/O 性能增強技術,這種創新技術通過使用來自 Intel® (VT-d) 或 AMD (IOMMU) 的硬體支持改進 PCI 設備的性能。

平台虛擬化是在兩個或多個操作系統之間共享一個平台,以便更有效地利用資源。但平台 並不只是意味著一個以上的處理器,它還包含組成平台的其他重要元素,比如存儲器、網路和其他硬體資源。某些硬體資源可以輕鬆虛擬化,比如處理器和存儲器;而另一些硬體資源則不然,比如視頻適配器和串口。當共享不可能或沒用時,Peripheral Component Interconnect (PCI) 透傳技術提供有效使用這些資源的方法。本文探索透傳(passthrough)技術的概念及其在管理程序(hypervisor)中的實現,詳細介紹支持這個最新創新技術的管理程序。

平台設備模擬

在探索透傳技術之前,讓我們先討論一下如今設備模擬在兩個管理程序架構中是如何工作的。第一個架構將設備模擬整合到管理程序中,而第二個架構將設備模擬推到管理程序之外的一個應用程序中。

管理程序中的設備模擬 是在 VMware 工作站產品(一個基於操作系統的管理程序)中實現的一個公共方法。在這個模型中,管理程序包含各種客戶操作系統能夠共享的公共設備,如虛擬磁碟、虛擬網路適配器和其他必需的平台元素。這個特定模型如圖 1 所示。


圖 1. 基於管理程序的設備模擬

第二個架構稱為用戶空間設備模擬(見圖 2)。顧名思義,這種設備模擬是在用戶空間中實現的,而不嵌入到管理程序中。QEMU(不僅提供設備模擬,還提供一個管理程序)提供設備模擬,用於大量獨立管理程序,如 Kernel-based Virtual Machine (KVM) 和 VirtualBox 等。這個模型更具優勢,因為設備模擬獨立於管理程序,因而可以在多個管理程序之間共享。另外,這個模型還支持任意設備模擬,無須管理程序(以特權狀態運行)負擔這個功能。


圖 2. 用戶空間設備模擬

將設備模擬從管理程序推向用戶空間有一些明顯的優勢,最大的優勢涉及所謂的可信計算基礎(trusted computing base,TCB)。一個系統的 TCB 是對該系統安全性很關鍵的所有安全組件的集合。有一點是顯而易見的:如果系統被最小化,出現 bug 的可能性也就更小,因此系統也就越安全。這個原理也適用管理程序。管理程序的安全性很重要,因為它分隔多個獨立的客戶操作系統。管理程序中的代碼越少(將設備模擬推到特權較低的用戶空間中),將特權泄露給不可信用戶的機率也就越少。

基於管理程序的設備模擬的另一個變體是准虛擬化(paravirtualized)驅動程序。在這個模型中,管理程序包含物理驅動程序,每個客戶操作系統包含一個管理程序可以感知的驅動程序,這個驅動程序與管理程序驅動程序(稱為準虛擬化 或 PV 驅動程序)配合工作。

無論設備模擬發生在管理程序內還是在一個客戶虛擬機(VM)之上,模擬方法都是相似的。設備模擬能夠模擬一個特定設備(如 Novell NE1000 網路適配器)或一個特定磁碟類型(如 Integrated Device Electronics [IDE])。物理硬碟可以完全不同 — 例如,儘管一個 IDE 驅動器被模擬為客戶操作系統,物理硬體平台可以使用一個串口 ATA (SATA) 驅動器。這種技術很有用,因為 IDE 支持在許多操作系統中都很普遍,可以用作一個通用標準,而不是要求所有操作系統都支持更高級的驅動器類型。




設備透傳技術

正如上面介紹的兩個設備模型所示,設備共享是有代價的。無論設別模擬是在管理程序還是在一個獨立 VM 中的用戶空間中執行,都存在開銷。只要有多個客戶操作系統需要共享這些設備,這個開銷就是值得的。如果共享不是必須的,則有更有效的方法來共享這些設備。

因此,在最高層面上,設備透傳就是向一個特定客戶操作系統提供一種設備隔離,以便該設備能夠被那個客戶操作系統獨佔使用(見圖 3)。但這種技術為什麼有用?設備透傳之所以有價值,原因有很多,其中兩個最重要的原因是性能以及提供本質上不能共享的設備的專用權。


圖 3. 管理程序內的設備透傳

對於性能而言,使用設備透傳可以獲得近乎本機的性能。對於某些網路應用程序(或那些擁有高磁碟 I/O 的應用程序)來說,這種技術簡直是完美的。這些網路應用程序沒有採用虛擬化,原因是穿過管理程序(達到管理程序中的驅動程序或從管理程序到用戶空間模擬)會導致競爭和性能降低。但是,當這些設備不能被共享時,也可以將它們分配到特定的客戶機中。例如,如果一個系統包含多個視頻適配器,則那些適配器可以被傳遞到特定的客戶域中。

最後,可能有一些只有一個客戶域使用的專用 PCE 設備,或者有一些不受管理程序支持因而應該被傳遞到客戶機的設備。單獨的 USB 埠可以與一個給定域隔離,一個串口(自身不是可共享的)可以與一個特定客戶機隔離。




設備模擬背後的秘密

早期的設備模擬類型在管理程序中實現影子(shadow)形式的設備介面,以便為客戶操作系統提供一個到硬體的虛擬介面。這個虛擬介面包含預期的介面,包括表示設備(如 shadow PCI)的虛擬地址空間和虛擬中斷。但是,由於有一個設備驅動程序與虛擬介面通信,且有一個管理程序為實際硬體轉換這種通信,因此開銷非常大 — 特別是在諸如網路適配器之類的高帶寬設備中。

Xen 使 PV 方法(上一小節介紹過)得以流行,PV 方法通過使客戶操作系統驅動程序意識到它正在被虛擬化來減少性能降低幅度。在本例中,客戶操作系統將不會看到一個設備(比如網路適配器)的 PCI 空間,而是一個提供高級抽象(比如包介面)的網路適配器應用程序編程介面(API)。這種方法的缺點是客戶操作系統必須針對 PV 進行修改,優點是在某些情況下您可以得到近乎本機的性能。

在設備透傳技術早期發展過程中,開發人員使用一個瘦模擬模型,在該模型中,管理程序提供基於軟體的內存管理(將客戶操作系統地址空間轉換為可信主機地址空間)。儘管開發人員在早期提供了隔離一個設備和一個客戶操作系統的方法,但那種方法缺乏大型虛擬化環境需要的性能和伸縮性。幸運的是,處理器供應商已經為下一代處理器裝備了一些指令,以支持管理程序和用於設備透傳的邏輯,包括終端虛擬化和直接內存訪問(DMA)支持。因此,新的處理器提供 DMA 地址轉換和許可權檢查以實現有效的設備透傳,而不是捕獲並模擬對管理程序下的物理設備的訪問。

設備透傳的硬體支持

Intel 和 AMD 都在它們的新一代處理器架構中提供對設備透傳的支持(以及輔助管理程序的新指令)。Intel 將這種支持稱為 Virtualization Technology for Directed I/O (VT-d),而 AMD 稱之為 I/O Memory Management Unit (IOMMU)。不管是哪種情況,新的 CPU 都提供將 PCI 物理地址映射到客戶虛擬系統的方法。當這種映射發生時,硬體將負責訪問(和保護),客戶操作系統在使用該設備時,就彷彿它不是一個虛擬系統一樣。除了將客戶機映射到物理內存外,新的架構還提供隔離機制,以便預先阻止其他客戶機(或管理程序)訪問該內存。Intel 和 AMD CPU 提供更多虛擬化功能,您可以在 參考資料 部分了解更多信息。

另一種幫助將中斷縮放為大量 VM 的技術革新稱為 Message Signaled Interrupts (MSI)。MSI 將中斷轉換為更容易虛擬化的消息(縮放為數千個獨立中斷),而不是依賴將被關聯到一個客戶機的物理中斷 pin。從 PCI 2.2 開始,MSI 就已經可用,但 PCI Express (PCIe) 也提供 MSI,在 PCIe 中,MSI 支持將結構縮放為多個設備。MSI 是理想的 I/O 虛擬化技術,因為它支持多個中斷源的隔離(而不是必須通過軟體多路傳輸或路由的物理 pin)。




設備透傳的管理程序支持

使用最新的支持虛擬化的處理器架構,有多個管理程序和虛擬化解決方案支持設備透傳。您將在 Xen 和 KVM 以及其他管理程序中發現設備透傳支持(使用 VT-d 或 IOMMU)。在多數情況下,客戶操作系統(域為 0)必須被編譯為支持透傳,這通常作為一個內核構建時選項提供。也許還需要對主機 VM 隱藏設備(Xen 中使用 pciback 實現)。PCI 中有一些限制(例如,一個 PCIe-to-PCI 橋接器後面的 PCI 設備必須被分配到相同的域),但 PCIe 沒有這種限制。

另外,您將在 libvirt(以及 virsh)中發現設備透傳的配置支持,這為底層管理程序使用的配置模式提供一個抽象。




設備透傳問題

設備透傳帶來的一個問題體現在實時遷移方面。實時遷移 是指一個 VM 在遷移到一個新的物理主機期間暫停遷移,然後又繼續遷移,該 VM 在這個時間點上重新啟動。實時遷移是在一個物理主機網路上支持負載平衡的一個很好的特性,但使用透傳設備時它會產生問題。PCI 熱插拔(有幾個關於它的規範)就是需要解決的一個問題。PCI 熱插拔允許 PCI 設備從一個給定內核進出,這很理想 — 特別是將 VM 遷移到新主機上的管理程序時(設備需要在這個新管理程序中拔出然後再插入)。當設備被模擬(比如虛擬網路適配器)時,模擬提供一個抽象層以抽象物理硬體。這樣,一個虛擬網路適配器可以在該 VM 內輕鬆遷移(這個 VM 還得到 Linux® 綁定驅動程序的支持,該驅動程序支持將多個邏輯網路適配器綁定到相同的介面上)。




I/O 虛擬化的未來

I/O 虛擬化的未來實際上已經在今天實現。例如,PCIe 包含虛擬化支持。一種適合伺服器虛擬化的虛擬化概念被稱為 Single-Root I/O Virtualization (SR-IOV),這種虛擬化技術(通過 PCI-Special Interest Group 或 PCI-SIG 創建)在單根複雜實例(在本例中為一個帶有多個 VM 的伺服器,這些 VM 共享一個設備)中提供設備虛擬化。另一個變體(稱為 Multi-Root IOV)支持大型拓撲(比如刀片伺服器,其中多個伺服器能夠訪問一個或多個 PCIe 設備)。從某種意義上說,這種技術支持任意規模的大型設備網路,該網路可以包含伺服器、終端設備和交換機(用於設備發現和包路由)。

通過 SR-IOV,一個 PCIe 設備不僅可以導出多個 PCI 物理功能,還可以導出共享該 I/O 設備上的資源的一組虛擬功能。這個簡化的伺服器虛擬化架構如圖 4 所示。在這個模型中,不需要任何透傳,因為虛擬化在終端設備上發生,從而允許管理程序簡單地將虛擬功能映射到 VM 上以實現本機設備性能和隔離安全。


圖 4. 通過 SR-IOV 實現透傳
 



結束語

虛擬化的發展已經歷經 50 多年,但直到現在 I/O 虛擬化才引起廣泛注意。商業處理器虛擬化支持只出現了 5 年時間。因此,從本質上說,平台和 I/O 虛擬化將如何發展已迫在眉睫。作為諸如雲計算之類的未來架構的關鍵元素,虛擬化肯定會成為值得關注的有趣技術。和往常一樣,Linux 處於支持這些新技術的前沿陣地,最新的內核(2.6.27 或更高)已經開始包含對這些新的虛擬技術的支持。



[火星人 ] Linux 虛擬化和 PCI 透傳技術已經有715次圍觀

http://coctec.com/docs/enterprise/show-post-73126.html