Quoting removal commit af5ab277ded04bd9bc6b048c5a2f0e7d70ef0867 Historically, Linux has tried to make the regular timer tick on the various CPUs not happen at the same time, to avoid contention on xtime_lock. Nowadays, with the tickless kernel, this contention no longer happens since time keeping and updating are done differently. In addition, this skew is actually hurting power consumption in a measurable way on many-core systems. End quote Contention remains a problem if NO_HZ is either not configured, or is nohz=off disabled due to workload constraints. The RT kernel running nohz=off was measured to be using > 1.4% CPU just ticking 64 CPUs, with tick perturbation reaching ~80us. For loads where measured (>100us) NO_HZ latencies are intolerable, a must have. Signed-off-by: Mike Galbraith <efault@xxxxxx> Cc: Arjan van de Ven <arjan@xxxxxxxxxxxxxxx> --- kernel/time/tick-sched.c | 9 +++++++++ 1 file changed, 9 insertions(+) --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -689,6 +689,7 @@ static inline void tick_check_nohz(int c static inline void tick_nohz_switch_to_nohz(void) { } static inline void tick_check_nohz(int cpu) { } +#define tick_nohz_enabled 0 #endif /* NO_HZ */ @@ -777,6 +778,14 @@ void tick_setup_sched_timer(void) /* Get the next period (per cpu) */ hrtimer_set_expires(&ts->sched_timer, tick_init_jiffy_update()); + /* Offset the tick when NO_HZ is configured out or boot disabled */ + if (!tick_nohz_enabled) { + u64 offset = ktime_to_ns(tick_period) >> 1; + do_div(offset, num_possible_cpus()); + offset *= smp_processor_id(); + hrtimer_add_expires_ns(&ts->sched_timer, offset); + } + for (;;) { hrtimer_forward(&ts->sched_timer, now, tick_period); hrtimer_start_expires(&ts->sched_timer, -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html