PV-IOMMU,一種Xen IOMMU半虛擬化機制

Xen標誌

很多 XCP-NG專案開發商宣布 最近,他們正在開發一個新項目,其名稱為 «PV-IOMMU» 並且允許來賓系統存取透過 Xen 環境中的半虛擬化實現的 IOMMU 的有限功能。

基本上,PV-IOMMU 承諾使 Dom0 能夠使用半虛擬化 IOMMU,它提供了多種優勢,例如 Dom0 的 DMA 保護和對 Linux VFIO 的支援。

什麼是 IOMMU?

IOMMU 根據製造商的不同而有不同的名稱(Intel 中的 VT-d、AMD 中的 AMD-Vi、ARM 中的 SMMU 等), 它是一個特殊的裝置實現 其主要功能是 轉換或過濾 DMA 請求 (直接記憶體存取)從設備到機器的實體記憶體。在虛擬化中,它用於允許客戶系統直接存取週邊設備,例如乙太網路適配器、顯示卡和儲存控制器。

IOMMU 半病毒化可帶來哪些好處?

此前, Xen 虛擬機器管理程式使用 IOMMU 重新導向存取 PCI 設備並控制這些設備對記憶體的存取。然而, 出於穩定性和安全原因,訪客無法直接存取 IOMMU 區塊 硬體提供。

我們提出了一種新的半虛擬化 IOMMU,簡稱為 PV-IOMMU。它基本上實現了客戶期望從 IOMMU 獲得的功能,抽象化了硬體的所有內部細節。在 Xen 中,我們為此類操作添加了一個新的超級呼叫(HYPERVISOR_iommu_op),它提供來賓可以使用的各種 IOMMU 操作(如果允許)。

儘管如此, 可以為客人提供一個介面 允許您存取 IOMMU, 使用簡化的 Xen 半虛擬化基礎架構,同時隱藏低階硬體細節。此介面稱為 PV-IOMMU,抽象化了硬體的所有內部細節,並提供了一組訪客可以存取的 IOMMU 操作(如果允許)。 PV-IOMMU 中的操作在 HYPERVISOR_iommu_op 超級呼叫中公開為子操作,並以方便客戶的方式設計。

主機期望 IOMMU 的主要功能之一是能夠建立和修改“IOMMU 域”,“IOMMU 域”是一組產生記憶體上下文並可應用於一個裝置(或多個裝置)的轉換。這些域在 Xen 中稱為“IOMMU 上下文”,以避免與作為虛擬機器的 Xen 域混淆。

IOMMU 半虛擬化有以下突出優勢:

  • Dom0 的 DMA 保護: IOMMU 半虛擬化為虛擬化環境中的管理域 (Dom0) 提供直接記憶體存取 (DMA) 保護。這有助於防止設備直接存取系統記憶體(這可能會損害 Dom0 的完整性),從而有助於提高系統安全性和穩定性。
  • Linux VFIO 支援:IOMMU半虛擬化有利於支援虛擬化環境中使用者設備的虛擬化靈活I/O基礎架構(VFIO),允許使用者應用程式和虛擬機器直接存取硬體設備。
  • 可以輕鬆地使用 Xen 實作 SPDK: IOMMU 半虛擬化也是透過 Xen 支持 SPDK 的持續努力的一部分。這為虛擬機器儲存開闢了一條新的快速資料路徑,有可能提高虛擬化環境中的儲存效能。

除此之外,還有 Xen 的問題之一計劃透過 IOMMU 解決,因為目前或允許在單一 Xen 域中存在多個 IOMMU 上下文。 然而,正在考慮重新設計 Xen IOMMU 子系統,以考慮多個 IOMMU 上下文並修改現有功能以使用它們。儘管實現第一種方法的功能性 PoC 已經實現,但存在一定的限制和不完整的支持,但有人提到,未來正在對子系統進行徹底的重新設計。

最後,應該提到的是 目前開發階段,PV-IOMMU僅支援Intel VT-d,但計劃很快添加對 AMD-Vi 和 SMMUv3 的支援。如果您有興趣了解更多信息,可以查閱詳細信息 以下鏈接。