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.guit...@linaro.org>
Thanks!