* [PATCH v2] sched/fair: Optimize select_idle_core
@ 2019-12-06 17:24 Srikar Dronamraju
2020-01-22 13:55 ` Mel Gorman
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Srikar Dronamraju @ 2019-12-06 17:24 UTC (permalink / raw)
To: Ingo Molnar, Peter Zijlstra
Cc: LKML, Mel Gorman, Rik van Riel, Srikar Dronamraju,
Thomas Gleixner, Valentin Schneider, Vincent Guittot
Currently we loop through all threads of a core to evaluate if the core is
idle or not. This is unnecessary. If a thread of a core is not idle, skip
evaluating other threads of a core. Also while clearing the cpumask, bits
of all CPUs of a core can be cleared in one-shot.
Collecting ticks on a Power 9 SMT 8 system around select_idle_core
while running schbench shows us
(units are in ticks, hence lesser is better)
Without patch
N Min Max Median Avg Stddev
x 130 151 1083 284 322.72308 144.41494
With patch
N Min Max Median Avg Stddev Improvement
x 164 88 610 201 225.79268 106.78943 30.03%
Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
---
Changelog v1->v2:
Updated patch description with measurements made from a debug patch.
kernel/sched/fair.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 69a81a5709ff..b9d628128cfc 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5872,10 +5872,12 @@ static int select_idle_core(struct task_struct *p, struct sched_domain *sd, int
bool idle = true;
for_each_cpu(cpu, cpu_smt_mask(core)) {
- __cpumask_clear_cpu(cpu, cpus);
- if (!available_idle_cpu(cpu))
+ if (!available_idle_cpu(cpu)) {
idle = false;
+ break;
+ }
}
+ cpumask_andnot(cpus, cpus, cpu_smt_mask(core));
if (idle)
return core;
--
2.18.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH v2] sched/fair: Optimize select_idle_core
2019-12-06 17:24 [PATCH v2] sched/fair: Optimize select_idle_core Srikar Dronamraju
@ 2020-01-22 13:55 ` Mel Gorman
2020-01-22 14:22 ` Valentin Schneider
2020-01-24 13:32 ` Srikar Dronamraju
2020-01-29 11:32 ` [tip: sched/core] sched/fair: Optimize select_idle_core() tip-bot2 for Srikar Dronamraju
2 siblings, 1 reply; 5+ messages in thread
From: Mel Gorman @ 2020-01-22 13:55 UTC (permalink / raw)
To: Srikar Dronamraju
Cc: Ingo Molnar, Peter Zijlstra, LKML, Rik van Riel, Thomas Gleixner,
Valentin Schneider, Vincent Guittot
On Fri, Dec 06, 2019 at 10:54:22PM +0530, Srikar Dronamraju wrote:
> Currently we loop through all threads of a core to evaluate if the core is
> idle or not. This is unnecessary. If a thread of a core is not idle, skip
> evaluating other threads of a core. Also while clearing the cpumask, bits
> of all CPUs of a core can be cleared in one-shot.
>
> Collecting ticks on a Power 9 SMT 8 system around select_idle_core
> while running schbench shows us
>
> (units are in ticks, hence lesser is better)
> Without patch
> N Min Max Median Avg Stddev
> x 130 151 1083 284 322.72308 144.41494
>
>
> With patch
> N Min Max Median Avg Stddev Improvement
> x 164 88 610 201 225.79268 106.78943 30.03%
>
>
> Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
> Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
> Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Acked-by: Mel Gorman <mgorman@techsingularity.net>
I'm a bit surprised to not see this in linux-next or tip. Did this get
rejected or did it accidentally get overlooked because the subject is so
similar to 60588bfa223f ("sched/fair: Optimize select_idle_cpu") ?
--
Mel Gorman
SUSE Labs
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH v2] sched/fair: Optimize select_idle_core
2020-01-22 13:55 ` Mel Gorman
@ 2020-01-22 14:22 ` Valentin Schneider
0 siblings, 0 replies; 5+ messages in thread
From: Valentin Schneider @ 2020-01-22 14:22 UTC (permalink / raw)
To: Mel Gorman, Srikar Dronamraju
Cc: Ingo Molnar, Peter Zijlstra, LKML, Rik van Riel, Thomas Gleixner,
Vincent Guittot
On 22/01/2020 13:55, Mel Gorman wrote:
>
> Acked-by: Mel Gorman <mgorman@techsingularity.net>
>
> I'm a bit surprised to not see this in linux-next or tip. Did this get
> rejected or did it accidentally get overlooked because the subject is so
> similar to 60588bfa223f ("sched/fair: Optimize select_idle_cpu") ?
>
Most likely the latter; I also had completely forgotten about it and had to
retrace where and when I reviewed that...
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] sched/fair: Optimize select_idle_core
2019-12-06 17:24 [PATCH v2] sched/fair: Optimize select_idle_core Srikar Dronamraju
2020-01-22 13:55 ` Mel Gorman
@ 2020-01-24 13:32 ` Srikar Dronamraju
2020-01-29 11:32 ` [tip: sched/core] sched/fair: Optimize select_idle_core() tip-bot2 for Srikar Dronamraju
2 siblings, 0 replies; 5+ messages in thread
From: Srikar Dronamraju @ 2020-01-24 13:32 UTC (permalink / raw)
To: Ingo Molnar, Peter Zijlstra
Cc: LKML, Mel Gorman, Rik van Riel, Thomas Gleixner,
Valentin Schneider, Vincent Guittot
Hey Peter, Ingo,
* Srikar Dronamraju <srikar@linux.vnet.ibm.com> [2019-12-06 22:54:22]:
> Currently we loop through all threads of a core to evaluate if the core is
> idle or not. This is unnecessary. If a thread of a core is not idle, skip
> evaluating other threads of a core. Also while clearing the cpumask, bits
> of all CPUs of a core can be cleared in one-shot.
>
> Collecting ticks on a Power 9 SMT 8 system around select_idle_core
> while running schbench shows us
>
> (units are in ticks, hence lesser is better)
> Without patch
> N Min Max Median Avg Stddev
> x 130 151 1083 284 322.72308 144.41494
>
>
> With patch
> N Min Max Median Avg Stddev Improvement
> x 164 88 610 201 225.79268 106.78943 30.03%
>
>
> Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
> Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
> Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
> ---
> Changelog v1->v2:
> Updated patch description with measurements made from a debug patch.
>
> kernel/sched/fair.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
Do you have any comments or improvements to be done for this patch?
--
Thanks and Regards
Srikar Dronamraju
^ permalink raw reply [flat|nested] 5+ messages in thread
* [tip: sched/core] sched/fair: Optimize select_idle_core()
2019-12-06 17:24 [PATCH v2] sched/fair: Optimize select_idle_core Srikar Dronamraju
2020-01-22 13:55 ` Mel Gorman
2020-01-24 13:32 ` Srikar Dronamraju
@ 2020-01-29 11:32 ` tip-bot2 for Srikar Dronamraju
2 siblings, 0 replies; 5+ messages in thread
From: tip-bot2 for Srikar Dronamraju @ 2020-01-29 11:32 UTC (permalink / raw)
To: linux-tip-commits
Cc: Srikar Dronamraju, Peter Zijlstra (Intel), Ingo Molnar,
Valentin Schneider, Vincent Guittot, Mel Gorman, x86, LKML
The following commit has been merged into the sched/core branch of tip:
Commit-ID: bec2860a2bd6cd38ea34434d04f4033eb32f0f31
Gitweb: https://git.kernel.org/tip/bec2860a2bd6cd38ea34434d04f4033eb32f0f31
Author: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
AuthorDate: Fri, 06 Dec 2019 22:54:22 +05:30
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Tue, 28 Jan 2020 21:37:08 +01:00
sched/fair: Optimize select_idle_core()
Currently we loop through all threads of a core to evaluate if the core is
idle or not. This is unnecessary. If a thread of a core is not idle, skip
evaluating other threads of a core. Also while clearing the cpumask, bits
of all CPUs of a core can be cleared in one-shot.
Collecting ticks on a Power 9 SMT 8 system around select_idle_core
while running schbench shows us
(units are in ticks, hence lesser is better)
Without patch
N Min Max Median Avg Stddev
x 130 151 1083 284 322.72308 144.41494
With patch
N Min Max Median Avg Stddev Improvement
x 164 88 610 201 225.79268 106.78943 30.03%
Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
Acked-by: Mel Gorman <mgorman@techsingularity.net>
Link: https://lkml.kernel.org/r/20191206172422.6578-1-srikar@linux.vnet.ibm.com
---
kernel/sched/fair.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 25dffc0..1a0ce83 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5787,10 +5787,12 @@ static int select_idle_core(struct task_struct *p, struct sched_domain *sd, int
bool idle = true;
for_each_cpu(cpu, cpu_smt_mask(core)) {
- __cpumask_clear_cpu(cpu, cpus);
- if (!available_idle_cpu(cpu))
+ if (!available_idle_cpu(cpu)) {
idle = false;
+ break;
+ }
}
+ cpumask_andnot(cpus, cpus, cpu_smt_mask(core));
if (idle)
return core;
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-01-29 11:33 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-06 17:24 [PATCH v2] sched/fair: Optimize select_idle_core Srikar Dronamraju
2020-01-22 13:55 ` Mel Gorman
2020-01-22 14:22 ` Valentin Schneider
2020-01-24 13:32 ` Srikar Dronamraju
2020-01-29 11:32 ` [tip: sched/core] sched/fair: Optimize select_idle_core() tip-bot2 for Srikar Dronamraju
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.