控制组数据统计¶
控制组数据统计的灵感来源于 https://lore.kernel.org/r/461CF883.2030308@sw.ru 的讨论,并实现了 Andrew Morton 在 https://lore.kernel.org/r/20070411114927.1277d7c9.akpm@linux-foundation.org 中建议的每个 cgroup 统计功能。
每个 cgroup 统计的基础设施复用了 taskstats 接口的代码。一组新的 cgroup 操作以 cgroup 特定的命令和属性进行注册。通过向 cgroupstats 结构体添加成员,扩展每个 cgroup 的统计功能应该会非常容易。
cgroupstats 当前的模型是拉取式,添加推送式模型(用于在有趣事件上发布统计数据)应该会非常容易。目前,用户空间通过传递 cgroup 路径来请求统计数据。关于 cgroup 中所有任务状态的统计数据会被返回给用户空间。
注意:我们目前依赖延迟记账来提取关于阻塞在 I/O 上的任务信息。如果 CONFIG_TASK_DELAY_ACCT 被禁用,此信息将不可用。
为了提取 cgroup 统计数据,已开发了一个与 getdelays.c 非常相似的实用程序,该实用程序的示例输出如下所示
~/balbir/cgroupstats # ./getdelays -C "/sys/fs/cgroup/a"
sleeping 1, blocked 0, running 1, stopped 0, uninterruptible 0
~/balbir/cgroupstats # ./getdelays -C "/sys/fs/cgroup"
sleeping 155, blocked 0, running 1, stopped 0, uninterruptible 2