CPU核算控制器 【ChatGPT】

发布时间 2023-12-09 21:41:19作者: 摩斯电码

原文:https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/cpuacct.html

CPU核算控制器

CPU核算控制器用于使用cgroups对任务进行分组,并核算这些任务组的CPU使用情况。

CPU核算控制器支持多层级分组。一个核算组累积其所有子组和直接存在于其组中的任务的CPU使用情况。

可以通过首先挂载cgroup文件系统来创建核算组:

# mount -t cgroup -ocpuacct none /sys/fs/cgroup

通过上述步骤,初始或父核算组将出现在/sys/fs/cgroup中。在启动时,此组包括系统中的所有任务。/sys/fs/cgroup/tasks列出了此cgroup中的任务。/sys/fs/cgroup/cpuacct.usage给出了此组获得的CPU时间(以纳秒为单位),这实质上是系统中所有任务获得的CPU时间。

可以在父组/sys/fs/cgroup下创建新的核算组:

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

上述步骤创建了一个新组g1,并将当前shell进程(bash)移入其中。可以从g1/cpuacct.usage获取由此bash及其子进程消耗的CPU时间,并且这些时间也会累积在/sys/fs/cgroup/cpuacct.usage中。

cpuacct.stat文件列出了一些统计数据,进一步将cgroup获得的CPU时间分为用户和系统时间。目前支持以下统计数据:

  • user:cgroup中任务在用户模式下花费的时间。
  • system:cgroup中任务在内核模式下花费的时间。

用户和系统以USER_HZ单位表示。

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

  1. 理论上可能会看到用户和系统时间的错误值。这是因为在32位系统上,percpu_counter_read()不安全,可能会受到并发写入的影响。
  2. 由于percpu_counter的批处理特性,可能会看到略微过时的用户和系统时间值。