次の方法で共有


IoMmu モデル

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

概要

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

WDDM 2.0 IoMmu モデルの各プロセスには、次のような 1 つの仮想アドレス空間があります。

  • CPU と GPU の間で共有されている。
  • OS メモリ マネージャーで管理されている。

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

WDDM 2.0 における IOMMU プロセス アドレス空間変換を示す図。

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

VidMm はプライマリ割り当てをアパーチャ セグメントにマップし、ディスプレイ コントローラーがこれらの割り当てに物理的にアクセスできるようにします。

IoMmu モデルでは、ユーザーモード ディスプレイ ドライバー (UMD) は引き続き、VidMm の Allocate サービスを使用して GPU にビデオ メモリを割り当てます。 このプロセスにより、UMD では次のことができます。

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

UMD では、第 1 レベルの変換 (タイル リソース アドレスから共有 CPU/GPU アドレスへの変換) は、ユーザー モードで完全に管理されます。