718 Commits

Author SHA1 Message Date
Alex Smith
7af744250e README: Mention Fedora packages
GameMode is now in the official Fedora repository.
2018-09-29 09:27:48 +01:00
Alex Smith
a0e4f996e9 Merge pull request #74 from kakra/mention-gentoo-support
README: Mention Gentoo support
2018-09-29 09:26:37 +01:00
Kai Krakow
a8726e8959 format-check: Enable usage as pre-commit hook
This adds support for a switch `--pre-commit` to work in
pre-commit-mode. It downloads the file and runs the real pre-commit-hook
then.

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-09-24 20:44:07 +02:00
Kai Krakow
5e4d5fb2e7 gamemode: Don't leak SCHED_ISO into children
We should not leak `SCHED_ISO` into children processes. This is obviously
a no-op if launchers use the `LD_PRELOAD` method because every child would
also preload the gamemode library (except they patch the environment
before forking).

But for games supporting gamemode natively, this prevents leaking the
scheduler settings into child processes which is important because it
children may create high CPU usage which counterfeits the original idea
of this.

Apparently, this won't work for the nice value except we would intercept
the libc forking functions (which would be possible but not very
transparent and prone to compatibility problems). However, if we
implemented it, it shouldn't be part of this commit anyway.

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-09-24 20:31:17 +02:00
Kai Krakow
f041ba2281 format-check: Optimize format-check.sh
This commit silences the standard output of wget to generate less noise
when using `format-check.sh` as a pre-commit hook.

It also doesn't redownload the file over and over again but only when
changes were detected. Previous behavior was wget creating numbered
versions by multiple downloads, thus it always used the first version
which was download. That is obviously wrong.

It errors out nicely now when the download failed.

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-09-24 20:21:55 +02:00
Kai Krakow
af8c2a7c4a README: Mention Gentoo support
Gentoo has merged the gamemode ebuild into portage as of:
https://github.com/gentoo/gentoo/pull/9700#issuecomment-423886373

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-09-24 09:13:24 +02:00
Alex Smith
22a90a73ef Fix formatting 2018-08-04 11:05:33 +01:00
Alex Smith
442475a78b Make error messages for failure to change scheduling policies more descriptive
Out of the box on most distros, both of these steps will fail (renicing
requires permission which may need adjustment to limits.conf, and the
upstream kernel does not support SCHED_ISO).

Explicitly state this in the error messages to hopefully reduce user
confusion as to why these might be failing.
2018-08-04 10:54:59 +01:00
Alex Smith
cdbe0db9a7 Merge pull request #71 from mgerstner/bugfixes
Bugfixes and Hardening
2018-08-04 10:48:16 +01:00
Matthias Gerstner
5f06435bdf cpugovctl: evaluate govenor write errors and adjust exit code accordingly 2018-07-30 17:51:58 +02:00
Matthias Gerstner
2896506340 cpugovctl: correctly evaluate available command line parameters
When calling `cpugovctl set` then an access to the terminating NULL
pointer of argv is made.
2018-07-30 17:29:55 +02:00
Matthias Gerstner
39d7b95a26 game_mode_context_register: fix memory leak on error conditions
Clients can reach this memory leak by trying to unregister non-existing
clients via D-Bus.
2018-07-30 17:29:55 +02:00
Matthias Gerstner
17241deccb daemonize: instead of just closing STD*_FILENO replace them by /dev/null
When there are not valid standard file descriptors then strange things
can happen. When new file descriptors are opened, they will take the
place of the former standard file descriptors and when e.g. somebody
calls printf() they will write to some file descriptor that is not
prepared for it. This would already happen during PLOG_MSG() in
gamemoded.

Actually this also causes a SIGABRT when calling gamemoded like this:

```bash
gamemoded -d
```

This is due to a bug [1] in systemd that causes an assertion to be
triggered. This shows that file descriptor zero is in this case being
replaced by a UNIX domain socket representing the connection to the
D-Bus session bus.

Therefore instead of just closing the standard file descriptors, replace
them by appropriate file descriptors refering to /dev/null.

