From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761161AbZD3IWu (ORCPT ); Thu, 30 Apr 2009 04:22:50 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754615AbZD3IW3 (ORCPT ); Thu, 30 Apr 2009 04:22:29 -0400 Received: from e28smtp01.in.ibm.com ([59.145.155.1]:40805 "EHLO e28smtp01.in.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754234AbZD3IWZ (ORCPT ); Thu, 30 Apr 2009 04:22:25 -0400 Date: Thu, 30 Apr 2009 11:48:06 +0530 From: Balbir Singh To: KOSAKI Motohiro Cc: LKML , Bharata B Rao , Balaji Rao , Dhaval Giani , KAMEZAWA Hiroyuki , Peter Zijlstra , Ingo Molnar , Martin Schwidefsky Subject: Re: [PATCH v2] cpuacct: VIRT_CPU_ACCOUNTING don't prevent percpu cputime count Message-ID: <20090430061806.GC4430@balbir.in.ibm.com> Reply-To: balbir@linux.vnet.ibm.com References: <20090430151008.D21C.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <20090430151008.D21C.A69D9226@jp.fujitsu.com> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org * KOSAKI Motohiro [2009-04-30 15:11:15]: > > Changelog: > since v1 > - use percpu_counter_sum() instead percpu_counter_read() > > > ------------------------------------- > Subject: [PATCH v2] cpuacct: VIRT_CPU_ACCOUNTING don't prevent percpu cputime count > > cpuacct_update_stats() is called at every tick updating. and it use percpu_counter > for avoiding performance degression. > > For archs which define VIRT_CPU_ACCOUNTING, every tick would result > in >1000 units of cputime updates and since this is much much greater > than percpu_batch_counter, we end up taking spinlock on every tick. > > This patch change batch rule. now, any cpu can store "percpu_counter_bach * jiffies" > cputime in per-cpu cache. > it mean this patch don't have behavior change if VIRT_CPU_ACCOUNTING=n. > > Cc: Bharata B Rao > Cc: Balaji Rao > Cc: Dhaval Giani > Cc: KAMEZAWA Hiroyuki > Cc: Peter Zijlstra > Cc: Balbir Singh > Cc: Ingo Molnar > Cc: Martin Schwidefsky > Signed-off-by: KOSAKI Motohiro > --- > kernel/sched.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > Index: b/kernel/sched.c > =================================================================== > --- a/kernel/sched.c 2009-04-30 11:37:47.000000000 +0900 > +++ b/kernel/sched.c 2009-04-30 14:17:00.000000000 +0900 > @@ -10221,6 +10221,7 @@ struct cpuacct { > }; > > struct cgroup_subsys cpuacct_subsys; > +static s32 cpuacct_batch; > > /* return cpu accounting group corresponding to this container */ > static inline struct cpuacct *cgroup_ca(struct cgroup *cgrp) > @@ -10250,6 +10251,9 @@ static struct cgroup_subsys_state *cpuac > if (!ca->cpuusage) > goto out_free_ca; > > + if (!cpuacct_batch) > + cpuacct_batch = jiffies_to_cputime(percpu_counter_batch); > + > for (i = 0; i < CPUACCT_STAT_NSTATS; i++) > if (percpu_counter_init(&ca->cpustat[i], 0)) > goto out_free_counters; > @@ -10376,7 +10380,7 @@ static int cpuacct_stats_show(struct cgr > 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); > } > @@ -10446,7 +10450,7 @@ static void cpuacct_update_stats(struct > ca = task_ca(tsk); > > do { > - percpu_counter_add(&ca->cpustat[idx], val); > + __percpu_counter_add(&ca->cpustat[idx], val, cpuacct_batch); > ca = ca->parent; > } while (ca); > rcu_read_unlock(); > > What do the test results look like with this? I'll see if I can find some time to test this patch. On a patch read level this seems much better to me, Peter? Acked-by: Balbir Singh -- Balbir