linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch] export percpu cpuacct cgroup stats
@ 2008-12-04  4:48 Ken Chen
  2008-12-04  5:34 ` Li Zefan
  0 siblings, 1 reply; 14+ messages in thread
From: Ken Chen @ 2008-12-04  4:48 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Linux Kernel Mailing List

This patch export per-cpu CPU cycle usage for a given cpuacct cgroup.
There is a need for a user space monitor daemon to track group CPU
usage on per-cpu base.  It is also useful for monitor CFS load
balancer behavior by tracking per CPU group usage.


Signed-off-by: Ken Chen <kenchen@google.com>

diff --git a/kernel/sched.c b/kernel/sched.c
index b7480fb..cd78948 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -9345,12 +9345,34 @@ out:
 	return err;
 }

+static int cpuacct_percpu_seq_read(struct cgroup *cgroup, struct cftype *cft,
+				   struct seq_file *m)
+{
+	struct cpuacct *ca = cgroup_ca(cgroup);
+	u64 percpu;
+	int i;
+
+	for_each_possible_cpu(i) {
+		spin_lock_irq(&cpu_rq(i)->lock);
+		percpu = *percpu_ptr(ca->cpuusage, i);
+		spin_unlock_irq(&cpu_rq(i)->lock);
+		seq_printf(m, "%lld ", percpu);
+	}
+	seq_printf(m, "\n");
+	return 0;
+}
+
 static struct cftype files[] = {
 	{
 		.name = "usage",
 		.read_u64 = cpuusage_read,
 		.write_u64 = cpuusage_write,
 	},
+	{
+		.name = "percpu",
+		.read_seq_string = cpuacct_percpu_seq_read,
+	},
+
 };

 static int cpuacct_populate(struct cgroup_subsys *ss, struct cgroup *cgrp)

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-04  4:48 [patch] export percpu cpuacct cgroup stats Ken Chen
@ 2008-12-04  5:34 ` Li Zefan
  2008-12-04  9:24   ` Ingo Molnar
  2008-12-04 23:02   ` Paul Menage
  0 siblings, 2 replies; 14+ messages in thread
From: Li Zefan @ 2008-12-04  5:34 UTC (permalink / raw)
  To: Ken Chen; +Cc: Andrew Morton, Linux Kernel Mailing List, Ingo Molnar

