GpuMmu モデル
この記事では、Windows 10 (WDDM 2.0) で導入された GpuMmu モデルについて説明します。
GpuMmu モデルでは、GPU には、プロセスごとの GPU 仮想アドレスを物理アドレスに変換する独自のメモリ管理ユニット (MMU) があります。
各プロセスには、個別のページ テーブルを使用する個別の CPU および GPU 仮想アドレス空間があります。 ビデオ メモリ マネージャー (VidMm) は、すべてのプロセスの GPU 仮想アドレス空間を管理します。 VidMm は、ページテーブルの割り当て、拡大、更新、常駐状態の確保、および解放も担当します。 GPU MMU によって使用されるページテーブルのハードウェア形式は、VidMm にとって不明であり、デバイスドライバインターフェースを介して抽象化されています。 抽象化では、固定サイズのページ テーブルやサイズ変更可能なルート ページ テーブルなど、複数レベルの翻訳がサポートされています。
VidMm は GPU 仮想アドレス空間とその基になるページ テーブルの管理を担当しますが、VidMm は GPU 仮想アドレスを割り当てに自動的に割り当てません。 この責任は、ユーザー モード ドライバー (UMD) に依存します。
VidMm は、UMD に対して 2 つの主要なサービスを提供します。
メモリ割り当てと割り当て解除。 UMD は、既存の Allocate コールバックを使用してビデオ メモリを割り当て、既存の 割り当て解除 コールバックを通じてそのメモリを解放できます。 割り当ては、UMD への VidMm 割り当てにハンドルを返します。 GPU エンジンはこのハンドルで動作できます。 このような割り当ては、特に物理ビデオ メモリを指し、GPU エンジンは割り当てリストを介してアクセスして処理できます。
GPU 仮想アドレス空間の管理。 仮想モードで実行されているエンジンでは、メモリアロケーションを仮想的にアクセスする前に、GPU仮想アドレスを明示的に割り当てる必要があります。 このため、VidMm は、GPU 仮想アドレスを予約または解放し、特定の割り当て範囲をプロセスの GPU 仮想アドレス空間にマップするための UMD サービスを提供します。 これらのサービスは柔軟であり、プロセス GPU 仮想アドレス空間に対する UMD のきめ細かい制御を可能にします。 UMD は、特定の GPU 仮想アドレスを割り当てに割り当てるか、VidMm 使用可能な仮想アドレスを自動的に選択することを決定できます。場合によっては、最小および最大 GPU 仮想アドレスの制約を指定します。 1 つの割り当てに複数の GPU 仮想アドレス マッピングを関連付けることができ、サービスは UMD に提供され、タイル リソース コントラクトを実装します。
同様に、リンクされたディスプレイ アダプター構成では、UMD は GPU 仮想アドレスを特定の割り当てインスタンスに明示的にマップできます。 マッピングごとに、UMD はマッピングを自身または特定のピア GPU に行うかを選択できます。 このモデルでは、割り当てに割り当てられた CPU 仮想アドレスと GPU 仮想アドレスは独立しています。 UMD は、両方のアドレス空間で同じものを保持するか、独立して保持するかを決定できます。
GPU 仮想アドレスは、DDI インターフェイスを使用して、固定の 4 KB ページ細分性で論理的に管理されます。 GPU 仮想アドレスは、メモリ セグメントまたはシステム メモリに常駐する割り当てを参照できます。 システム メモリは 4 KB の物理粒度で管理され、メモリ セグメントはドライバーの選択で 4 KB または 64 KB で管理されます。 VidMm 割り当てはすべて、ドライバーによって選択されたページ サイズの倍数に合わせて調整およびサイズ設定されます。
無効な範囲の GPU 仮想アドレスにアクセスすると、アクセス違反が発生し、アクセスエラーの原因となったコンテキストやデバイスが終了します。 このような障害から復旧するために、VidMm は、失敗した場合にアダプター全体のタイムアウト検出回復 (TDR) に昇格されるエンジンリセットを開始します。
GpuMmu モデルを次の図に示します。