cgroup 控制器委派未向下传递层次结构

cgroup 控制器委派未向下传递层次结构

如果我删掉了一些术语,请原谅我,因为整个 cgroup 事情对我来说都是新的......

背景故事是我想要得到的种类在具有无根 podman 的 Rocky Linux 8 和/或 9 中运行。我已经让两个操作系统版本都达到了主要使用 cgroup v2 的相同点,但无法弄清楚如何让它完全工作。

通过一些配置(在 Rocky 8 上更是如此),我启用了 cgroup 控制器委派,但它似乎在 cgroup 层次结构中途停止。

配置 systemd 的重要一点是

# /etc/systemd/system/[email protected]/delegate.conf
[Service]
Delegate=cpu cpuset io memory pids

验证所需的控制器现在可用:

$ cat /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/cgroup.controllers
cpuset cpu io memory pids

然而,用户服务的子树控制确实不是包括所有这些控制器:

$ cat /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/cgroup.subtree_control
memory pids

因为我与之交互的终端位于该用户服务下,所以它没有委派给它的 cpu 和 io 控制器:

$ cat /proc/self/cgroup
0::/user.slice/user-1000.slice/[email protected]/gnome-terminal-server.service

$ cat /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/gnome-terminal-server.service/cgrouop.controllers
memory pids

尝试kind create cluster在此配置中运行会出错,因为未委派必要的控制器。

如果我手动将这些控制器添加到用户服务 subtree_control 中:

$ echo '+cpuset +cpu +io' > /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]

一切都很好。

所以我的问题是 - 我缺少什么来自动完成最后的授权传递?我真的不想每次登录时都运行该 echo 命令。

相关内容