我如何创build和使用Linux cgroups作为非root用户?

我如何创build和使用cgroups作为非root用户?

例如,我可以,完全作为一个非root用户:

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

我第一次在这里问,但我没有收到一个完整的答案。 我也问在stackoverflow ,但问题是closures的话题。

你不能像普通用户那样做。 但是你可以设置一个cgroup作为root用户,并使其可以被用户configuration。

如果您还没有安装由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 

创build一个cgroup:

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

您现在可以像普通用户一样修改cgroup的configuration:

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

向该组添加进程:

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

或者创build一个子组:

 $ 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 

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

如果你(root用户)没有能够添加你自己的脚本来在启动时运行。

在cgroup上有一系列关于LWN的文章,请参阅第1部分 ,或者查看那里的search。 Systemd包含一组帮助程序,用于pipe理cgroup所处理的进程。