mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-28 01:21:58 +00:00
Task Control Groups: example CPU accounting subsystem
This example demonstrates how to use the generic cgroup subsystem for a simple resource tracker that counts, for the processes in a cgroup, the total CPU time used and the %CPU used in the last complete 10 second interval. Portions contributed by Balbir Singh <balbir@in.ibm.com> Signed-off-by: Paul Menage <menage@google.com> Cc: Serge E. Hallyn <serue@us.ibm.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Dave Hansen <haveblue@us.ibm.com> Cc: Balbir Singh <balbir@in.ibm.com> Cc: Paul Jackson <pj@sgi.com> Cc: Kirill Korotaev <dev@openvz.org> Cc: Herbert Poetzl <herbert@13thfloor.at> Cc: Srivatsa Vaddagiri <vatsa@in.ibm.com> Cc: Cedric Le Goater <clg@fr.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8793d854ed
commit
62d0df6406
6 changed files with 225 additions and 3 deletions
|
@ -51,6 +51,7 @@
|
|||
#include <linux/cpu.h>
|
||||
#include <linux/cpuset.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/cpu_acct.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/sysctl.h>
|
||||
|
@ -3307,9 +3308,13 @@ void account_user_time(struct task_struct *p, cputime_t cputime)
|
|||
{
|
||||
struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
|
||||
cputime64_t tmp;
|
||||
struct rq *rq = this_rq();
|
||||
|
||||
p->utime = cputime_add(p->utime, cputime);
|
||||
|
||||
if (p != rq->idle)
|
||||
cpuacct_charge(p, cputime);
|
||||
|
||||
/* Add user time to cpustat. */
|
||||
tmp = cputime_to_cputime64(cputime);
|
||||
if (TASK_NICE(p) > 0)
|
||||
|
@ -3374,9 +3379,10 @@ void account_system_time(struct task_struct *p, int hardirq_offset,
|
|||
cpustat->irq = cputime64_add(cpustat->irq, tmp);
|
||||
else if (softirq_count())
|
||||
cpustat->softirq = cputime64_add(cpustat->softirq, tmp);
|
||||
else if (p != rq->idle)
|
||||
else if (p != rq->idle) {
|
||||
cpustat->system = cputime64_add(cpustat->system, tmp);
|
||||
else if (atomic_read(&rq->nr_iowait) > 0)
|
||||
cpuacct_charge(p, cputime);
|
||||
} else if (atomic_read(&rq->nr_iowait) > 0)
|
||||
cpustat->iowait = cputime64_add(cpustat->iowait, tmp);
|
||||
else
|
||||
cpustat->idle = cputime64_add(cpustat->idle, tmp);
|
||||
|
@ -3412,8 +3418,10 @@ void account_steal_time(struct task_struct *p, cputime_t steal)
|
|||
cpustat->iowait = cputime64_add(cpustat->iowait, tmp);
|
||||
else
|
||||
cpustat->idle = cputime64_add(cpustat->idle, tmp);
|
||||
} else
|
||||
} else {
|
||||
cpustat->steal = cputime64_add(cpustat->steal, tmp);
|
||||
cpuacct_charge(p, -tmp);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue