Re: [PATCH] sched/fair: fix update the nohz.next_balance even if we haven't done any load balance

From: Preeti U Murthy
Date: Fri Mar 27 2015 - 12:58:13 EST


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 <srikar@xxxxxxxxxxxxxxxxxx>
> Signed-off-by: Wanpeng Li <wanpeng.li@xxxxxxxxxxxxxxx>
> ---
> 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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/