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;
|
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 = {
|
||||||
|
|
Loading…
Add table
Reference in a new issue