sched/numa: Stop an exhastive search if an idle core is found
authorHao Jia <jiahao.os@bytedance.com>
Fri, 16 Dec 2022 06:24:05 +0000 (14:24 +0800)
committerPeter Zijlstra <peterz@infradead.org>
Tue, 27 Dec 2022 11:52:16 +0000 (12:52 +0100)
In update_numa_stats() we try to find an idle cpu on the NUMA node,
preferably an idle core. we can stop looking for the next idle core
or idle cpu after finding an idle core. But we can't stop the
whole loop of scanning the CPU, because we need to calculate
approximate NUMA stats at a point in time. For example,
the src and dst nr_running is needed by task_numa_find_cpu().

Signed-off-by: Hao Jia <jiahao.os@bytedance.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Mel Gorman <mgorman@techsingularity.net>
Link: https://lore.kernel.org/r/20221216062406.7812-2-jiahao.os@bytedance.com
kernel/sched/fair.c

index d0e2a48a882bb97a9bfa5196d16c92e57faa3d3e..aaff2092ffdf7fbf873e320251059d3786e7082f 100644 (file)
@@ -1804,7 +1804,7 @@ static void update_numa_stats(struct task_numa_env *env,
                ns->nr_running += rq->cfs.h_nr_running;
                ns->compute_capacity += capacity_of(cpu);
 
-               if (find_idle && !rq->nr_running && idle_cpu(cpu)) {
+               if (find_idle && idle_core < 0 && !rq->nr_running && idle_cpu(cpu)) {
                        if (READ_ONCE(rq->numa_migrate_on) ||
                            !cpumask_test_cpu(cpu, env->p->cpus_ptr))
                                continue;