(I guess it's more appropriate to ask Ingo to pick up this patch)

Ken Chen wrote:
> This patch export per-cpu CPU cycle usage for a given cpuacct cgroup.
> There is a need for a user space monitor daemon to track group CPU
> usage on per-cpu base.  It is also useful for monitor CFS load
> balancer behavior by tracking per CPU group usage.
> 
> 
> Signed-off-by: Ken Chen <kenchen@google.com>
> 
> diff --git a/kernel/sched.c b/kernel/sched.c
> index b7480fb..cd78948 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -9345,12 +9345,34 @@ out:
>  	return err;
>  }
> 
> +static int cpuacct_percpu_seq_read(struct cgroup *cgroup, struct cftype *cft,
> +				   struct seq_file *m)
> +{
> +	struct cpuacct *ca = cgroup_ca(cgroup);
> +	u64 percpu;
> +	int i;
> +
> +	for_each_possible_cpu(i) {
> +		spin_lock_irq(&cpu_rq(i)->lock);
> +		percpu = *percpu_ptr(ca->cpuusage, i);
> +		spin_unlock_irq(&cpu_rq(i)->lock);
> +		seq_printf(m, "%lld ", percpu);

Should be %llu. And if we don't cast percpu to unsigned long long, will it trigger
compile warning in some archs?

> +	}
> +	seq_printf(m, "\n");
> +	return 0;
> +}
> +
>  static struct cftype files[] = {
>  	{
>  		.name = "usage",
>  		.read_u64 = cpuusage_read,
>  		.write_u64 = cpuusage_write,
>  	},
> +	{
> +		.name = "percpu",

IMO percpu_usage is a better name.

> +		.read_seq_string = cpuacct_percpu_seq_read,
> +	},
> +
>  };
> 

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-04  5:34 ` Li Zefan
@ 2008-12-04  9:24   ` Ingo Molnar
  2008-12-04 23:02   ` Paul Menage
  1 sibling, 0 replies; 14+ messages in thread
From: Ingo Molnar @ 2008-12-04  9:24 UTC (permalink / raw)
  To: Li Zefan; +Cc: Ken Chen, Andrew Morton, Linux Kernel Mailing List


* Li Zefan <lizf@cn.fujitsu.com> wrote:

> (I guess it's more appropriate to ask Ingo to pick up this patch)
> 
> Ken Chen wrote:
> > This patch export per-cpu CPU cycle usage for a given cpuacct cgroup.
> > There is a need for a user space monitor daemon to track group CPU
> > usage on per-cpu base.  It is also useful for monitor CFS load
> > balancer behavior by tracking per CPU group usage.
> > 
> > 
> > Signed-off-by: Ken Chen <kenchen@google.com>
> > 
> > diff --git a/kernel/sched.c b/kernel/sched.c
> > index b7480fb..cd78948 100644
> > --- a/kernel/sched.c
> > +++ b/kernel/sched.c
> > @@ -9345,12 +9345,34 @@ out:
> >  	return err;
> >  }
> > 
> > +static int cpuacct_percpu_seq_read(struct cgroup *cgroup, struct cftype *cft,
> > +				   struct seq_file *m)
> > +{
> > +	struct cpuacct *ca = cgroup_ca(cgroup);
> > +	u64 percpu;
> > +	int i;
> > +
> > +	for_each_possible_cpu(i) {
> > +		spin_lock_irq(&cpu_rq(i)->lock);
> > +		percpu = *percpu_ptr(ca->cpuusage, i);
> > +		spin_unlock_irq(&cpu_rq(i)->lock);
> > +		seq_printf(m, "%lld ", percpu);
> 
> Should be %llu. And if we don't cast percpu to unsigned long long, will 
> it trigger compile warning in some archs?

yes.

> > +	}
> > +	seq_printf(m, "\n");
> > +	return 0;
> > +}
> > +
> >  static struct cftype files[] = {
> >  	{
> >  		.name = "usage",
> >  		.read_u64 = cpuusage_read,
> >  		.write_u64 = cpuusage_write,
> >  	},
> > +	{
> > +		.name = "percpu",
> 
> IMO percpu_usage is a better name.

agreed. Looks good otherwise - will wait for v2 of the patch.

	Ingo

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-04  5:34 ` Li Zefan
  2008-12-04  9:24   ` Ingo Molnar
@ 2008-12-04 23:02   ` Paul Menage
  2008-12-05  7:44     ` Ken Chen
  1 sibling, 1 reply; 14+ messages in thread
From: Paul Menage @ 2008-12-04 23:02 UTC (permalink / raw)
  To: Li Zefan; +Cc: Ken Chen, Andrew Morton, Linux Kernel Mailing List, Ingo Molnar

On Wed, Dec 3, 2008 at 9:34 PM, Li Zefan <lizf@cn.fujitsu.com> wrote:
>> +
>>  static struct cftype files[] = {
>>       {
>>               .name = "usage",
>>               .read_u64 = cpuusage_read,
>>               .write_u64 = cpuusage_write,
>>       },
>> +     {
>> +             .name = "percpu",
>
> IMO percpu_usage is a better name.
>

Maybe usage_percpu ?

That fits in with the style used in e.g. memory.limit_in_bytes where
the first word is the important quantity, and the subsequent words
indicate some aspect of the quantity.

Paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-04 23:02   ` Paul Menage
@ 2008-12-05  7:44     ` Ken Chen
  2008-12-05  7:54       ` Li Zefan
  0 siblings, 1 reply; 14+ messages in thread
From: Ken Chen @ 2008-12-05  7:44 UTC (permalink / raw)
  To: Paul Menage
  Cc: Li Zefan, Andrew Morton, Linux Kernel Mailing List, Ingo Molnar

On Wed, Dec 3, 2008 at 9:34 PM, Li Zefan wrote:
>> +             seq_printf(m, "%lld ", percpu);
>
> Should be %llu. And if we don't cast percpu to unsigned long long, will
> it trigger compile warning in some archs?


On Thu, Dec 4, 2008 at 3:02 PM, Paul Menage wrote:
>> IMO percpu_usage is a better name.
>
> Maybe usage_percpu ?


Thank you all for your comments.  Patch updated.


=====

This patch export per-cpu CPU cycle usage for a given cpuacct cgroup.
There is a need for a user space monitor daemon to track group CPU
usage on per-cpu base.  It is also useful for monitor CFS load
balancer behavior by tracking per CPU group usage.


Signed-off-by: Ken Chen <kenchen@google.com>

diff --git a/kernel/sched.c b/kernel/sched.c
index b7480fb..e32c094 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -9345,12 +9345,34 @@ out:
 	return err;
 }

+static int cpuacct_percpu_seq_read(struct cgroup *cgroup, struct cftype *cft,
+				   struct seq_file *m)
+{
+	struct cpuacct *ca = cgroup_ca(cgroup);
+	u64 percpu;
+	int i;
+
+	for_each_possible_cpu(i) {
+		spin_lock_irq(&cpu_rq(i)->lock);
+		percpu = *percpu_ptr(ca->cpuusage, i);
+		spin_unlock_irq(&cpu_rq(i)->lock);
+		seq_printf(m, "%llu ", percpu);
+	}
+	seq_printf(m, "\n");
+	return 0;
+}
+
 static struct cftype files[] = {
 	{
 		.name = "usage",
 		.read_u64 = cpuusage_read,
 		.write_u64 = cpuusage_write,
 	},
+	{
+		.name = "usage_percpu",
+		.read_seq_string = cpuacct_percpu_seq_read,
+	},
+
 };

 static int cpuacct_populate(struct cgroup_subsys *ss, struct cgroup *cgrp)

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-05  7:44     ` Ken Chen
@ 2008-12-05  7:54       ` Li Zefan
  2008-12-05  8:30         ` Ken Chen
  2008-12-05 18:10         ` Ken Chen
  0 siblings, 2 replies; 14+ messages in thread
From: Li Zefan @ 2008-12-05  7:54 UTC (permalink / raw)
  To: Ken Chen
  Cc: Paul Menage, Andrew Morton, Linux Kernel Mailing List, Ingo Molnar

> +static int cpuacct_percpu_seq_read(struct cgroup *cgroup, struct cftype *cft,
> +				   struct seq_file *m)
> +{
> +	struct cpuacct *ca = cgroup_ca(cgroup);
> +	u64 percpu;
> +	int i;
> +
> +	for_each_possible_cpu(i) {
> +		spin_lock_irq(&cpu_rq(i)->lock);
> +		percpu = *percpu_ptr(ca->cpuusage, i);
> +		spin_unlock_irq(&cpu_rq(i)->lock);
> +		seq_printf(m, "%llu ", percpu);

Should be:
+		seq_printf(m, "%llu ", (unsigned long long)percpu);

Otherwsise:
kernel/sched.c: In function ‘cpuacct_percpu_seq_read’:
kernel/sched.c:9359: warning: format ‘%llu’ expects type ‘long long unsigned int’, but argument 3 has type ‘u64’

> +	}
> +	seq_printf(m, "\n");
> +	return 0;
> +}


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-05  7:54       ` Li Zefan
@ 2008-12-05  8:30         ` Ken Chen
  2008-12-05  8:35           ` Li Zefan
  2008-12-05 18:10         ` Ken Chen
  1 sibling, 1 reply; 14+ messages in thread
From: Ken Chen @ 2008-12-05  8:30 UTC (permalink / raw)
  To: Li Zefan
  Cc: Paul Menage, Andrew Morton, Linux Kernel Mailing List, Ingo Molnar

On Thu, Dec 4, 2008 at 11:54 PM, Li Zefan <lizf@cn.fujitsu.com> wrote:
>> +             seq_printf(m, "%llu ", percpu);
>
> Should be:
> +               seq_printf(m, "%llu ", (unsigned long long)percpu);
>
> Otherwsise:
> kernel/sched.c: In function 'cpuacct_percpu_seq_read':
> kernel/sched.c:9359: warning: format '%llu' expects type 'long long unsigned int',
> but argument 3 has type 'u64'

