Linux Cgroup v1(中文翻译)(3):CPU Accounting Controller,CPU统计控制器支持


CPU Accounting Controller

.
.
原文:https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/cpuacct.html
翻译:河东西望
.
.

CPU统计控制器(CPU Accounting Controller)用来分组使用cgroup的任务,以及统计这些任务分组的CPU用量。

CPU统计控制器支持多层次架构的分组。一个统计分组累加所有子分组和分组中的任务的CPU用量。

统计分组可以通过挂载cgroup文件系统来创建:

# mount -t cgroup -o cpuacct none /sys/fs/cgroup

完成上述操作,父级统计分组就会在/sys/fs/cgroup变为可见。在启动的时候,这个分组包含了系统中所有的任务。/sys/fs/cgroup/tasks列举了该cgroup中的所有任务。/sys/fs/cgroup/cpuacct.usage给出了这个这个分组中所有任务获取的CPU时间(以纳秒为单位)。

在父分组/sys/fs/cgroup下可以创建新的统计分组:

# cd /sys/fs/cgroup
# mkdir g1
# echo $$ > g1/tasks

上述操作创建了新的g1分组,把当前shell进程移动进去。这个bash和她的子孙消耗的CPU时间可以从g1/cpuacct.usage获取。/sys/fs/cgroup/cpuacct.usage同样也是累加的。

cpuacct.stat文件列举了几个统计数字,划分成用户和系统的CPU时间。这些统计数组支持:

用户:用户模式里的cgroup任务花费的CPU时间。
系统:内核模式里的cgroup任务花费的CPU时间。

用户和系统的CPU时间单位都是USER_HZ。

cpuacct控制器使用percpu_counter接口来收集用户和系统时间。这会有两个副作用:

  • 理论上可能会看到用户时间和系统时间的错误数值。这是因为32位系统上的percpu_counter_read()函数写并发是不安全的。
  • 用户时间和系统时间可能会稍微有点过时,这是因为percpu_counter的批量处理性质决定的。

相关内容