Skip to main content

WDDM によるタイムアウトの検出と GPU の回復

最終更新日: 2009年 4月 27日

目次

はじめに はじめに
タイムアウト検出と回復 タイムアウト検出と回復
Windows Vista SP1 の更新情報 Windows Vista SP1 の更新情報
エラー メッセージ エラー メッセージ
レジストリ キー レジストリ キー
次のステップ 次のステップ
リソース リソース


はじめに

グラフィックスにおいて最も一般的に起きる安定性の問題の 1 つは、エンド ユーザーのコマンドや操作の処理中に、システムが完全に "フリーズ" または "ハング" しているように見える場合です。ユーザーは、一般的には、数秒待ってから電源ボタンを押してシステムをリブートします。通常、GPU (Graphics Processing Unit) は、大量のグラフィックの操作に対する処理を "忙しく" 実行しています。典型的なのはゲームをしているときです。そのため、画面は何も更新されず、ユーザーにはシステムがフリーズしているように見えます。

このペーパーでは、Windows Vista におけるタイムアウト検出と回復 (TDR) について簡単に説明します。また、開発者が問題のデバッグを簡単に行えるように、レジストリ制御についても記載されています。

Windows Vista SP1 の最新情報
頻繁に突然に生じる GPU のハングにおいてユーザー エクスペリエンスを向上するための Windows Vista SP1 の変更点。これらの変更点をサポートする新しいレジストリ キー。

タイムアウト検出と回復

Windows Vista では、これらの問題となるハング状態を検出し、デスクトップの応答性を動的に回復します。このプロセスで、Windows Display Driver Model (WDDM) ドライバーは再初期化され、GPU はリセットされます。リブートは必要ないので、ユーザー エクスペリエンスが大幅に向上します。ハングが検出されてから回復するまでの唯一目に見える影響は、画面のちらつきです。これはグラフィックス スタックの一部がリセットされるためで、それによって画面が再表示されます。一部の古い Microsoft DirectX アプリケーションでは、この回復の終わりに黒い画面が表示されることがあります。エンド ユーザーは、これらのアプリケーションを再起動する必要があります。

下記は TDR プロセスの簡単な概要です。

  1. タイムアウト検出 : Windows Vista グラフィックス スタックの Video Scheduler コンポーネントは、GPU が特定のタスクを実行する際に、許可されているよりも長い時間がかかっており、この特定のタスクを回避しようとしていることを検出します。この回避処理には、"待ち" タイムアウト、すなわち実際の "TDR タイムアウト" が含まれます。したがって、この手順は、プロセスの "タイムアウト検出" 段階です。Windows Vista での既定のタイムアウト時間は、2 秒です。GPU が TDR のタイムアウト時間内に現在のタスクを完了または回避できないと、GPU はハングしたと診断されます。

  2. 回復の準備 : オペレーティング システムは、タイムアウトが検出され、GPU をリセットする必要があることを WDDM ドライバーに報告します。ドライバーは、メモリへのアクセスを停止するよう指示され、これ以後はハードウェアへのアクセスを禁止されます。オペレーティング システムと WDDM ドライバーは、事後診断に役立つ可能性のあるハードウェアおよびその他の状態に関する情報を収集します。

  3. デスクトップの回復 : オペレーティング システムは、グラフィックス スタックの適切な状態をリセットします。グラフィックス スタックの Video Memory Manager コンポーネントは、ビデオ メモリからすべての割り当てを削除します。WDDM ドライバーは、GPU のハードウェアの状態をリセットします。グラフィックス スタックは、最後にデスクトップを応答状態に復元します。既に説明したとおり、一部の古い DirectX アプリケーションでは、黒い画面が表示されるだけで、ユーザーはこれらのアプリケーションを再起動しなければならないことがあります。"デバイス削除" を扱う、正しく作成された DirectX 9Ex および DirectX 10 アプリケーションは、正常な動作を継続します。アプリケーションでは、Microsoft Direct3D デバイスとそのオブジェクトをすべて解放した後、再作成する必要があります。DirectX アプリケーションのプログラマは、Windows SDK の詳細情報を参照してください。

Windows Vista SP1 の更新情報

何度も GPU ハングが発生する場合のユーザー エクスペリエンスを向上するために、Windows Vista SP1 でマイナーな変更が加えられました。GPU ハングの反復は、グラフィックス ハードウェアが正常に回復していなこと示します。これらのインスタンスでは、グラフィックス ハードウェアを完全にリセットするために、システムをシャット ダウンし、再起動する必要があります。オペレーティング システムが、1 分以内に 6 回以上の GPU ハングおよび後続する回復を検出すると、次の GPU ハングはシステムのバグ チェックとして扱われます。

