バグ チェック 0x116: VIDEO_TDR_FAILURE

VIDEO_TDR_FAILURE バグ チェックの値は 0x00000116 です。 このバグ チェックは、ディスプレイ ドライバーをリセットし、タイムアウトから回復しようとして失敗したことを示しています。

重要

この記事は、プログラマー向けです。 コンピューターの使用中にブルー スクリーン エラー コードが表示される場合は、「ブルー スクリーン エラーのトラブルシューティング」を参照してください。

VIDEO_TDR_FAILURE のパラメーター

パラメーター 説明
1 内部 TDR 回復コンテキストへのポインター (使用可能な場合)。
2 責任あるデバイス ドライバー モジュール (所有者タグなど) へのポインター。
3 最後に失敗した操作のエラー コード (使用可能な場合)。
4 内部コンテキスト依存データ (使用可能な場合)。

原因

グラフィックスの一般的な安定性の問題は、エンド ユーザーのコマンドまたは操作の処理中にシステムが完全にフリーズまたはハングした場合に発生します。 通常、GPU は大量のグラフィックス操作の処理の際 (典型的なのはゲーム プレイ中) にビジー状態となります。 画面の更新は行われず、ユーザーはシステムがフリーズしていると見なします。 通常、ユーザーは数秒待ってから、電源ボタンを押してシステムを再起動します。 Windows は、このような問題のあるハングの状況を検出し、応答性の高いデスクトップを動的に回復しようとします。

この検出と回復のプロセスは、タイムアウト検出と回復 (TDR) と呼ばれます。 既定のタイムアウトは 2 秒です。 ビデオ カードの TDR プロセスでは、オペレーティング システムの GPU スケジューラは、ディスプレイ ミニポート ドライバーの DxgkDdiResetFromTimeout 関数を呼び出してドライバーを再初期化し、GPU をリセットします。

このプロセス中、オペレーティング システムは、ハードウェアまたはメモリにアクセスしないようにドライバーに指示し、現在実行中のスレッドが完了するまでの短い時間を与えます。 タイムアウト内にスレッドが完了しない場合、システム バグは 0x116 VIDEO_TDR_FAILURE でチェックされます。 詳細については、「スレッドの同期および TDR」を参照してください。

また、短時間に複数の TDR イベントが発生した場合、システムは VIDEO_TDR_FAILURE を使用してバグ チェックを行うこともできます。 既定の件数は、1 分間に 5 件を超える TDR です。

回復プロセスが成功すると、"ディスプレイ ドライバーが応答を停止し、回復しました" という内容のメッセージが表示されます。

詳細については、「タイムアウトの検出と回復 (TDR)」、「TDR レジストリ キー」、および「Windows 8 以降の TDR の変更」を参照してください。

解決方法

GPU は、モニターにグラフィックスを表示するのに許可されている時間よりも長い時間がかかっています。 この動作は、次の 1 つ以上の理由で発生することがあります。

  • ディスプレイ ドライバーの最新の更新プログラムをインストールして、TDR プロセスを適切にサポートする必要がある場合があります。
  • ビデオ カードが正常に動作する機能に影響を与えるハードウェアの問題。次のようなものがあります。
    • マザーボードなどのオーバークロック コンポーネント
    • コンポーネントの互換性と設定が正しくない (特にメモリの構成とタイミング)
    • システムの冷却が不十分である
    • システム電源が不十分である
    • 不良品 (メモリ モジュール、マザーボードなど)
  • 視覚効果、またはバックグラウンドで実行されているプログラムが多すぎると、PC の速度が低下する可能性があるため、ビデオ カードは必要に応じて応答できません。

!analyze デバッグ拡張コマンドは、バグ チェックに関する情報を表示し、根本原因の特定に役立ちます。

1: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

VIDEO_TDR_FAILURE (116)
Attempt to reset the display driver and recover from timeout failed.
Arguments:
Arg1: ffffe000c2c404c0, Optional pointer to internal TDR recovery context (TDR_RECOVERY_CONTEXT).
Arg2: fffff8016470c14c, The pointer into responsible device driver module (e.g. owner tag).
Arg3: ffffffffc000009a, Optional error code (NTSTATUS) of the last failed operation.
Arg4: 0000000000000004, Optional internal context dependent data.

...

エラーが発生しているモジュール名も表示されます。

MODULE_NAME: nvlddmkm

