| はじめに | |
| タイムアウト検出と回復 | |
| エラー メッセージ | |
| レジストリ キー | |
| 次のステップ | |
| リソース |
グラフィックスにおいて最も一般的に起きる安定性の問題の 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。回復の初期レベル。指定可能な値は、下記のとおりです。
| ||||||||
| • | TdrDelay: REG_DWORD。GPU がスケジューラからの回避要求を遅延できる秒数。これは、事実上のタイムアウトのしきい値です。既定値は 2 です。 | ||||||||
| • | TdrDdiDelay: REG_DWORD。オペレーティング システムで、スレッドがドライバの処理を中断することが許可される秒数。指定時間以降、オペレーティング システムは、コード VIDEO_TDR_FAILURE (0x116) を含むシステムのバグ チェックを行います。既定値は 5 です。 | ||||||||
| • | TdrTestMode: REG_DWORD: 内部テスト用。 | ||||||||
| • | TdrDebugMode: REG_DWORD: TDR プロセスのデバッグ関連動作。
|
グラフィックス ハードウェア ベンダ向け :
| • | エンド ユーザーが生産性が求められる作業をしたり、ゲームをしたりする場合は、グラフィックの操作 (すなわち、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