关于“显示器驱动程序已停止响应并且已成功恢复”的解决方案

来源: acidgl8757

PC机半个月时间多次出现GUI挂起的消息框,
以及出现了3次:突然黑屏几秒后显示:

显示器驱动程序已停止响应并且已成功恢复。

把我给郁闷的!粗略上网一看,这是个普遍而且顽固的问题,从Vista时代就继承下来,解释和解决方案多得眼花缭乱,但没有一个真正权威的说法。
于是花了几天的时间上网细搜,查中文论坛,查英文论坛,给微软的写信,看技术文档,折腾驱动等等。

首先来说这个症状,win7系统下黑屏恢复,且跳出“显示器驱动程序已停止响应并且已成功恢复”,这个现象本身只说明一件事:系统的

超时检测和恢复 (TDR)服务,

执行到了显卡挂起热重启故障处理的最后一步。黑屏是系统reset显卡之前的瞬间,在重设分辨率。这是微软的技术文档自己描述的,没有任何疑问。
顺便吐槽一下win7中文版坑爹的翻译,明明人家说的是Display Driver,是指显卡驱动,却翻译成显示器驱动,纯属误导。

好了,这个现象就像是咳嗽。咳嗽的发生有无数种理由。肺癌会咳嗽,支气管炎会咳嗽,咽炎会咳嗽,感冒会咳嗽,呛到水了也会咳嗽。
在计算机上也同理。

以下是Tom’s hardware论坛上一位老外大牛的精辟阐述:

What this error is telling you is that the card has crashed. This is generally a hardware problem. It could be brought on by an excess of heat, 
a bad overclock, something wrong with the card itself, or something wrong with a part feeding the card (MB or Power). If the card is clean, you
 are sure nothings else in the system is broken, and the cards are not overclocked then the issue is probably with the cards or the motherboard.

This is a specific error (in a way.. it is also painfully general in that it does not tell you the exact issue) as it points directly to the GPU. 
It is very unlikely the problem is with a part of the system unrelated to the GPU (overclock on the memory or cpu for instance). However, SLI or 
crossfire adds an extra bit of issue to this as cards that work fine alone may have problems together that would trigger TDR.


他的意思主要是:跳这个错误,总是指向跟GPU相关的问题。但具体是什么问题非常难以确定。有可能是过热,有可能是胡乱超频,有可能是显卡体质,
有可能是驱动。


从我几天中看到的无数错误报告中,可以总结出以下几点相对宽泛的结论:

1. 出现在各种显卡,各种驱动中。且XP没有这问题。都是出现在Vista或Win7。看起来像是废话,TDR本来就是Vista之后才有的服务嘛!其实这不是废话。因为很多人的
系统是在XP跑得很好,同样的硬件升级到Vista和Win7之后频繁出错。这意味着很大程度上,跳这个错误是在误杀,overkill。系统软硬件没有问题,是新操作系统的配合
出了问题。

2. 大量的黑屏跳框出现在显卡低负荷状态下,比如看网页用qq,很少的出现在高负荷状态下,比如渲染软件,吃显卡游戏。有一些出现在某些游戏的特定场景中,而且
一定出现非常准时。这意味着显卡本身的硬件质量问题虽然不能排除,但绝不是主流的原因。

3. 很多种方法都解决了各自系统中的问题,比如换XP,显卡降频,禁用光驱,换大功率电源,刷显卡BIOS,换驱动,取消win7带3D的主题,取消win7的Aero功能,用16
位色。但没有一种能解决所有人,甚至只是大部分人的问题。

4. 禁用TDR服务能够保证你不跳框。其他什么都不保证。这就像是用麻醉咽喉来治疗咳嗽。能保证你不咳,其他什么都不保证。


除了禁用光驱这个我想破头也想不明白,其他的解决方案多少都是可以理解的。要理解它们,先来看下TDR到底怎样工作。

