Что такое сторожевой таймер DPC?

Итак, DPC_WATCHDOG_VIOLATION - это обычный код ошибки после BSOD. Я хотел бы знать -

  1. Что такое сторожевой таймер DPC? Я имею в виду, что подразумевается под этим?
  2. Что это делает в системе Windows? И как это нарушается?

Кто-нибудь может помочь?

РЕДАКТИРОВАТЬ: Я уверен, что погуглил это. Но все, что я нахожу, это "Что вызывает DPC_WATCHDOG_VIOLATION?" или "Как исправить проблему DPC_WATCHDOG_VIOLATION".

Просто чтобы прояснить мой запрос, мне в основном интересно узнать, что такое "сторожевой таймер DPC" и какова его функциональность в системе.

1 ответ

Решение

что такое "сторожевой таймер 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

Другие вопросы по тегам