Оптимизация работы FL Studio под Win7 и многоядерными процессорами.

Автор: | 02.01.2012

Купив новый мощный ноутбук с Core i7 Q740 на борту, естественно, первым делом решил проверить его на нагрузку тяжелым музыкальным проектом, сделанным на десктопе с Core2Duo 2.8 гГц. И тут же оказалась глубоко разочарован — выигрыша в производительности не обнаружилось никакого вовсе. А на некоторых проектах все оказалось даже хуже — хрипение, шипение и булькание даже там, где на Core2Duo звучит еще довольно сносно. А самое любопытное — разница в показаниях загрузки процессора. На индикаторе FL загрузка 80%, тогда как по данным Монитора ресурсов Windows — всего 10-15%.

В чем же дело? Кривой FL, не умеющий работать с многоядерными процессорами, особенно новыми Core i7? Или в чем-то другом? Озадачившись этими вопросами, провел целый день в непрерывном гуглении, чтении заумных статей и проведении практических экспериментов. Цельной, полной и непротиворечивой информации найти нигде не удалось, хотя подобные проблемы оказались озвучены в сети во множестве. И не только касательно FL, на официальном форуме Sonar, например, было встречено то же самое. Пришлось собирать все по крупицам и выстраивать собственный алгоритм настройки. Проблема оказалась вполне решаемой!

Подготовка.

Прежде чем приступить к решению проблемы — собственно, оптимизации работы FL — необходимо предпринять некоторые предварительные шаги, если они не были предприняты ранее. А именно — получить полный административный доступ к своей же системе, иначе выполняемые настройки могут не дать никакого эффекта. Если в учетной записи, под которой вы входите в систему после приобретения свеженького компьютера с Windows 7, значится «Администратор» — то это ничего не значит. Этот якобы «администратор» по умолчанию работает в режиме «необходимости одобрения» (или как-то так), от некоего супер-администратора, учетная запись которого по умолчанию вообще скрыта и ниоткуда никак не доступна :).

Решить эту проблему можно двумя путями. Самый простой: зайти в Панель управления/Учетные записи пользователей/Изменение параметров контроля учетных записей. В открывшемся окне обнаружится вертикальный «ползунок», который необходимо сдвинуть в положение «Никогда не уведомлять». И нажать ОК. Все.

Но если вдруг это окно или этот ползунок окажутся недоступными, или просто захочется более радикального решения, то нужно выводить учетную запись суперадминистратора на чистую, так сказать, воду. И сдвигать этот ползунок в положение «Никогда не уведомлять» из под этой учетной записи. Делается это так.

Из Старт-меню/Все программы/Стандартные/ запускаем Cmd (командная строка).
В командной строке пишем:

net user администратор /active:yes

и жмем enter.

Теперь перезагрузка… и на окне входа помимо основной учетной записи должна появиться учетная запись натурального администратора.
Чтобы отключить ее появление после выполнения нужной настройки контроля учетных записей, нужно точно так же запустить командную строку и вбить туда

net user администратор /active:no

Все, нужные права, слава богу, получены.

Решение, часть 1.

Проблема первая, она же главная. Так называемая «парковка ядер» (или «парковка процессоров», в оригинале «core parking»). Взглянув на «Монитор ресурсов» нетрудно заметить, что система использует из всех 8-ми виртуальных ЦП только несколько, остальные же — запаркованы и не используются (на картинке их 4 на 4).
Изображение

Теоретически считается, что при увеличении вычислительной нагрузки, система должна сама автоматически активировать «спящие» ядра. Однако, практически, этого не происходит. Вероятно потому, что шипение, кряхтение и булькание при воспроизведении в FL начинается намного раньше, чем система решит, что нагрузка уже достаточно возросла. А может быть и вообще никогда не решит — в такие тонкости уже не вдавался. У меня сама ни разу не решала :).

Нас такая ситуация, естественно, не устраивает. Мы хотим, чтобы FL были доступны ВСЕ имеющиеся ядра. Слава богу, решение есть: нужно отключить парковку ядер. Причем, лучше всего сделать это так (особенно на ноутбуках), чтобы можно было быстро включить обратно. И вообще — быстро и легко переключаться между режимами с включенной парковкой и выключенной. Парковка ядер — довольно хороший и нужный механизм, обеспечивающий энергосбережение и защиту от перегрева, и отказываться от его использования совсем — не слишком разумно.

