• Tejun Heo's avatar
    sched_ext: Add cpuperf support · d86adb4f
    Tejun Heo authored
    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: default avatarTejun Heo <tj@kernel.org>
    Reviewed-by: default avatarDavid 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>
    d86adb4f
common.bpf.h 15.4 KB