Messages in this thread | | | Subject | Re: fast path cycle muncher (vmstat: make vmstat_updater deferrable again and shut down on idle) | From | Mike Galbraith <> | Date | Wed, 27 Jan 2016 04:12:27 +0100 |
| |
Good morning,
On Tue, 2016-01-26 at 13:20 -0600, Christoph Lameter wrote: > On Tue, 26 Jan 2016, Mike Galbraith wrote: > > > > The system going idle is a fastpath. Mind boogling. > > > > Hohum, noted. Now what about those cycles, and the sleeping lock you > > injected for -rt? > > Since we (the NOHZ people) care mostly about NOHZ then lets restrict > that to the NOHZ mode. Then it should not affect your load.
Tons of folks do have NO_HZ enabled (including me). Isn't there a spot somewhere in NO_HZ_FULL code where it can take up residence? (one with a tad lower maximum call frequency would be good, a nohz_full cpu isn't necessarily being used for pure compute exclusively)
> Subject: Move quiet_vmstat() to NOHZ code > > quiet_vmstat() seems to cause regressions for some load because > the cpu going idle is a "fastpath". Mind boogling. Strange claim. > If the system goes idle then it has nothing to do after all > > But anyways if we shift the quiet_vmstat() into the NOHZ logic > when it stops the tick then it will only affect those cores that > are setup for NOHZ mode. That is where we want this processing > after all to ensure that the OS keeps itself off those cores. > > Signed-off-by: Christoph Lameter <cl@linux.com> > > > Index: linux/kernel/sched/idle.c > =================================================================== > --- linux.orig/kernel/sched/idle.c > +++ linux/kernel/sched/idle.c > @@ -213,7 +213,6 @@ static void cpu_idle_loop(void) > */ > > __current_set_polling(); > - quiet_vmstat(); > tick_nohz_idle_enter(); > > while (!need_resched()) { > Index: linux/kernel/time/tick-sched.c > =================================================================== > --- linux.orig/kernel/time/tick-sched.c > +++ linux/kernel/time/tick-sched.c > @@ -811,6 +811,7 @@ static void __tick_nohz_idle_enter(struc > ts->idle_calls++; > > expires = tick_nohz_stop_sched_tick(ts, now, cpu); > + quiet_vmstat(); > if (expires.tv64 > 0LL) { > ts->idle_sleeps++; > ts->idle_expires = expires;
| |