Como posso criar e usar os cgroups do Linux como um usuário não root?

21

Como posso criar e usar o cgroups como um usuário não root?

Por exemplo, posso inteiramente como um usuário não root:

  • crie um cgroup com acesso a uma CPU
  • crie um novo processo nesse cgroup

?

Perguntei aqui pela primeira vez, mas não recebi uma resposta completa. Também perguntei no stackoverflow , mas a questão foi encerrada como off topic.

Adam Monsen
fonte

Respostas:

18

Você não pode fazer isso como um usuário normal. Mas você pode configurar um cgroup como root e configurá-lo pelo usuário.

Se você ainda não possui os controladores cgroups padrão montados por, por exemplo, 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

Crie um cgroup:

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

Agora você pode modificar a configuração do seu cgroup como um usuário normal:

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

Adicione um processo a esse grupo:

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

Ou crie um subgrupo:

$ 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
chris
fonte
como você excluiria o subgrupo? rm -rnão para mim
hbogert
1
rm -rtentaria excluir os arquivos primeiro, o que falha. Use rmdirpara remover um cgroup.
Dennis B.
Você não pode rmdiraté o tasksarquivo estar vazio. o root precisaria olhar o arquivo de tarefas no subgrupo e repetir cada pid lá no arquivo de tarefas do cgroup raiz ( /dev/cpuset/tasksna minha caixa RHEL 6.7 [kernel 2.6.32-358], mas parece que /sys/fs/cgroup/cpuset/taskspode ser apropriado aqui).
Mike S
1

Se você estiver usando o Ubuntu, você (o usuário root) pode instalar o cgroup-lite e adicionar o que você precisa no arquivo /etc/cgconfig.conf, incluindo quais usuários podem alterar a configuração do cgroup. Ele roda na inicialização.

Se você (o usuário root) não puder adicionar seu próprio script para executar durante a inicialização.

Ken Sharp
fonte
0

Há uma série de artigos sobre o LWN nos cgroups, consulte a parte 1 ou consulte a pesquisa lá. O Systemd inclui um conjunto de auxiliares para gerenciar (processos em gaiola por) cgroups.

vonbrand
fonte
Esse link para a parte 1 provavelmente deve apontar para lwn.net/Articles/531114 .
chris
O artigo vinculado do LWN é sobre namespaces, lwn.net/Articles/604609 é sobre cgroups.
Dennis B.