Cgroup内核文档翻译(4)——Documentation/cgroup-v1/cpuacct.txt

CPU记帐控制器(CPU Accounting Controller)
-------------------------

CPU记帐控制器用于使用cgroup对任务进行分组,并计算这些任务组的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和system以 USER_HZ 为单位。

USER_HZ注释:在2.6之前的内核中,更改HZ的值会导致用户空间异常。 发生这种情况是因为将值以每秒滴答的单位导出到用户空间。随着这些接口的永久使用,应用程序逐渐依赖于HZ的特定值。 因此,更改HZ会按一定的常数缩放各种导出的值,而无需了解用户空间。 正常情况下,正常运行时间为20小时(实际上是两个小时)。

为避免此类问题,内核需要缩放所有导出的jiffies值。 它通过定义USER_HZ来实现,这是用户空间期望的HZ值。 在x86上,因为历史上HZ为100,所以USER_HZ为100。

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

- 从理论上讲,用户和系统时间可能会看到错误的值。 这是因为32位系统上的 percpu_counter_read() 不能防止并发写入。
- 由于 percpu_counter 的批处理性质,可能会看到用户和系统时间有些过时的值。

 

总结:

1. 这很容易统计单个任务获取的CPU时间。

2. 5.10内核默认不开启cpuacct功能

 

posted on   Hello-World3  阅读(325)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2019-01-08 usb gadget驱动框架分析
2018-01-08 systemd学习笔记

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示