IoMmu モデル

このページでは、 WDDM 2.0 で導入された IoMmu モデルについて説明します。 最新の IOMMU 更新プログラムについては、IOMMU ベースの GPU 分離IOMMU DMA の再マッピングに関する説明を参照してください。

概要

入出力メモリ管理ユニット (IOMMU) は、DMA 対応の I/O バスをシステム メモリに接続する MMU コンポーネントです。 これはデバイスから参照できる仮想アドレスを物理アドレスにマップするため、仮想化に役立ちます。

WDDM 2.0 IoMmu モデルでは、各プロセスには、CPU と GPU の間で共有され、OS メモリ マネージャーによって管理される 1 つの仮想アドレス空間があります。

メモリにアクセスするために、GPU は準拠している IOMMU にデータ要求を送信します。 要求には、共有仮想アドレスと プロセス アドレス空間識別子 (PASID) が含まれます。 IOMMU は、共有ページ 表を使用してアドレス変換を実行します。 次の図をご覧ください。

Diagram that shows IOMMU process address space translation in WDDM 2.0.

カーネル モード ドライバーは、DXGK_VIDMMCAPS::IoMmuSupported キャップを設定することで、IoMmu モデルのサポートを表します。 このフラグが設定されると、ビデオ メモリ マネージャーは、IOMMU と共にGPU を使用したすべてのプロセスを自動的に登録し、そのプロセス アドレス空間のPASIDを取得します。 PASID は、デバイスの作成時にドライバーに渡されます。

プライマリ割り当ては、表示される前にビデオ メモリ マネージャーによってアパーチャセグメントにマップされ、ディスプレイ コントローラーがこれらの割り当てに物理的にアクセスできるようにします。

IoMmu モデルでは、ユーザー モード ドライバーは引き続き、ビデオ メモリ マネージャーの Allocate サービスを使用して GPU にビデオ メモリを割り当てます。 これにより、ユーザー モード ドライバーは以下のことが可能になります。

  • 常駐モデルに従う。
  • Microsoft DirectX リソース共有モデルをサポート。
  • プライマリ サーフェスがカーネルに表示され、表示される前にアパーチャにマップされていることを確認。

第 1 レベルの変換 (タイル リソース アドレスから共有 CPU/GPU アドレス) は、ユーザー モード ドライバーによってユーザー モードで完全に管理することができます。