]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
sched_ext: Add cpuperf support
authorTejun Heo <tj@kernel.org>
Fri, 21 Jun 2024 22:37:22 +0000 (12:37 -1000)
committerTejun Heo <tj@kernel.org>
Fri, 21 Jun 2024 22:37:22 +0000 (12:37 -1000)
commitd86adb4fc0655a0867da811d000df75d2a325ef6
treef2024987668b3421ea8bd60ce71bd6b313b6ec53
parent8988cad8d06eb6097667925d2eb0522850bb0aac
sched_ext: Add cpuperf support

sched_ext currently does not integrate with schedutil. When schedutil is the
governor, frequencies are left unregulated and usually get stuck close to
the highest performance level from running RT tasks.

Add CPU performance monitoring and scaling support by integrating into
schedutil. The following kfuncs are added:

- scx_bpf_cpuperf_cap(): Query the relative performance capacity of
  different CPUs in the system.

- scx_bpf_cpuperf_cur(): Query the current performance level of a CPU
  relative to its max performance.

- scx_bpf_cpuperf_set(): Set the current target performance level of a CPU.

This gives direct control over CPU performance setting to the BPF scheduler.
The only changes on the schedutil side are accounting for the utilization
factor from sched_ext and disabling frequency holding heuristics as it may
not apply well to sched_ext schedulers which may have a lot weaker
connection between tasks and their current / last CPU.

With cpuperf support added, there is no reason to block uclamp. Enable while
at it.

A toy implementation of cpuperf is added to scx_qmap as a demonstration of
the feature.

v2: Ignore cpu_util_cfs_boost() when scx_switched_all() in sugov_get_util()
    to avoid factoring in stale util metric. (Christian)

Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: David Vernet <dvernet@meta.com>
Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Christian Loehle <christian.loehle@arm.com>
kernel/sched/cpufreq_schedutil.c
kernel/sched/ext.c
kernel/sched/ext.h
kernel/sched/sched.h
tools/sched_ext/include/scx/common.bpf.h
tools/sched_ext/scx_qmap.bpf.c
tools/sched_ext/scx_qmap.c