• Patrick Bellasi's avatar
    sched/uclamp: Add uclamp support to energy_compute() · af24bde8
    Patrick Bellasi authored
    The Energy Aware Scheduler (EAS) estimates the energy impact of waking
    up a task on a given CPU. This estimation is based on:
    
     a) an (active) power consumption defined for each CPU frequency
     b) an estimation of which frequency will be used on each CPU
     c) an estimation of the busy time (utilization) of each CPU
    
    Utilization clamping can affect both b) and c).
    
    A CPU is expected to run:
    
     - on an higher than required frequency, but for a shorter time, in case
       its estimated utilization will be smaller than the minimum utilization
       enforced by uclamp
     - on a smaller than required frequency, but for a longer time, in case
       its estimated utilization is bigger than the maximum utilization
       enforced by uclamp
    
    While compute_energy() already accounts clamping effects on busy time,
    the clamping effects on frequency selection are currently ignored.
    
    Fix it by considering how CPU clamp values will be affected by a
    task waking up and being RUNNABLE on that CPU.
    
    Do that by refactoring schedutil_freq_util() to take an additional
    task_struct* which allows EAS to evaluate the impact on clamp values of
    a task being eventually queued in a CPU. Clamp values are applied to the
    RT+CFS utilization only when a FREQUENCY_UTIL is required by
    compute_energy().
    
    Do note that switching from ENERGY_UTIL to FREQUENCY_UTIL in the
    computation of the cpu_util signal implies that we are more likely to
    estimate the highest OPP when a RT task is running in another CPU of
    the same performance domain. This can have an impact on energy
    estimation but:
    
     - it's not easy to say which approach is better, since it depends on
       the use case
     - the original approach could still be obtained by setting a smaller
       task-specific util_min whenever required
    
    Since we are at that:
    
     - rename schedutil_freq_util() into schedutil_cpu_util(),
       since it's not only used for frequency selection.
    Signed-off-by: default avatarPatrick Bellasi <patrick.bellasi@arm.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Alessio Balsini <balsini@android.com>
    Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Cc: Joel Fernandes <joelaf@google.com>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Morten Rasmussen <morten.rasmussen@arm.com>
    Cc: Paul Turner <pjt@google.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Quentin Perret <quentin.perret@arm.com>
    Cc: Rafael J . Wysocki <rafael.j.wysocki@intel.com>
    Cc: Steve Muckle <smuckle@google.com>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Todd Kjos <tkjos@google.com>
    Cc: Vincent Guittot <vincent.guittot@linaro.org>
    Cc: Viresh Kumar <viresh.kumar@linaro.org>
    Link: https://lkml.kernel.org/r/20190621084217.8167-12-patrick.bellasi@arm.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    af24bde8
fair.c 278 KB