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: Paul Menage <menage@google.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
ae8393e508
commit
fe5c7cc228
1 changed files with 33 additions and 5 deletions
|
@ -7211,15 +7211,43 @@ static u64 cpu_shares_read_uint(struct cgroup *cgrp, struct cftype *cft)
|
|||
return (u64) tg->shares;
|
||||
}
|
||||
|
||||
static struct cftype cpu_shares = {
|
||||
.name = "shares",
|
||||
.read_uint = cpu_shares_read_uint,
|
||||
.write_uint = cpu_shares_write_uint,
|
||||
static u64 cpu_usage_read(struct cgroup *cgrp, struct cftype *cft)
|
||||
{
|
||||
struct task_group *tg = cgroup_tg(cgrp);
|
||||
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)
|
||||
{
|
||||
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 = {
|
||||
|
|
Loading…
Reference in a new issue