huh, I was just wondering about the type case in cgroup_read_u64()
when I was looking at it earlier.  That explains it.  Diff patch
attached.

diff --git a/kernel/sched.c b/kernel/sched.c
index e32c094..055c54f 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -9356,7 +9356,7 @@ static int cpuacct_percpu_seq_read
 		spin_lock_irq(&cpu_rq(i)->lock);
 		percpu = *percpu_ptr(ca->cpuusage, i);
 		spin_unlock_irq(&cpu_rq(i)->lock);
-		seq_printf(m, "%llu ", percpu);
+		seq_printf(m, "%llu ", (unsigned long long) percpu);
 	}
 	seq_printf(m, "\n");
 	return 0;

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-05  8:30         ` Ken Chen
@ 2008-12-05  8:35           ` Li Zefan
  2008-12-05 13:52             ` Ingo Molnar
  0 siblings, 1 reply; 14+ messages in thread
From: Li Zefan @ 2008-12-05  8:35 UTC (permalink / raw)
  To: Ken Chen
  Cc: Paul Menage, Andrew Morton, Linux Kernel Mailing List, Ingo Molnar

Ken Chen wrote:
> On Thu, Dec 4, 2008 at 11:54 PM, Li Zefan <lizf@cn.fujitsu.com> wrote:
>>> +             seq_printf(m, "%llu ", percpu);
>> Should be:
>> +               seq_printf(m, "%llu ", (unsigned long long)percpu);
>>
>> Otherwsise:
>> kernel/sched.c: In function 'cpuacct_percpu_seq_read':
>> kernel/sched.c:9359: warning: format '%llu' expects type 'long long unsigned int',
>> but argument 3 has type 'u64'
> 
> huh, I was just wondering about the type case in cgroup_read_u64()
> when I was looking at it earlier.  That explains it.  Diff patch
> attached.
> 

Reviewed-by: Li Zefan <lizf@cn.fujitsu.com>

> diff --git a/kernel/sched.c b/kernel/sched.c
> index e32c094..055c54f 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -9356,7 +9356,7 @@ static int cpuacct_percpu_seq_read
>  		spin_lock_irq(&cpu_rq(i)->lock);
>  		percpu = *percpu_ptr(ca->cpuusage, i);
>  		spin_unlock_irq(&cpu_rq(i)->lock);
> -		seq_printf(m, "%llu ", percpu);
> +		seq_printf(m, "%llu ", (unsigned long long) percpu);
>  	}
>  	seq_printf(m, "\n");
>  	return 0;
> 
> 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-05  8:35           ` Li Zefan
@ 2008-12-05 13:52             ` Ingo Molnar
  2008-12-05 18:16               ` Ken Chen
  0 siblings, 1 reply; 14+ messages in thread
From: Ingo Molnar @ 2008-12-05 13:52 UTC (permalink / raw)
  To: Li Zefan; +Cc: Ken Chen, Paul Menage, Andrew Morton, Linux Kernel Mailing List


* Li Zefan <lizf@cn.fujitsu.com> wrote:

> Ken Chen wrote:
> > On Thu, Dec 4, 2008 at 11:54 PM, Li Zefan <lizf@cn.fujitsu.com> wrote:
> >>> +             seq_printf(m, "%llu ", percpu);
> >> Should be:
> >> +               seq_printf(m, "%llu ", (unsigned long long)percpu);
> >>
> >> Otherwsise:
> >> kernel/sched.c: In function 'cpuacct_percpu_seq_read':
> >> kernel/sched.c:9359: warning: format '%llu' expects type 'long long unsigned int',
> >> but argument 3 has type 'u64'
> > 
> > huh, I was just wondering about the type case in cgroup_read_u64()
> > when I was looking at it earlier.  That explains it.  Diff patch
> > attached.
> > 
> 
> Reviewed-by: Li Zefan <lizf@cn.fujitsu.com>

Could someone please send the final patch with a final changelog, with 
all fixlets and tags in place please?

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-05  7:54       ` Li Zefan
  2008-12-05  8:30         ` Ken Chen
