版本与时间
首版 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?
stat -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/