Linux 6.5 на Debian Bookworm

Если Вы еще не сталкивались с backport-пакетами в Debian, то у меня появилась заметка про использование backports в Debian.

К большому счастью, 1 ноября 2023 года было опубликовано подписанное ядро Linux версии 6.5 в stable-backports. Пользователи стабильной версии Debian с видеокартами и/или процессорами от AMD могут пробовать новые возможности и исправления для старых проблем. Проверил актуальные для меня части обновления на протяжении недели. Ниже резюме из самого интересного.

Процессоры AMD Zen 2+ получили новые драйверы

В релизах 6.3 и 6.4 мы могли видеть появление новых драйверов amd_pstate_epp (режим active) и amd_pstate (режимы passive, guided). Новые драйверы считаются лучше старого-доброго acpi-cpufreq, ведь имеют бо́льшие диапазоны частот. Сами частоты меняются плавнее (не ступенчато, а линейно). В довесок, новые драйверы могут использовать механизм CPPC, который, если очень грубо и кратко, позволяет активнее загружать самые производительные ядра.

Релиз 6.5 ознаменовал переопределение драйвера управления энергопотреблением и/или частотами процессора по-умолчанию для Zen 2+. Вместо acpi-cpufreq им, ожидаемо, стал amd_pstate_epp.

У этого драйвера есть свои особенности. Он, в первую очередь, задаёт баланс энергопотребления и производительности. В ОС явно не указываются частоты процессора для использования в такой конфигурации. Также явно не указывается как именно нужно распределять нагрузку по ядрам. Схожее поведение можно наблюдать в Windows 10. Аналогично amd_pstate_epp, там задаётся баланс энергопотребления и производительности без явных возможностей “тонкого” управления.

Для Debian Bookworm мне всё-таки потребовалось запросить использование нового драйвера amd_pstate_epp при загрузке ядра. Для этого открываем редактирование конфигурации grub:

$ sudoedit /etc/default/grub

Добавляем параметр amd_pstate=active в конец GRUB_CMDLINE_LINUX_DEFAULT:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noresume amd_pstate=active"

Сохраняем, обновляем grub и перезагружаемся:

$ sudo update-grub && sudo reboot

Теперь, с помощью cpupower frequency-info, я могу увидеть: диапазон частот расширен с 2.20 GHz - 5.08 GHz до 550 MHz - 5.08 GHz. Кроме отличий минимальных частот есть и отличия в наборе governer’ов. Для amd_pstate_epp теперь доступны только powersave и performance.

Не стоит думать, что powersave для amd_pstate_epp и powersave для amd_pstate – одно и тоже. В игровых тестах понятно: при выборе powersave для amd_pstate_epp на 100% задействуются только конкретные ядра CPU, без потерь производительности. А вот governor powersave в варианте amd_pstate=passive (это простой amd_pstate) ограничил все ядра по частотам на минимальных значениях 550 MHz. Так он значительно снизил FPS в современных играх, хоть и повысил энергосбережение.

Тематика использования различных комбинаций драйверов и governor’ов обширна. Для углубления в тематику могу порекомендовать релевантные материалы – бегло изучить официальную документацию по новым драйверам, почитать материалы про масштабирование частот CPU на Arch Wiki и ознакомиться со ссылками в новостях у Phoronix.

Окромя – протестировать на собственной машине. Я рекомендую использовать sudo turbostat или модуль Zenpower3 вместе с Zenmonitor3 для наблюдения за энергопотреблением.

Если Вы просто заинтересованы в обновленных драйверах, но не хотите тратить время на изучение тематики в деталях, выбирайте amd_pstate_epp без раздумий.

Исправление для видеокарт

Релиз 6.5.3 решил проблемы с переключением GPU MCLK (Memory Clock) на Radeon серии RX 6000 и RX 7000 в сочетаниях с:

Фиксации частот памяти на минимальных/максимальных значениях вызывали совсем противоположные проблемы. Постоянные значения MCLK на максимуме приводят к быстрому нагреву GPU даже в простое. GPU понапрасну греет другие компоненты Вашего ПК. А минимальные частоты MCLK приводят к серьёзному падению FPS в современных играх. На удивление, VRR (FreeSync) работал у меня во всех случаях.

Чтобы решить аналогичные проблемы, в прошлом приходилось идти путём изменения EDID монитора или добавления modeline с помощью xrandr. Wayland потребовал именно подмену EDID. В обновлённом EDID нужно было привести тайминги VBlank в соответствие с требованиями CVT Reduced Blanking. Такой “hotfix” для ядра 6.1 снизил энергопотребление GPU с 90W до 40W. Конкретнее – он позволял MCLK переключаться с максимальных на средние значения и обратно. Ядро 6.4, к сожалению, инвертировало проблему. MCLK фиксировался на 96 MHz вместо 1.2 GHz.

Настоящее исправление проблемы заработало только после серии патчей ядра 6.5.3. Теперь PPT GPU показывает цифры в простое около 8W. Энергопотребление при скроллинге в веб-браузере около 40W.

К сожалению, не всё так прекрасно, как хотелось бы. Теперь у меня появилась очередная проблема мерцания экрана рабочего стола на KDE (Wayland). Называется эта проблема “FreeSync Flicker”. 100% повторяемый случай проявления проблемы – при VRR режиме Automatic для KDE. Рабочий стол начинает “мерцать” сразу после выхода из полноэкранной игры.

Благо, решить своими руками её ещё легче, чем редактировать и подменять EDID. Суть – установка в KDE политики VRR Always перед запуском игр. После завершения игры – установка политики VRR Never. Это можно сделать через kscreen-doctor:

$ kscreen-doctor output.DP-1.vrrpolicy.always
$ wine game.exe
$ kscreen-doctor output.DP-1.vrrpolicy.never

А если у Вас есть Lutris, достаточно сделать всего 2 скрипта: до запуска и после завершения игры. Назначить их на Pre-launch script и Post-exit script. И вот, готов временный фикс до новой серии патчей, которые, будем надеяться, наконец-то закроют и эту проблему.

Журнал изменений

12 ноября 2023 г.: добавил упоминание о turbostat и Zenmonitor3.

4 февраля 2024 г.: сократил текст, добавил ссылку на заметку про backports.

Если Вы хотите обсудить содержание заметки, задать вопросы или предложить изменения, то со мной можно связаться в Telegram