WDDM 2.0 でのドライバー常駐

このセクションでは、Windows ディスプレイ ドライバー モデル (WDDM) 2.0 のドライバー所在地の変更について詳しく説明します。 説明されている機能は、Windows 10 以降で使用できます。

このセクションの内容

裁判官 説明

常駐の概要

新しい常駐モデルの導入により、常駐はコマンドごとのバッファー リストではなく、デバイス上の明示的なリストに移動されます。 ビデオ メモリ マネージャーは、そのデバイスに属するコンテキストが実行スケジュールされる前に、特定のデバイス常駐要件リストのすべての割り当てが常駐していることを確認します。

割り当ての使用状況の追跡

割り当てリストが表示されなくなったため、ビデオ メモリ マネージャー (VidMm) は、特定のコマンド バッファーで参照されている割り当てを表示できなくなりました。 その結果、ビデオ メモリ マネージャーは割り当ての使用状況を追跡し、関連する同期を処理する立場にありません。 この責任は、ユーザー モード ドライバーに当たります。 特に、ユーザー モード ドライバーは、割り当てへの直接 CPU アクセスと名前変更に関する同期を処理する必要があります。

変更の提供と再利用

WDDM v2 では、 オファー回収 に関する要件が緩和されています。 ユーザー モード ドライバーは、内部割り当てで提供を使用して再利用する必要がなくなりました。 アイドル状態または中断されたアプリケーションは、Microsoft DirectX 11.1 で導入された TrimAPI を使用してドライバーの内部リソースを取り除きます。

非常駐割り当てへのアクセス

常駐していない割り当てに対するグラフィックス処理装置 (GPU) アクセスは無効であり、エラーを生成したアプリケーションのデバイスが削除されます。

このような無効なアクセスを処理するには、障害が発生したエンジンが GPU 仮想アドレス指定をサポートしているかどうかに応じて、次の 2 つの異なるモデルがあります。

  • GPU 仮想アドレス指定をサポートせず、割り当てと修正プログラムの場所の一覧を使用してメモリ参照を修正するエンジンの場合、ユーザー モード ドライバーが、デバイスに常駐していない割り当てを参照する割り当てリストを送信すると、無効なアクセスが発生します (つまり、ユーザー モード ドライバーはその割り当てに MakeResidentCb を呼び出していません)。 これが発生すると、グラフィックス カーネルは障害が発生したコンテキスト/デバイスをエラー状態にします。
  • GPU 仮想アドレス指定をサポートしているが、無効な GPU 仮想アドレスにアクセスするエンジンの場合、仮想アドレスの背後に割り当てがないか、有効な割り当てがあるが常駐していない場合、GPU は割り込みの形式で回復不可能なページ 障害を発生させる必要があります。 ページ フォールト割り込みが発生すると、カーネル モード ドライバーは、新しいページ フォールト通知を通じてグラフィックス カーネルにエラーを転送する必要があります。 この通知を受信すると、グラフィックス カーネルは障害のあるエンジンでエンジンのリセットを開始し、障害のあるコンテキスト/デバイスをエラー状態にします。 エンジン リセットに失敗した場合、グラフィックス カーネルは、エラーをアダプター全体でのタイムアウトの検出と回復 (TDR) に昇格させます。

プロセス常駐の予算

WDDM v2 では、プロセスには、常駐状態を維持できるメモリ量の予算が割り当てられます。 この予算は時間の経過と同時に変化する可能性がありますが、通常はシステムがメモリ不足の場合にのみ適用されます。 Microsoft Direct3D 12 より前では、予算はユーザー モード ドライバーによって Trim 通知と STATUS_NO_MEMORY による MakeResident エラーの形式で処理されます。 TrimToBudget 通知、Evict、および失敗した MakeResident 呼び出しはすべて、新しい予算に収まるようにトリミングする必要がある量を示す整数 NumBytesToTrim 値の形式で最新の予算を返します。