]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
sched/fair: Only update stats for allowed CPUs when looking for dst group
authorAdam Li <adamli@os.amperecomputing.com>
Sat, 11 Oct 2025 06:43:22 +0000 (06:43 +0000)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 16 Oct 2025 09:13:50 +0000 (11:13 +0200)
commit82d6e01a0699800efd8b048eb584c907ccb47b7a
treea7c66ade6beb0ba283a70d0500440829d8baa5e1
parent4d6dd05d07d00bc3bd91183dab4d75caa8018db9
sched/fair: Only update stats for allowed CPUs when looking for dst group

Load imbalance is observed when the workload frequently forks new threads.
Due to CPU affinity, the workload can run on CPU 0-7 in the first
group, and only on CPU 8-11 in the second group. CPU 12-15 are always idle.

{ 0 1 2 3 4 5 6 7 } {8 9 10 11 12 13 14 15}
  * * * * * * * *    * * *  *

When looking for dst group for newly forked threads, in many times
update_sg_wakeup_stats() reports the second group has more idle CPUs
than the first group. The scheduler thinks the second group is less
busy. Then it selects least busy CPUs among CPU 8-11. Therefore CPU 8-11
can be crowded with newly forked threads, at the same time CPU 0-7
can be idle.

A task may not use all the CPUs in a schedule group due to CPU affinity.
Only update schedule group statistics for allowed CPUs.

Signed-off-by: Adam Li <adamli@os.amperecomputing.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
kernel/sched/fair.c