Как я могу создавать и использовать Linux cgroups как пользователь без полномочий root?

21

Как я могу создавать и использовать cgroups как пользователь без полномочий root?

Например, могу ли я полностью как пользователь без полномочий root:

  • создать группу с доступом к одному процессору
  • создать новый процесс в этой группе

?

Я сначала спросил здесь, но я не получил полный ответ. Я также спрашивал о stackoverflow , но вопрос был закрыт как не по теме.

Адам Монсен
источник

Ответы:

18

Вы не можете сделать это как обычный пользователь. Но вы можете настроить cgroup как root и сделать ее настраиваемой вашим пользователем.

Если у вас еще нет контроллеров cgroups по умолчанию, смонтированных, например, 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

Создать группу:

$ 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.
Деннис Б.
Вы не можете, rmdirпока tasksфайл не будет пустым. root должен посмотреть на файл задач в подгруппе и отобразить каждый pid там в файле задач корневой cgroup ( /dev/cpuset/tasksв моем окне RHEL 6.7 [kernel 2.6.32-358], но здесь это /sys/fs/cgroup/cpuset/tasksможет показаться уместным).
Майк С
1

Если вы используете Ubuntu, вы (пользователь root) можете установить cgroup-lite и добавить то, что вам нужно, в /etc/cgconfig.conf, включая то, какие пользователи могут изменять конфигурацию cgroup. Он работает при загрузке.

В противном случае вы (пользователь root) можете добавить свой собственный скрипт для запуска во время загрузки.

Кен Шарп
источник
0

Есть серия статей о LWN по cgroups, см. Часть 1 , или посмотрите поиск там. Systemd включает набор помощников для управления (процессы, управляемые) cgroups.

vonbrand
источник
Эта ссылка для части 1, скорее всего, должна указывать на lwn.net/Articles/531114 .
Крис
Связанная статья LWN о пространствах имен, lwn.net/Articles/604609 о cgroups.
Деннис Б.