@ 2008-12-05 18:10         ` Ken Chen
  2008-12-08  1:25           ` Li Zefan
  1 sibling, 1 reply; 14+ messages in thread
From: Ken Chen @ 2008-12-05 18:10 UTC (permalink / raw)
  To: Li Zefan
  Cc: Paul Menage, Andrew Morton, Linux Kernel Mailing List, Ingo Molnar

On Thu, Dec 4, 2008 at 11:54 PM, Li Zefan <lizf@cn.fujitsu.com> wrote:
>> +             seq_printf(m, "%llu ", percpu);
>
> Should be:
> +               seq_printf(m, "%llu ", (unsigned long long)percpu);
>
> Otherwsise:
> kernel/sched.c: In function 'cpuacct_percpu_seq_read':
> kernel/sched.c:9359: warning: format '%llu' expects type 'long long unsigned int',
> but argument 3 has type 'u64'

I'm curious what compiler and CPU arch target are you using that cause
compiler to spit out this warning message?  On x86_64 u64 is unsigned
long long and gcc v4.2.4 doesn't give such warning.

- Ken

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-05 13:52             ` Ingo Molnar
@ 2008-12-05 18:16               ` Ken Chen
  2008-12-07  7:27                 ` Andrew Morton
  0 siblings, 1 reply; 14+ messages in thread
From: Ken Chen @ 2008-12-05 18:16 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Li Zefan, Paul Menage, Andrew Morton, Linux Kernel Mailing List

On Fri, Dec 5, 2008 at 5:52 AM, Ingo Molnar <mingo@elte.hu> wrote:
> Could someone please send the final patch with a final changelog, with
> all fixlets and tags in place please?

Here it is:

This patch export per-cpu CPU cycle usage for a given cpuacct cgroup.
There is a need for a user space monitor daemon to track group CPU
usage on per-cpu base.  It is also useful for monitoring CFS load
balancer behavior by tracking per CPU group usage.


Signed-off-by: Ken Chen <kenchen@google.com>
Reviewed-by: Li Zefan <lizf@cn.fujitsu.com>

diff --git a/kernel/sched.c b/kernel/sched.c
index b7480fb..055c54f 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -9345,12 +9345,34 @@ out:
 	return err;
 }

+static int cpuacct_percpu_seq_read(struct cgroup *cgroup, struct cftype *cft,
+				   struct seq_file *m)
+{
+	struct cpuacct *ca = cgroup_ca(cgroup);
+	u64 percpu;
+	int i;
+
+	for_each_possible_cpu(i) {
+		spin_lock_irq(&cpu_rq(i)->lock);
+		percpu = *percpu_ptr(ca->cpuusage, i);
+		spin_unlock_irq(&cpu_rq(i)->lock);
+		seq_printf(m, "%llu ", (unsigned long long) percpu);
+	}
+	seq_printf(m, "\n");
+	return 0;
+}
+
 static struct cftype files[] = {
 	{
 		.name = "usage",
 		.read_u64 = cpuusage_read,
 		.write_u64 = cpuusage_write,
 	},
+	{
+		.name = "usage_percpu",
+		.read_seq_string = cpuacct_percpu_seq_read,
+	},
+
 };

 static int cpuacct_populate(struct cgroup_subsys *ss, struct cgroup *cgrp)

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-05 18:16               ` Ken Chen
@ 2008-12-07  7:27                 ` Andrew Morton
  2008-12-08 14:33                   ` Ingo Molnar
  0 siblings, 1 reply; 14+ messages in thread
From: Andrew Morton @ 2008-12-07  7:27 UTC (permalink / raw)
  To: Ken Chen; +Cc: Ingo Molnar, Li Zefan, Paul Menage, Linux Kernel Mailing List

On Fri, 5 Dec 2008 10:16:30 -0800 Ken Chen <kenchen@google.com> wrote:

> +static int cpuacct_percpu_seq_read(struct cgroup *cgroup, struct cftype *cft,
> +				   struct seq_file *m)
> +{
> +	struct cpuacct *ca = cgroup_ca(cgroup);
> +	u64 percpu;
> +	int i;
> +
> +	for_each_possible_cpu(i) {
> +		spin_lock_irq(&cpu_rq(i)->lock);
> +		percpu = *percpu_ptr(ca->cpuusage, i);
> +		spin_unlock_irq(&cpu_rq(i)->lock);
> +		seq_printf(m, "%llu ", (unsigned long long) percpu);
> +	}
> +	seq_printf(m, "\n");
> +	return 0;
> +}