エラー メッセージ

GPU ハング検出と回復のプロセスの間、デスクトップは応答しないため、ユーザーが使用することはできなくなります。回復の最終段階では、画面の解像度を変更したときのように、画面にわずかなフラッシュが発生します。デスクトップが正常に回復した後、下記の情報メッセージがユーザーに対して表示されます。

エラー メッセージ

また、メッセージは、Windows Vista Event Viewer に記録されます。診断情報は、ユーザーがフィードバックを提供することを選択した場合、オンライン クラッシュ解析 (OCA) 機能を通じて Microsoft に返送されるデバッグ報告の形で集められます。

レジストリ キー

下記のレジストリ キーは、テスト目的のみのために記載されています。テストまたはデバッグ目的以外では、いかなるアプリケーションによっても、これらのレジストリ キーが操作されることがないようにしてください。

TDR 関連のレジストリ キーは、HKLM\System\CurrentControlSet\Control\GraphicsDrivers にあります。

  • TdrLevel: REG_DWORD。回復の初期レベル。指定可能な値は、下記のとおりです。

    • TdrLevelOff (0)– 検出無効。

    • TdrLevelBugcheck (1) – 検出されたタイムアウトのバグ チェック (回復なしなど)。

    • TdrLevelRecoverVGA (2) – VGA への回復 (実装なし)。

    • TdrLevelRecover(3) – タイムアウト時の回復。これは既定値です。

  • TdrDelay: REG_DWORD。GPU がスケジューラからの回避要求を遅延できる秒数。これは、事実上のタイムアウトのしきい値です。既定値は 2 です。

  • TdrDdiDelay: REG_DWORD。オペレーティング システムで、スレッドがドライバーの処理を中断することが許可される秒数。指定時間以降、オペレーティング システムは、コード VIDEO_TDR_FAILURE (0x116) を含むシステムのバグ チェックを行います。既定値は 5 です。

  • TdrTestMode: REG_DWORD: 内部テスト用。

  • TdrDebugMode: REG_DWORD: TDR プロセスのデバッグ関連動作。

    • TDR_DEBUG_MODE_OFF (0) は、タイムアウトの調査を許可するよう、回復の前にカーネル デバッガーに割り込みます。

    • TDR_DEBUG_MODE_IGNORE_TIMEOUT (1) は、すべてのタイムアウトを無視します。

    • TDR_DEBUG_MODE_RECOVER_NO_PROMPT (2) は、デバッガーへの割り込みはせずに回復処理を実行します。これは既定値です。

    • TDR_DEBUG_MODE_RECOVER_UNCONDITIONAL (3) は、一部の回復条件が満たされていない場合 (連続してタイムアウトが発生した場合の回復など) も、回復処理を実行します。

  • TdrLimitTime: REG_DWORD (Windows Vista SP1 以降のバージョンのみ): TDR の "TdrLimitCount" 値による既定回数以内は、システムがクラッシュすることなく許可されます。

  • TdrLimitCount: REG_DWORD (Windows Vista SP1 以降のバージョンのみ): システムがクラッシュすることなく "TdrLimitTime" で許可される TDR (0x117) の既定値。

次のステップ

グラフィックス ハードウェア ベンダー向け :

  • エンド ユーザーが生産性が求められる作業をしたり、ゲームをしたりする場合は、グラフィックの操作 (すなわち、DMA バッファーの完了) が 2 秒を超えないようにしてください。

グラフィックス ソフトウェア ベンダー向け :

  • DirectX グラフィック アプリケーションが、低 FPS (フレーム/秒) レートで動作しないようにしてください。FPS が低下すると、GPU のリセットが発生しやすくなります。アプリケーションが 10 FPS またはそれ以下で動作していて、複雑なグラフィック操作が開始されようとすると、フラッシュが生じる可能性があります。

  • ローエンド GPU のベンチマーク テストの実行には、既に説明した、TDR タイムアウトを制御するレジストリ キーを使用します。実稼動システムにそれらを使用しないようにしてください。システム全体の安定性や堅牢性に影響する場合があります。これらのキーは、最終的な解決策としてのみ使用してください。

システム製造元向け :

  • グラフィック ハードウェア ベンダーと協力して、TDR のデバッグ報告を診断してください。

  • 既に説明した TDR レジストリ キーを使用して既定値を変更するシステムはすべて、Windows ロゴ プログラムに準拠していないことになります。

リソース

お問い合わせ先 : このドキュメントで触れられていない事項についてご質問がありましたら、directx@microsoft.com (英語) まで電子メールをお送りください。

Windows Driver Kit
MSDN の DirectX Developer Center
Windows ロゴ プログラムの要件
Windows SDK for Windows Vista

評価してください: