On Tue, Jul 22, 2014 at 02:21:21AM -0400, Rik van Riel wrote: > Currently rebalance_domains will happily update sd->last_balance > even if should_we_balance() decides that this CPU should not do > any load balancing for the sd. > > This can prevent the CPU that should load balance for the sd from > doing load balancing, which can delay active balancing essentially > forever. > > The solution is to only update sd->last_balance when load_balance() > actually did something. > > Signed-off-by: Rik van Riel <[email protected]> > --- > kernel/sched/fair.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 45943b2..4f7fee2 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -7187,7 +7187,9 @@ static void rebalance_domains(struct rq *rq, enum > cpu_idle_type idle) > */ > idle = idle_cpu(cpu) ? CPU_IDLE : CPU_NOT_IDLE; > } > - sd->last_balance = jiffies; > + /* Only update if we actually balanced. */ > + if (continue_balancing) > + sd->last_balance = jiffies; > interval = get_sd_balance_interval(sd, idle != > CPU_IDLE); > } > if (need_serialize)
Did you actually see any difference with this patch? The reason I'm asking is that the sched_domains are per cpu, so the above assignment is only visible to that particular cpu, not other cpus. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

