21

How can I create and use cgroups as a non-root user?

For example, can I, entirely as a non-root user:

  • create a cgroup with access to one CPU
  • create a new process in that cgroup

?

I first asked here but I didn't receive a complete answer. I also asked on stackoverflow, but the question was closed as off topic.

18

You can't do that as a normal user. But you can setup a cgroup as root, and make it configurable by your user.

If you do not already have the default cgroups controllers mounted by e.g. systemd:

$ 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

Create a cgroup:

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

You can now modify the configuration of your cgroup as a normal user:

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

Add a process to that group:

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

Or create a subgroup:

$ 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
  • how would you delete the subgroup? rm -r fails for me – hbogert Jun 11 '16 at 15:34
  • 1
    rm -r would try to delete the files first, which fails. Use rmdir to remove a cgroup. – Dennis B. Jun 12 '16 at 15:59
  • You cannot rmdir until the tasks file is empty. root would need to look at the tasks file in the subgroup, and echo each pid there into the root cgroup's tasks file (/dev/cpuset/tasks on my RHEL 6.7 [kernel 2.6.32-358] box, but it looks like /sys/fs/cgroup/cpuset/tasks might by appropriate here). – Mike S Dec 12 '17 at 22:25
1

If you're using Ubuntu you (the root user) can install cgroup-lite and add what you need to /etc/cgconfig.conf, including which user(s) can change the cgroup's configuration. It runs on boot.

Failing that you (the root user) could add your own script to run during boot.

0

There is a series of articles on LWN on cgroups, see part 1, or look though the search there. Systemd includes a set of helpers to manage (processes caged by) cgroups.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.