常駐の概要
概要
現在、ユーザー モード ドライバーは、ビルドするすべてのコマンド バッファーと共に、割り当てとパッチの場所のリスト情報をビルドします。 この情報は、ビデオ メモリ マネージャーによって 2 つの目的で使用されます。
- 割り当てリストとパッチの場所のリストは、グラフィックス処理装置 (GPU) エンジンに送信される前に、実際のセグメント アドレスでコマンド バッファーにパッチを適用するときに使用します。 Windows ディスプレイ ドライバー モデル (WDDM) v2 での GPU 仮想アドレスのサポートにより、この修正プログラムの適用が不要になります。
- 割り当てリストとパッチの場所のリストは、割り当ての常駐を制御するためにビデオ メモリ マネージャーによって使用されます。 ビデオ メモリ マネージャーは、特定のエンジンの実行にコマンド バッファーが送信される前に、コマンド バッファーによって参照されるすべての割り当てが常駐するようにします。
新しい常駐モデルの導入により、常駐はコマンドごとのバッファー リストではなく、デバイス上の明示的なリストに移動されます。 ビデオ メモリ マネージャーは、そのデバイスに属するコンテキストが実行スケジュールされる前に、特定のデバイス常駐要件リストのすべての割り当てが常駐していることを確認します。
常駐を管理するために、ユーザー モード ドライバーは、2 つの新しいデバイス ドライバー インターフェイス (DDI) である MakeResident および Evict にアクセスできるだけでなく、新しい TrimResidency コールバックを実装する必要があります。 MakeResident は、デバイス常駐要件リストに 1 つ以上の割り当てを追加します。 Evict は、リストから 1 つ以上の割当を削除します。 TrimResidency コールバックは、常駐要件を減らすためにユーザー モード ドライバーが必要な場合、ビデオ メモリ マネージャーによって呼び出されます。
MakeResident および Evict も内部参照カウントを保持するように更新されています。つまり、MakeResident への複数の呼び出しでは、割り当てを実際に削除するために同じ数の Evict の呼び出しが必要になります。
新しい常駐モデルでは、コマンドごとのバッファーの割り当てとパッチの場所のリストが徐々に段階的に廃止されています。これらのリストは一部のシナリオに存在しますが、常駐を制御できなくなります。
WDDM v2 の重要な 常駐は、デバイスの常駐要件リストによってのみ制御されます。 これは、GPU のすべてのエンジンとすべての API に当てはまります。
割り当てとパッチの場所のリストを段階的に除外する
割り当てとパッチの場所リストの役割は、新しい常駐モデルの導入によって大幅に削減され、実際にはハードウェア依存スケジューリングの導入によって完全に消えます。
パケット ベースのスケジューリング モデルでは、割り当てリストは引き続き次のように存在します。
- GPU 仮想アドレス指定をサポートしていないエンジンの場合、割り当てリストとパッチの場所のリストは引き続き存在しますが、パッチ適用の目的のみに使用され、常駐を制御できなくなります。 割り当てリストとパッチの場所のリストは、さまざまな通常の DDI でユーザー モード ドライバーとカーネル モード ドライバーの両方に提供されますが、常駐していない割り当てを参照すると、GPU スケジューラは送信を拒否し、デバイスをエラー (失われた) にします。 この動作モードはレガシと見なされ、今後のハードウェア リリースでは、すべての GPU エンジンで GPU 仮想アドレス指定がサポートされる予定です。 この操作モードは、WDDM の将来のバージョンで削除される予定です。
- GPU 仮想アドレス指定をサポートするエンジンの場合、新しいコンテキスト作成フラグ (DXGK_CONTEXTINFO_NO_PATCHING_REQUIRED) が追加され、特定のコンテキストに修正プログラムの適用が必要ないことを示します。 このフラグを指定すると、パッチの場所リストは割り当てられず、非常に小さな割り当てリスト (16 エントリ) のみが割り当てられます。 割り当てリストは、プライマリ サーフェスへの書き込み参照を追跡するために使用され、他の目的では使用されません。 GPU スケジューラは、特定のコマンド バッファーがプライマリ サーフェスに書き込むタイミングを認識する必要があります。これにより、プライマリ サーフェスに発生する可能性のあるフリップに関して、そのバッファーの実行が適切に同期される可能性があります。
同様に、割り当てリストは、Present 操作のソースと保存先に関する情報をドライバーに渡すために、カーネル モード ドライバーの Present パスで使用されます。 このコンテキストでは、割り当てリストはパラメーターを渡すために引き続き存在しますが、割り当てリストは常駐に使用されません。 Present 割当リストの修正が必要な GPU には、現在行われているようにプレパッチ情報が含まれます。スケジューラにキュー登録されてから GPU での実行がスケジュールされるまでにリソースのいずれかがメモリ内を移動する場合、Present パケットはスケジュールされる前に再度修正されます。
次の表は、WDDM v2 ドライバーが、さまざまなユーザー モード ドライバーとカーネル モード ドライバーの DDI で割り当てとパッチの場所リストを受け取る必要がある時期をまとめたものです。
GPU エンジン | 割り当てリスト? | パッチ場所リスト? |
---|---|---|
GPU 仮想アドレスのサポートなし (修正プログラムが必要、既定値) | はい、フルサイズですが、修正目的のみに使用されます。 常駐していない割り当てへの参照があると、送信デバイスがエラー (失われた) になり、送信はスケジューラによって拒否されます。 |
はい、フルサイズです。 |
GPU 仮想アドレスのサポート (DXGK_CONTEXTINFO_NO_PATCHING_REQUIRED フラグの設定) | はい、16 エントリです。 コマンド バッファーによって書き込まれるプライマリ サーフェス (存在する場合) を参照します。 ディスプレイ コントローラーで発生する LIP との同期のために GPU スケジューラによって使用されます。 プライマリ サーフェスは既にデバイス常駐要件リストに含まれている必要があります。または、参照は拒否されます。 |
なし |
GPU 仮想アドレスのサポート + ハードウェア スケジューリング | なし | なし |