o que é o "DPC Watchdog"?
Resumo :
As chamadas de procedimento adiadas (DPCs) são monitoradas por um DPC Watchdog Timer .
Quando o DPC Watchdog Timer detecta que um DPC está em execução por muito tempo, ele gera um erro DPC_WATCHDOG_VIOLATION
.
Explicação detalhada
Primeiro de tudo você precisa entender o que é um DPC. Uma explicação simplificada é:
A Deferred Procedure Call (DPC) is a Microsoft Windows operating system mechanism which allows high-priority tasks (e.g. an interrupt handler) to defer required but lower-priority tasks for later execution.
This permits device drivers and other low-level event consumers to perform the high-priority part of their processing quickly, and schedule non-critical additional processing for execution at a lower priority.
Fonte Chamada de Procedimento Adiada
O Windows precisa de um mecanismo para determinar quando algo está errado com essas Chamadas de Procedimento Adiadas (elas estão demorando demais para serem executadas e, portanto, degradando a capacidade de resposta do sistema).
Esse mecanismo é o DPC Watchdog Timer :
The operating system implements a DPC watchdog timer to detect when a single DPC routine runs for too long, or when a series of queued DPC routines runs back-to-back for too long.
If DPC time-out errors are enabled, and if either a DPC routine exceeds the time limit for a single routine, or a series of DPC routines exceeds the aggregate time limit, a DPC_WATCHDOG_VIOLATION (0x133) bug check occurs.
...
DPC routines should run only for brief periods, and should delegate as much processing as possible to worker threads. To avoid degrading system responsiveness, a typical DPC routine should run for no more than 100 microseconds each time it is called.
Origem KeQueryDpcWatchdogInformações de rotina
Verificação de erro 0x133 DPC_WATCHDOG_VIOLATION
This bug check indicates that the DPC watchdog executed, either because it detected a single long-running deferred procedure call (DPC), or because the system spent a prolonged time at an interrupt request level (IRQL) of DISPATCH_LEVEL or above. The value of Parameter 1 indicates whether a single DPC exceeded a timeout, or whether the system cumulatively spent an extended period of time at IRQL DISPATCH_LEVEL or above.
DPCs should not run longer than 100 microseconds and ISRs should not run longer than 25 microseconds, however the actual timeout values on the system are set much higher.