Commit Graph

87 Commits

Author SHA1 Message Date
8b612ae631 Merge pull request #60 from Brainiarc7/patch-1
Added build notes for the git master
2018-06-21 08:03:24 +01:00
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
f2e4f9c5fe Merge pull request #56 from kakra/feature/soft-realtime-scheduling
Leverage soft real time capabilities
2018-06-20 17:51:44 +01:00
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
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
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
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
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
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
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
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
3d6e66f114 Set theme jekyll-theme-midnight 2018-05-16 17:06:43 +01:00
676eea955e Set theme jekyll-theme-hacker 2018-05-16 17:05:34 +01:00
2261bf3e1d Set theme jekyll-theme-hacker 2018-05-16 17:04:37 +01:00
498e3e7878 Set theme jekyll-theme-merlot 2018-05-16 17:03:24 +01:00
f5125df5f8 Set theme jekyll-theme-merlot 2018-05-16 17:03:22 +01:00
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
ee067cc7ff Restart the service in bootstrap.sh 2018-05-16 08:47:26 +01:00
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
c21615c979 Log the version on startup 2018-05-15 17:15:47 +01:00
8bb89da00e Merge branch 'master' of https://github.com/FeralInteractive/gamemode 2018-05-15 17:07:10 +01:00
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
79f620e013 Refactor getting config values to stop duplicating the rwlock 2018-05-15 17:04:20 +01:00
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
edcefb3133 added info about overclocking (#49)
* added info about overclocking
2018-05-11 15:12:25 +01:00
6d181f86bd Label master as 1.2-dev 2018-05-11 14:53:30 +01:00
8b9f4b9ac8 Correct a comment 2018-05-11 14:25:02 +01:00
da58061945 Add a note for dbus-user-session as seen in issues like #48 2018-05-11 08:59:51 +01:00
1592ada697 Warn users if no governor is found so they spot issues sooner
See issue 44
2018-05-11 08:53:42 +01:00
c9db0b2b8a Allow execution without any cpu governors to set - for issue #44 2018-05-11 08:51:56 +01:00
2fc900f1e4 Add to the changelog for commit 8bd9587e8 2018-05-01 15:46:22 +01:00
3d34444d79 Merge branch 'master' into 1.1RC 2018-05-01 15:45:57 +01:00
8bd9587e80 Provide a cascaded merge-overwrite config approach for #6
gamemoded will now load and merge settings from the following locations - arrays will merge and single settings will overwrite.

	1. /usr/share/gamemode/
	2. /etc/
	3. $XDG_CONFIG_HOME or $HOME/.config/
	4. $PWD
2018-05-01 15:42:54 +01:00
836aa6307b Merge branch 'master' into 1.1RC 2018-04-27 08:59:53 +01:00
ebe41657ff Build fix for meson 0.40.1 as seen in issue #32 2018-04-27 08:58:55 +01:00
b8b2b0415e Update to 1.1 ready for release 2018-04-25 15:50:05 +01:00
975d678ab7 Allow failure when finding functions that are new to the API
This allows a game using a newer client header than the installed gamemode to still function
2018-04-25 15:24:07 +01:00
3eea07255e Add gamemode_query_status and teach gamemoded '-s'
This allows the client to query the daemon about the status of gamemode.

	Returns the following:
		 0 if gamemode is inactive
		 1 if gamemode is active
		 2 if gamemode is active and this client is registered
		-1 if the query failed

	Passing -s to gamemoded will simply query and print the current status.

	Allows for more comprehensive testing when using 'gamemoded -r' as well as more reactionary program behaviour
2018-04-25 14:51:38 +01:00
2317bcde14 Teach gamemoded the '-r' option
This allows for easy requesting of gamemode and pausing for any signal

	Primarily useful for simple tests, but also functionally to allow enterning and exiting gamemode manually
2018-04-25 14:46:20 +01:00
03ee174fe6 Exclude submodules from the format suggestion 2018-04-25 14:45:51 +01:00
3a5050b175 Update README.md 2018-04-24 17:23:02 +01:00
633b7f7716 Update the current example config file 2018-04-24 17:14:12 +01:00
d42dd30e25 Fix format check 2018-04-24 17:09:06 +01:00
d26aac7147 Add support for user defined local script plugins
A much requested feature, this allows for providing custom scripts in the config file. An example in the man page is below and would trigger both a system notification, and allow control over a background crypto mining script automatically in gamemode.

	[custom]
	; Custom scripts (executed using the shell) when gamemode starts and ends
	start=notify-send "GameMode started"
	    /home/me/bin/stop_ethmining.sh

	end=notify-send "GameMode ended"
	    /home/me/bin/start_ethmining.sh

	Scripts are run with system() and do not have any special privilages, as with the rest of the daemon, custom scripts that require root will need their own permissions set up externally.

	This commit also renames two defines as they needed to be moved to the public interface.
2018-04-24 16:59:17 +01:00
ac58a59c9b Refactor the config gathering code to be reusable
This moves adding to lists and getting long values into resuable functions.

	It also fixes a couple other issues in the process:
		1. Logging now goes to the error channel and is labelled
		2. >Max length lines are properly handled, although this should never happen since inih has a 200 limit
2018-04-24 15:21:59 +01:00
14d671214f Add "reaper_freq" config setting in the "general" section
This simply allows control over the reaper thread frequency.

	Defaults to 5 as before.
2018-04-24 14:37:39 +01:00
c2432d6182 Add git to the install dependencies as seen in #36 2018-04-24 13:43:44 +01:00
a9ef55cba3 Fix the format check script by applying it to the previous commit
Rather than just to local changes, which doesn't work as intended
2018-04-16 17:52:48 +01:00
0e345d715d Apply clang-format to commit d26ac60 2018-04-16 17:46:32 +01:00
5cca341ec2 Rename variables and functions that had an underscore prefix
Ensures we conform better to C standards
2018-04-16 17:42:54 +01:00