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.

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

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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.