From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753253AbbC0H6i (ORCPT ); Fri, 27 Mar 2015 03:58:38 -0400 Received: from g9t5008.houston.hp.com ([15.240.92.66]:54659 "EHLO g9t5008.houston.hp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753061AbbC0H6g (ORCPT ); Fri, 27 Mar 2015 03:58:36 -0400 Message-ID: <1427443102.2788.44.camel@j-VirtualBox> Subject: Re: [PATCH] sched/fair: fix update the nohz.next_balance even if we haven't done any load balance From: Jason Low To: Wanpeng Li Cc: Ingo Molnar , Peter Zijlstra , Srikar Dronamraju , Preeti U Murthy , linux-kernel@vger.kernel.org, jason.low2@hp.com Date: Fri, 27 Mar 2015 00:58:22 -0700 In-Reply-To: <1427441100-6892-1-git-send-email-wanpeng.li@linux.intel.com> References: <1427441100-6892-1-git-send-email-wanpeng.li@linux.intel.com> 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 On Fri, 2015-03-27 at 15:25 +0800, Wanpeng Li wrote: > As Srikar pointed out (https://lkml.org/lkml/2015/3/27/26): > > | With the current code when the ilb cpus are not free: > | - We would be updating the nohz.next_balance even through we havent done > | any load balance. > | - We might iterate thro the nohz.idle_cpus_mask()s to find balance_cpus. > > This patch fix it by adding need_resched check with the idle check, and > keep the need_resched check in for loop to catch ilb get busy. > > Suggested-by: Srikar Dronamraju > Signed-off-by: Wanpeng Li > --- > kernel/sched/fair.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 0576ce0..1d3e17f 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -7639,7 +7639,8 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) > int balance_cpu; > > if (idle != CPU_IDLE || > - !test_bit(NOHZ_BALANCE_KICK, nohz_flags(this_cpu))) > + !test_bit(NOHZ_BALANCE_KICK, nohz_flags(this_cpu)) || > + need_resched()) > goto end; How about having: if (idle != CPU_IDLE || need_resched() || !test_bit(NOHZ_BALANCE_KICK, nohz_flags(this_cpu))) which wouldn't require adding a new line. Besides that: Reviewed-by: Jason Low