The locking is only needed for 32-bit, I assume?

The iteration across all possible CPUs seems a bit lame - that code
looks pretty easy to convert to hotplug goodness.

(All of which pertains to existing code, not to this patch).

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-05 18:10         ` Ken Chen
@ 2008-12-08  1:25           ` Li Zefan
  0 siblings, 0 replies; 14+ messages in thread
From: Li Zefan @ 2008-12-08  1:25 UTC (permalink / raw)
  To: Ken Chen
  Cc: Paul Menage, Andrew Morton, Linux Kernel Mailing List, Ingo Molnar

Ken Chen wrote:
> On Thu, Dec 4, 2008 at 11:54 PM, Li Zefan <lizf@cn.fujitsu.com> wrote:
>>> +             seq_printf(m, "%llu ", percpu);
>> Should be:
>> +               seq_printf(m, "%llu ", (unsigned long long)percpu);
>>
>> Otherwsise:
>> kernel/sched.c: In function 'cpuacct_percpu_seq_read':
>> kernel/sched.c:9359: warning: format '%llu' expects type 'long long unsigned int',
>> but argument 3 has type 'u64'
> 
> I'm curious what compiler and CPU arch target are you using that cause
> compiler to spit out this warning message?  On x86_64 u64 is unsigned
> long long and gcc v4.2.4 doesn't give such warning.
> 

I tried it on IA64, and gcc version is 4.1.2.

On IA64, u64 is unsigned long.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [patch] export percpu cpuacct cgroup stats
  2008-12-07  7:27                 ` Andrew Morton
@ 2008-12-08 14:33                   ` Ingo Molnar
  0 siblings, 0 replies; 14+ messages in thread
From: Ingo Molnar @ 2008-12-08 14:33 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Ken Chen, Li Zefan, Paul Menage, Linux Kernel Mailing List


* Andrew Morton <akpm@linux-foundation.org> wrote:

> On Fri, 5 Dec 2008 10:16:30 -0800 Ken Chen <kenchen@google.com> wrote:
> 
> > +static int cpuacct_percpu_seq_read(struct cgroup *cgroup, struct cftype *cft,
> > +				   struct seq_file *m)
> > +{
> > +	struct cpuacct *ca = cgroup_ca(cgroup);
> > +	u64 percpu;
> > +	int i;
> > +
> > +	for_each_possible_cpu(i) {
> > +		spin_lock_irq(&cpu_rq(i)->lock);
> > +		percpu = *percpu_ptr(ca->cpuusage, i);
> > +		spin_unlock_irq(&cpu_rq(i)->lock);
> > +		seq_printf(m, "%llu ", (unsigned long long) percpu);
> > +	}
> > +	seq_printf(m, "\n");
> > +	return 0;
> > +}
> 
> The locking is only needed for 32-bit, I assume?
> 
> The iteration across all possible CPUs seems a bit lame - that code
> looks pretty easy to convert to hotplug goodness.
> 
> (All of which pertains to existing code, not to this patch).

fair enough. Ken, would you mind updating it in this fashion?

	Ingo

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2008-12-08 14:34 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-12-04  4:48 [patch] export percpu cpuacct cgroup stats Ken Chen
2008-12-04  5:34 ` Li Zefan
2008-12-04  9:24   ` Ingo Molnar
2008-12-04 23:02   ` Paul Menage
2008-12-05  7:44     ` Ken Chen
2008-12-05  7:54       ` Li Zefan
2008-12-05  8:30         ` Ken Chen
2008-12-05  8:35           ` Li Zefan
2008-12-05 13:52             ` Ingo Molnar
2008-12-05 18:16               ` Ken Chen
2008-12-07  7:27                 ` Andrew Morton
2008-12-08 14:33                   ` Ingo Molnar
2008-12-05 18:10         ` Ken Chen
2008-12-08  1:25           ` Li Zefan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).