• Mel Gorman's avatar
    sched/numa: Prefer using an idle CPU as a migration target instead of comparing tasks · ff7db0bf
    Mel Gorman authored
    task_numa_find_cpu() can scan a node multiple times. Minimally it scans to
    gather statistics and later to find a suitable target. In some cases, the
    second scan will simply pick an idle CPU if the load is not imbalanced.
    
    This patch caches information on an idle core while gathering statistics
    and uses it immediately if load is not imbalanced to avoid a second scan
    of the node runqueues. Preference is given to an idle core rather than an
    idle SMT sibling to avoid packing HT siblings due to linearly scanning the
    node cpumask.
    
    As a side-effect, even when the second scan is necessary, the importance
    of using select_idle_sibling is much reduced because information on idle
    CPUs is cached and can be reused.
    
    Note that this patch actually makes is harder to move to an idle CPU
    as multiple tasks can race for the same idle CPU due to a race checking
    numa_migrate_on. This is addressed in the next patch.
    Signed-off-by: default avatarMel Gorman <mgorman@techsingularity.net>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Vincent Guittot <vincent.guittot@linaro.org>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Valentin Schneider <valentin.schneider@arm.com>
    Cc: Phil Auld <pauld@redhat.com>
    Cc: Hillf Danton <hdanton@sina.com>
    Link: https://lore.kernel.org/r/20200224095223.13361-11-mgorman@techsingularity.net
    ff7db0bf
fair.c 291 KB