1
0

Тайлбар байхгүй

Marc Di Luzio 72e24b5292 Update meson.build for 0.3 development 7 жил өмнө
daemon e90bd98d64 Enforce strict compiler warnings 7 жил өмнө
data 7f26122c62 Allow controlling whether systemd is used or not 7 жил өмнө
example e90bd98d64 Enforce strict compiler warnings 7 жил өмнө
lib e90bd98d64 Enforce strict compiler warnings 7 жил өмнө
.clang-format ee1c51d0b0 Add clang format file 7 жил өмнө
.gitignore c459c05076 Initial 0.1 commit 7 жил өмнө
CHANGELOG 73fb3e97e6 Update README.md for 0.2 release 7 жил өмнө
LICENSE.txt c459c05076 Initial 0.1 commit 7 жил өмнө
README.md 73fb3e97e6 Update README.md for 0.2 release 7 жил өмнө
bootstrap.sh 1328e07f86 Split meson up to be more modular 7 жил өмнө
meson.build 72e24b5292 Update meson.build for 0.3 development 7 жил өмнө
meson_options.txt 7f26122c62 Allow controlling whether systemd is used or not 7 жил өмнө

README.md

GameMode

A preliminary implementation of a daemon/lib combo to allow games to request a performance mode from the host OS on Linux. It was designed primarily as a stop-gap solution to problems with the Intel and AMD CPU powersave or ondemand governors, but is intended to be expanded beyond just CPU power states as needed.

Currently using sd-bus on the user bus internally for messaging


Components

Host

gamemoded

Runs in the background, waits for requests, refcounts and also checks caller PID lifetime.

Accepts -d (daemonize) and -l (log to syslog)

libgamemode

Dynamic library to dispatch requests to the daemon

Note: Behaviour of gamemoded may change, so libgamemode should never be linked with directly.

cpugovctl

Small program used to to control the cpu governor.

Accepts get (gets current governor) and set <GOVERNOR> (sets the current governor).

Clients

libgamemodeauto

Simple dynamic library that automatically requests game mode when loaded. Minimal dependencies.

Useful to LD_PRELOAD into any game as needed.

gamemode_client.h

Very small header only lib that lets a game request game mode and handle errors. Minimal dependencies.

Can also be included with GAMEMODE_AUTO defined to behave automatically.


Build and install

Daemon and host library

Dependencies

  • meson
  • systemd

    # Ubuntu
    apt install meson libsystemd-dev pkg-config
    # Arch
    pacman -S meson systemd
    
    git clone <git repo>
    cd gamemode
    ./bootstrap.sh
    

Using with any game or program

After installing libgamemodeauto.so simple preload it into the program. Examples:

LD_PRELOAD=/usr/\$LIB/libgamemodeauto.so ./game

Or steam launch options

LD_PRELOAD=/usr/\$LIB/libgamemodeauto.so %command%

Building into a game or program

You may want to build in functionality directly into an app, this stops the need for users to have to manually set anything up.

gamemode_client.h and libgamemodeauto are safe to use regardless of whether libgamemode and gamemoded are installed on the system. They also do not require systemd.

Using directly

#include "gamemode_client.h"

	if( gamemode_request_start() < 0 )
		fprintf( stderr, "gamemode request failed: %s\n", gamemode_error_string() );

	/* run game... */

	gamemode_request_end(); // Not required, gamemoded will clean up after game exists anyway

Using automatically

Option 1: Include in code

#define GAMEMODE_AUTO
#include "gamemode_client.h"

Option 2: Link and distribute

Add -lgamemodeauto to linker arguments and distribute libgamemodeauto.so with the game

Option 3: Distribute and script

Distribute libgamemodeauto.so with the game and add to LD_PRELOAD in a launch script


Pull Requests

Pull requests must match with the coding style found in the .clang-format file

clang-format -i $(find . -name '*.[ch]')

Planned Features

  • Additional mode-switch plugins
  • User confuguration with whitelist/blacklist for programs
  • User configuration for custom mode-switch plugins
  • Additional state tracking not based solely on PID