Re: [patch 2/2] MM: allow per-cpu vmstat_threshold and vmstat_worker configuration
From: Christoph Lameter
Date: Fri May 12 2017 - 11:11:42 EST
On Fri, 12 May 2017, Marcelo Tosatti wrote:
> > A bit confused by this one. The vmstat worker is already disabled if there
> > are no updates. Also the patches by Chris Metcalf on data plane mode add a
> > prctl to quiet the vmstat workers.
> >
> > Why do we need more than this?
>
> If there are vmstat statistic updates on a given CPU, and you don't
> want intervention from the vmstat worker, you change the behaviour of
> stat data collection to directly write to the global structures (which
> disables the performance optimization of collecting data in per-cpu
> counters).
Hmmm.... Ok. That is going to be expensive if you do this for each
individual vmstat update.
> This way you can disable vmstat worker (because it causes undesired
> latencies), while allowing vmstatistics to function properly.
Best then to run the vmstat update mechanism when you leave kernel mode to
get all the updates in one go.
> The prctl from Chris Metcalf patchset allows one to disable vmstat
> worker per CPU? If so, they replace the functionality of the patch
> "[patch 3/3] MM: allow per-cpu vmstat_worker configuration"
> of the -v2 series of my patchset, and we can use it instead.
>
> Is it integrated already?
The data plane mode patches disables vmstat processing by updating the
vmstats immediately if necessary and switching off the kworker thread.
So the kworker wont be running until the next time statistics are checked
by the shepherd task from a remote cpu. If the counters have been updated
then the shepherd task will reenable the kworker. This is already merged
and has been working for a long time. Data plan mode has not been merged
yet but the infrastructure in vmstat.c is there because NOHZ needs it too.
See linux/vmstat.c:quiet_vmstat()
It would be easy to add a /proc file that allows the quieting of the
vmstat workers for a certain cpu. Just make it call the quiet_vmstat() on
the right cpu.
This will quiet vmstat down. The shepherd task will check the stats in 2
second intervals and will then reenable when necessasry.
Note that we already are updating the global structures directly if the
differential gets too high. Reducing the differential may get you what you
want.