• 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 的批处理性质,可能会看到用户和系统时间有些过时的值。

  • 相关阅读:
    归并排序
    mysql 基本查询
    APP版本升级
    top命令详解
    iptables原理详解
    Linux--iptables常用命令
    iptables语法常用命令总结(表格)
    iptables原理--图示理解
    GIT的Windows客户端使用
    Linux下GIT服务器端和客户端搭建
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/14249630.html
Copyright © 2020-2023  润新知