По умолчанию, через визуальный интерфейс, сделать этого нельзя. Придется лезть в реестр (с полными правами администратора, естественно — для чего и нужна была вышеописанная подготовка) и менять два значения в двух ключах.
А именно, в ключе:

HKLM\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\0cc5b647-c1df-4637-891a-dec35c318583

в значении Attributes вместо 1 поставить 0.
И в ключе:

HKLM\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\ea062031-0e34-4ff1-9b6d-eb1059334028

тоже в значении Attributes вместо 1 поставить 0.

В результате, эти два параметра настроек парковки ядер — соответственно «Минимальное число ядер в состоянии простоя» и «Максимальное число ядер в состоянии простоя» станут доступными для изменения из визуального интерфейса Windows управления электропитанием, где они по умолчанию, само собой, недоступны. Больше ничего при этом не изменится. Чтобы изменить, нужно, собственно, и воспользоваться этим самым визуальным интерфейсом.

Идем в Панель управления/Электропитание. Там по умолчанию находится несколько планов электропитания. Целесообразно оставить текущий активный план без изменений, или для обычной работы на компьютере выбрать план «Сбалансированный». А отключать парковку ядер, например, в плане «Высокая производительность». Или вообще создать отдельный, специальный план электропитания для работы с музыкой. Вызов окошка «Электропитание» можно затем закрепить в Старт-меню Windows и переключаться с одного плана на другой в два клика мыши, когда начинается/заканчивается работа с музыкой.

Теперь, в выбранном (или созданном) для работы с музыкой плане электропитания кликаем ссылку «Настройка плана электропитания», вследствие чего открывается окошко, на котором находим и кликаем ссылку «Изменить дополнительные параметры питания», вследствие чего открывается окошко, которое нам и нужно, наконец (см. картинку).
Изображение

В этом окошке находим раздел «Управление питанием процессора», раскрываем его и видим примерно то, что на картинке. Нам нужно изменить параметры в разделе «Минимальное число ядер в состоянии простоя». В пункте «От сети:» поставить значение 100%. Если хочется, чтобы быстрее садилась батарея, то можно и «От батареи:» тоже поставить 100%, но это вряд ли целесообразно :).

Раздел «Максимальное число ядер в состоянии простоя» мы сделали видимым только для контроля, чтобы там не оказались случайно по умолчанию значения меньшие, чем мы выставили в «Минимальном». Открываем это «Максимальное число ядер в состоянии простоя» и убеждаемся, что в «От сети:» там тоже стоит 100%. Если не стоит — ставим. Жмем ОК, все закрываем. Теперь почти все ОК!

Решение, часть 2.

Запускаем FL, запускаем Диспетчер задач, идем на вкладку «Процессы», правым кликом на «FL.exe» устанавливаем Приоритет — либо Высокий, либо вообще Реального времени. (см. Прим. 1)
Изображение

Дальше, там же, нужно проверить, доступны ли FL все ядра. У меня, по умолчанию, оказались доступны. Но… мало ли, лучше проверить. Точно так же, правым кликом в списке процессов по «FL.exe» кликаем «Задать соответствие», проверяем, все ли процессоры заданы, и если не все, то задаем все.

Ну и последнее, самое простое — и единственное, что делается в самом FL.
Меню — Options — Audio settings. Делаем активными пункты «Multi threaded generator processing» и «Multithreaded mixer processing»
Изображение

Наслаждаемся :).

P.S. Надобно отметить, что индикатор загрузки процессора в FL все равно будет работать криво и показывать цифры, отличные от показываемых в Диспетчере задач или Мониторе ресурсов. Решения этой проблемы пока не нашел. Но оно и не принципиально, пока никак не влияет на звук :).

Прим. 1. Теоретически, можно создать в папке с FL файл запуска, например FLStart.cmd, написать в нем

START /D «C:\Program Files\Image-Line\FL Studio 9» /REALTIME FL.exe

и в дальнейшем запускать FL с помощью этого файла сразу с приоритетом реального времени. Но этот трюк вот именно с FL почему-то не работает. Почему — пока не знаю.