Controllo bug 0x133: DPC_WATCHDOG_VIOLATION

Il controllo dei bug DPC_WATCHDOG_VIOLATION ha un valore pari a 0x00000133. Questo controllo di bug indica che il watchdog DPC è stato eseguito, perché ha rilevato una singola chiamata di procedura posticipata (DPC) a esecuzione prolungata o perché il sistema ha trascorso un tempo prolungato a un livello di richiesta di interrupt (IRQL) di DISPATCH_LEVEL o superiore.

Il valore del parametro 1 indica se un singolo DPC ha superato un timeout o se il sistema ha trascorso un lungo periodo di tempo in IRQL DISPATCH_LEVEL o superiore. I controller di rete non devono essere eseguiti più di 100 microsecondi e gli ISR non devono essere eseguiti più di 25 microsecondi, ma i valori di timeout effettivi nel sistema sono impostati molto più alti.

Per altre informazioni sui DPC, vedere Introduction to DPC Objects and Windows Internals 7th Edition Part 1 (Introduzione agli oggetti DPC e Windows Internals 7th Edition Part 1 ) di Paolo Yosifovich, Mark E. Russinovich, David A. Solomon e Alex Ionovich.

Importante

Questo articolo è destinato ai programmatori. Se si è un cliente che ha ricevuto un codice di errore della schermata blu durante l'uso del computer, vedere Risolvere gli errori della schermata blu.

parametri DPC_WATCHDOG_VIOLATION

Il parametro 1 indica il tipo di violazione. Il significato degli altri parametri dipende dal valore del parametro 1.

Parametro 1 Parametro 2 Parametro 3 Parametro 4 Causa dell'errore
0 Conteggio tempo DPC (in tick) Allocazione temporale DPC (in tick). cast to nt! DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, che contiene informazioni aggiuntive relative a questo singolo timeout DPC Un singolo DPC o ISR ha superato il tempo di allocazione. Il componente che causa l'errore può in genere essere identificato con un'analisi dello stack.
1 Il periodo del watchdog cast to nt! DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, che contiene informazioni aggiuntive relative a questo singolo timeout DPC Prenotato Il sistema ha trascorso un lungo periodo di tempo in irQL DISPATCH_LEVEL o superiore. Il componente che causa l'errore può in genere essere identificato con un'analisi dello stack.

Causa

Per determinare la causa, è necessario che il debugger di Windows, l'esperienza di programmazione e l'accesso al codice sorgente per il modulo di errore.

Per altre informazioni, vedere gli argomenti seguenti:

Analisi del dump di arresto anomalo del sistema usando i debugger di Windows (WinDbg)

Analisi di un file di dump in modalità kernel con WinDbg

Uso dell'estensione !analyze e !analyze

Per altre informazioni su Windows DPC, vedi Windows Internals 7th Edition Part 1 di Paolo Yosifovich, Mark E. Russinovich, David A. Solomon e Alex Ionribu.

Esempio 1

L'estensione di debug !analyze visualizza informazioni sul controllo dei bug e può essere utile per determinare la causa radice.

Parametro 1 = 0

In questo esempio il conteggio dei tick di 501 supera l'allocazione del tempo DPC pari a 500. Il nome dell'immagine indica che questo codice è stato eseguito quando si è verificato il controllo del bug.

0: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

DPC_WATCHDOG_VIOLATION (133)
The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
or above.
Arguments:
Arg1: 0000000000000000, A single DPC or ISR exceeded its time allotment. The offending
    component can usually be identified with a stack trace.
Arg2: 0000000000000501, The DPC time count (in ticks).
Arg3: 0000000000000500, The DPC time allotment (in ticks).
Arg4: 0000000000000000

...

IMAGE_NAME:  BthA2DP.sys
...

Usare i comandi del debugger seguenti per raccogliere altre informazioni sugli errori con un parametro pari a 0:

k (Visualizza stack backtrace) per esaminare il codice in esecuzione quando si è verificato il codice di arresto.

È possibile usare il comando u, ub, uu (Unassemble) per approfondire le specifiche del codice in esecuzione.

L'estensione !pcr visualizza lo stato corrente dell'area di controllo processore (PCR) in un processore specifico. Nell'output sarà l'indirizzo del prcb

