Hi Wanpeng, On 03/27/2015 12:55 PM, 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 <sri...@linux.vnet.ibm.com> > Signed-off-by: Wanpeng Li <wanpeng...@linux.intel.com> > --- > 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; > > for_each_cpu(balance_cpu, nohz.idle_cpus_mask) {
If need_resched() becomes true between this point and the test within the 'for' loop, you will end up with the original problem again. So the patch does not completely solve the said problem. Besides, are we really going to gain measurable performance with this patch? Regards Preeti U Murthy > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/