Commit fe5c7cc2 authored by Paul Menage's avatar Paul Menage Committed by Ingo Molnar

sched: report CPU usage in CFS cgroup directories

Adds a cpu.usage file to the CFS cgroup that reports CPU usage in
milliseconds for that cgroup's tasks

[ mingo@elte.hu: style cleanups. ]
Signed-off-by: default avatarPaul Menage <menage@google.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent ae8393e5
...@@ -7211,15 +7211,43 @@ static u64 cpu_shares_read_uint(struct cgroup *cgrp, struct cftype *cft) ...@@ -7211,15 +7211,43 @@ static u64 cpu_shares_read_uint(struct cgroup *cgrp, struct cftype *cft)
return (u64) tg->shares; return (u64) tg->shares;
} }
static struct cftype cpu_shares = { static u64 cpu_usage_read(struct cgroup *cgrp, struct cftype *cft)
.name = "shares", {
.read_uint = cpu_shares_read_uint, struct task_group *tg = cgroup_tg(cgrp);
.write_uint = cpu_shares_write_uint, unsigned long flags;
u64 res = 0;
int i;
for_each_possible_cpu(i) {
/*
* Lock to prevent races with updating 64-bit counters
* on 32-bit arches.
*/
spin_lock_irqsave(&cpu_rq(i)->lock, flags);
res += tg->se[i]->sum_exec_runtime;
spin_unlock_irqrestore(&cpu_rq(i)->lock, flags);
}
/* Convert from ns to ms */
do_div(res, 1000000);
return res;
}
static struct cftype cpu_files[] = {
{
.name = "shares",
.read_uint = cpu_shares_read_uint,
.write_uint = cpu_shares_write_uint,
},
{
.name = "usage",
.read_uint = cpu_usage_read,
},
}; };
static int cpu_cgroup_populate(struct cgroup_subsys *ss, struct cgroup *cont) static int cpu_cgroup_populate(struct cgroup_subsys *ss, struct cgroup *cont)
{ {
return cgroup_add_file(cont, ss, &cpu_shares); return cgroup_add_files(cont, ss, cpu_files, ARRAY_SIZE(cpu_files));
} }
struct cgroup_subsys cpu_cgroup_subsys = { struct cgroup_subsys cpu_cgroup_subsys = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment