diff mbox

[v2,03/13] sched/fair: Optimize find_idlest_cpu() when there is no choice

Message ID 1466615004-3503-4-git-send-email-morten.rasmussen@arm.com
State Superseded
Headers show

Commit Message

Morten Rasmussen June 22, 2016, 5:03 p.m. UTC
In the current find_idlest_group()/find_idlest_cpu() search we end up
calling find_idlest_cpu() in a sched_group containing only one cpu in
the end. Checking idle-states becomes pointless when there is no
alternative, so bail out instead.

cc: Ingo Molnar <mingo@redhat.com>
cc: Peter Zijlstra <peterz@infradead.org>

Signed-off-by: Morten Rasmussen <morten.rasmussen@arm.com>

---
 kernel/sched/fair.c | 4 ++++
 1 file changed, 4 insertions(+)

-- 
1.9.1

Comments

Vincent Guittot July 13, 2016, 12:20 p.m. UTC | #1
On 22 June 2016 at 19:03, Morten Rasmussen <morten.rasmussen@arm.com> wrote:
> In the current find_idlest_group()/find_idlest_cpu() search we end up

> calling find_idlest_cpu() in a sched_group containing only one cpu in

> the end. Checking idle-states becomes pointless when there is no

> alternative, so bail out instead.

>

> cc: Ingo Molnar <mingo@redhat.com>

> cc: Peter Zijlstra <peterz@infradead.org>

>

> Signed-off-by: Morten Rasmussen <morten.rasmussen@arm.com>

> ---

>  kernel/sched/fair.c | 4 ++++

>  1 file changed, 4 insertions(+)

>

> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c

> index eec8e29104f9..216db302e87d 100644

> --- a/kernel/sched/fair.c

> +++ b/kernel/sched/fair.c

> @@ -5123,6 +5123,10 @@ find_idlest_cpu(struct sched_group *group, struct task_struct *p, int this_cpu)

>         int shallowest_idle_cpu = -1;

>         int i;

>

> +       /* Check if we have any choice */

> +       if (group->group_weight == 1)

> +               return cpumask_first(sched_group_cpus(group));

> +

>         /* Traverse only the allowed CPUs */

>         for_each_cpu_and(i, sched_group_cpus(group), tsk_cpus_allowed(p)) {

>                 if (idle_cpu(i)) {


FWIW, you can add my Acked-by: : Vincent Guittot <vincent.guittot@linaro.org>

> --

> 1.9.1

>
diff mbox

Patch

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index eec8e29104f9..216db302e87d 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5123,6 +5123,10 @@  find_idlest_cpu(struct sched_group *group, struct task_struct *p, int this_cpu)
 	int shallowest_idle_cpu = -1;
 	int i;
 
+	/* Check if we have any choice */
+	if (group->group_weight == 1)
+		return cpumask_first(sched_group_cpus(group));
+
 	/* Traverse only the allowed CPUs */
 	for_each_cpu_and(i, sched_group_cpus(group), tsk_cpus_allowed(p)) {
 		if (idle_cpu(i)) {