控制组统计信息

控制组统计信息的灵感来源于 https://lore.kernel.org/r/[email protected] 的讨论,并实现了 Andrew Morton 在 https://lore.kernel.org/r/[email protected] 中建议的每个 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