0: kd> !pcr
KPCR for Processor 0 at fffff8035f5a4000:
    Major 1 Minor 1
	NtTib.ExceptionList: fffff80368e77fb0
	    NtTib.StackBase: fffff80368e76000
	   NtTib.StackLimit: 0000000000000000
	 NtTib.SubSystemTib: fffff8035f5a4000
	      NtTib.Version: 000000005f5a4180
	  NtTib.UserPointer: fffff8035f5a4870
	      NtTib.SelfTib: 000000b6d3086000

	            SelfPcr: 0000000000000000
	               Prcb: fffff8035f5a4180
	               Irql: 0000000000000000
	                IRR: 0000000000000000
	                IDR: 0000000000000000
	      InterruptMode: 0000000000000000
	                IDT: 0000000000000000
	                GDT: 0000000000000000
	                TSS: 0000000000000000

	      CurrentThread: fffff80364926a00
	         NextThread: ffffe40b77c12040
	         IdleThread: fffff80364926a00

È possibile usare il comando dt (Tipo di visualizzazione) per visualizzare informazioni aggiuntive sui CONTROLLER di dominio e sul Watchdog DPC. Per l'indirizzo usare prcb elencato nell'output !pcr:

dt nt!_KPRCB fffff80309974180 Dpc* 
0: kd> dt nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK fffff803648fa320
   +0x000 Signature        : 0xaebecede
   +0x004 Revision         : 1
   +0x006 Size             : 0x10
   +0x008 DpcWatchdogProfileOffset : 0x84a8
   +0x00c DpcWatchdogProfileLength : 0x8200

Esempio 2

Parametro 1 = 1

Per il parametro 1, il codice potrebbe non arrestarsi nell'area di codice che causa l'errore. In questo caso, un approccio consiste nell'usare la traccia eventi per tentare di rilevare il driver che supera la durata di esecuzione normale.

Usare l'estensione di debug !analyze per visualizzare informazioni sul controllo dei bug.

0: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

DPC_WATCHDOG_VIOLATION (133)
The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
or above.
Arguments:
Arg1: 0000000000000001, The system cumulatively spent an extended period of time at
	DISPATCH_LEVEL or above. The offending component can usually be
	identified with a stack trace.
Arg2: 0000000000001e00, The watchdog period.
Arg3: fffff803648fa320, cast to nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, which contains
	additional information regarding the cumulative timeout
Arg4: 0000000000000000

Eseguire il cast dell'indirizzo del nt! DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK visualizzare informazioni su di esso.

0: kd> dt nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK fffff803648fa320
   +0x000 Signature        : 0xaebecede
   +0x004 Revision         : 1
   +0x006 Size             : 0x10
   +0x008 DpcWatchdogProfileOffset : 0x84a8
   +0x00c DpcWatchdogProfileLength : 0x8200

Usare il comando !dpcs per visualizzare i DPC in coda.

3: kd> !dpcs
CPU Type      KDPC       Function
 0: Normal  : 0xfffff8035f5ac290 0xfffff80363e15630 nt!PpmPerfAction
Failed to read DPC at 0xffffe40b77190dd8
 0: Threaded: 0xfffff8035f5ac3d8 0xfffff80363f27d70 nt!KiDpcWatchdog

Risoluzione

Per determinare la causa specifica e creare una correzione del codice, è necessario l'esperienza di programmazione e l'accesso al codice sorgente del modulo di errore.

Osservazioni:

In generale, questo codice di arresto è causato da codice driver difettoso che in determinate condizioni, non completa il lavoro entro l'intervallo di tempo assegnato.

Se non si è dotati di usare il debugger Windows per questo problema, è consigliabile usare alcune tecniche di risoluzione dei problemi di base.

  • Se un driver viene identificato nel messaggio di controllo dei bug, per isolare il problema, disabilitare il driver. Rivolgersi al produttore per verificare la presenza di aggiornamenti dei driver.

  • Controllare il log di sistema Visualizzatore eventi per altri messaggi di errore che potrebbero aiutare a identificare il dispositivo o il driver che causa il controllo dei bug 0x133.

  • Verificare che qualsiasi nuovo hardware installato sia compatibile con la versione installata di Windows. Ad esempio per Windows 10, puoi ottenere informazioni sull'hardware necessario in Specifiche di Windows 10.

  • Per altre informazioni generali sulla risoluzione dei problemi, vedere Analizzare i dati della schermata blu di controllo dei bug.

Vedi anche

Analisi del dump di arresto anomalo del sistema usando i debugger di Windows (WinDbg)

Analisi di un file di dump in modalità kernel con WinDbg

Riferimento al codice del controllo errori