您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關openstack nova中如何實現PCI透傳功能的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
設備(或 PCI)透傳(passthrough)的 I/O 性能增強技術,這種創新技術通過使用來自 Intel? (VT-d) 或 AMD (IOMMU) 的硬件支持改進 PCI 設備的性能。
平臺虛擬化是在兩個或多個操作系統之間共享一個平臺,以便更有效地利用資源。但平臺并不只是意味著一個以上的處理器,它還包含組成平臺的其他重要元素,比如存儲器、網絡和其他硬件資源。某些硬件資源可以輕松虛擬化,比如處理器和存儲器; 而另一些硬件資源則不然,比如視頻適配器和串口。當共享不可能或沒用時,Peripheral Component Interconnect (PCI) 透傳技術提供有效使用這些資源的方法。
在探索透傳技術之前,讓我們先討論一下如今設備模擬在兩個管理程序架構中是如何工作的。第一個架構將設備模擬整合到管理程序中,而第二個架構將設備模擬推到管理程序之外的一個應用程序中。
管理程序中的設備模擬 是在 VMware 工作站產品(一個基于操作系統的管理程序)中實現的一個公共方法。在這個模型中,管理程序包含各種客戶操作系統能夠共享的公共設備,如虛擬磁盤、虛擬網絡適配器和其他必需的平臺元素。這個特定模型如圖 1 所示。
第二個架構稱為用戶空間設備模擬(見圖 2)。顧名思義,這種設備模擬是在用戶空間中實現的,而不嵌入到管理程序中。QEMU(不僅提供設備模擬,還提供一個管理程序)提供設備模擬,用于大量獨 立管理程序,如 Kernel-based Virtual Machine (KVM) 和 VirtualBox 等。這個模型更具優勢,因為設備模擬獨立于管理程序,因而可以在多個管理程序之間共享。另外,這個模型還支持任意設備模擬,無須管理程序(以特權狀態運 行)負擔這個功能。
將設備模擬從管理程序推向用戶空間有一些明顯的優勢,最大的優勢涉及所謂的可信計算基礎(trusted computing base,TCB)。 一個系統的 TCB 是對該系統安全性很關鍵的所有安全組件的集合。有一點是顯而易見的:如果系統被最小化,出現 bug 的可能性也就更小,因此系統也就越安全。這個原理也適用管理程序。管理程序的安全性很重要,因為它分隔多個獨立的客戶操作系統。管理程序中的代碼越少(將 設備模擬推到特權較低的用戶空間中),將特權泄露給不可信用戶的機率也就越少。
基于管理程序的設備模擬的另一個變體是準虛擬化(paravirtualized)驅動程序。在這個模型中,管理程序包含物理驅動程序,每個客戶操作系統包含一個管理程序可以感知的驅動程序,這個驅動程序與管理程序驅動程序(稱為準虛擬化 或 PV 驅動程序)配合工作。
無論設備模擬發生在管理程序內還是在一個客戶虛擬機(VM)之上,模擬方法都是相似的。設備模擬能夠模擬一個特定設備(如 Novell NE1000 網絡適配器)或一個特定磁盤類型(如 Integrated Device Electronics [IDE])。物理硬盤可以完全不同 — 例如,盡管一個 IDE 驅動器被模擬為客戶操作系統,物理硬件平臺可以使用一個串口 ATA (SATA) 驅動器。這種技術很有用,因為 IDE 支持在許多操作系統中都很普遍,可以用作一個通用標準,而不是要求所有操作系統都支持更高級的驅動器類型。
正如上面介紹的兩個設備模型所示,設備共享是有代價的。無論設別模擬是在管理程序還是在一個獨立 VM 中的用戶空間中執行,都存在開銷。只要有多個客戶操作系統需要共享這些設備,這個開銷就是值得的。如果共享不是必須的,則有更有效的方法來共享這些設備。
因此,在最高層面上,設備透傳就是向一個特定客戶操作系統提供一種設備隔離,以便該設備能夠被那個客戶操作系統獨占使用(見圖 3)。但這種技術為什么有用?設備透傳之所以有價值,原因有很多,其中兩個最重要的原因是性能以及提供本質上不能共享的設備的專用權。
對于性能而言,使用設備透傳可以獲得近乎本機的性能。對于某些網絡應用程序(或那些擁有高磁盤 I/O 的應用程序)來說,這種技術簡直是完美的。這些網絡應用程序沒有采用虛擬化,原因是穿過管理程序(達到管理程序中的驅動程序或從管理程序到用戶空間模擬) 會導致競爭和性能降低。但是,當這些設備不能被共享時,也可以將它們分配到特定的客戶機中。例如,如果一個系統包含多個視頻適配器,則那些適配器可以被傳 遞到特定的客戶域中。
最后,可能有一些只有一個客戶域使用的專用 PCE 設備,或者有一些不受管理程序支持因而應該被傳遞到客戶機的設備。單獨的 USB 端口可以與一個給定域隔離,一個串口(自身不是可共享的)可以與一個特定客戶機隔離。
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)。
Enable PCI passthrough (Compute) 在主機啟動PCI passthrough 功能
Configure PCI devices in nova-compute (Compute) 在 nova-compute 中配置PCI設備。
Configure nova-scheduler (Controller)配置 nova-scheduler
Configure nova-api (Controller)** 配置 nova-api
Configure a flavor (Controller)配置一個flavor
The PCI device with address 0000:41:00.0 is as an example. Expect to change this according to your actual environment.
需要在服務器BIOS中啟動,Intel CPU 啟動VT-d,AMD CPU 啟動IOMMU。
1. Configure nova-compute to allow the PCI device to be passed through to VMs. Edit /etc/nova/nova.conf:
Alternatively specify multiple PCI devices using whitelisting:
· All PCI devices matching the vendor_id and product_id are added to the pool of PCI devices available for passthrough to VMs.
For more information about the syntax of pci_passthrough_whitelist, refer to nova.conf configuration options.
2. ? Restart nova-compute with service nova-compute restart.
Configure nova-scheduler as specified in Configure nova-scheduler.
Restart nova-scheduler with service nova-scheduler restart.
1. Specify the PCI alias for the device.
Configure a PCI alias a1 to request a PCI device with a vendor_id of 0x8086 and a product_id of 0x154d. The vendor_id and product_id correspond the PCI device with address 0000:41:00.0.
Edit /etc/nova/nova.conf: 2.For more information about the syntax of pci_alias, refer to nova.conf configuration options.
Configure a flavor to request two PCI devices, each with vendor_id as 0x8086 and product_id as 0x154d.
For more information about the syntax for pci_passthrough:alias, refer to flavor.
The nova-scheduler selects a destination host that has PCI devices available with the specified vendor_id and product_id that matches the pci_alias from the flavor.
感謝各位的閱讀!關于“openstack nova中如何實現PCI透傳功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。