GameMode is a daemon/lib combo for Linux that allows games to request a set of optimisations be temporarily applied to the host OS and/or a game process.
GameMode depends on root-level capabilities that aren't available in a user-level Nix package installation. The easiest way to set this up is to use the NixOS module:
programs.gamemode.enable = true;
To run games with GameMode start it like this:
When you have started your game you can verify that GameMode is running with the command:
To make sure Steam starts a game with GameMode, right click the game, select Properties..., then Launch Options and enter:
gamemoded -t can be used to verify that the optimisations for your configuration get applied:
: Loading config Loading config file [/nix/store/p8dbmpdak57psrb5c0mz7crsc95nfzs6-gamemode-1.6.1/share/gamemode/gamemode.ini] Loading config file [/etc/gamemode.ini] : Running tests :: Basic client tests :: Passed :: Dual client tests gamemode request succeeded and is active Quitting by request... :: Passed :: Gamemoderun and reaper thread tests ...Waiting for child to quit... ...Waiting for reaper thread (reaper_frequency set to 5 seconds)... :: Passed :: Supervisor tests :: Passed :: Feature tests ::: Verifying CPU governor setting ::: Passed ::: Verifying Scripts :::: Running start script [/nix/store/ig8aqj0973jgn6mhnr7smmqb6p7alrz4-libnotify-0.7.9/bin/notify-send 'GameMode started'] :::: Passed :::: Running end script [/nix/store/ig8aqj0973jgn6mhnr7smmqb6p7alrz4-libnotify-0.7.9/bin/notify-send 'GameMode ended'] :::: Passed ::: Passed ::: Verifying GPU Optimisations ::: Passed ::: Verifying renice ::: Passed ::: Verifying ioprio ::: Passed :: Passed : All Tests Passed!
Renice & ioprio optimisations sometimes fail. This is caused by GameMode trying to apply optimisations on processes that exit before the optimisations can be applied. See FeralInteractive/gamemode#167 (comment).
ERROR: Could not inspect tasks for client ! Skipping ioprio optimisation. ERROR: Refused to renice client [31477,31477]: prio was (-10) but we expected (0)
If you don't have an Intel CPU, you will get errors about failing to read the energy levels. This isn't a real problem. It just means that optimizations for integrated graphics cards won't be enabled:
ERROR: Failed to open file for read /sys/class/powercap/intel-rapl/intel-rapl:0/intel-rapl:0:0/energy_uj
If you don't have a screensaver installed, you will get the following error:
ERROR: Could not call Inhibit on org.freedesktop.ScreenSaver: No route to host org.freedesktop.DBus.Error.ServiceUnknown The name org.freedesktop.ScreenSaver was not provided by any .service files
You can disable the screensaver inhibiter to get rid of those errors:
programs.gamemode.settings.general.inhibit_screensaver = 0;