Re: [PATCH v2] sched/fair: fix imbalance due to CPU affinity
From: Peter Zijlstra
Date: Mon Jul 01 2019 - 15:04:06 EST
On Mon, Jul 01, 2019 at 05:47:02PM +0200, Vincent Guittot wrote:
> The load_balance() has a dedicated mecanism to detect when an imbalance
> is due to CPU affinity and must be handled at parent level. In this case,
> the imbalance field of the parent's sched_group is set.
>
> The description of sg_imbalanced() gives a typical example of two groups
> of 4 CPUs each and 4 tasks each with a cpumask covering 1 CPU of the first
> group and 3 CPUs of the second group. Something like:
>
> { 0 1 2 3 } { 4 5 6 7 }
> * * * *
>
> But the load_balance fails to fix this UC on my octo cores system
> made of 2 clusters of quad cores.
>
> Whereas the load_balance is able to detect that the imbalanced is due to
> CPU affinity, it fails to fix it because the imbalance field is cleared
> before letting parent level a chance to run. In fact, when the imbalance is
> detected, the load_balance reruns without the CPU with pinned tasks. But
> there is no other running tasks in the situation described above and
> everything looks balanced this time so the imbalance field is immediately
> cleared.
>
> The imbalance field should not be cleared if there is no other task to move
> when the imbalance is detected.
>
> Signed-off-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
Thanks!