天天看點

關于“顯示器驅動程式已停止響應并且已成功恢複”的解決方案

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!

繼續閱讀