diff options
author | Ken Chen <kenchen@google.com> | 2008-12-16 01:04:15 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-12-16 06:15:01 -0500 |
commit | e9515c3c9feecd74174c2998add0db51e02abb8d (patch) | |
tree | 961e5fc9f0d01a901fd28c548b8f39037611a4ce | |
parent | 720f54988e17b33f3f477010b3a68ee872d20d5a (diff) |
sched, cpuacct: export percpu cpuacct cgroup stats
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>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | kernel/sched.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 41b7e2d524d6..f53e2b8ef521 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -9342,12 +9342,32 @@ out: | |||
9342 | return err; | 9342 | return err; |
9343 | } | 9343 | } |
9344 | 9344 | ||
9345 | static int cpuacct_percpu_seq_read(struct cgroup *cgroup, struct cftype *cft, | ||
9346 | struct seq_file *m) | ||
9347 | { | ||
9348 | struct cpuacct *ca = cgroup_ca(cgroup); | ||
9349 | u64 percpu; | ||
9350 | int i; | ||
9351 | |||
9352 | for_each_present_cpu(i) { | ||
9353 | percpu = cpuacct_cpuusage_read(ca, i); | ||
9354 | seq_printf(m, "%llu ", (unsigned long long) percpu); | ||
9355 | } | ||
9356 | seq_printf(m, "\n"); | ||
9357 | return 0; | ||
9358 | } | ||
9359 | |||
9345 | static struct cftype files[] = { | 9360 | static struct cftype files[] = { |
9346 | { | 9361 | { |
9347 | .name = "usage", | 9362 | .name = "usage", |
9348 | .read_u64 = cpuusage_read, | 9363 | .read_u64 = cpuusage_read, |
9349 | .write_u64 = cpuusage_write, | 9364 | .write_u64 = cpuusage_write, |
9350 | }, | 9365 | }, |
9366 | { | ||
9367 | .name = "usage_percpu", | ||
9368 | .read_seq_string = cpuacct_percpu_seq_read, | ||
9369 | }, | ||
9370 | |||
9351 | }; | 9371 | }; |
9352 | 9372 | ||
9353 | static int cpuacct_populate(struct cgroup_subsys *ss, struct cgroup *cgrp) | 9373 | static int cpuacct_populate(struct cgroup_subsys *ss, struct cgroup *cgrp) |