• Dietmar Eggemann's avatar
    sched/fair: Make utilization tracking CPU scale-invariant · e3279a2e
    Dietmar Eggemann authored
    Besides the existing frequency scale-invariance correction factor, apply
    CPU scale-invariance correction factor to utilization tracking to
    compensate for any differences in compute capacity. This could be due to
    micro-architectural differences (i.e. instructions per seconds) between
    cpus in HMP systems (e.g. big.LITTLE), and/or differences in the current
    maximum frequency supported by individual cpus in SMP systems. In the
    existing implementation utilization isn't comparable between cpus as it
    is relative to the capacity of each individual CPU.
    
    Each segment of the sched_avg.util_sum geometric series is now scaled
    by the CPU performance factor too so the sched_avg.util_avg of each
    sched entity will be invariant from the particular CPU of the HMP/SMP
    system on which the sched entity is scheduled.
    
    With this patch, the utilization of a CPU stays relative to the max CPU
    performance of the fastest CPU in the system.
    
    In contrast to utilization (sched_avg.util_sum), load
    (sched_avg.load_sum) should not be scaled by compute capacity. The
    utilization metric is based on running time which only makes sense when
    cpus are _not_ fully utilized (utilization cannot go beyond 100% even if
    more tasks are added), where load is runnable time which isn't limited
    by the capacity of the CPU and therefore is a better metric for
    overloaded scenarios. If we run two nice-0 busy loops on two cpus with
    different compute capacity their load should be similar since their
    compute demands are the same. We have to assume that the compute demand
    of any task running on a fully utilized CPU (no spare cycles = 100%
    utilization) is high and the same no matter of the compute capacity of
    its current CPU, hence we shouldn't scale load by CPU capacity.
    Signed-off-by: default avatarDietmar Eggemann <dietmar.eggemann@arm.com>
    Signed-off-by: default avatarMorten Rasmussen <morten.rasmussen@arm.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/55CE7409.1000700@arm.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    e3279a2e
sched.h 44.6 KB