• Morten Rasmussen's avatar
    sched/topology: Add SD_ASYM_CPUCAPACITY flag detection · 05484e09
    Morten Rasmussen authored
    The SD_ASYM_CPUCAPACITY sched_domain flag is supposed to mark the
    sched_domain in the hierarchy where all CPU capacities are visible for
    any CPU's point of view on asymmetric CPU capacity systems. The
    scheduler can then take to take capacity asymmetry into account when
    balancing at this level. It also serves as an indicator for how wide
    task placement heuristics have to search to consider all available CPU
    capacities as asymmetric systems might often appear symmetric at
    smallest level(s) of the sched_domain hierarchy.
    
    The flag has been around for while but so far only been set by
    out-of-tree code in Android kernels. One solution is to let each
    architecture provide the flag through a custom sched_domain topology
    array and associated mask and flag functions. However,
    SD_ASYM_CPUCAPACITY is special in the sense that it depends on the
    capacity and presence of all CPUs in the system, i.e. when hotplugging
    all CPUs out except those with one particular CPU capacity the flag
    should disappear even if the sched_domains don't collapse. Similarly,
    the flag is affected by cpusets where load-balancing is turned off.
    Detecting when the flags should be set therefore depends not only on
    topology information but also the cpuset configuration and hotplug
    state. The arch code doesn't have easy access to the cpuset
    configuration.
    
    Instead, this patch implements the flag detection in generic code where
    cpusets and hotplug state is already taken care of. All the arch is
    responsible for is to implement arch_scale_cpu_capacity() and force a
    full rebuild of the sched_domain hierarchy if capacities are updated,
    e.g. later in the boot process when cpufreq has initialized.
    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: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: dietmar.eggemann@arm.com
    Cc: valentin.schneider@arm.com
    Cc: vincent.guittot@linaro.org
    Link: http://lkml.kernel.org/r/1532093554-30504-2-git-send-email-morten.rasmussen@arm.com
    [ Fixed 'CPU' capitalization. ]
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    05484e09
topology.c 48.8 KB