cgroups v2
我正在玩Fedora 35
(内核5.15.5-200.fc35.x86_64
)。
我能够测试cpu
,cpuset
并且pids
控制器没有任何问题。但是对于memory
,hugetlb
或者io
我遇到了麻烦。以下是如何为memory
控制器重现此问题的步骤列表(所有命令均以 root 用户身份执行):
确保在 root cgroup 中启用了内存控制器:
# cat cgroup.subtree_control cpu io memory hugetlb pids
创建新的 cgroup:
# mkdir example # cd example/
启用内存控制器:
# echo "+memory" > cgroup.subtree_control
将进程添加到控制组:
# echo $$ > cgroup.procs bash: echo: write error: Device or resource busy
当我尝试先将进程添加到cgroup
控制器并稍后启用控制器时,最后一步会发生相同的错误。
我究竟做错了什么?
这是因为 cgroups v2 “无内部进程”规则:
来源:cgroups(7)
另见内核源代码:
https://elixir.bootlin.com/linux/v5.19/source/kernel/cgroup/cgroup.c#L2586
例如,这有效: