NewThis is a live doc! Anyone with edit access can make updates in real time without having to publish.
cgroup v1 vs v2

版本与时间

首版 cgroup v1 - 2.6.24

开始开发 v2 - 3.10

发布 v2 - 4.5

变化

  • 不同的 cgroup subsystem

    • cgroup v2 可用的 subsystem、subsystem 中的功能与 cgroup v1 有出入

    • 对于 cgroup v2 中不存在的 controller,可以利用 cgroup v1 挂载

    • 对于 cgroup v2 中存在的 controller,也可以利用 cgroup v1 挂载 - 但是需要注意同一个 controller 只能被 v1 或者 v2 之一使用,不能同时挂载到 v1 和 v2

  • 单一 hierarchy

    • 在 v1 中,不同的 controller 可以挂载到不同的位置中

    • 在 v2 中,所有 controller 必须被挂载到一起(一个统一的 cgroup2fs)

  • 只有 root 和 叶子 hierarchy 才能设定进程列表

    • 例如存在 /a/b/c hierarchy,在 v1 中 /、 /a、/a/b、/a/b/c 均可以指定不同的 cgroup.procs,在 v2 中则只有 / 和 /a/b/c 可以指定

  • 限制继承

    • 默认子 cgroup 不可以使用任何 controller - 需要明确使用 cgroup.subtree_control 授权


另外,

  • cgroup v1 和 v2 可以共存,但是同一个 controller 只能存在于二者中的一个

如何知道现有 cgroups 是 v1 还是 v2?

1stat -fc %T /sys/fs/cgroup/

如果是 cgroups v1,往往是 tmpfs

如果是 cgroups v2,是 cgroup2fs

参考

https://man7.org/linux/man-pages/man7/cgroups.7.html

https://docs.kernel.org/admin-guide/cgroup-v2.html

https://kubernetes.io/zh-cn/docs/concepts/architecture/cgroups/

https://man7.org/linux/man-pages/man1/systemd.1.html