core/exec-invoke: use sched_setattr instead of sched_setscheduler
The kernel's sched_setattr interface allows for more control over a processes scheduling attributes as the previously used sched_setscheduler interface. Using sched_setattr is also the prerequisite for support of utilization clamping (UCLAMP [1], see #26705) and allows to set sched_runtime. The latter, sched_runtime, will probably become a relevant scheduling parameter of the EEVDF scheduler [2, 3], and therefore will not only apply to processes scheduled via SCHED_DEADLINE, but also for processes scheduled via SCHED_OTHER/SCHED_BATCH (i.e., most processes). 1: https://docs.kernel.org/next/scheduler/sched-util-clamp.html 2: https://lwn.net/Articles/969062/ 3: https://lwn.net/ml/linux-kernel/20240405110010.934104715@infradead.org/
This commit is contained in:
committed by
Luca Boccassi
parent
0828c6a2bf
commit
016e9d8d08
@@ -1,5 +1,6 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include <linux/sched.h>
|
||||
#include <sys/eventfd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/mount.h>
|
||||
@@ -44,6 +45,7 @@
|
||||
#include "journal-send.h"
|
||||
#include "missing_ioprio.h"
|
||||
#include "missing_prctl.h"
|
||||
#include "missing_sched.h"
|
||||
#include "missing_securebits.h"
|
||||
#include "missing_syscall.h"
|
||||
#include "mkdir-label.h"
|
||||
@@ -4411,15 +4413,14 @@ int exec_invoke(
|
||||
}
|
||||
|
||||
if (context->cpu_sched_set) {
|
||||
struct sched_param param = {
|
||||
struct sched_attr attr = {
|
||||
.size = sizeof(attr),
|
||||
.sched_policy = context->cpu_sched_policy,
|
||||
.sched_priority = context->cpu_sched_priority,
|
||||
.sched_flags = context->cpu_sched_reset_on_fork ? SCHED_FLAG_RESET_ON_FORK : 0,
|
||||
};
|
||||
|
||||
r = sched_setscheduler(0,
|
||||
context->cpu_sched_policy |
|
||||
(context->cpu_sched_reset_on_fork ?
|
||||
SCHED_RESET_ON_FORK : 0),
|
||||
¶m);
|
||||
r = sched_setattr(/* pid= */ 0, &attr, /* flags= */ 0);
|
||||
if (r < 0) {
|
||||
*exit_status = EXIT_SETSCHEDULER;
|
||||
return log_exec_error_errno(context, params, errno, "Failed to set up CPU scheduling: %m");
|
||||
|
||||
Reference in New Issue
Block a user