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
SIGSTOPand changes the Radeon GPU's power settings through a small root helper. If something looks frozen afterwards,gpu-game-booster rescuewakes it. The GPU tuning only applies to AMDamdgpuGPUs.
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.
| 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.
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/endcallgpu-game-booster gamemode-start|end. Steam games withgamemoderun %command%boost automatically. - Auto-detect (agent) — Steam (
reaper SteamLaunch AppId=…), Heroic.exegames, 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.
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—/procsnapshots, app matching (exe prefixes, flatpak cgroups, script names), protection. Cinnamon puts almost every app insession-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 viasudo -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.
- 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 doctorchecks helper, hooks, gamemode group, agent and fan daemon.
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.
MIT, see LICENSE. © 2026 John Lester Liclican · @lestorrr · jhnlstrlclcn.engineer
