Проблемы задержки DPC улучшены с несколькими ядрами?

1339
endolith

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

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

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

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

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

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

1
Если бы у вас были обе системы, вы могли бы использовать этот инструмент для сравнения и получения реальных данных ... http: //www.thesycon.de/eng/latency_check.shtml Moab 13 лет назад 0

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

0
Ian Boyd

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

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

Можете ли вы подтвердить свое мнение фактами? Для каждого процессора есть отдельная очередь DPC. endolith 12 лет назад 0
Я не могу. Код режима ядра не может быть многопоточным. И единственная проблема, связанная с задержкой DPC, - это когда плохо написанный драйвер ведет себя плохо. Бросив больше ядер, он не станет работать лучше. Ian Boyd 12 лет назад 0
Задаваемый вопрос был не "не заставит ли больше процессоров ускорить работу плохого ЦОД?" Вопрос заключается в том, позволит ли больше процессоров запускать мой аудиодрайвер, если в системе также установлен драйвер с плохим поведением? Colin Jensen 10 лет назад 0
Тогда его единственный вариант - купить более быструю машину [и самому убедиться, что дела обстоят не лучше] (http://superuser.com/a/247713/8169). Ian Boyd 10 лет назад 0

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