¿Cómo puedo crear y usar cgroups de Linux como usuario no root?

21

¿Cómo puedo crear y usar cgroups como usuario no root?

Por ejemplo, ¿puedo, completamente como usuario no root:

  • crear un cgroup con acceso a una CPU
  • crear un nuevo proceso en ese cgroup

?

Primero pregunté aquí pero no recibí una respuesta completa. También pregunté sobre stackoverflow , pero la pregunta se cerró como fuera de tema.

Adam Monsen
fuente

Respuestas:

18

No puedes hacer eso como un usuario normal. Pero puede configurar un cgroup como root y hacerlo configurable por su usuario.

Si aún no tiene los controladores predeterminados de cgroups montados, por ejemplo, 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

Crea un cgroup:

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

Ahora puede modificar la configuración de su cgroup como usuario normal:

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

Agregue un proceso a ese grupo:

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

O cree un 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
fuente
¿Cómo eliminarías el subgrupo? rm -rfalla para mí
hbogert
1
rm -rintentaría eliminar los archivos primero, lo que falla. Use rmdirpara eliminar un cgroup.
Dennis B.
No puede rmdirhasta que el tasksarchivo esté vacío. root necesitaría mirar el archivo de tareas en el subgrupo, y hacer eco de cada pid allí en el archivo de tareas del grupo de raíz ( /dev/cpuset/tasksen mi cuadro RHEL 6.7 [kernel 2.6.32-358], pero parece que /sys/fs/cgroup/cpuset/taskspodría ser apropiado aquí).
Mike S
1

Si está utilizando Ubuntu, usted (el usuario raíz) puede instalar cgroup-lite y agregar lo que necesita a /etc/cgconfig.conf, incluido qué usuario (s) puede cambiar la configuración del cgroup. Se ejecuta en el arranque.

Si no puede (el usuario raíz) podría agregar su propio script para ejecutar durante el arranque.

Ken Sharp
fuente
0

Hay una serie de artículos sobre LWN en cgroups, vea la parte 1 , o mire la búsqueda allí. Systemd incluye un conjunto de ayudantes para administrar (procesos enjaulados por) cgroups.

vonbrand
fuente
Ese enlace para la parte 1 probablemente debería apuntar a lwn.net/Articles/531114 en su lugar.
Chris
El artículo LWN vinculado trata sobre espacios de nombres, lwn.net/Articles/604609 trata sobre cgroups.
Dennis B.