On Wed, Feb 16, 2022 at 02:34:12PM +0000, Aaron Tomlin wrote: > On Thu 2022-02-03 17:22 -0500, Phil Auld wrote: > > As I said earlier, I don't think you want to call quiet_vmstat() > > unconditionally. And I don't think this will catch the cases you are > > trying to fix. Once the tick is stopped tick_nohz_stop_tick should not be > > getting called again until it's been restarted. > > Phil, > > Sorry about the delay. If I understand correctly, I see a scenario by which > tick_nohz_stop_tick() can be called on transition/or exit from idle (e.g. > default_idle_call()): > > 1. The idle/or scheduling-clock was previously > stopped > > 2. It is considered safe for the scheduling-clock > tick to remain "stopped"/or omitted; no need to > reprogram and enable a periodic tick > (e.g. no queued/or expired pending timer) > > ... > do_idle > cpuidle_idle_call > { > > ... > > .-- default_idle_call > | arch_cpu_idle > | goto exit_idle > | > | exit_idle: > | __current_set_polling() > | > | } > | tick_nohz_idle_exit() > | { > | > | tick_stopped = ts->tick_stopped > | > | if (tick_stopped) > | tick_nohz_idle_update_tick(ts, now) > | if (tick_nohz_full_cpu(smp_processor_id())) > | __tick_nohz_full_update_tick(ts, now) > | { > | int cpu = smp_processor_id() > | > | if (can_stop_full_tick(cpu, ts)) > | tick_nohz_stop_sched_tick(ts, cpu) > | if (tick_nohz_next_event(ts, cpu)) > '-- tick_nohz_stop_tick(ts, cpu) > } > } > > If I understand correctly, __tick_nohz_full_update_tick() can return with > no changes to the current tick (e.g. expire time == KTIME_MAX), no? Hmm, but does it matter? The issue seem to be that we can enter in idle loop without flushing vmstat. Or am I missing something else? Thanks. > > > Kind regards, > > -- > Aaron Tomlin >