Re: [PATCH] sched/fair: fix imbalance overflow

From: Tingjia Cao
Date: Tue Apr 11 2023 - 16:41:20 EST


Hello Vincent,

Thanks for the reply. The patch also fixes the issue on my side!

Cheers,
Tingjia


On Tue, Apr 11, 2023 at 5:06 AM Vincent Guittot
<vincent.guittot@xxxxxxxxxx> wrote:
>
> When local group is fully busy but its average load is above system load,
> computing the imbalance will overflow and local group is not the best
> target for pulling this load.
>
> Fixes: 0b0695f2b34a ("sched/fair: Rework load_balance()")
> Reported-by: Tingjia Cao <tjcao980311@xxxxxxxxx>
> Link: https://lore.kernel.org/lkml/CABcWv9_DAhVBOq2=W=2ypKE9dKM5s2DvoV8-U0+GDwwuKZ89jQ@xxxxxxxxxxxxxx/T/
> Signed-off-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
> ---
>
> Hi Tingjia,
>
> Thanks for the detailed bug report. I have been able to reproduce the problem and this
> patch fixes it on my setup. Could you try it ?
>
> Thanks,
> Vincent
>
> kernel/sched/fair.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index f5da01a6b35a..184b0dbb2a69 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -10209,6 +10209,16 @@ static inline void calculate_imbalance(struct lb_env *env, struct sd_lb_stats *s
>
> sds->avg_load = (sds->total_load * SCHED_CAPACITY_SCALE) /
> sds->total_capacity;
> +
> + /*
> + * If the local group is more loaded than the average system
> + * load, don't try to pull any tasks.
> + */
> + if (local->avg_load >= sds->avg_load) {
> + env->imbalance = 0;
> + return;
> + }
> +
> }
>
> /*
> --
> 2.34.1
>