Skip to content

About

Game booster for Linux on AMD laptops: pause or throttle background apps and tune the Radeon GPU while you play, then put everything back (ThinkPad T495)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

GPU Game Booster 2

Frees the GPU and CPU for games on the ThinkPad T495 (Ryzen 5 3500U, Vega 8 with a 2 GB VRAM carve-out): pauses or throttles background apps, tunes the Radeon APU, and puts everything back when you stop playing.

Use at your own risk. Built for and tested on one machine: a ThinkPad T495 running Linux Mint 22.3 (Cinnamon, X11). Boosting freezes the apps you pick with SIGSTOP and changes the Radeon GPU's power settings through a small root helper. If something looks frozen afterwards, gpu-game-booster rescue wakes it. The GPU tuning only applies to AMD amdgpu GPUs.

The Apps tab: choose what each background app does while you play

sudo apt install python3-gi gir1.2-gtk-3.0 gir1.2-xapp-1.0 gir1.2-wnck-3.0 gamemode
git clone https://github.com/lestorrr/gpu-game-booster.git
cd gpu-game-booster
./install.sh          # install / update (asks sudo for the helper + sudoers rule)
gpu-game-booster gui  # or "Game Booster" in the menu
./uninstall.sh [--purge]

XApp (tray icon), Wnck (wake-on-focus) and GameMode (automatic boosts) are optional; without them the booster still works, minus those features.

What it does

While boosted How Undone by
Pause an app SIGSTOP on all its processes (parents first) SIGCONT (children first), only if (pid, start time) still match
Throttle an app every thread → nice 19 (music, voice chat keep working) root helper puts each thread's old nice back; skipped entirely if the helper is missing
GPU: Gaming profile manual + 3D_FULL_SCREEN power profile (smu10 needs manual) previous level + profile
GPU: Max clocks power_dpm_force_performance_level=high previous level
Cooling boost ThinkPad Fan Control daemon hold (level 7 or full speed, max 2 h) resume, only if the hold is still ours
Silence notifications Cinnamon display-notifications=false previous value (also after a crash/reboot)

TDP / VRM limits (ryzenadj) are never touched: on this laptop, raising them was linked to an amdgpu driver freeze.

Launchers (Heroic, Lutris, r2modman) are only paused while they are idle — never while they are running a game, since they read the game's output and reap it.

Never touched: the desktop session, audio (PipeWire, Mini EQ…), shells and terminals, Steam and everything it launches, Wine/Proton .exe processes, detected games and their children, and the booster itself. User rules that would match any of these are rejected when you type them.

When it boosts

A boost is reference-counted by holders; it ends when the last one leaves, and Stop releases all of them.

  • Manual — the Boost button, gpu-game-booster toggle, Super+Shift+G (optional), tray menu.
  • GameMode — ~/.config/gamemode.ini [custom] start/end call gpu-game-booster gamemode-start|end. Steam games with gamemoderun %command% boost automatically.
  • Auto-detect (agent) — Steam (reaper SteamLaunch AppId=…), Heroic .exe games, Roblox (Sober), Minecraft (Java) and your own names. Detected games are registered with GameMode (RegisterGameByPID), so they get GameMode's tweaks too and GameMode calls the hooks. Falls back to its own "auto" holder if GameMode is unreachable.

Pieces

  • gamebooster/engine.py — state (~/.local/state/gpu-game-booster/state.json, fcntl lock), holders, pause/throttle/restore, tuning, history, log (booster.log).
  • gamebooster/procs.py — /proc snapshots, app matching (exe prefixes, flatpak cgroups, script names), protection. Cinnamon puts almost every app in session-1.scope, so cgroup names are only used for flatpaks (app-flatpak-<id>-N.scope, \x2d-escaped).
  • gamebooster/telemetry.py — per-app CPU / GPU / VRAM from DRM fdinfo, sensors, fan state.
  • gamebooster/agent.py — autostarted tray icon (XApp), auto-detect, wake-on-focus (Wnck).
  • gamebooster/gui.py — the window. gamebooster/cli.py — commands (gpu-game-booster help).
  • helper/gpu-game-booster-helper — root helper at /usr/local/libexec, run via sudo -n (rule in /etc/sudoers.d/gpu-game-booster). Only amdgpu power files and restoring nice (0–19) of the calling user's threads.

install.sh also removes v1 (the two ~/.local/bin/gpu-game-booster*.py scripts, its config and ~/.cache/gpu_paused_pids.txt) by moving them to the Trash, so a first install starts from fresh defaults. Re-running it later only updates and keeps your settings.

Recovery

  • Something looks frozen: gpu-game-booster rescue (wakes every stopped/throttled known app, even if the state file was lost), or menu → Wake frozen apps.
  • State from a previous boot is discarded automatically (boot id check).
  • gpu-game-booster doctor checks helper, hooks, gamemode group, agent and fan daemon.

Tests

python3 -m unittest discover -s tests -v

The live test uses copies of sleep and a temporary config/state dir; it never touches real apps.

License

MIT, see LICENSE. © 2026 John Lester Liclican · @lestorrr · jhnlstrlclcn.engineer

About

Game booster for Linux on AMD laptops: pause or throttle background apps and tune the Radeon GPU while you play, then put everything back (ThinkPad T495)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages