1

DPC говорит о задержке

Драйвер устройства не может немедленно обработать данные в своей процедуре прерывания. Он должен запланировать отложенный вызов процедуры (DPC), который в основном представляет собой процедуру обратного вызова, которая будет вызвана операционной системой как можно скорее. ... В системе имеется одна очередь DPC на процессор. ... Если какой-либо DPC будет работать слишком долго, другие DPC будут задержаны на это количество времени. ... К сожалению, многие существующие драйверы устройств не соответствуют этому совету. Такие драйверы проводят слишком много времени в своих процедурах DPC, вызывая исключительно большую задержку для DPC любого другого драйвера. Для драйвера устройства, который обрабатывает потоки данных в режиме реального времени, крайне важно, чтобы DPC, запланированный из его подпрограммы прерывания, выполнялся до того, как аппаратное обеспечение выдает следующее прерывание. Если DPC задерживается и работает после следующего прерывания, обычно происходит переполнение аппаратного буфера и поток данных прерывается. Выпадение происходит.

Ответ переполнения стека говорит:

DPC помещается в очередь в глобальной очереди DPC и может работать на любом процессоре. Так что, если у вас действительно длинный (-расход) DPC на одном ядре, другое ядро может свободно обрабатывать другое. Таким образом, любая временная информация действительно зависит от количества процессоров, которые у вас есть, и от того, сколько вещей выполняется в данный момент одновременно. Так что на многоядерных процессорах эти числа могут сильно различаться.

Обычно я читал, что быстрое двухъядерное ядро лучше, чем медленное четырехъядерное для аудио, так как большинство аудио приложений не оптимизированы для использования более одного ядра.

Но в современных компьютерах кажется, что проблемы с DPC являются узким местом для производства аудио. Означает ли это, что четырехъядерный процессор будет лучше, чем двухъядерный? Другие свободные ядра теоретически могут обрабатывать звуковые DPC, в то время как одно из них блокируется грубым подпрограммой Wi-Fi DPC. Распределяется ли очередь между ядрами, и DPC могут перемещаться в зависимости от того, кто из них свободен? Или существует одна очередь на ядро, позволяющая захватывать ядро? Как насчет виртуальных ядер?

1 ответ1

0

Задержка в отложенном вызове процедуры (DPC) вызвана тем, что драйверу требуется много времени, чтобы выполнить свою задачу.

Добавление большего количества процессоров не приведет к сокращению времени, затрачиваемого плохо написанным драйвером на его обработку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .