Condividi tramite


Rilevamento e ripristino del timeout (TDR)

Questo articolo descrive il rilevamento del timeout e il ripristino (TDR) per gli sviluppatori di driver. Per altre informazioni, vedere TDR in Windows 8 e versioni successive.

Panoramica

Uno dei problemi di stabilità più comuni nella grafica si verifica quando un computer sembra "bloccarsi" o essere completamente "bloccato" quando elabora effettivamente un comando o un'operazione dell'utente finale. Molti utenti attendono alcuni secondi e quindi decidono di riavviare il computer. L'aspetto bloccato del computer si verifica spesso perché la GPU sta elaborando operazioni grafiche complesse, in genere durante la riproduzione del gioco e quindi non aggiorna la schermata di visualizzazione. I TDR consentono al sistema operativo di rilevare che l'interfaccia utente non è reattiva.

Nella figura seguente viene illustrato il processo TDR.

Diagramma che mostra il processo di rilevamento e ripristino di timeout delle GPU tramite WDDM.

Il sistema operativo tenta di rilevare situazioni in cui i computer sembrano essere "bloccati". Il sistema operativo tenta quindi di eseguire il ripristino dinamico dalle situazioni bloccate in modo che i desktop siano nuovamente reattivi, alleviare la situazione in cui gli utenti finali riavviino inutilmente i propri sistemi.

Per impostazione predefinita, se il sistema operativo rileva che cinque (5) o più blocchi della GPU (0x117) e i ripristini successivi si verificano entro un minuto (1), il sistema operativo controlla il computer nel successivo blocco della GPU (sesto o più). Per altre informazioni, vedere TdrLimitCount e TdrLimitTime.

Come nota collaterale, i timeout del motore (0x141) non contribuiscono al numero di blocchi della GPU, anche se il sistema operativo potrebbe promuovere un timeout del motore a un blocco gpu se il timeout del motore non riesce. Per i timeout del motore (0x141), il numero massimo è minore di uno rispetto ai timeout dell'adattatore (0x117). Il processo di reimpostazione del motore blocca l'accesso alla GPU per il processo che causa tali timeout e i log di sistema 0x142 per indicare tale fatto. In questo modo, il processo di malfunzionamento non controlla il sistema.

Rilevamento del timeout in WDDM

L'utilità di pianificazione GPU, che fa parte del sottosistema kernel grafico DirectX (Dxgkrnl.sys), rileva che la GPU richiede più del tempo consentito per eseguire una determinata attività. L'utilità di pianificazione GPU tenta quindi di anteporre questa particolare attività. L'operazione di preempt ha un timeout di "attesa", ovvero il timeout TDR effettivo. Il periodo di timeout predefinito in Windows Vista e nei sistemi operativi successivi è di 2 secondi. Se la GPU non può completare o interrompere l'attività corrente entro il periodo di timeout TDR, il sistema operativo diagnostica che la GPU è bloccata.

Per evitare che si verifichi il rilevamento del timeout, i fornitori di hardware devono garantire che le operazioni grafiche (ovvero il completamento del buffer DMA) non richiedono più di 2 secondi negli scenari degli utenti finali, ad esempio produttività e gioco.

Preparazione per il ripristino

L'utilità di pianificazione GPU chiama la funzione DxgkDdiResetFromTimeout del driver miniport di visualizzazione per informare il driver che il sistema operativo ha rilevato un timeout. Il driver deve quindi reinizializzare se stesso e reimpostare la GPU. Inoltre, il driver deve interrompere l'accesso alla memoria e non deve accedere all'hardware. Il sistema operativo e il driver raccolgono hardware e altre informazioni sullo stato che possono essere utili per la diagnosi post-ripristino.

Per altre informazioni, vedere TDR in Windows 8 e versioni successive.

Ripristino del desktop

Il sistema operativo reimposta lo stato appropriato dello stack di grafica. Gestione memoria video, che fa anche parte di Dxgkrnl.sys, elimina tutte le allocazioni dalla memoria video. Il driver miniport di visualizzazione reimposta lo stato hardware della GPU. Lo stack di grafica esegue le azioni finali e ripristina lo stato reattivo del desktop.

L'unico artefatto visibile dal rilevamento blocchi al ripristino è uno sfarfallio dello schermo. Questo sfarfallio genera quando il sistema operativo reimposta alcune parti dello stack di grafica, causando una ridisegnazione dello schermo. Il driver miniport di visualizzazione può eliminare questo ridisegno quando è conforme a WDDM 1.2 e versioni successive (vedere Fornire transizioni di stato senza problemi in WDDM 1.2 e versioni successive).

Quando il sistema operativo recupera correttamente il desktop, completa le azioni seguenti:

  • Visualizza un messaggio informativo all'utente finale, che indica che il driver di visualizzazione ha smesso di rispondere ed è stato ripristinato.
  • Registra il messaggio precedente nell'applicazione Visualizzatore eventi e raccoglie informazioni di diagnosi sotto forma di report di debug. Se l'utente finale ha scelto di fornire commenti e suggerimenti, il sistema operativo restituisce questo report di debug a Microsoft tramite il meccanismo OCA (Online Crash Analysis).

Alcune applicazioni DirectX legacy potrebbero semplicemente rendere nero alla fine di questo ripristino, che richiede all'utente finale di riavviare queste applicazioni. Le applicazioni DirectX 9Ex e DirectX 10 e successive scritte correttamente che gestiscono la tecnologia Device Remove continuano a funzionare correttamente. Un'applicazione deve rilasciare e quindi ricreare il dispositivo Microsoft Direct3D e tutti gli oggetti del dispositivo.

Sincronizzazione dei thread e TDR

Per informazioni dettagliate , vedere Sincronizzazione dei thread e TDR .

Test e debug della route TDR

Per informazioni dettagliate, vedere Test e debug della route TDR .