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

Ada*_*sen 23 linux cgroup

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

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

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

?

我第一次在这里但我没有得到完整的答案。我也问过 stackoverflow,但这个问题被关闭为题外话。

小智 19

作为普通用户,您不能这样做。但是您可以以 root 身份设置一个 cgroup,并使其由您的用户配置。

如果您还没有通过例如 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
Run Code Online (Sandbox Code Playgroud)

创建一个 cgroup:

$ sudo mkdir /sys/fs/cgroup/cpuset/${USER}
$ sudo chown -R ${USER} /sys/fs/cgroup/cpuset/${USER}
Run Code Online (Sandbox Code Playgroud)

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

$ echo 0-3 > /sys/fs/cgroup/cpuset/${USER}/cpuset.cpus
Run Code Online (Sandbox Code Playgroud)

向该组添加一个进程:

$ ./my_task &
$ echo $! > /sys/fs/cgroup/cpuset/${USER}/tasks
Run Code Online (Sandbox Code Playgroud)

或者创建一个子组:

$ 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
Run Code Online (Sandbox Code Playgroud)