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 | |
Jörg Sommer | f6e07d3 | 2011-06-15 12:59:45 -0700 | [diff] [blame] | 13 | # mount -t cgroup -ocpuacct none /sys/fs/cgroup |
Bharata B Rao | 934352f | 2008-11-10 20:41:13 +0530 | [diff] [blame] | 14 | |
Jörg Sommer | f6e07d3 | 2011-06-15 12:59:45 -0700 | [diff] [blame] | 15 | With the above step, the initial or the parent accounting group becomes |
| 16 | visible at /sys/fs/cgroup. At bootup, this group includes all the tasks in |
| 17 | the system. /sys/fs/cgroup/tasks lists the tasks in this cgroup. |
| 18 | /sys/fs/cgroup/cpuacct.usage gives the CPU time (in nanoseconds) obtained |
| 19 | by this group which is essentially the CPU time obtained by all the tasks |
Bharata B Rao | 934352f | 2008-11-10 20:41:13 +0530 | [diff] [blame] | 20 | in the system. |
| 21 | |
Jörg Sommer | f6e07d3 | 2011-06-15 12:59:45 -0700 | [diff] [blame] | 22 | New accounting groups can be created under the parent group /sys/fs/cgroup. |
Bharata B Rao | 934352f | 2008-11-10 20:41:13 +0530 | [diff] [blame] | 23 | |
Jörg Sommer | f6e07d3 | 2011-06-15 12:59:45 -0700 | [diff] [blame] | 24 | # cd /sys/fs/cgroup |
Bharata B Rao | 934352f | 2008-11-10 20:41:13 +0530 | [diff] [blame] | 25 | # mkdir g1 |
| 26 | # echo $$ > g1 |
| 27 | |
| 28 | The above steps create a new group g1 and move the current shell |
| 29 | process (bash) into it. CPU time consumed by this bash and its children |
| 30 | can be obtained from g1/cpuacct.usage and the same is accumulated in |
Jörg Sommer | f6e07d3 | 2011-06-15 12:59:45 -0700 | [diff] [blame] | 31 | /sys/fs/cgroup/cpuacct.usage also. |
Bharata B Rao | ef12fef | 2009-03-31 10:02:22 +0530 | [diff] [blame] | 32 | |
| 33 | cpuacct.stat file lists a few statistics which further divide the |
| 34 | CPU time obtained by the cgroup into user and system times. Currently |
| 35 | the following statistics are supported: |
| 36 | |
| 37 | user: Time spent by tasks of the cgroup in user mode. |
| 38 | system: Time spent by tasks of the cgroup in kernel mode. |
| 39 | |
| 40 | user and system are in USER_HZ unit. |
| 41 | |
Mike Chan | c69233f | 2010-05-10 17:54:48 -0700 | [diff] [blame] | 42 | cpuacct.cpufreq file gives CPU time (in nanoseconds) spent at each CPU |
| 43 | frequency. Platform hooks must be implemented inorder to properly track |
| 44 | time at each CPU frequency. |
| 45 | |
Mike Chan | be17d1d | 2010-05-12 15:52:14 -0700 | [diff] [blame] | 46 | cpuacct.power file gives CPU power consumed (in milliWatt seconds). Platform |
| 47 | must provide and implement power callback functions. |
| 48 | |
Bharata B Rao | ef12fef | 2009-03-31 10:02:22 +0530 | [diff] [blame] | 49 | cpuacct controller uses percpu_counter interface to collect user and |
| 50 | system times. This has two side effects: |
| 51 | |
| 52 | - It is theoretically possible to see wrong values for user and system times. |
| 53 | This is because percpu_counter_read() on 32bit systems isn't safe |
| 54 | against concurrent writes. |
| 55 | - It is possible to see slightly outdated values for user and system times |
| 56 | due to the batch processing nature of percpu_counter. |