IoMmu 模型
此頁面描述 WDDM 2.0 中引進的 IoMmu 模型。 如需最新的 IOMMU 更新,請參閱 IOMMU 型 GPU 隔離 和 IOMMU DMA 重新對應 。
概觀
輸入輸出記憶體管理單元 (IOMMU) 是一種硬體元件,會將支援 DMA 的 I/O 總線連線到系統記憶體。 它會將裝置可見的虛擬位址對應至實體位址,使其在虛擬化中很有用。
在 WDDM 2.0 IoMmu 模型中,每個進程都有一個虛擬位址空間,也就是:
- 在 CPU 與 GPU 之間共用。
- 由OS記憶體管理員管理。
為了存取記憶體,GPU 會將數據要求傳送至相容的 IOMMU。 要求包含共用虛擬位址和 進程位址空間標識碼 (PASID)。 IOMMU 會使用共用頁面表來執行地址轉譯。 下圖說明此動作。
核心模式顯示驅動程式 (KMD) 藉由設定 DXGK_VIDMMCAPS::IoMmuSupported caps 來表示 IoMmu 模型的支援。 設定此旗標時,視訊記憶體管理員 (VidMm) 會自動使用 GPU 向 IOMMU 註冊任何進程,並取得 該進程地址空間的 PASID 。 PASID 會在裝置建立期間傳遞至驅動程式。
VidMm 會在顯示之前將主要配置對應到光圈區段,確保顯示控制器能夠實際存取這些配置。
在IoMmu模型中,使用者模式顯示驅動程式 (UMD) 會繼續使用 VidMm 的 Allocate 服務,為 GPU 配置視訊記憶體。 此程式可讓 UMD:
- 遵循落地模型。
- 支援 DirectX 資源分享模型。
- 確定核心可以看到主要表面,並在顯示之前對應到光圈。
UMD 會在使用者模式中完全管理第一層轉譯(磚資源位址 至 共用 CPU/GPU 位址)。