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

1996
atiyar

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

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

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

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

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

2
Предполагается, что ОП проводят свои исследования, прежде чем задавать вопросы здесь, вы можете найти много информации уже в Интернете. Пожалуйста, дайте нам знать, что вы уже проверили, и почему это не подходит для вас? Máté Juhász 7 лет назад 0
@ MátéJuhász, отредактировано :) atiyar 7 лет назад 0
поделитесь DMP, и я могу сказать вам, какой драйвер вызывает его magicandre1981 7 лет назад 0

1 ответ на вопрос

5
DavidPostill

что такое "сторожевой таймер 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 микросекунд, однако фактические значения времени ожидания в системе установлены намного выше.

Источник Bug Check 0x133 DPC_WATCHDOG_VIOLATION

Итак, это связано с планированием потоков ЦП, как я понял из вашего ответа. Я думаю, что это стало ясно для меня сейчас. Большое спасибо, Дэвид :) atiyar 7 лет назад 0
Просто сделал это;) atiyar 7 лет назад 0
@NerotheZero Спасибо :) DavidPostill 7 лет назад 0
... с апвотом: D atiyar 7 лет назад 0
@NerotheZero Нет, это не связано с планированием потоков, за исключением того, что DPC _interfere with_ that. DPC не являются потоками, поэтому у них нет «приоритета». Как и подпрограммы обработки прерываний, они могут проникать в ЦП независимо от приоритета текущего потока. Вот почему, если они занимают слишком много времени, они «ухудшают отзывчивость системы». Они работают на более низком «уровне запроса прерывания» (IRQL), чем процедуры обработки прерываний, поэтому ISR будут работать до DPC на любом конкретном ЦП. (Цитируемая статья WP, вводящая в заблуждение, вводит в заблуждение использование слова «приоритет».) Jamie Hanrahan 7 лет назад 1

Похожие вопросы