[1]: https://github.com/systemd/systemd/issues/8080
2018-07-30 17:29:55 +02:00
Matthias Gerstner
1703489bd3 daemonize: use a safe umask for the daemon
The reason for setting umask in a daemon is to get a defined umask value
instead of whatever the calling user had configured. A umask of zero is
dangerous, however, because it can easily cause world-readable and
world-writeable files when oblivious code is involved that specified
0777 during open() calls, wanting to grant the user full control of the
resulting file mode.

Currently the daemon shouldn't be creating any new files so this is not
a matter. This could change in the future, however.
2018-07-30 16:24:39 +02:00
Alex Smith
fdfc6edfd9 Comment out some sections in the example configuration file
Avoid potential issues if the config file is copied without modification.
2018-07-23 17:10:32 +01:00
Alex Smith
7051051f19 Attempt to load unversioned library for compatibility with older installations
Games built against a new gamemode_client.h will fail to work with older
GameMode installations without this change. There are no ABI changes right
now so just attempt to load the old unversioned path if loading the
versioned one fails.
2018-07-23 10:21:31 +01:00
Alex Smith
2ae86fabd6 Update to version 1.3-dev post-1.2 release 2018-07-21 09:48:40 +01:00
Alex Smith
c3938599a8 Update to version 1.2 1.2 2018-07-21 09:33:32 +01:00
Alex Smith
f6786ed5d2 Further formatting fixes 2018-07-13 10:32:34 +01:00
Alex Smith
3645b43416 Fix formatting 2018-07-13 10:31:57 +01:00
Alex Smith
407a7b2d0a Document how to uninstall
Issue #59.
2018-07-13 10:30:55 +01:00
Alex Smith
3b586dcc54 Don't explicitly enable the systemd service after installing
Commit 432a21f5 makes the service D-Bus activated so there's no need to
enable it explicitly.
2018-07-04 09:41:47 +01:00
Alex Smith
a1e07bcdc7 Merge pull request #62 from gicmo/dbus_activation
data: make service dbus-activatable
2018-07-04 09:40:12 +01:00
Alex Smith
a1f523cf55 Update man page for library versioning changes 2018-07-04 09:30:11 +01:00
Alex Smith
3a3314b43e Move man page to the correct section (8)
Daemons belong in 8, as per issue #61.
2018-07-04 09:29:05 +01:00
Alex Smith
9631e6ddc4 Merge pull request #63 from gicmo/ltversion
Introduce libtool like library versioning
2018-07-04 09:14:31 +01:00
Christian Kellner
1369629972 README.md: use version library in examples
Now that versioned libraries are created, use that in the examples
provided.
2018-07-02 14:14:47 +02:00
Christian Kellner
8f8a6d4f91 lib: dlopen versioned library
Instead of dlopen'ing the plain, not versioned library, use the
versioned one with current interface, i.e. 0: libgamemode.so.0
2018-07-02 14:02:23 +02:00
Christian Kellner
ea3e135ae0 lib: use libtool like versioning
In order to be safe for future ABI changes and to fulfill packaging
requirements for e.g. Fedora, provide libtool like versioning for
both libraries, i.e. libgamemode and libgamemodeauto.
2018-07-02 13:59:18 +02:00
Christian Kellner
a4b98e61bf lib: generate a pkg-config files
To ease development, create a gamemode.pc and a gamemode-auto.pc
file, that other projects can use integrate with gamemode. The
former if they want to integrate at the source level and the latter
if the automatic integration is preferred.
2018-07-02 13:53:10 +02:00
Christian Kellner
cd54ad42c3 data: make service dbus-activatable
Always install the dbus service file and specify the systemd
unit file in it. This makes the service dbus-activatable and
thus we don't need to explicitly enable it (also we have one
less daemon running, if it is not needed).
2018-06-28 19:23:02 +03:00
Alex Smith
91d2e8ecee Merge pull request #60 from Brainiarc7/patch-1
Added build notes for the git master
2018-06-21 08:03:24 +01:00
Dennis E. Mungai
e85dc3ecfb Added build notes for the git master
The build instructions here only cater for release 1.1.
This adds in build notes for the master branch.
2018-06-21 05:52:03 +03:00
Alex Smith
7a1eac27ae Merge pull request #56 from kakra/feature/soft-realtime-scheduling
Leverage soft real time capabilities
2018-06-20 17:51:44 +01:00
Kai Krakow
ead417be36 docs: Add a warning about potential resource starvation
Warn the user about adjusting `SCHED_ISO` to too high CPU usage values
as it may render the OS unresponsive.

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-06-10 10:07:23 +02:00
Kai Krakow
048b7b1c17 docs: Document priority inversion caveats
Depending on the local system architecture and the game architecture,
changes to the scheduling may result in priority inversion which has
counter-intuitive effects on performance. Let's document these to give
the user a chance to detect and fix this problem.

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-06-10 09:38:57 +02:00
Kai Krakow
6f93020d0b scheduler: Apply renice configuration to clients
This commit applies the configured nice value to the client. It accepts
values from 1 to 20, the negated value is applied as a nice value.
Negation was chosen due to limits of the configuration parser. Since low
priority values (0 to 19) make no sense in the scope of GameMode, this
is a safe approach.

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-06-10 09:36:21 +02:00
Kai Krakow
57c6bbb444 config: Allow renice configuration
This commit adds configuration support for the renice value and amends
documentation and examples. This commit by itself does nothing, the
following commit is needed to actually apply the new settings.

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-06-10 09:33:02 +02:00
Kai Krakow
addfe1fbc0 scheduler: Add heuristics and option to force on/off
This commit adds a simple heuristic to auto detect whether to use
SCHED_ISO or not. It does this by looking at the number of cores:

