關於“顯示器驅動程序已停止響應並且已成功恢復”的解決方案

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!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章