Задержка Windows — как уменьшить при работе со звуком и музыкой
Кроме той задержки (latency), которую создают в цифровой музыкальной студии драйвер аудиокарты, музыкальное ПО (DAW), подключенные плагины и т. п., существует еще и другие задержки всей системы. Часть из них происходит в ОС Windows, включая задержки работы драйверов USB-портов, сетевых карт и т. п.
Задержку Windows можно уменьшить, применив некоторые, фигурально выражаясь, «хаки». Относительная тонкая настройка ОС, способна ощутимо увеличить производительность цифровой музыкальной студии, центром которой является компьютер. О ней сегодня и пойдет разговор.
Внимание! Весь материал ниже упрощен, собран и написан музыкантами для музыкантов, а не инженерами для айтишников. Использовать эту информацию нужно на свой страх и риск, предварительно создав точку восстановления системы.
Методы оптимизации работы Windows, предложенные в статье, будут наиболее действенны для настольных компьютеров и менее действенны для ноутбуков. Также следует помнить, что данные актуальны для Windows версий 10 и 11.
Что такое прерывания (IRQ), и причем тут аудио
Когда мы говорим, что работаем со звуком в цифровых аудио станциях (DAW) в реальном времени, мы не должны это иметь ввиду буквально. Конечно, ни музыкальный софт, ни плагины, ни любые другие программы, включая драйверы компьютерных устройств, не исполняют свой код одномоментно.
Команды софта «железо» компа обрабатывает последовательно, несмотря на многоядерность центральных процессоров и частичную параллельную обработку. Просто делает это с огромной скоростью. И пользователю лишь кажется, что он взаимодействует со своей рабочей средой в real-time.
Каждое нажатие кнопки мыши, клавиши на клавиатуре, midi-контроллере, кручение ручки в виртуальном синтезаторе, движение ползунка на пульте в DAW заставляет компьютерные устройства прерывать исполнение программ на микро- и наносекунды. Потому что происходят внешние по отношению к ПО события, оно получает новые данные, а их требуется учесть. В том числе прерывается работа драйверов.
Прерывания (IRQ) в большей степени используются как раз драйверами периферийных устройств (например, USB аудио карт), а также устройств, встроенных в материнскую плату, видеокарт, и т. п.
При наступления события (допустим, мы куда-то ткнули мышкой) управление всей нашей сложной компьютерной системой передается специальной процедуре под названием «Обработчик прерываний» (ISR, Interrupt Service Routine).
Когда действия, вызванные вмешательством пользователя, бывают закончены, обработчик отдает управление обратно работающему программному обеспечению (скажем, нашей DAW).
События, запускающие «Обработчик прерываний» могут исходить и от самого софта. Обычно это требуется для обращения программ к драйверам и операционной системе. То, как именно прерывания (IRQ) обрабатываются в системе, влияет на задержку ее «отклика» на действия пользователя.
Почему из-за обработки прерываний возникает задержка, и что такое DPC latency
В Windows управление обработкой прерываний реализовано так, что сам обработчик выполняет лишь критично необходимые операции. Все остальные операционная система выстраивает в очередь при помощи особого механизма. Он называется Deferred procedure call (DPC) — «отложенный вызов процедуры».
В частности, в очередь встают многие задачи драйверов. И на их исполнение и продвижение «по цепочке» тратится драгоценное время. Если механизм DPC не отлажен, то на компьютере, используемом для звукозаписи и музыкального продакшна, могут возникать заметные уху задержки и даже пропадания звука, хрипение, щелчки и прочие артефакты.
Причин для высокой задержки (latency) в процессе отложенного вызова процедуры может быть миллион. Например:
- в системе установлены не самые подходящие драйверы для одного или целого ряда устройств;
- система использует современные экономные режимы управления питанием — все эти «ожидания», «засыпания», понижения тактовых частот ядер CPU при маленькой нагрузке (или наоборот — большой нагрузке и перегреве);
- система использует современный таймер HPET или «динамическое» время (отвечает за счет времени «внутри» ОС) — с плавающим значением, из-за этого прерывания происходят несколько хаотично и задержка растет;
- на одно устройство компьютера и периферии выделен малый лимит прерываний…
Всё это и кое-что другое мы и попытаемся пофиксить.
Как узнать величину DPC задержки на своем компе. Бесплатная программа LatencyMon
Протестировать свою систему можно с помощью специального софта. Например, LatencyMon Home Edbtion. Эта программа в «реальном времени» выполняет диагностику пригодности компьютера для работы со звуком. В идеале нам нужно получить в ней надпись, выполненную зеленым цветом, «Your system appears to be suitable for handling real-time audio and other tasks without dropouts» («Похоже, ваша система способна обрабатывать аудио в реальном времени и другие задачи без сбоев»).
LatencyMon следует запускать после перезагрузки Windows и небольшого ожидания, позволяющего ОС подгрузить все драйверы и службы. Никакие приложения при тесте не должны быть запущены. Программе нужно дать 5 минут на тестирование. В процессе измерения на главном экране она покажет (в микросекундах):
– текущую зафиксированную задержку;
– наивысшую зафиксированную задержку;
– наивысшую задержку «Обработчика прерываний» с указанием драйвера, который за нее ответственен;
-наивысшую задержку отложенного вызова процедуры (DPC) с указанием драйвера или ПО, которые ее вызывают.
После остановки теста можно перейти на вкладку Drivers и увидеть, какие из них какую задержку вносят. То же касается вкладок CPUs и Processes — служб Windows, приложений работающих в фоновом режиме и т. п.
На проблемных компьютерах с неоптимизированной ОС Windows LatencyMon выкатит главный экран с красной надписью, гласящей примерно следующее: «У вашей системы проблемы с обработкой аудио в реальном времени, возможны «заикания» и щелчки».
Также в ней может содержаться сообщение о том, какой именно драйвер создает критичную задержку. Заодно LatencyMon способна посоветовать отключить в BIOS (UEFI) режим «троттлинга» процессора — снижения тактовой частоты ядер для защиты от перегрева или вырубить Wi Fi адаптер.
Обычно это тестовое ПО помогает вычислить виновника наибольшей задержки системы. Например, им может оказаться неудачный драйвер для конкретного устройства, который установила сама ОС. Или модифицированный драйвер, скачанный с сайта, имеющего дурную репутацию.
Лечение большой задержки системы без «опасного» шаманства с Windows. Драйверы и режимы экономного питания
Нередко пофиксить слишком большую DPC latency можно без особого вмешательства в работу ОС. Например, проблему может решить установка подходящих драйверов именно от производителей оборудования (включая встроенного в материнскую плату).
Если вы не знаете, что за сетевые, звуковые и прочие устройства работают на «матери», то в «Диспетчере устройств» Windows докопайтесь до их идентификаторов (device ID), обычно состоящих из неудобоваримых наборов цифр, букв и специальных знаков. Вооружитесь поисковиком и ищите драйверы по ID оборудования.
Второй шаг: отключение режимов сберегающего электропитания. Маленькая экономия денег на оплату электричества не стоит потраченных нервов при проблемной работе с аудио на компьютере. Часто эта экономия в принципе не окупается — особенно у профессионалов.
Ведь современные смешанные режимы электропитания (особенно на ноутбуках) на некоторое время могут вводить аппаратные устройства в кратковременное состояние «сна», затем им приходится «просыпаться», отсюда — возникновение ненужных задержек.
Внимание! Компьютер должен быть обслужен в смысле избегания перегрева – пыль вычищена; кулер на CPU установлен в соответствии с тепловыделением конкретной модели процессора; мощность блока питания подобрана в точности под потребности установленных в ПК устройств; корпус и видеокарта нормально охлаждаются и т. п.
Итак, сначала стоит отключить троттлинг CPU в BIOS (UEFI). Моделей материнских плат на свете существует целый зоопарк, ищите именно в вашем BIOS все, что связно с CPU throttling, вырубайте это и сохраняйте настройки.
Затем в Windows разумно было бы активировать «Схему управления питанием с высокой производительностью». (Панель управления —> Система и безопасность —> Электропитание).
Также стоит запретить некоторым устройствам, в том числе USB портам, уходить в «спящий» режим. Это можно сделать в «Диспетчере устройств». Нужно зайти в «Свойства» каждого значимого девайса, перейти на вкладку «Управление электропитанием» (если она есть) и там снять галочку в строке «Разрешить отключение этого устройства для экономии энергии». Эта настройка доступна, скажем, для сетевых адаптеров и корневых USB-концентраторов.
Дополнительные шаги.
Увеличивать DPC задержку могут: брандмауэр Windows (отключаем и просто не ходим на сомнительные сайты); необязательные приложения в «Автозагрузке» (чистим ее); драйвер встроенной в материнскую плату аудио карты (отключаем в BIOS/UEFI); приложение Bonjour от Apple (оно обычно попадает на компьютер при установке Apple iTunes для Windows и Apple iCloud для Windows. На компе, предназначенном для производства музыки, без этого ПО можно обойтись — удаляем).
Нередко проблемы с DPC задержкой вызывает драйвер Wi Fi устройства. Вообще-то, в большинстве случаев заходить в Интернет с компа, на котором производится звукозапись, можно и «по проводам». Wi Fi адаптер, в случае когда он есть – девайс, конечно, модный и молодежный, но не является необходимостью. Его тоже можно отключить.
Еще один потенциальный виновник большой задержки — устаревшая версия DirectX. Качаем новую и устанавливаем.
Снижение задержки Windows «по харкору»
Отключение таймера HPET («динамического времени» внутри ОС). Запускаем «Командную строку» от имени администратора. Пишем команды:
bcdedit /set disabledynamictick yes
bcdedit /set useplatformtick yes
Перезагружаемся.
Фиксируем разрешение таймера на значение 0,5 ms. Для этого потребуется бесплатная утилита Intelligent Standby List Cleaner. Качаем, устанавливаем, запускаем. Далее вводим следующие параметры
Start ISCL minimized and auto-Start monitoring — включено (стоит галочка);
Launch ISCL on user logon (TaskSheduler) — включено;
Enable custom timer resolution — включено;
Wanted timer resolution — устанавливаем на 0.50
Вот как должны выглядеть настройки:
Далее — обязательная перезагрузка.
Увеличиваем лимит количества прерываний для USB Host Controller и видеокарты. Этот шаг необязательный, но может ускорить отклик всей системы. Для его выполнения понадобится бесплатная утилита MSI Util v3.
Почему шаг необязательный? Потому что последние драйверы устройств от именитых производителей уже используют режим прерывания MSI, в котором на каждый девайс выделен ресурс не в 4, как раньше, а в 32 прерывания. Однако не у всех комп построен на «железках» от фирм-лидеров. Скажем, сейчас в России многие покупают видеокарты от китайских компаний, и с ними «не все так однозначно» 🙂
После запуска MSI Util, ищем в списке видеокарту и USB Host Controller — по названию или ID оборудования. В столбце MSI ставим для них галочку. Приоритет прерывания (Interrupt priority) устанавливаем в значении «высокий» (high). Вот как это выглядит в интерфейсе утилиты:
Внимание! Нельзя включать режим MSI для всех-всех устройств, они могут начать работать некорректно.
Далее — снова перезагрузка…
Особо рисковые и увлеченные твикерством пользователи могут провести еще два «шаманских» действия (необязательных и требующих внесения изменений в реестр Windows):
1. Приоритизацию прерываний
2. Приоритизацию драйверов.
Как это сделать, можно почитать вот в этом гайде, но мы не станем советовать читателю копаться в реестре, если он слабо знаком с тем, как он работает.
Также можно провести назначение работы драйверов USB Host Controller и видеокарты на ядра CPU, отличные он первого («нулевого»), на который Windows обычно сваливает обработку вообще всех драйверов. Этому поможет утилита Inrerrupt Affinity Policy Tool от Microsoft.
Однако эта программа давно не обновлялась, доступна только в Интернет-архиве Web.archive.org и может вызывать ошибки при выполнении. Как ею пользоваться, можно узнать в том же гайде по оптимизации Windows 10. Но стоит ли рисковать с этим связываться или не стоит — решать вам.
Смелые и умелые могут назначить выполнение драйвера звуковой карты на отдельное ядро CPU, отличное от первого — при условии, что карта в принципе отображается в списке устройств.
Заключение. Снова тестируем систему с LatencyMon
После некоторых или всех манипуляций, описанных выше, пора еще раз запустить тест с LatencyMon. Если пофиксить задержку удалось, мы увидим значения наибольших зафиксированных задержек DPC и «Обработчика прерываний» меньше, чем в 1000 микросекунд или менее 1 миллисекунды. Это отличный результат, который означает, что наше музыкальное ПО будет работать под Windows заметно быстрее.
Владимир Лакодин