IoMmu モデル
このページでは、 WDDM 2.0 で導入された IoMmu モデルについて説明します。 最新の IOMMU 更新プログラムについては、IOMMU ベースの GPU 分離と IOMMU DMA の再マッピングに関する説明を参照してください。
概要
入出力メモリ管理ユニット (IOMMU) は、DMA 対応の I/O バスをシステム メモリに接続する MMU コンポーネントです。 これはデバイスから参照できる仮想アドレスを物理アドレスにマップするため、仮想化に役立ちます。
WDDM 2.0 IoMmu モデルでは、各プロセスには次の 1 つの仮想アドレス空間があります。
- CPU と GPU の間で共有されます。
- OS メモリ マネージャーによって管理されます。
メモリにアクセスするために、GPU は準拠している IOMMU にデータ要求を送信します。 要求には、共有仮想アドレスと プロセス アドレス空間識別子 (PASID) が含まれます。 IOMMU は、共有ページ 表を使用してアドレス変換を実行します。 このアクションを次の図に示します。
カーネル モード ディスプレイ ドライバー (KMD) は、DXGK_VIDMMCAPS::IoMmuSupported キャップを設定することで、IoMmu モデルのサポートを表します。 このフラグが設定されると、ビデオ メモリ マネージャー (VidMm) は、GPU を使用するすべてのプロセスを IOMMU に自動的に登録し、そのプロセス アドレス空間の PASID を取得します。 PASID は、デバイスの作成時にドライバーに渡されます。
VidMm は、表示される前に主割り当てを絞りセグメントにマップし、ディスプレイ コントローラーがこれらの割り当てに物理的にアクセスできるようにします。
IoMmu モデルでは、ユーザー モード ディスプレイ ドライバー (UMD) は、VidMm の Allocate サービスを使用して GPU にビデオ メモリを割り当て続けます。 このプロセスにより、UMD は次のことができます。
- 常駐モデルに従う。
- DirectX リソース共有モデルをサポートします。
- プライマリ サーフェスがカーネルに表示され、表示される前にアパーチャにマップされていることを確認。
UMD は、ユーザー モードで第 1 レベルの翻訳 (タイル リソース アドレス を 共有 CPU/GPU アドレス) を完全に管理します。