[PATCH] sched/fair: fix imbalance overflow

From: Vincent Guittot
Date: Tue Apr 11 2023 - 05:07:59 EST


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