Re: [tip:sched/core] sched: cpuacct: Use bigger percpu counter batch values for stats counters

Peter Zijlstra
2009-08-20T05:53:00Z

On Thu, 2009-08-20 at 10:56 +0530, Balbir Singh wrote:

> Looks good overall, why not keep the batch size conditional on
> CONFIG_VIRT_CPU_ACCOUNTING? I'd still like to stick with
> percpu_counter_read() on the read side because My concern is that a
> bad user space application can read cpuacct.stat and bring the kernel
> to its knees.

Agreed, the first hunk is dangerous, on the second hunk, I'm not sure
about the INT_MAX thing, that's a 4s gap per cpu, that might be a tad
much.

> > > Signed-off-by: Anton Blanchard <anton@samba.org>
> > > ---
> > >
> > > Index: linux.trees.git/kernel/sched.c
> > > ===================================================================
> > > --- linux.trees.git.orig/kernel/sched.c 2009-07-16 10:11:02.000000000 +1000
> > > +++ linux.trees.git/kernel/sched.c 2009-07-16 10:16:41.000000000 +1000
> > > @@ -10551,7 +10551,7 @@
> > > int i;
> > >
> > > for (i = 0; i < CPUACCT_STAT_NSTATS; i++) {
> > > - s64 val = percpu_counter_read(&ca->cpustat[i]);
> > > + s64 val = percpu_counter_sum(&ca->cpustat[i]);
> > > val = cputime64_to_clock_t(val);
> > > cb->fill(cb, cpuacct_stat_desc[i], val);
> > > }
> > > @@ -10621,7 +10621,7 @@
> > > ca = task_ca(tsk);
> > >
> > > do {
> > > - percpu_counter_add(&ca->cpustat[idx], val);
> > > + __percpu_counter_add(&ca->cpustat[idx], val, INT_MAX);
> > > ca = ca->parent;
> > > } while (ca);
> > > rcu_read_unlock();
>