* [PATCH v3] sched/fair: Fix the decision for load balance
@ 2023-10-31 13:38 Keisuke Nishimura
2023-10-31 15:39 ` Peter Zijlstra
2023-11-14 21:57 ` [tip: sched/urgent] " tip-bot2 for Keisuke Nishimura
0 siblings, 2 replies; 3+ messages in thread
From: Keisuke Nishimura @ 2023-10-31 13:38 UTC (permalink / raw)
To: Ingo Molnar, Peter Zijlstra, Vincent Guittot
Cc: linux-kernel, Chen Yu, Shrikanth Hegde, Dietmar Eggemann,
Mel Gorman, Valentin Schneider, Julia Lawall, Keisuke Nishimura
should_we_balance is called for the decision to do load-balancing.
When sched ticks invoke this function, only one CPU should return
true. However, in the current code, two CPUs can return true. The
following situation, where b means busy and i means idle, is an
example, because CPU 0 and CPU 2 return true.
[0, 1] [2, 3]
b b i b
This fix checks if there exists an idle CPU with busy sibling(s)
after looking for a CPU on an idle core. If some idle CPUs with busy
siblings are found, just the first one should do load-balancing.
Fixes: b1bfeab9b002 ("sched/fair: Consider the idle state of the whole core for load balance")
Signed-off-by: Keisuke Nishimura <keisuke.nishimura@inria.fr>
Reviewed-by: Chen Yu <yu.c.chen@intel.com>
Reviewed-by: Shrikanth Hegde <sshegde@linux.vnet.ibm.com>
Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
---
kernel/sched/fair.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 2048138ce54b..921f4f65adef 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -11079,12 +11079,16 @@ static int should_we_balance(struct lb_env *env)
continue;
}
- /* Are we the first idle CPU? */
+ /*
+ * Are we the first idle core in a non-SMT domain or higher,
+ * or the first idle CPU in a SMT domain?
+ */
return cpu == env->dst_cpu;
}
- if (idle_smt == env->dst_cpu)
- return true;
+ /* Are we the first idle CPU with busy siblings? */
+ if (idle_smt != -1)
+ return idle_smt == env->dst_cpu;
/* Are we the first CPU of this group ? */
return group_balance_cpu(sg) == env->dst_cpu;
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v3] sched/fair: Fix the decision for load balance
2023-10-31 13:38 [PATCH v3] sched/fair: Fix the decision for load balance Keisuke Nishimura
@ 2023-10-31 15:39 ` Peter Zijlstra
2023-11-14 21:57 ` [tip: sched/urgent] " tip-bot2 for Keisuke Nishimura
1 sibling, 0 replies; 3+ messages in thread
From: Peter Zijlstra @ 2023-10-31 15:39 UTC (permalink / raw)
To: Keisuke Nishimura
Cc: Ingo Molnar, Vincent Guittot, linux-kernel, Chen Yu,
Shrikanth Hegde, Dietmar Eggemann, Mel Gorman, Valentin Schneider,
Julia Lawall
On Tue, Oct 31, 2023 at 02:38:22PM +0100, Keisuke Nishimura wrote:
> should_we_balance is called for the decision to do load-balancing.
> When sched ticks invoke this function, only one CPU should return
> true. However, in the current code, two CPUs can return true. The
> following situation, where b means busy and i means idle, is an
> example, because CPU 0 and CPU 2 return true.
>
> [0, 1] [2, 3]
> b b i b
>
> This fix checks if there exists an idle CPU with busy sibling(s)
> after looking for a CPU on an idle core. If some idle CPUs with busy
> siblings are found, just the first one should do load-balancing.
>
> Fixes: b1bfeab9b002 ("sched/fair: Consider the idle state of the whole core for load balance")
> Signed-off-by: Keisuke Nishimura <keisuke.nishimura@inria.fr>
> Reviewed-by: Chen Yu <yu.c.chen@intel.com>
> Reviewed-by: Shrikanth Hegde <sshegde@linux.vnet.ibm.com>
> Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
I'll sit on this until after the merge window, but then I'll queue it
for sched/urgent.
Thanks!
^ permalink raw reply [flat|nested] 3+ messages in thread
* [tip: sched/urgent] sched/fair: Fix the decision for load balance
2023-10-31 13:38 [PATCH v3] sched/fair: Fix the decision for load balance Keisuke Nishimura
2023-10-31 15:39 ` Peter Zijlstra
@ 2023-11-14 21:57 ` tip-bot2 for Keisuke Nishimura
1 sibling, 0 replies; 3+ messages in thread
From: tip-bot2 for Keisuke Nishimura @ 2023-11-14 21:57 UTC (permalink / raw)
To: linux-tip-commits
Cc: Keisuke Nishimura, Peter Zijlstra (Intel), Chen Yu,
Shrikanth Hegde, Vincent Guittot, x86, linux-kernel
The following commit has been merged into the sched/urgent branch of tip:
Commit-ID: 6d7e4782bcf549221b4ccfffec2cf4d1a473f1a3
Gitweb: https://git.kernel.org/tip/6d7e4782bcf549221b4ccfffec2cf4d1a473f1a3
Author: Keisuke Nishimura <keisuke.nishimura@inria.fr>
AuthorDate: Tue, 31 Oct 2023 14:38:22 +01:00
Committer: Peter Zijlstra <peterz@infradead.org>
CommitterDate: Tue, 14 Nov 2023 22:27:01 +01:00
sched/fair: Fix the decision for load balance
should_we_balance is called for the decision to do load-balancing.
When sched ticks invoke this function, only one CPU should return
true. However, in the current code, two CPUs can return true. The
following situation, where b means busy and i means idle, is an
example, because CPU 0 and CPU 2 return true.
[0, 1] [2, 3]
b b i b
This fix checks if there exists an idle CPU with busy sibling(s)
after looking for a CPU on an idle core. If some idle CPUs with busy
siblings are found, just the first one should do load-balancing.
Fixes: b1bfeab9b002 ("sched/fair: Consider the idle state of the whole core for load balance")
Signed-off-by: Keisuke Nishimura <keisuke.nishimura@inria.fr>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Chen Yu <yu.c.chen@intel.com>
Reviewed-by: Shrikanth Hegde <sshegde@linux.vnet.ibm.com>
Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
Link: https://lkml.kernel.org/r/20231031133821.1570861-1-keisuke.nishimura@inria.fr
---
kernel/sched/fair.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 025d909..d7a3c63 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -11184,12 +11184,16 @@ static int should_we_balance(struct lb_env *env)
continue;
}
- /* Are we the first idle CPU? */
+ /*
+ * Are we the first idle core in a non-SMT domain or higher,
+ * or the first idle CPU in a SMT domain?
+ */
return cpu == env->dst_cpu;
}
- if (idle_smt == env->dst_cpu)
- return true;
+ /* Are we the first idle CPU with busy siblings? */
+ if (idle_smt != -1)
+ return idle_smt == env->dst_cpu;
/* Are we the first CPU of this group ? */
return group_balance_cpu(sg) == env->dst_cpu;
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-11-14 21:57 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-31 13:38 [PATCH v3] sched/fair: Fix the decision for load balance Keisuke Nishimura
2023-10-31 15:39 ` Peter Zijlstra
2023-11-14 21:57 ` [tip: sched/urgent] " tip-bot2 for Keisuke Nishimura
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.