TDR是微软为了解决显卡挂起导致系统死机的问题而开发的,首先在Vista上启用,后来在Vista SP1上有更新,win7下全盘继承。发展这个的原因很微软:windows的爱崩溃
在XP年代及以前,是大家嘲笑的对象。所以微软下了大功夫来解决崩溃死机的问题。他们的统计发现,XP约有20%的系统崩溃/卡死是因为显卡挂起,需要重启,占所有分类
故障原因的头把交椅。而显卡挂起的原因又是多种多样的。因此头痛医头,脚痛医脚的TDR就应运而生。它不是去解决显卡的问题,而是致力于先要诊断显卡挂起,而在确诊后,
系统用一个服务去热重启显卡,结果系统就没有崩溃/卡死嘛!这就是微软的终极目的。

TDR的工作流程:

1.WIN系统中有一个服务组件,一直在检测系统图形堆栈中GPU执行每个任务的时间。Vista的默认超时点为2秒,(Win7默认没有变,但判断程序有区别)。如果GPU要认领一
个任务,但超过等待时间之后还没认领到手,或者认领之后超过等待时间还发来没完成响应,则系统诊断GPU已经挂起了。这个过程叫超时等待检测。
2.操作系统准备恢复GPU。它会通知WDDM 驱动程序,停止GPU访问其他硬件(如内存)的权限,并搜集硬件状态信息。
3.操作系统重置图形堆栈的回溯状态。图形堆栈中清除视频内存的分配。WDDM驱动程序重置GPU硬件状态。图形堆栈执行最后的操作,并将桌面恢复到响应的状态。

OK,以上第三步的动作就是你的黑屏和恢复跳框。1,2步的时候用户感受是桌面反应迟缓,不可用。类似于死机之前,但时间很短暂。

在Vista SP1,TDR又做了一些改进,大体是放宽了判据,改为侦测多次短暂挂起。具体的参数没有找到。

看完TDR的工作流程之后,可以试着来看看这些解决方法的道理:

显卡降频:原来的超频不当,使得显卡反应在某些条件下迟缓了,被TDR误杀。
换大功率电源:供电能力不足导致显卡反应迟缓,被TDR时不时点名批评。
取消window的3D,Aero,上16位色:这一系列的解决方案能起作用,都意味着windows主界面的显示需求和显卡之间的配合出现了问题。显然不是显卡能力的问题:
windows那点界面花招,刚性需求哪能跟游戏比。问题基本可以肯定是出现在2D和3D频繁切换时,显卡由于工作频率频繁切换,出现了瞬间反应迟缓的问题。这是
显卡硬件,固件,驱动和windows界面显示需求几方面配合不良出现的小摩擦,本来不是大问题,用户可以完全无知无觉,但是在TDR的没事找事,放大之下,成了很恶心的用户体验。
换显卡驱动能解决一些人的问题,也证明了这种配合问题不是什么大毛病。
进游戏特定场景出问题:看起来也像是2D/3D切换带来的麻烦。
刷显卡BIOS:刷法是把2D和3D的工作频率刷平。这个解释已经很明显了。
禁用TDR:KO。
换XP:KO的平方。。。

原理基本清楚了,现在来看遇到的时候该怎么解决。
首先来认识另一位Tom’s hardware的大牛,这人是个修电脑的,也是个认死理的。在已知显卡降频、禁用TDR、禁用windows 3D主题可以完美解决某客户问题后,拒绝接受这些屈服
性方案。他把一套硬件逐个换,驱动逐个试,各自跑了几星期之后,终于得出以下结论:

So my conclusion: this is a Windows problem with drivers and hardware which can only be fixed by replacing the video card with one requiring completely 
different drivers. Then you can go back to the original drivers and video card without problems (for who knows how long before they become corrupted again). 
Something in Windows (Vista & Win 7) is corrupting drivers from both Intel and ATI.

简单滴说,排除其他硬件故障和驱动问题之后,他认为这是windows的内在问题。在他的试验中,出问题的系统换成另一块完全用不同的驱动的显卡,可以解决,但不能长时间维持。
解决之后换回原来的显卡和驱动,又能正常工作了,但还是不能长时间维持。所以这个问题居然有了时间因素了:“Win7和Vista里面有某种邪恶的存在,在腐蚀显卡驱动程序,
不管是N卡还是A卡!”

