Re: [PATCH RESEND] sched/fair: Only update stats for allowed CPUs when looking for dst group
From: Peter Zijlstra
Date: Tue Oct 14 2025 - 07:37:42 EST
On Sat, Oct 11, 2025 at 06:43:22AM +0000, Adam Li wrote:
> 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@xxxxxxxxxxxxxxxxxxxxxx>
> ---
> Resending this patch from the patchset:
> https://lore.kernel.org/lkml/20250717062036.432243-2-adamli@xxxxxxxxxxxxxxxxxxxxxx/
>
Right, lets start with this then ;-)
No need to do the cpumask_and() thing, that's just more changes vs
update_sg_lb_stats().