According to some reports by users of SCHED_ISO and an explanation by
Con Kolivas, games running busy loops and running on too few cores might
start fighting with scheduling of the graphic driver, leading to
priority inversion. This results in actually lower performance.

So let's only enable SCHED_ISO on at least four cores.

The user can still force SCHED_ISO on or off by setting the
configuration value. All other values (or none) will apply heuristics.

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-05-24 22:41:04 +02:00
Kai Krakow
9dfd718807 config: Introduce new setting "softrealtime"
This adds support for a new configuration option "softrealtime" to be
read from the general section. This commit alone does nothing, the
following commit adds actually making use of the value.

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-05-24 22:41:04 +02:00
Kai Krakow
d8231a2972 scheduler: Don't renice if already reniced
This is a heuristic to not apply a nice level if the user already did
that (or the process itself).

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-05-24 22:41:04 +02:00
Kai Krakow
76ece2fc26 Leverage soft real time capabilities
Kernels that support SCHED_ISO scheduling policy can give processes soft
real time support. This improves latency without compromising system
stability. See https://lwn.net/Articles/720227/.

This commit adds support for setting this policy with a safe fall back if
kernel support is lacking by just ignoring the error condition.

Additionally, it also tries to raise the nice priority of the game to -4
to give it a slight IO and CPU priority over other background processes.
This needs PAM adjustments to allow users raising priority to certain
levels. If it doesn't work, the fall back strategy is also ignoring the
error condition. See /etc/security/limits.conf.

Kernels that currently support SCHED_ISO include kernels with Con
Kolivas MuQSS patchset (likely the CK patchset). This patchset is
generally recommended for desktop machines but usually not found in
standard distribution kernels due to lack of widespread stability tests.

Signed-off-by: Kai Krakow <kai@kaishome.de>
2018-05-23 22:23:42 +02:00
Marc Di Luzio
1ad1f3bbcf Set theme jekyll-theme-midnight 2018-05-16 17:06:43 +01:00
Marc Di Luzio
a9e12325fc Set theme jekyll-theme-hacker 2018-05-16 17:05:34 +01:00
Marc Di Luzio
f270684751 Set theme jekyll-theme-hacker 2018-05-16 17:04:37 +01:00
Marc Di Luzio
596f25d0cf Set theme jekyll-theme-merlot 2018-05-16 17:03:24 +01:00
Marc Di Luzio
0980310e84 Set theme jekyll-theme-merlot 2018-05-16 17:03:22 +01:00
Marc Di Luzio
42d2fda05c Update issue templates
Add some baseline issue templates to help users report bugs or request features.
2018-05-16 17:02:09 +01:00
Marc Di Luzio
21b8ec76dc Restart the service in bootstrap.sh 2018-05-16 08:47:26 +01:00
Marc Di Luzio
fec4732740 Add an example .desktop file
As seen in Issue #45 (thanks OlliC)

This can be placed in ~/.local/share/applications/ to allow easier (re)launching of gamemode, in particular when the DISPLAY param is needed
2018-05-16 08:42:19 +01:00