Messages in this thread | | | Date | Tue, 20 Oct 2015 15:47:51 -0700 | From | Yunhong Jiang <> | Subject | Re: [PATCH] timer: Lazily wakup nohz CPU when adding new timer. |
| |
On Sun, Oct 11, 2015 at 08:12:39PM +0200, Thomas Gleixner wrote: > On Mon, 28 Sep 2015, Yunhong Jiang wrote: > > static void internal_add_timer(struct tvec_base *base, struct timer_list *timer) > > { > > + bool kick_nohz = false; > > + > > /* Advance base->jiffies, if the base is empty */ > > if (!base->all_timers++) > > base->timer_jiffies = jiffies; > > @@ -424,9 +426,17 @@ static void internal_add_timer(struct tvec_base *base, struct timer_list *timer) > > */ > > if (!(timer->flags & TIMER_DEFERRABLE)) { > > if (!base->active_timers++ || > > - time_before(timer->expires, base->next_timer)) > > + time_before(timer->expires, base->next_timer)) { > > base->next_timer = timer->expires; > > - } > > + /* > > + * CPU in dynticks need reevaluate the timer wheel > > + * if newer timer added with next_timer updated. > > + */ > > + if (base->nohz_active) > > + kick_nohz = true; > > + } > > + } else if (base->nohz_active && tick_nohz_full_cpu(base->cpu)) > > + kick_nohz = true; > > Why do you want to kick the other cpu when a deferrable timer got added?
This is what happens in current implementation and this patch does not change the logic. According to the comments, it's to avoid race with idle_cpu(). Frankly speaking, I didn't get the idea of the race.
Viresh, do you have any hints?
Thanks --jyh
> > Thanks, > > tglx > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/
| |