Суть проблемы: просадки частоты в играх
David Vernet, инженер ядра Linux из Meta, представил серию патчей для драйвера amd_pstate, решающих критическую проблему в Linux-гейминге. В текущей реализации драйвер, управляя частотой через Energy Performance Preference (EPP), не справляется с игровыми нагрузками, где основной поток часто блокируется (на futex или GPU fence) на короткие промежутки времени.
Каждое такое «засыпание» сбрасывает сигнал производительности железа. При пробуждении процессор стартует с низкой частоты, что приводит к «хвостовым» задержкам (tail latency) и провалам FPS, даже если CPU фактически загружен на 100% в моменты вычислений.
Решение: per-core EPP Boost
Новый механизм epp_boost работает точечно и опционально. Алгоритм выглядит так:
- Хук
update-utilопрашивает C0-резиденцию каждого ядра (долю времени активности) не чаще раза в 10 мс. - Если ядро было загружено более чем на 50%, поле EPP в MSR
AMD_CPPC_REQпринудительно устанавливается вperformance (0). - Этот высокий приоритет удерживается 300 мс. Если за это время не фиксируется новая активность, запрос возвращается к значению, сохраненному менеджером политик.
Это позволяет избежать глобального перерасхода энергии (как при жестком EPP=performance) и проблем с управлением питанием SMU, которые возникали при попытках просто поднять min_perf.
Результаты бенчмарков
Тестирование проводилось на Valve Steam Deck (архитектура Van Gogh) в игре Civilization VI. Использование патча с параметром amd_pstate.epp_boost=1 дало следующие результаты:
| Метрика | До патча | После патча (epp_boost=1) | Изменение |
|---|---|---|---|
| 1%-Low FPS | Базовое значение | Улучшено | +31.8% |
| p99 Frame Time | Базовое значение | Улучшено | +4.1% |
Как активировать и статус
Для активации функции на ядрах с примененными патчами необходимо:
- Загрузить ядро с параметром
amd_pstate.epp_boost=1. - Или изменить параметр в рантайме через
/sys/module/amd_pstate/parameters/epp_boost.
Патчи находятся на стадии ревью в списке рассылки Linux Kernel Mailing List. Ожидается, что после одобрения инженерами AMD они попадут в основное дерево ядра, что значительно улучшит опыт игры на портативных устройствах (Ryzen handhelds) и десктопах под Linux.
Источник: Phoronix ↗
