¿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.

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

¿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.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.