Commit Graph

162 Commits

Author SHA1 Message Date
Alex Smith
0cd58bf13c Fix formatting 2018-08-04 11:05:33 +01:00
Alex Smith
ba8808c6be 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
6e532d9dbc Merge pull request #71 from mgerstner/bugfixes
Bugfixes and Hardening
2018-08-04 10:48:16 +01:00
Matthias Gerstner
09e396595e cpugovctl: evaluate govenor write errors and adjust exit code accordingly 2018-07-30 17:51:58 +02:00
Matthias Gerstner
85782b8ff1 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
abeecb90fd 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
989ba206a0 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
03256a9ae7 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
34ea576bea 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
1074992a3e 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
d3777a58c1 Update to version 1.3-dev post-1.2 release 2018-07-21 09:48:40 +01:00
Alex Smith
ceb476052d Update to version 1.2 2018-07-21 09:33:32 +01:00
Alex Smith
c3dce81a57 Further formatting fixes 2018-07-13 10:32:34 +01:00
Alex Smith
e3eb136dbe Fix formatting 2018-07-13 10:31:57 +01:00
Alex Smith
b504863a60 Document how to uninstall
Issue #59.
2018-07-13 10:30:55 +01:00
Alex Smith
b212fccba5 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
8e8708212c Merge pull request #62 from gicmo/dbus_activation
data: make service dbus-activatable
2018-07-04 09:40:12 +01:00
Alex Smith
f2eee4f751 Update man page for library versioning changes 2018-07-04 09:30:11 +01:00
Alex Smith
28fcb09413 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
4baacbce20 Merge pull request #63 from gicmo/ltversion
Introduce libtool like library versioning
2018-07-04 09:14:31 +01:00
Christian Kellner
154496dd2a 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
8e4edf9b75 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
77d4d0ad23 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
0e753b8cef 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
432a21f5b6 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
8b612ae631 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
2c1525cf34 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
f2e4f9c5fe 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
af51844069 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
b52fe148e6 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
e7f3e80829 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
8425292e92 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
949d30133e 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
47f97981a5 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
057c245fa1 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
0df077ab64 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
3d6e66f114 Set theme jekyll-theme-midnight 2018-05-16 17:06:43 +01:00
Marc Di Luzio
676eea955e Set theme jekyll-theme-hacker 2018-05-16 17:05:34 +01:00
Marc Di Luzio
2261bf3e1d Set theme jekyll-theme-hacker 2018-05-16 17:04:37 +01:00
Marc Di Luzio
498e3e7878 Set theme jekyll-theme-merlot 2018-05-16 17:03:24 +01:00
Marc Di Luzio
f5125df5f8 Set theme jekyll-theme-merlot 2018-05-16 17:03:22 +01:00
Marc Di Luzio
9a25abcb5c 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
ee067cc7ff Restart the service in bootstrap.sh 2018-05-16 08:47:26 +01:00
Marc Di Luzio
d325828f62 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
Marc Di Luzio
c21615c979 Log the version on startup 2018-05-15 17:15:47 +01:00
Marc Di Luzio
8bb89da00e Merge branch 'master' of https://github.com/FeralInteractive/gamemode 2018-05-15 17:07:10 +01:00
Marc Di Luzio
fa19055648 Add defaultgov and desiredgov config settings
Allows users to choose which governor settings they want.

	Should provide some future compatibility for other governor settings.
2018-05-15 17:04:31 +01:00
Marc Di Luzio
79f620e013 Refactor getting config values to stop duplicating the rwlock 2018-05-15 17:04:20 +01:00
Marc Di Luzio
39ad076fa9 Refactor to store the initial governor state when gamemode is entered
Rather than when gamemoded is started. As see in Issue #52.

	A small refactor here to ensure things stay consistent, especially
	to stop storing a pointer from get_gov_state that might have had
	it's memory changed at some point, confusingly.
2018-05-15 16:37:09 +01:00
Alex Smith-Fanning
edcefb3133 added info about overclocking (#49)
* added info about overclocking
2018-05-11 15:12:25 +01:00