Messages in this thread | | | Subject | Re: clocksource_watchdog causing scheduling of timers every second (was [v13] support "task_isolation" mode) | From | Chris Metcalf <> | Date | Wed, 27 Jul 2016 13:06:08 -0400 |
| |
On 7/27/2016 11:31 AM, Christoph Lameter wrote: > Ok here is a possible patch that explicitly checks for housekeeping cpus: > > Subject: clocksource: Do not schedule watchdog on isolated or NOHZ cpus > > watchdog checks can only run on housekeeping capable cpus. Otherwise > we will be generating noise that we would like to avoid on the isolated > processors. > > Signed-off-by: Christoph Lameter <cl@linux.com> > > Index: linux/kernel/time/clocksource.c > =================================================================== > --- linux.orig/kernel/time/clocksource.c 2016-07-27 08:41:17.109862517 -0500 > +++ linux/kernel/time/clocksource.c 2016-07-27 10:28:31.172447732 -0500 > @@ -269,9 +269,12 @@ static void clocksource_watchdog(unsigne > * Cycle through CPUs to check if the CPUs stay synchronized > * to each other. > */ > - next_cpu = cpumask_next(raw_smp_processor_id(), cpu_online_mask); > - if (next_cpu >= nr_cpu_ids) > - next_cpu = cpumask_first(cpu_online_mask); > + do { > + next_cpu = cpumask_next(raw_smp_processor_id(), cpu_online_mask); > + if (next_cpu >= nr_cpu_ids) > + next_cpu = cpumask_first(cpu_online_mask); > + } while (!is_housekeeping_cpu(next_cpu)); > + > watchdog_timer.expires += WATCHDOG_INTERVAL; > add_timer_on(&watchdog_timer, next_cpu); > out:
How about using cpumask_next_and(raw_smp_processor_id(), cpu_online_mask, housekeeping_cpumask()), likewise cpumask_first_and()? Does that work?
Note that you should also cpumask_first_and() in clocksource_start_watchdog(), just to be complete.
Hopefully the init code runs after tick_init(). It seems like that's probably true.
-- Chris Metcalf, Mellanox Technologies http://www.mellanox.com
| |