解决方案中
GPU 花费的时间超过了允许的时间来向显示器显示图形。
出现此行为的原因可能是以下一种或者多种:
- 我们可能需要为显示驱动程序安装最新更新,以便它正确支持 TDR 过程。
- 影响显卡正常运行能力的硬件问题,包括:
- 超频组件,例如主板
- 组件兼容性和设置不正确(尤其是内存配置和时序)
- 系统散热
- 不足 系统电源不足
- 有缺陷的部件(内存模块、主板)等)
- 视觉效果或者后台运行的程序过多可能会降低 PC 速度,从而导致显卡无法根据需要做出响应。
!analyze 调试扩展显示有关错误检查的信息,有助于确定根本原因。
详细步骤查看我们的教程 在windows 中使用WinDBG 调试dmp文件
3: kd> !analyze -v *** * * * Bugcheck Analysis * * * *** VIDEO_TDR_TIMEOUT_DETECTED (117) The display driver failed to respond in timely fashion. (This code can never be used for a real bugcheck.) Arguments: Arg1: 8975d500, Optional pointer to internal TDR recovery context (TDR_RECOVERY_CONTEXT). Arg2: 9a02381e, The pointer into responsible device driver module (e.g owner tag). Arg3: 00000000, The secondary driver specific bucketing key. Arg4: 00000000, Optional internal context dependent data. ...
还会显示故障模块名称
MODULE_NAME: atikmpag IMAGE_NAME: atikmpag.sys
我们可以使用 lmv 命令显示有关故障驱动程序的信息,包括时间戳。
3: kd> lmvm atikmpag Browse full module list start end module name 9a01a000 9a09a000 atikmpag T (no symbols) Loaded symbol image file: atikmpag.sys Image path: atikmpag.sys Image name: atikmpag.sys Browse all global symbols functions data Timestamp: Fri Dec 6 12:20:32 2013 (52A23190) CheckSum: 0007E58A ImageSize: 00080000 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4
参数 1 包含指向 TDR_RECOVERY_CONTEXT 的指针。
3: kd> dt dxgkrnl!_TDR_RECOVERY_CONTEXT fffffa8010041010 +0x000 Signature : ?? +0x004 pState : ???? +0x008 TimeoutReason : ?? +0x010 Tick : _ULARGE_INTEGER +0x018 pAdapter : ???? +0x01c pVidSchContext : ???? +0x020 GPUTimeoutData : _TDR_RECOVERY_GPU_DATA +0x038 CrtcTimeoutData : _TDR_RECOVERY_CONTEXT::<unnamed-type-CrtcTimeoutData> +0x040 DbgOwnerTag : ?? +0x048 PrivateDbgInfo : _TDR_DEBUG_REPORT_PRIVATE_INFO +0xae0 pDbgReport : ???? +0xae4 pDbgBuffer : ???? +0xae8 DbgBufferSize : ?? +0xaec pDumpBufferHelper : ???? +0xaf0 pDbgInfoExtension : ???? +0xaf4 pDbgBufferUpdatePrivateInfo : ???? +0xaf8 ReferenceCount : ?? Memory read error 10041b08
参数 2 包含指向负责的设备驱动程序模块(例如,所有者标记)的指针。
BUGCHECK_P2: ffffffff9a02381e
我们可能希望使用 k、kb、kc、kd、kp、kP、kv(显示堆栈回溯)命令检查堆栈跟踪。
3: kd> k # ChildEBP RetAddr 00 81d9ace0 976e605e dxgkrnl!TdrUpdateDbgReport+0x93 [d:\blue_gdr\windows\core\dxkernel\dxgkrnl\core\dxgtdr.cxx @ 944] 01 81d9acfc 976ddead dxgkrnl!TdrCollectDbgInfoStage2+0x195 [d:\blue_gdr\windows\core\dxkernel\dxgkrnl\core\dxgtdr.cxx @ 1759] 02 81d9ad24 976e664f dxgkrnl!DXGADAPTER::Reset+0x23f [d:\blue_gdr\windows\core\dxkernel\dxgkrnl\core\adapter.cxx @ 14972] 03 81d9ad3c 977be9e0 dxgkrnl!TdrResetFromTimeout+0x16 [d:\blue_gdr\windows\core\dxkernel\dxgkrnl\core\dxgtdr.cxx @ 2465] 04 81d9ad50 977b7518 dxgmms1!VidSchiRecoverFromTDR+0x13 [d:\blue_gdr\windows\core\dxkernel\dxgkrnl\dxgmms1\vidsch\vidscher.cxx @ 1018] 05 (Inline) -------- dxgmms1!VidSchiRun_PriorityTable+0xfa71 06 81d9ad70 812c01d4 dxgmms1!VidSchiWorkerThread+0xfaf2 [d:\blue_gdr\windows\core\dxkernel\dxgkrnl\dxgmms1\vidsch\vidschi.cxx @ 424] 07 81d9adb0 81325fb1 nt!PspSystemThreadStartup+0x58 [d:\blue_gdr\minkernel\ntos\ps\psexec.c @ 5884] 08 81d9adbc 00000000 nt!KiThreadStartup+0x15 [d:\blue_gdr\minkernel\ntos\ke\i386\threadbg.asm @ 81]
我们还可以在导致此停止代码的代码中设置断点,并尝试单步前进到故障代码,如果我们可以始终如一地重现停止代码。
有关详细信息,请参阅以下主题:
使用 Windows 调试器 (WinDbg) 进行故障转储分析
如果我们不具备使用 Windows 调试器来解决此问题的能力,则可以使用一些基本的故障排除技术。
- 检查事件查看器中的系统日志以获取可能有助于识别导致此错误检查的设备或者驱动程序的其他错误消息。
- 如果在错误检查消息中识别出驱动程序,请禁用该驱动程序或者与制造商联系以获取驱动程序更新。
- 验证所有与图形相关的软件(例如 DirectX 和 OpenGL)都是最新的,并且所有图形密集型应用程序(例如游戏)都已完全修补。
- 确认安装的任何新硬件都与安装的 Windows 版本兼容。例如,我们可以在 Windows 10 规范中获取有关所需硬件的信息。
- 使用安全模式
考虑使用安全模式来帮助隔离此问题。在 Windows 启动期间,使用安全模式仅加载最低要求的驱动程序和系统服务。要进入安全模式,请使用“设置”中的“更新和安全”。选择恢复 -> 高级启动以引导至维护模式。在出现的菜单中,选择疑难解答 -> 高级选项 -> 启动设置 -> 重新启动。Windows 重新启动到启动设置屏幕后,选择选项 4. 5 或者 6 以启动到安全模式。
可以通过在启动时按功能键(例如 F8)来使用安全模式。有关特定启动选项,请参阅制造商提供的信息。 - 运行 Windows 内存诊断工具来测试内存。在控制面板搜索框中,键入内存,然后选择诊断计算机的内存问题。 运行测试后,使用事件查看器在系统日志下查看结果。查找 MemoryDiagnostics-Results 条目以查看结果。
- 我们可以尝试运行系统制造商提供的硬件诊断程序。
- 有关其他常规故障排除信息,请参阅蓝屏数据。
VIDEO_TDR_TIMEOUT_DETECTED 错误检查的值为 0x00000117.
这表明显示驱动程序未能及时响应。
备注
硬件认证要求
有关硬件设备在实现 TDR 时必须满足的要求的信息,请参阅 Device.Graphics...TDRRResiliency 上的 WHCK 文档。
VIDEO_TDR_TIMEOUT_DETECTED 参数
参数 | 说明 |
---|---|
1 | 指向内部 TDR 恢复上下文的指针(如果可用)。 |
2 | 指向负责设备驱动程序模块的指针(例如,所有者标签)。 |
3 | 辅助驱动程序特定的分桶键。 |
4 | 内部上下文相关数据(如果可用)。 |
原因
当系统在处理最终用户命令或者操作时出现完全冻结或者挂起时,会出现图形中常见的稳定性问题。
通常 GPU 忙于处理密集的图形操作,通常是在玩游戏期间。
没有屏幕更新发生,用户认为他们的系统被冻结。
用户通常等待几秒钟,然后按电源按钮重新启动系统。
Windows 尝试检测这些有问题的挂起情况并动态恢复响应式桌面。
此检测和恢复过程称为超时检测和恢复 (TDR)。
默认超时为 2 秒。
在显卡的 TDR 过程中,操作系统的 GPU 调度程序调用显示微型端口驱动程序的 DxgkDdiResetFromTimeout 函数重新初始化驱动程序并重置 GPU。
如果恢复过程成功,将显示一条消息,指示“显示驱动程序停止响应并已恢复”。
有关详细信息,请参阅超时检测和恢复 (TDR)、Windows 8 中的 TDR 注册表项和 TDR 更改,它们位于超时检测和恢复 (TDR)