GameMode — небольшой демон от Feral Interactive, который на время запуска игры переводит систему в режим повышенной отзывчивости: поднимает приоритет процесса, меняет governor процессора, отключает хранитель экрана и при необходимости трогает настройки GPU. Границы возможностей стоит понимать сразу: сам по себе GameMode не добавляет кадров. Он убирает помехи, из-за которых кадры проваливаются неравномерно, — фоновые задачи, агрессивное энергосбережение, засыпание экрана во время длинной кат-сцены. Ниже — установка, запуск, настройка и проверка того, что профиль действительно применился, а не остался красивой галочкой в лаунчере.
Что именно меняет демон
Клиентская библиотека libgamemodeauto.so подгружается в процесс игры через LD_PRELOAD и сообщает демону о старте. Демон слушает сессионную шину D-Bus и применяет профиль, а после выхода игры возвращает прежние значения. Профиль состоит из трёх групп: общие параметры, процессор и GPU. Общие отвечают за приоритет планировщика, запрет гашения экрана и отключение проверки split lock. Группа CPU задаёт governor и привязку потоков к физическим ядрам. Группа GPU включается отдельно и только после явного подтверждения ответственности.
Смена governor — операция глобальная: она влияет на всю машину. Здесь же чаще всего возникает конфликт с демоном энергопрофилей из Linux Mint и Ubuntu.
Установка и самопроверка
Пакет gamemode есть в репозиториях Debian, Ubuntu, Mint, Fedora и Arch. После установки демон обычно поднимается по требованию через D-Bus, поэтому статус inactive до первого запуска игры — нормальное явление. Самопроверка gamemoded -t прогоняет набор тестов и печатает, какие возможности доступны в текущем окружении: приоритет, governor, soft realtime, работа с GPU.
sudo apt install gamemode
systemctl --user status gamemoded
gamemoded -s
gamemoded -t
Команда -s показывает, активен ли профиль и какие клиенты к нему подключены. Если в ответе есть ошибка соединения с шиной, проверьте, что вы работаете в графической сессии, а не в ssh-терминале без loginctl enable-linger. Пропущенные тесты часто означают не поломку, а отсутствие интерфейса: на виртуальной машине может не быть управления частотой CPU.
Запуск игры
В Steam достаточно открыть свойства игры, найти поле параметров запуска и написать gamemoderun %command%. Lutris включает режим в разделе системных настроек игры, Heroic — в настройках конкретной игры. Для сборок вне лаунчеров команда запуска выглядит обычным префиксом. Проверить механику без игры удобно симулятором нагрузки: он держит профиль десять секунд и печатает состояние.
gamemoderun %command%
gamemoderun ./MyGame.x86_64
gamemode-simulate-game
Если игра запускается через промежуточный скрипт, следите, чтобы он не очищал окружение: некоторые обёртки выставляют env -i, и LD_PRELOAD теряется. Тогда gamemoderun ставят самой внешней командой.
Настройка gamemode.ini
Шаблон конфигурации лежит в /usr/share/gamemode/gamemode.ini, пользовательская копия читается из ~/.config/gamemode.ini и имеет приоритет. Правка системного файла переживёт не каждое обновление пакета, поэтому лучше держать свои значения в домашнем каталоге. Ниже рабочий пример с комментариями по смыслу параметров.
[general]
renice = 10
desiredgov = performance
softrealtime = auto
inhibit_screensaver = 1
disable_splitlock = 1
[cpu]
pin_cores = yes
[gpu]
apply_gpu_optimisations = accept-responsibility
gpu_device = 0
amd_performance_level = high
nv_powermizer_mode = 1
renice задаёт приоритет процесса: положительное значение означает уступку другим задачам, отрицательное — повышение. softrealtime в режиме auto пытается включить мягкое планирование реального времени, если ядро и права это позволяют. pin_cores привязывает потоки к физическим ядрам, обходя пары SMT, что иногда снижает разброс времени кадра. Блок GPU требует строки accept-responsibility: без неё он просто игнорируется, и это защита от случайной смены режима питания видеокарты.
Governor и конфликт с демоном профилей
Смена governor — самая заметная часть работы GameMode, и самая конфликтная. Демон энергопрофилей power-profiles-daemon тоже управляет режимом CPU и может вернуть balanced через несколько секунд после старта игры. Сначала смотрим фактическое состояние, а не предполагаемое.
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
powerprofilesctl get
powerprofilesctl list
systemctl status power-profiles-daemon
Если профиль остаётся balanced, вариантов три: переключить питание на performance вручную перед игрой, отключить демон профилей (на ноутбуке это заметно сократит автономность) или убрать desiredgov из конфигурации, сохранив приоритет и остальные пункты. На процессорах AMD с драйвером amd-pstate поведение зависит от режима /sys/devices/system/cpu/amd_pstate/status, и запись в scaling_governor может не дать ожидаемого эффекта.
Диагностика: применился ли профиль
Достаточно трёх срезов: статус демона, приоритет процесса и текущий governor. Приоритет удобно смотреть через ps с колонками ni и cls: если значение осталось нулевым, клиент не подключился, и дальше искать нужно не в конфиге, а в способе запуска.
gamemoded -s
pgrep -a -f MyGame
ps -o pid,ni,cls,rtprio,comm -p $(pgrep -n -f MyGame)
journalctl --user -u gamemoded -b --no-pager | tail -30
В журнале видно, какие параметры демон применил и какие не смог. Строки про невозможность записать governor почти всегда указывают на конфликт с другим демоном или на отсутствие нужного драйвера частоты. Отдельно проверьте, не запущена ли игра в песочнице Flatpak или Snap: внешний gamemoderun до процесса внутри песочницы не достанет, поддержка должна быть включена в самом пакете.
Типичные ошибки
- Ожидание прироста среднего FPS. GameMode выравнивает время кадра и убирает фризы, но не ускоряет рендеринг.
- Правка системного ini при наличии пользовательского: значения из домашнего каталога перекрывают системные.
- Запуск через обёртку, которая сбрасывает окружение и теряет
LD_PRELOAD. - Игра на батарее с лимитом мощности: смена governor не обойдёт ограничение адаптера питания.
- Включение блока GPU без проверки температуры и стабильности: максимальный режим питания видеокарты повышает нагрев.
Чек-лист перед игровым вечером
- Пакет установлен,
gamemoded -sотвечает без ошибок. gamemoded -tне показывает пропусков по нужным вам возможностям.- В параметрах запуска стоит
gamemoderun %command%. - Известно, какой демон управляет питанием, и конфликт устранён осознанно.
- После старта игры
niу процесса отличается от нуля, governor совпадает с ожидаемым.
Итог
GameMode — это не ускоритель, а дирижёр: он снимает фоновое давление и не даёт системе уйти в спящий режим посреди игровой сессии. Настройка занимает один конфигурационный файл, а вся польза проявляется только при честной проверке через ps, gamemoded -s и чтение governor. Если после этих шагов профиль не применяется, проблема почти всегда в способе запуска или в конфликте с демоном энергопрофилей, а не в самом пакете.