普通用户如何在自定义的根 cgroup 中运行 podman?

19 小时 50 分钟前
 wniming

环境如下:

d@develop:~$ cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/cpuset.cpus.effective
0-15
d@develop:~$ 
d@develop:~$ cat /sys/fs/cgroup/custom.slice/cpuset.cpus.effective
16-19
d@develop:~$ 

当前用户的 cgroup 的 cpuset 是 0-15 ,自定义的 custom.slice 这个 cgroup 的 cpuset 是 16-19 ,我希望 podman 在 custom.slice 这个 cgroup 中运行,试了下面这种方法不管用:

systemd-run --slice=custom.slice --scope podman start f42

有没有 v 友能指导一下要怎么实现?

620 次点击
所在节点    Linux
5 条回复
abbottcn
17 小时 50 分钟前
可能不相关,仅供参考。

高性能计算中,使用 slurm 等调度器,管制资源分派。slurm cgroup
其他层面不懂。
webcape233
15 小时 14 分钟前
我估计是你运行这条命令并不能管到容器,slice 只能控制这个进程及其子进程吧。 试试 podman run --cgroup-parent
wniming
14 小时 48 分钟前
@webcape233

podman run --cgroup-parent 不管用,比如创建一个当前用户的自定义 slice:

d@develop:~$ cat .config/systemd/user/test123.slice
[Slice]
AllowedCPUs=16-19 # test123.slice 的 cpuset 不在当前用户的 cpuset 的范围内
d@develop:~$

然后

d@develop:~$ podman run --cgroup-parent=test123.slice --rm -it f42_0:latest
root@fd4bb672e93d:/# nproc
16
root@fd4bb672e93d:/#

可以看到在 podman 内有 16 个 cpu (也就是当前用户的那 16 个 cpu ),如果自定义的 slice 的 cpuset 在当前用户的 cpuset 的范围内的话是有效的,比如:

d@develop:~$ cat .config/systemd/user/test123.slice
[Slice]
AllowedCPUs=14,15
d@develop:~$ podman run --cgroup-parent=test123.slice --rm -it f42_0:latest
root@6388921a756f:/# nproc
2
root@6388921a756f:/#
zizon
1 小时 47 分钟前
@wniming 这不是接近你想要的结果了么?
只要解决/确保 podman run 的的 parent-slice 是 cmd 所在的 slice 的有效子集就行了?
wniming
1 小时 18 分钟前
@zizon 我是想让 podman 运行在当前用户的 cpuset 以外的 cpu 上。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1158998

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX