如何以非root用户身份创建和使用Linux cgroup?


21

如何以非root用户身份创建和使用cgroup

例如,我是否可以完全以非root用户身份使用:

  • 创建一个可以访问一个CPU的cgroup
  • 在该cgroup中创建一个新进程

我首先在这里但没有得到完整的答案。我也问过stackoverflow,但是这个问题被关闭了。

Answers:


18

您不能以普通用户的身份进行操作。但是您可以将cgroup设置为root,并使其可由用户配置。

如果尚未通过例如systemd安装默认的cgroups控制器:

$ sudo mount -t tmpfs cgroup_root /sys/fs/cgroup
$ sudo mkdir /sys/fs/cgroup/cpuset
$ sudo mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset

创建一个cgroup:

$ sudo mkdir /sys/fs/cgroup/cpuset/${USER}
$ sudo chown -R ${USER} /sys/fs/cgroup/cpuset/${USER}

现在,您可以以普通用户身份修改cgroup的配置:

$ echo 0-3 > /sys/fs/cgroup/cpuset/${USER}/cpuset.cpus

向该组添加一个进程:

$ ./my_task &
$ echo $! > /sys/fs/cgroup/cpuset/${USER}/tasks

或创建一个子组:

$ mkdir /sys/fs/cgroup/cpuset/${USER}/subgroup
$ echo 0-1 > /sys/fs/cgroup/cpuset/${USER}/subgroup/cpuset.cpus
$ ./my_other_task &
$ echo $! > /sys/fs/cgroup/cpuset/${USER}/subgroup/tasks

您将如何删除该子组?rm -r我失败了
hbogert

1
rm -r会先尝试删除文件,但失败。使用rmdir删除cgroup中。
丹尼斯·B.

rmdirtasks文件为空之前,您不能。root将需要查看子组中的任务文件,并将其中的每个pid都回显到根cgroup的任务文件中(/dev/cpuset/tasks在我的RHEL 6.7 [kernel 2.6.32-358]框中,但/sys/fs/cgroup/cpuset/tasks此处可能适当)。
Mike S

1

如果您使用的是Ubuntu,则您(root用户)可以安装cgroup-lite,并将所需的内容添加到/etc/cgconfig.conf中,包括哪些用户可以更改cgroup的配置。它在启动时运行。

如果您(root用户)失败,则可以添加您自己的脚本以在引导期间运行。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.