Re: [PATCH 1/4] tick/sched: Forward timer even in nohz mode

From: Frederic Weisbecker
Date: Mon Jan 06 2020 - 17:18:55 EST


On Mon, Dec 16, 2019 at 06:22:22PM -0500, Scott Wood wrote:
> Currently when exiting nohz, the expiry will be forwarded as if we
> had just run the timer. If we re-enter nohz before this new expiry,
> and exit after, this forwarding will happen again. If this load pattern
> recurs the tick can be indefinitely postponed.

I must be missing something but I don't see why that would be a problem.
Indeed the tick can be indefinitely postponed but that's as long as it's
not needed. As soon as it's needed (timer callback expired, RCU, ...), the
tick will be retained and it will eventually fire.

> @@ -642,9 +642,6 @@ static void tick_nohz_restart(struct tick_sched *ts, ktime_t now)
> hrtimer_cancel(&ts->sched_timer);
> hrtimer_set_expires(&ts->sched_timer, ts->last_tick);
>
> - /* Forward the time to expire in the future */
> - hrtimer_forward(&ts->sched_timer, now, tick_period);
> -

By doing that, you may program a past tick and thus add a useless interrupt
at each idle exit.

Thanks.