kernel/sched/fair.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
When calculate_imbalance function calculate the imbalance, it may
actually get a negative number. In this case, it is meaningless to
return the so-called busiest group and continue to search for the
busiest cpu later. Therefore, only when the imbalance is greater
than 0 should return the busiest group, otherwise return NULL.
Signed-off-by: zgpeng <zgpeng@tencent.com>
Reviewed-by: Samuel Liao <samuelliao@tencent.com>
---
kernel/sched/fair.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 601f8bd..9f75303 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -9639,7 +9639,7 @@ static struct sched_group *find_busiest_group(struct lb_env *env)
force_balance:
/* Looks like there is an imbalance. Compute it */
calculate_imbalance(env, &sds);
- return env->imbalance ? sds.busiest : NULL;
+ return env->imbalance > 0 ? sds.busiest : NULL;
out_balanced:
env->imbalance = 0;
--
2.9.5
On Wed, 6 Apr 2022 at 13:23, zgpeng <zgpeng.linux@gmail.com> wrote: > > When calculate_imbalance function calculate the imbalance, it may > actually get a negative number. In this case, it is meaningless to We should not return a negative imbalance but I suppose this can happen when we are using the avg_load metrics to calculate imbalance. Have you faced a use case where imbalance is negative ? > return the so-called busiest group and continue to search for the > busiest cpu later. Therefore, only when the imbalance is greater > than 0 should return the busiest group, otherwise return NULL. > > Signed-off-by: zgpeng <zgpeng@tencent.com> > Reviewed-by: Samuel Liao <samuelliao@tencent.com> > --- > kernel/sched/fair.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 601f8bd..9f75303 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -9639,7 +9639,7 @@ static struct sched_group *find_busiest_group(struct lb_env *env) > force_balance: > /* Looks like there is an imbalance. Compute it */ > calculate_imbalance(env, &sds); > - return env->imbalance ? sds.busiest : NULL; > + return env->imbalance > 0 ? sds.busiest : NULL; > > out_balanced: > env->imbalance = 0; > -- > 2.9.5 >
© 2016 - 2026 Red Hat, Inc.