lkml.org 
[lkml]   [2013]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH 8/8] sched: reset lb_env when redo in load_balance()
From
Date
On Thu, 2013-02-14 at 14:48 +0900, Joonsoo Kim wrote:
> Commit 88b8dac0 makes load_balance() consider other cpus in its group.
> So, now, When we redo in load_balance(), we should reset some fields of
> lb_env to ensure that load_balance() works for initial cpu, not for other
> cpus in its group. So correct it.
>
> Cc: Srivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>
> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 70631e8..25c798c 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -5014,14 +5014,20 @@ static int load_balance(int this_cpu, struct rq *this_rq,
>
> struct lb_env env = {
> .sd = sd,
> - .dst_cpu = this_cpu,
> - .dst_rq = this_rq,
> .dst_grpmask = dst_grp,
> .idle = idle,
> - .loop_break = sched_nr_migrate_break,
> .cpus = cpus,
> };
>
> + schedstat_inc(sd, lb_count[idle]);
> + cpumask_copy(cpus, cpu_active_mask);
> +
> +redo:
> + env.dst_cpu = this_cpu;
> + env.dst_rq = this_rq;
> + env.loop = 0;
> + env.loop_break = sched_nr_migrate_break;
> +
> /* For NEWLY_IDLE load_balancing, we don't need to consider
> * other cpus in our group */
> if (idle == CPU_NEWLY_IDLE) {

OK, so this is the case where we tried to balance !this_cpu and found
ALL_PINNED, right?

You can only get here in very weird cases where people love their
sched_setaffinity() waaaaay too much, do we care? Why not give up?

Also, looking at this, shouldn't we consider env->cpus in
can_migrate_task() where we compute new_dst_cpu?



\
 
 \ /
  Last update: 2013-03-19 17:01    [W:0.157 / U:1.776 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site