что такое "сторожевой таймер DPC"?
Резюме:
Отложенные вызовы процедур (DPC) контролируются сторожевым таймером DPC.
Когда сторожевой таймер DPC обнаруживает, что DPC работает слишком долго, он генерирует ошибку DPC_WATCHDOG_VIOLATION
.
Детальное объяснение
Прежде всего вам необходимо понять, что такое DPC. Упрощенное объяснение:
Отложенный вызов процедуры (DPC) - это механизм операционной системы Microsoft Windows, который позволяет задачам с высоким приоритетом (например, обработчику прерываний) откладывать требуемые, но задачи с более низким приоритетом для последующего выполнения.
Это позволяет драйверам устройств и другим потребителям событий низкого уровня быстро выполнять высокоприоритетную часть своей обработки и планировать некритическую дополнительную обработку для выполнения с более низким приоритетом.
Исходный отложенный вызов процедуры
Windows нуждается в механизме, чтобы определить, когда что-то идет не так с этими отложенными вызовами процедур (они выполняются слишком долго, что снижает быстродействие системы).
Этот механизм является сторожевым таймером DPC:
В операционной системе реализован сторожевой таймер DPC, который определяет, когда одна подпрограмма DPC выполняется слишком долго или когда ряд подпрограмм DPC, находящихся в очереди, выполняется слишком долго.
Если ошибки тайм-аута DPC включены, и если либо процедура DPC превышает лимит времени для одной процедуры, либо серия процедур DPC превышает совокупный лимит времени, происходит проверка ошибки DPC_WATCHDOG_VIOLATION (0x133).
...
Подпрограммы DPC должны выполняться только в течение коротких периодов времени и должны делегировать как можно больше обработки рабочим потокам. Чтобы избежать снижения быстродействия системы, типичная процедура DPC должна выполняться не более 100 микросекунд при каждом вызове.
Исходная подпрограмма KeQueryDpcWatchdogInformation
Проверка ошибок 0x133 DPC_WATCHDOG_VIOLATION
Эта проверка на наличие ошибок указывает на то, что сторожевой таймер DPC выполнен либо потому, что он обнаружил один длительный отложенный вызов процедуры (DPC), либо потому, что система провела длительное время на уровне запроса прерывания (IRQL), равном DISPATCH_LEVEL или выше. Значение параметра 1 указывает, превысил ли один DPC тайм-аут, или система накапливала длительный период времени в IRQL DISPATCH_LEVEL или выше.
DPC не должны работать дольше, чем 100 микросекунд, а ISR не должны работать дольше, чем 25 микросекунд, однако фактические значения времени ожидания в системе установлены намного выше.
Проверка исходного кода 0x133 DPC_WATCHDOG_VIOLATION