Re: fast path cycle muncher (vmstat: make vmstat_updater deferrable again and shut down on idle)

From: Christoph Lameter
Date: Tue Jan 26 2016 - 14:20:25 EST


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.


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@xxxxxxxxx>


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;