• Valentin Schneider's avatar
    sched/fair: Introduce a CPU capacity comparison helper · 4aed8aa4
    Valentin Schneider authored
    During load-balance, groups classified as group_misfit_task are filtered
    out if they do not pass
    
      group_smaller_max_cpu_capacity(<candidate group>, <local group>);
    
    which itself employs fits_capacity() to compare the sgc->max_capacity of
    both groups.
    
    Due to the underlying margin, fits_capacity(X, 1024) will return false for
    any X > 819. Tough luck, the capacity_orig's on e.g. the Pixel 4 are
    {261, 871, 1024}. If a CPU-bound task ends up on one of those "medium"
    CPUs, misfit migration will never intentionally upmigrate it to a CPU of
    higher capacity due to the aforementioned margin.
    
    One may argue the 20% margin of fits_capacity() is excessive in the advent
    of counter-enhanced load tracking (APERF/MPERF, AMUs), but one point here
    is that fits_capacity() is meant to compare a utilization value to a
    capacity value, whereas here it is being used to compare two capacity
    values. As CPU capacity and task utilization have different dynamics, a
    sensible approach here would be to add a new helper dedicated to comparing
    CPU capacities.
    
    Also note that comparing capacity extrema of local and source sched_group's
    doesn't make much sense when at the day of the day the imbalance will be
    pulled by a known env->dst_cpu, whose capacity can be anywhere within the
    local group's capacity extrema.
    
    While at it, replace group_smaller_{min, max}_cpu_capacity() with
    comparisons of the source group's min/max capacity and the destination
    CPU's capacity.
    Signed-off-by: default avatarValentin Schneider <valentin.schneider@arm.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarDietmar Eggemann <dietmar.eggemann@arm.com>
    Reviewed-by: default avatarQais Yousef <qais.yousef@arm.com>
    Reviewed-by: default avatarVincent Guittot <vincent.guittot@linaro.org>
    Tested-by: default avatarLingutla Chandrasekhar <clingutla@codeaurora.org>
    Link: https://lkml.kernel.org/r/20210407220628.3798191-4-valentin.schneider@arm.com
    4aed8aa4
fair.c 299 KB