Commit | Line | Data |
---|---|---|
99c8b231 | 1 | ========================= |
934352f2 | 2 | CPU Accounting Controller |
99c8b231 | 3 | ========================= |
934352f2 BR |
4 | |
5 | The CPU accounting controller is used to group tasks using cgroups and | |
6 | account the CPU usage of these groups of tasks. | |
7 | ||
8 | The CPU accounting controller supports multi-hierarchy groups. An accounting | |
9 | group accumulates the CPU usage of all of its child groups and the tasks | |
10 | directly present in its group. | |
11 | ||
99c8b231 | 12 | Accounting groups can be created by first mounting the cgroup filesystem:: |
934352f2 | 13 | |
99c8b231 | 14 | # mount -t cgroup -ocpuacct none /sys/fs/cgroup |
f6e07d38 JS |
15 | |
16 | With the above step, the initial or the parent accounting group becomes | |
17 | visible at /sys/fs/cgroup. At bootup, this group includes all the tasks in | |
18 | the system. /sys/fs/cgroup/tasks lists the tasks in this cgroup. | |
19 | /sys/fs/cgroup/cpuacct.usage gives the CPU time (in nanoseconds) obtained | |
20 | by this group which is essentially the CPU time obtained by all the tasks | |
934352f2 BR |
21 | in the system. |
22 | ||
99c8b231 | 23 | New accounting groups can be created under the parent group /sys/fs/cgroup:: |
934352f2 | 24 | |
99c8b231 MCC |
25 | # cd /sys/fs/cgroup |
26 | # mkdir g1 | |
27 | # echo $$ > g1/tasks | |
934352f2 BR |
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 | |
f6e07d38 | 32 | /sys/fs/cgroup/cpuacct.usage also. |
ef12fefa BR |
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. |