我们正在使用 Penguin Computing 的 Scyld 发行版运行 Beowulf 集群,看起来 cgroups 是在头节点上配置的,而不是在计算节点上配置的。我正在尝试配置 Slurm 以使用该proctrack/cgroup
插件,但它在计算节点上不起作用。
例如,我可以列出头节点上的 cgroup,但不能列出计算节点上的 cgroup:
$ bpsh -1 systemd-cgls
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─user.slice
...
$ bpsh 1 systemd-cgls
Failed to create bus connection: No such file or directory
$
如果我查看 cgroup 系统的挂载点,它挂载在头节点上,而不是计算节点上。计算节点在该位置只有一个空目录。
$ bpsh -1 findmnt /sys/fs/cgroup
TARGET SOURCE FSTYPE OPTIONS
/sys/fs/cgroup tmpfs tmpfs ro,nosuid,nodev,noexec,mode=755
$ bpsh 1 findmnt /sys/fs/cgroup
$ bpsh 1 ls -l /sys/fs/cgroup
total 0
$
我假设我必须在计算节点上启动一些 cgroup 服务,但该怎么做呢?我发现 RHEL文档关于 cgroups,但它只描述了如何使用它们,而不是初始设置。
更新
man7.org描述了如何安装 cgroups 控制器,但是说了这样的话:
请注意,在许多系统上,v1 控制器会自动挂载在 /sys/fs/cgroup 下;特别是,systemd(1) 会自动创建这样的挂载点。
这就解释了为什么我在头节点上看不到任何 cgroup 配置:它们只是自动安装的。为什么它们没有自动安装在计算节点上?
看起来驱动程序已加载到计算节点上,但尚未安装:
$ cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 6 1 1
cpu 4 1 1
cpuacct 4 1 1
memory 2 1 1
devices 3 1 1
freezer 10 1 1
net_cls 7 1 1
blkio 5 1 1
perf_event 9 1 1
hugetlb 8 1 1
pids 11 1 1
net_prio 7 1 1
$ bpsh 0 cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 0 1 1
cpu 0 1 1
cpuacct 0 1 1
memory 0 1 1
devices 0 1 1
freezer 0 1 1
net_cls 0 1 1
blkio 0 1 1
perf_event 0 1 1
hugetlb 0 1 1
pids 0 1 1
net_prio 0 1 1
我尝试在中搜索“cgroup” /var/log/messages
,发现头节点正在初始化 cgroup 子系统,但计算节点却没有任何信息。