Re: vmstat: On demand vmstat workers V5

From: Christoph Lameter
Date: Wed May 28 2014 - 12:20:01 EST


On Wed, 28 May 2014, Frederic Weisbecker wrote:

> On Mon, May 12, 2014 at 01:18:10PM -0500, Christoph Lameter wrote:
> > #ifdef CONFIG_SMP
> > static DEFINE_PER_CPU(struct delayed_work, vmstat_work);
> > int sysctl_stat_interval __read_mostly = HZ;
> > +static DECLARE_BITMAP(cpu_stat_off_bits, CONFIG_NR_CPUS) __read_mostly;
> > +const struct cpumask *const cpu_stat_off = to_cpumask(cpu_stat_off_bits);
> > +EXPORT_SYMBOL(cpu_stat_off);
>
> Is there no way to make it a cpumask_var_t, and allocate it from
> start_shepherd_timer()?
>
> This should really take less space overall.

This was taken from the way things work with the other cpumasks in
linux/kernel/cpu.c. Its compatible with the way done there and allows
also the write protection of the cpumask outside of vmstat.c

> > + schedule_delayed_work(this_cpu_ptr(&vmstat_work),
> > + __round_jiffies_relative(sysctl_stat_interval,
> > + HOUSEKEEPING_CPU));
>
> Maybe you can just make the shepherd work unbound and let bind it from userspace
> once we have the workqueue user affinity patchset in.

Yes that is what V5 should have done. Looks like the final version was not
posted. Sigh. The correct patch follows this message and it no longer uses
HOUSEKEEPING_CPU.


> OTOH, it means you need to have a vmstat_update work on the housekeeping CPU as well.

Well the vnstat_udpate may not be needed on the processor where the
shepherd runs so it may save something.