IMAGE_NAME:  nvlddmkm.sys

lm (List Loaded Modules) コマンドを使用すると、エラーが発生しているドライバーに関する情報 (タイムスタンプなど) を表示できます。

1: kd> lmvm nvlddmkm
Browse full module list
start             end                 module name
fffff801`63ec0000 fffff801`649a7000   nvlddmkm T (no symbols)           
    Loaded symbol image file: nvlddmkm.sys
    Image path: \SystemRoot\system32\DRIVERS\nvlddmkm.sys
    Image name: nvlddmkm.sys
    Browse all global symbols  functions  data
    Timestamp:        Wed Jul  8 15:43:44 2015 (559DA7A0)
    CheckSum:         00AA7491
    ImageSize:        00AE7000
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4

パラメーター 1 には、TDR_RECOVERY_CONTEXTへのポインターが含まれています。 !analyze 出力に示されているように、関連付けられているコードのシンボルがある場合は、dt コマンドを使用してこのデータを表示できます。

1: kd> dt dxgkrnl!_TDR_RECOVERY_CONTEXT ffffe000c2c404c0
   +0x000 Signature        : 0x52445476
   +0x008 pState           : 0xffffe000`c2b12a40 ??
   +0x010 TimeoutReason    : 9 ( TdrEngineTimeoutPromotedToAdapterReset )
   +0x018 Tick             : _ULARGE_INTEGER 0xb2
   +0x020 pAdapter         : 0xffffe000`c2a89010 DXGADAPTER
   +0x028 pVidSchContext   : (null) 
   +0x030 GPUTimeoutData   : _TDR_RECOVERY_GPU_DATA
   +0x048 CrtcTimeoutData  : _TDR_RECOVERY_CONTEXT::<unnamed-type-CrtcTimeoutData>
   +0x050 pProcessName     : (null) 
   +0x058 DbgOwnerTag      : 0xfffff801`6470c14c
   +0x060 PrivateDbgInfo   : _TDR_DEBUG_REPORT_PRIVATE_INFO
   +0xb00 pDbgReport       : 0xffffe000`c2c3f750 _WD_DEBUG_REPORT
   +0xb08 pDbgBuffer       : 0xffffc000`bd000000 Void
   +0xb10 DbgBufferSize    : 0x37515
   +0xb18 pDumpBufferHelper : (null) 
   +0xb20 pDbgInfoExtension : 0xffffc000`ba7e47a0 _DXGKARG_COLLECTDBGINFO_EXT
   +0xb28 pDbgBufferUpdatePrivateInfo : 0xffffc000`bd000140 Void
   +0xb30 ReferenceCount   : 0n1
   +0xb38 pResetCompletedEvent : (null) 

パラメーター 2 には、責任あるデバイス ドライバー モジュール (所有者タグなど) へのポインターが含まれています。

1: kd> ub fffff8016470c14c
nvlddmkm+0x84c132:
fffff801`6470c132 cc              int     3
fffff801`6470c133 cc              int     3
fffff801`6470c134 48ff254d2deaff  jmp     qword ptr [nvlddmkm+0x6eee88 (fffff801`645aee88)]
fffff801`6470c13b cc              int     3
fffff801`6470c13c 48ff252d2eeaff  jmp     qword ptr [nvlddmkm+0x6eef70 (fffff801`645aef70)]
fffff801`6470c143 cc              int     3
fffff801`6470c144 48ff257d2deaff  jmp     qword ptr [nvlddmkm+0x6eeec8 (fffff801`645aeec8)]
fffff801`6470c14b cc              int     3

スタック トレースを調べるには、k、kb、kc、kd、kp、kP、kv (Display Stack Backtrace) コマンドを使用します。

1: kd> k
 # Child-SP          RetAddr           Call Site
00 ffffd001`7d53d918 fffff801`61ba2b4c nt!KeBugCheckEx [d:\th\minkernel\ntos\ke\amd64\procstat.asm @ 122]
01 ffffd001`7d53d920 fffff801`61b8da0e dxgkrnl!TdrBugcheckOnTimeout+0xec [d:\th\windows\core\dxkernel\dxgkrnl\core\dxgtdr.cxx @ 2731]
02 ffffd001`7d53d960 fffff801`61b8dd7f dxgkrnl!ADAPTER_RENDER::Reset+0x15e [d:\th\windows\core\dxkernel\dxgkrnl\core\adapter.cxx @ 19443]
03 ffffd001`7d53d990 fffff801`61ba2385 dxgkrnl!DXGADAPTER::Reset+0x177 [d:\th\windows\core\dxkernel\dxgkrnl\core\adapter.cxx @ 19316]
04 ffffd001`7d53d9e0 fffff801`63c5fba7 dxgkrnl!TdrResetFromTimeout+0x15 [d:\th\windows\core\dxkernel\dxgkrnl\core\dxgtdr.cxx @ 2554]
05 ffffd001`7d53da10 fffff801`63c47e5d dxgmms1!VidSchiRecoverFromTDR+0x11b [d:\th\windows\core\dxkernel\dxgkrnl\dxgmms1\vidsch\vidscher.cxx @ 1055]
06 ffffd001`7d53dbc0 fffff801`aa55c698 dxgmms1!VidSchiWorkerThread+0x8d [d:\th\windows\core\dxkernel\dxgkrnl\dxgmms1\vidsch\vidschi.cxx @ 426]
07 ffffd001`7d53dc00 fffff801`aa5c9306 nt!PspSystemThreadStartup+0x58 [d:\th\minkernel\ntos\ps\psexec.c @ 6845]
08 ffffd001`7d53dc60 00000000`00000000 nt!KxStartSystemThread+0x16 [d:\th\minkernel\ntos\ke\amd64\threadbg.asm @ 80]

また、停止コードを一貫して再現できる場合は、この停止コードに至るまでのコードにブレークポイントを設定し、問題のあるコードへのシングル ステップを進めることもできます。

詳細については、「WinDbg を使用したクラッシュ ダンプ ファイルの分析」を参照してください。

Windows デバッガーを使用してこの問題に取り組む機能がない場合は、いくつかの基本的なトラブルシューティング手法を使用できます。

  • イベント ビューアーのシステム ログで、このバグ チェックの原因になっているデバイスまたはドライバーの特定に役立つ可能性があるその他のエラー メッセージがないか調べます。

  • バグ チェック メッセージでドライバーがわかる場合は、ドライバーを無効にするか、製造元にドライバーの更新プログラムを確認します。

  • DirectX や OpenGL などのすべてのグラフィックス関連ソフトウェアが最新の状態であり、グラフィックスを集中的に使用するアプリケーション (ゲームなど) に完全にパッチが適用されていることを確認します。

  • インストールされた新しいハードウェアが、インストールされている Windows のバージョンと互換性があることを確認します。 たとえば、Windows 10 の仕様で必要なハードウェアに関する情報を取得できます。

  • Windows メモリ診断ツールを実行して、メモリをテストします。 コントロール パネルの検索ボックスに「メモリ」と入力し、[お使いのコンピューターのメモリの問題の診断] を選択します。テストの実行後、イベント ビューアーを使用して、システム ログの下に結果を表示します。 MemoryDiagnostics-Results エントリを探して、結果を表示します。

  • システムの製造元から提供されているハードウェア診断を実行してみることができます。

  • セーフ モードの使用

    セーフ モードを使用して、この問題を特定することを検討してください。 セーフ モードを使用すると、Windows の起動時に必要最小限のドライバーとシステム サービスのみが読み込まれます。

    1. セーフ モードに切り替えるには、[設定] の [更新とセキュリティ] に移動します。
    2. [回復]>[PC の起動をカスタマイズする] の順に選択してメンテナンス モードで起動します。
    3. 表示されたメニューで、[トラブルシューティング]>[詳細オプション]>[スタートアップ設定]>[再起動] の順に選択します。
    4. Windows が再起動して [スタートアップ設定] 画面が表示されたら、オプション 4、5、または 6 を選択してセーフ モードで起動します。

    セーフ モードは、起動時にファンクション キー (F8 キーなど) を押すことで使用できる場合があります。 特定のスタートアップ オプションについては、製造元からの情報を参照してください。

一般的なトラブルシューティング情報については、「ブルー スクリーン データ」を参照してください。

備考

ハードウェア デバイスが TDR を実装するときに満たす必要がある要件については、Windows Hardware Lab Kit のドキュメントを参照してください。 たとえば、TDR2 - 標準の 2 デバイス テスト グラフィックスなどです。

関連項目

バグ チェック コード リファレンス