听起来像是危言耸听,但看了官方的TDR的工作原理之后,我觉得他的结论也不是不可能。因为TDR首先是一个诊断程序,诊断程序不太可能只用2秒这么一个死板的参数。肯定还有
另外一些没有公布的,搜集硬件数据的判据。而这些数据是积累-学习型的。诊断程序现在很多都会学习。TDR的邪恶大概就就在于它的诊断程序不好,太敏感,经常对显卡运行的
小毛刺甚至显卡驱动的一些无辜信息大动干戈。而且这些误差会随着它的学习程序而积累。这也解释了为什么这故障很多,但并不是每台win7的机器都有:TDR在大多数的系统环境下
还是能正常诊断的,只是在某些显卡/驱动/硬件环境/操作系统/使用条件组合下,它对显卡反应迟滞和挂起之间的区别产生了微妙的误解。我看所有报告的感觉,似乎是中低端的显卡
和新驱动的组合,误杀的可能性和频率越变大。有一些开发商有意改进的特定版本新驱动,出错的可能性会变小,比如560Ti的 285.66驱动。这意味着开发商也知道是什么出了问题,
有一些驱动的解决办法,但不完美。

我的解决方案:

首先是更换驱动。我的硬件都是新买的,装机诊断很认真,来源很可靠,系统装得也很仔细。那么最大的可能性是驱动。我三次黑屏都在驱动285.62版本下。更换295.73后,我有意地
多次运行大游戏并多进程切换界面,取消/恢复windows界面效果,跑Aero应用。自我感觉很好,一直没出问题,但是正在得意了一个星期之后,又出现一次。这次包括黑屏之前连跳两个
“GUI挂起”消息,在毫无显示负载的情况下。
这证明更换驱动只是部分解决了配合问题,“邪恶的”TDR仍然会在用户图形界面做出一些奇怪的错误动作时,黑屏误杀。
于是我果断禁用了TDR。到现在为止,一切正常,没有发生过问题。

我的最终建议:
1. win7系统下黑屏恢复,且跳出“显示器驱动程序已停止响应并且已成功恢复”,跳这个错误,除了指向显示问题,什么都没有说明。你首先是需要忽略这个东西,从其他证据来分析
你的显示系统究竟有什么问题。如果你显卡过热或者过分超频或者电源不行,那么禁用TDR不能解决问题,只能让你频繁死机。不要简单听信任何一种神奇的解决方案,因为人家的问题
很可能不是你的问题。初步分析出原因,再说解决方法。

2.出问题的大多数人的硬件自身都没问题,纯粹是windows在作孽。如果你对自己的硬件判断没有信心,而且不在乎界面漂亮,你大可以取消win7高级界面风格试试,就算给黑社会交
保护费消灾了。

3 如果你有信心,判断自己的显卡硬件没问题,禁用TDR是个好选择。毕竟现在的windows没那么容易崩溃了。禁用TDR的负面效果,是你真正因为显卡挂起而死机的时候,会真的死掉,
而不是win7帮你热重启显卡。其实这还是一个怀疑自己显卡/驱动是不是真有问题时的诊断方法:禁掉TDR,看它死不死机。

4.换显卡驱动是很简单的事,不妨一试。但很可能不能完全解决问题。

不推荐刷显卡BIOS,动作有风险,而且这保护费也交得太高了!2D跑3D频率对显卡不太好。

最后,禁用TDR的注册表值:

HKLM\System\CurrentControlSet\Control\GraphicsDrivers的TdrLevel:REG_DWORD。修改值为:TdrLevelOff(0)-禁用检测。

F**K 微软,这些活该你们做。即使我是用盗版也不能改变你们活糙的事实。

修改方案2:

1. Open REGEDIT

2. Using Windows 7, go to HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\GraphicsDrivers

3. Once there you will most likely have to create a new DWORD (32bit users) or QWORD (64bit users). Name it TdrDelay.

4. Once created, change the value to 8. This will allow the GPU 8 seconds to respond instead of 2 seconds.

I did this myself, and now im back up and running at full speed. I can watch my movies and play all my games again! Cheers!

Share

发表评论

电子邮件地址不会被公开。 必填项已用*标注