martedì 15 novembre 2011

Il Driver del monitor ha smesso di funzionare, ovvero TDR!


... già ovvero TDR, che non è un'imprecazione anche se ho pensato che fosse l'acronimo di "Ti Darei una Randellata".

Come forse alcuni di voi sanno, ho un PC con 3 monitor, il computer in questione monta una Ge.Fo. 285GTX ed una più vecchia 8700, sempre nVidia. Benché le due schede video funzionino correttamente con lo stesso driver (attualmente installa la 285.62) tutte le mattine quando accendo il PC sono soggetto a svariati arresti da parte del driver video. Quello che ipotizzo è che essendo le due schede video di differenti epoche oltre ad avere, evidentemente, diverse prestazioni Windows abbia problemi a sincronizzarle. E' altresì vero però che dopo una mezzoretta, il PC funziona alla perfezione, tanto che poi posso tranquillamente tenere 3DStudio sul primo monitor, Photoshop sul secondo e winamp e browser sul terzo, senza alcun problema di sorta.


Informazioni aggiuntive:

  • il PC non è overcloccato (ne CPU, ne Mo.Bo. ne GPU ne tanto meno la RAM)
  • le due schede video funzionano perfettamente
  • le temperature di esercizio sono corrette
  • l'alimentatore funziona correttamente
A questo punto analisi del problema:
  1. Il PC presenta il problema solamente all'accensione, e per circa una mezz'oretta. 
  2. Costringendo il PC a lavorare durante la "Fase di Instabilità del Driver" si giunge, prima o poi ad un freeze totale costringendoci ad un reset hardware.
  3. Il PC dopo circa 20 minuti e/o reset hardware (a seguito del crash del sistema) funziona perfettamente.
Penso, in buona sostanza, che il problema sia dovuto in parte alla pigrizia dell'alimentatore che, forse a causa dell'usura, comincia ad invecchiare, come una sorta di diesel ci mette un po' per lavorare a regime e questo porta alla risoluzione del nostro problema.

Con l'avvento di Windows Vista, Microsoft, ha introdotto il Time Detection Recovery (TDR appunto), il servizio in questione è utilizzato per monitorare i driver e nel qual caso questi smettessero di funzionare, li arresta per poi riavviarli, evitando all'utente le BSOD. 

All'interno del registro di sistema abbiamo (o meglio dovremmo avere) le impostazioni atte alla gestione del tutto.

TDR-related registry keys are located under HKLM\System\CurrentControlSet\Control\GraphicsDrivers.
  • TdrLevel: REG_DWORD. The initial level of recovery. The possible values are:
    • TdrLevelOff (0). – Detection disabled.
    • TdrLevelBugcheck (1) – Bug check on detected timeout, for example, no recovery.
    • TdrLevelRecoverVGA (2) – Recover to VGA (not implemented).
    • TdrLevelRecover(3) – Recover on timeout. This is the default value.
  • TdrDelay: REG_DWORD. The number of seconds that the GPU is allowed to delay the preempt request from the scheduler. This is effectively the timeout threshold. The default value is 2.
  • TdrDdiDelay: REG_DWORD. The number of seconds that the operating system allows threads to leave the driver. After a specified time, the operating system bug checks the system with the code VIDEO_TDR_FAILURE (0x116). The default value is 5.
  • TdrTestMode: REG_DWORD: Internal test usage.
  • TdrDebugMode: REG_DWORD: The debugging-related behavior of the TDR process.
    • TDR_DEBUG_MODE_OFF (0) breaks to kernel debugger before the recovery to allow investigation of the timeout.
    • TDR_DEBUG_MODE_IGNORE_TIMEOUT (1) ignores any timeout.
    • TDR_DEBUG_MODE_RECOVER_NO_PROMPT (2) recovers without break into the debugger. This is the default value.
    • TDR_DEBUG_MODE_RECOVER_UNCONDITIONAL (3) recovers even if some recovery conditions are not met (for example, recovers on consecutive timeouts).
  • TdrLimitTime: REG_DWORD (Windows Vista SP1 and later versions only): The default time within which a "TdrLimitCount" number of TDRs are allowed without crashing the system.
  • TdrLimitCount: REG_DWORD (Windows Vista SP1 and later versions only): The default number of TDRs (0x117) that are allowed in "TdrLimitTime" without crashing the system.

Ecco quindi che il workaround ci viene suggerito direttamente da Microsoft, nel mio caso le chiavi di registro non c'erano e quindi me le sono fatte così come spiegato nel documento ufficiale.

TdrDdiDelay = 9999 dovrebbe dare il tempo all'Ali. di scaldarsi a suffcenza per entrare a regime.
TdrLevelOff  = 0  Ad ogni modo ho anche impostato questa chiave per essere certo che il TDR venga disattivato; su un'altro forum, l'utente HasmiR suggeriva di aggiungere la chiave TdrDelay per far si Windows attivi le altre chiavi legate al TDR.

In conclusione penso, che il freeze che si verifica proprio perchè si forza Windows a lavorare sotto "contiunum driver restart".In oltre, com'è noto, scheda audio e scheda video vanno facilmente in conflitto (anni fa quando si usavano ancora i jumper per impostare gli IRQ era una vera battaglia ^_^), ed uno dei modi più semplici per giungere al freeze è proprio quello di mantenere WinAmp in funzione mentre il TDR è all'opera.

Ad ogni modo, se siete certi che il vostro Hardware sia correttamente configurato e funzionante e l'alimentazione del vostro PC, sufficiente. Queste chiavi possono aprire le porte alla vostra serenità

Probabilmente farei bene a cambiare alimentatore, e a passare da un 700W ad un 1000W ma in tempo di crisi, si sa, bisogna risparmiare 

fonte:
http://msdn.microsoft.com/en-us/windows/hardware/gg487368

Nessun commento:

Posta un commento