mirror of
https://github.com/FeralInteractive/gamemode.git
synced 2025-06-07 08:07:20 +02:00
Merge pull request #84 from kakra/improve-scheduler-logging
gamemode-scheduler: Improve logging
This commit is contained in:
commit
9bbcc03c50
@ -210,15 +210,15 @@ void game_mode_context_destroy(GameModeContext *self)
|
|||||||
*/
|
*/
|
||||||
static void game_mode_apply_scheduler(GameModeContext *self, pid_t client)
|
static void game_mode_apply_scheduler(GameModeContext *self, pid_t client)
|
||||||
{
|
{
|
||||||
LOG_MSG("Setting scheduling policies...\n");
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* read configuration "renice" (1..20)
|
* read configuration "renice" (1..20)
|
||||||
*/
|
*/
|
||||||
long int renice = 0;
|
long int renice = 0;
|
||||||
config_get_renice_value(self->config, &renice);
|
config_get_renice_value(self->config, &renice);
|
||||||
if ((renice < 1) || (renice > 20)) {
|
if ((renice < 1) || (renice > 20)) {
|
||||||
LOG_ERROR("Renice value [%ld] defaulted to [%d].\n", renice, -NICE_DEFAULT_PRIORITY);
|
LOG_ERROR("Invalid renice value '%ld' reset to default: %d.\n",
|
||||||
|
renice,
|
||||||
|
-NICE_DEFAULT_PRIORITY);
|
||||||
renice = NICE_DEFAULT_PRIORITY;
|
renice = NICE_DEFAULT_PRIORITY;
|
||||||
} else {
|
} else {
|
||||||
renice = -renice;
|
renice = -renice;
|
||||||
@ -228,13 +228,14 @@ static void game_mode_apply_scheduler(GameModeContext *self, pid_t client)
|
|||||||
* don't adjust priority if it was already adjusted
|
* don't adjust priority if it was already adjusted
|
||||||
*/
|
*/
|
||||||
if (getpriority(PRIO_PROCESS, (id_t)client) != 0) {
|
if (getpriority(PRIO_PROCESS, (id_t)client) != 0) {
|
||||||
LOG_ERROR("Client [%d] already reniced, ignoring.\n", client);
|
LOG_ERROR("Refused to renice client [%d]: already reniced\n", client);
|
||||||
} else if (setpriority(PRIO_PROCESS, (id_t)client, (int)renice)) {
|
} else if (setpriority(PRIO_PROCESS, (id_t)client, (int)renice)) {
|
||||||
LOG_ERROR(
|
LOG_ERROR(
|
||||||
"Renicing client [%d] failed with error %d, ignoring (your user may not have "
|
"Failed to renice client [%d], ignoring error condition: %s\n"
|
||||||
"permission to do this).\n",
|
" -- Your user may not have permission to do this. Please read the docs\n"
|
||||||
|
" -- to learn how to adjust the pam limits.\n",
|
||||||
client,
|
client,
|
||||||
errno);
|
strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -257,14 +258,45 @@ static void game_mode_apply_scheduler(GameModeContext *self, pid_t client)
|
|||||||
if (!(strcmp(softrealtime, "off") == 0) && (enable_softrealtime)) {
|
if (!(strcmp(softrealtime, "off") == 0) && (enable_softrealtime)) {
|
||||||
const struct sched_param p = { .sched_priority = 0 };
|
const struct sched_param p = { .sched_priority = 0 };
|
||||||
if (sched_setscheduler(client, SCHED_ISO | SCHED_RESET_ON_FORK, &p)) {
|
if (sched_setscheduler(client, SCHED_ISO | SCHED_RESET_ON_FORK, &p)) {
|
||||||
|
const char *additional_message = "";
|
||||||
|
switch (errno) {
|
||||||
|
case EPERM: {
|
||||||
|
static int once = 0;
|
||||||
|
if (once++)
|
||||||
|
break;
|
||||||
|
additional_message =
|
||||||
|
" -- The error indicates that you may be running a resource management\n"
|
||||||
|
" -- daemon managing your game launcher and it leaks lower scheduling\n"
|
||||||
|
" -- classes into the games. This is likely a bug in the management daemon\n"
|
||||||
|
" -- and not a bug in GameMode, it should be reported upstream.\n"
|
||||||
|
" -- If unsure, please also look here:\n"
|
||||||
|
" -- https://github.com/FeralInteractive/gamemode/issues/68\n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EINVAL: {
|
||||||
|
static int once = 0;
|
||||||
|
if (once++)
|
||||||
|
break;
|
||||||
|
additional_message =
|
||||||
|
" -- The error indicates that your kernel may not support this. If you\n"
|
||||||
|
" -- don't know what SCHED_ISO means, you can safely ignore this. If you\n"
|
||||||
|
" -- expected it to work, ensure you're running a kernel with MuQSS or\n"
|
||||||
|
" -- PDS scheduler.\n"
|
||||||
|
" -- For further technical reading on the topic start here:\n"
|
||||||
|
" -- https://lwn.net/Articles/720227/\n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
LOG_ERROR(
|
LOG_ERROR(
|
||||||
"Setting client [%d] to SCHED_ISO failed with error %d, ignoring (your "
|
"Failed setting client [%d] into SCHED_ISO mode, ignoring error condition: %s\n%s",
|
||||||
"kernel may not support this).\n",
|
|
||||||
client,
|
client,
|
||||||
errno);
|
strerror(errno),
|
||||||
|
additional_message);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG_ERROR("Not using softrealtime, setting is '%s'.\n", softrealtime);
|
LOG_ERROR("Skipped setting client [%d] into SCHED_ISO mode: softrealtime setting is '%s'\n",
|
||||||
|
client,
|
||||||
|
softrealtime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user