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

最終更新日: 2006年11月13日
トピック
はじめにはじめに
タイムアウト検出と回復タイムアウト検出と回復
エラー メッセージエラー メッセージ
レジストリ キーレジストリ キー
次のステップ次のステップ
リソースリソース

はじめに

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

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

ページのトップへページのトップへ

タイムアウト検出と回復

Windows Vista では、これらの問題となるハング状態を検出し、デスクトップの応答性を動的に回復します。このプロセスで、Microsoft 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 の詳細情報を参照してください。

ページのトップへページのトップへ

エラー メッセージ

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) は、一部の回復条件が満たされていない場合 (連続してタイムアウトが発生した場合の回復など) も、回復処理を実行します。

ページのトップへページのトップへ

次のステップ

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

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

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

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

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

システム製造元向け :

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

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

ページのトップへページのトップへ

リソース

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

Windows ドライバ キット
http://www.microsoft.com/japan/whdc/DevTools/WDK/default.mspx
MSDN の DirectX Developer Center
http://microsoft.com/japan/msdn/directx/default.aspx
Windows Logo Program Requirements Suite, Version 3.0
http://www.microsoft.com/japan/whdc/winlogo/hwrequirements.mspx
Windows SDK
"DirectX for Windows Vista"
http://windowssdk.msdn.microsoft.com/en-us/library/ms681824.aspx


ページのトップへページのトップへ