Проблемы задержки DPC улучшены с несколькими ядрами?
Драйвер устройства не может немедленно обработать данные в своей процедуре прерывания. Он должен запланировать отложенный вызов процедуры (DPC), который в основном представляет собой процедуру обратного вызова, которая будет вызвана операционной системой как можно скорее.... В системе имеется одна очередь DPC на процессор.... Если какой-либо DPC будет работать слишком много времени, то другие DPC будут задержаны на это количество времени.... К сожалению, многие существующие драйверы устройств не соответствуют этому совету. Такие драйверы проводят слишком много времени в своих процедурах DPC, вызывая исключительно большую задержку для DPC любого другого драйвера. Для драйвера устройства, который обрабатывает потоки данных в режиме реального времени, крайне важно, чтобы DPC, запланированный из его подпрограммы прерывания, выполнялся до того, как аппаратное обеспечение выдает следующее прерывание. Если DPC задерживается и работает после следующего прерывания, обычно происходит переполнение аппаратного буфера и поток данных прерывается. Выпадение происходит.
Ответ переполнения стека говорит:
DPC помещается в очередь в глобальной очереди DPC и может работать на любом процессоре. Так что, если у вас действительно длинный (-бегающий) DPC на одном ядре, другое ядро может свободно обрабатывать другое. Таким образом, любая информация о времени действительно зависит от количества процессоров, которые у вас есть, и от того, сколько вещей выполняется в данный момент одновременно. Так что на многоядерных процессорах эти числа могут сильно различаться.
Обычно я читал, что быстрое двухъядерное ядро лучше, чем медленное четырехъядерное для аудио, так как большинство аудио приложений не оптимизированы для использования более одного ядра.
Но в современных компьютерах кажется, что проблемы DPC являются узким местом для производства аудио. Означает ли это, что четырехъядерный процессор будет лучше, чем двухъядерный? Другие свободные ядра теоретически могут обрабатывать аудио-ЦОД, пока одно из них заблокировано грубой процедурой Wi-Fi-ЦОД. Распределяется ли очередь между ядрами, и DPC могут перемещаться в зависимости от того, кто из них свободен? Или существует одна очередь на ядро, позволяющая захватить ядро? Как насчет виртуальных ядер?
2 ответа
Задержка в отложенном вызове процедуры (DPC) вызвана тем, что драйверу требуется много времени, чтобы выполнить свою задачу.
Добавление большего количества процессоров не приведет к сокращению времени, затрачиваемого плохо написанным драйвером на его обработку.
Возрождаю старую тему (извините). Мне кажется, что обещания параллельных вычислений и многоядерности не были полностью реализованы для работы со звуком. В старые (добрые?) времена (как отмечалось выше), когда стало возможным использование двух процессоров, обещалось, что один процессор сможет обрабатывать графику, а другой — аудио. И вы решили проблемы с DPC с помощью настройки и увеличения аудиобуферов. И это сработало как повышение эффективности в некоторых DAW (например, Logic). Но теперь мой новый ноутбук имеет восемь ядер (предположительно, как 8 отдельных процессоров — или 16 с включенной гиперпоточностью), и проблемы с задержкой DPC такие же серьезные, как и раньше. Даже при отключенном Wi-Fi и большинстве других функций, полной мощности и больших буферах (512 сэмплов) в программном обеспечении для диджеинга все еще случаются периодические сбои (которые сами по себе не сильно нагружают процессор). Задержки ЦОД 4000-10000! Я живу в страхе, что это может произойти во время работы, поэтому я старался использовать эту машину только в некритических ситуациях. С другой стороны, моя настольная аудиостанция с двумя процессорами Xeon постоянно имеет DPC около 500 и является идеальной. Возможно, дело в том, что на самом деле все дело в двух процессорах, а не в ядрах.