| Bharata B Rao | 934352f | 2008-11-10 20:41:13 +0530 | [diff] [blame] | 1 | CPU Accounting Controller | 
|  | 2 | ------------------------- | 
|  | 3 |  | 
|  | 4 | The CPU accounting controller is used to group tasks using cgroups and | 
|  | 5 | account the CPU usage of these groups of tasks. | 
|  | 6 |  | 
|  | 7 | The CPU accounting controller supports multi-hierarchy groups. An accounting | 
|  | 8 | group accumulates the CPU usage of all of its child groups and the tasks | 
|  | 9 | directly present in its group. | 
|  | 10 |  | 
|  | 11 | Accounting groups can be created by first mounting the cgroup filesystem. | 
|  | 12 |  | 
|  | 13 | # mkdir /cgroups | 
|  | 14 | # mount -t cgroup -ocpuacct none /cgroups | 
|  | 15 |  | 
|  | 16 | With the above step, the initial or the parent accounting group | 
|  | 17 | becomes visible at /cgroups. At bootup, this group includes all the | 
|  | 18 | tasks in the system. /cgroups/tasks lists the tasks in this cgroup. | 
|  | 19 | /cgroups/cpuacct.usage gives the CPU time (in nanoseconds) obtained by | 
|  | 20 | this group which is essentially the CPU time obtained by all the tasks | 
|  | 21 | in the system. | 
|  | 22 |  | 
|  | 23 | New accounting groups can be created under the parent group /cgroups. | 
|  | 24 |  | 
|  | 25 | # cd /cgroups | 
|  | 26 | # mkdir g1 | 
|  | 27 | # echo $$ > g1 | 
|  | 28 |  | 
|  | 29 | The above steps create a new group g1 and move the current shell | 
|  | 30 | process (bash) into it. CPU time consumed by this bash and its children | 
|  | 31 | can be obtained from g1/cpuacct.usage and the same is accumulated in | 
|  | 32 | /cgroups/cpuacct.usage also. | 
| Bharata B Rao | ef12fef | 2009-03-31 10:02:22 +0530 | [diff] [blame] | 33 |  | 
|  | 34 | cpuacct.stat file lists a few statistics which further divide the | 
|  | 35 | CPU time obtained by the cgroup into user and system times. Currently | 
|  | 36 | the following statistics are supported: | 
|  | 37 |  | 
|  | 38 | user: Time spent by tasks of the cgroup in user mode. | 
|  | 39 | system: Time spent by tasks of the cgroup in kernel mode. | 
|  | 40 |  | 
|  | 41 | user and system are in USER_HZ unit. | 
|  | 42 |  | 
|  | 43 | cpuacct controller uses percpu_counter interface to collect user and | 
|  | 44 | system times. This has two side effects: | 
|  | 45 |  | 
|  | 46 | - It is theoretically possible to see wrong values for user and system times. | 
|  | 47 | This is because percpu_counter_read() on 32bit systems isn't safe | 
|  | 48 | against concurrent writes. | 
|  | 49 | - It is possible to see slightly outdated values for user and system times | 
|  | 50 | due to the batch processing nature of percpu_counter. |