From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753489AbbC3Szh (ORCPT ); Mon, 30 Mar 2015 14:55:37 -0400 Received: from g9t5008.houston.hp.com ([15.240.92.66]:35805 "EHLO g9t5008.houston.hp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753073AbbC3Szf (ORCPT ); Mon, 30 Mar 2015 14:55:35 -0400 Message-ID: <1427741729.5694.24.camel@j-VirtualBox> Subject: sched: Improve load balancing in the presence of idle CPUs From: Jason Low To: Preeti U Murthy , peterz@infradead.org, mingo@kernel.org, Daniel Lezcano Cc: riel@redhat.com, daniel.lezcano@linaro.org, vincent.guittot@linaro.org, srikar@linux.vnet.ibm.com, pjt@google.com, benh@kernel.crashing.org, efault@gmx.de, linux-kernel@vger.kernel.org, iamjoonsoo.kim@lge.com, svaidy@linux.vnet.ibm.com, tim.c.chen@linux.intel.com, morten.rasmussen@arm.com, jason.low2@hp.com Date: Mon, 30 Mar 2015 11:55:29 -0700 Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 Content-Transfer-Encoding: 7bit Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Preeti, I noticed that another commit 4a725627f21d converted the check in nohz_kick_needed() from idle_cpu() to rq->idle_balance, causing a potentially outdated value to be used if this cpu is able to pull tasks using rebalance_domains(), and nohz_kick_needed() directly returning false. Would this patch also help address some of the issue you are seeing? Signed-off-by: Jason Low --- kernel/sched/fair.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index fdae26e..ba8ec1a 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -7644,7 +7644,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) * balancing owner will pick it up. */ if (need_resched()) - break; + goto end; rq = cpu_rq(balance_cpu); @@ -7687,7 +7687,7 @@ static inline bool nohz_kick_needed(struct rq *rq) int nr_busy, cpu = rq->cpu; bool kick = false; - if (unlikely(rq->idle_balance)) + if (unlikely(idle_cpu(cpu))) return false; /* -- 1.7.2.5