Comment puis-je créer et utiliser des cgroups Linux en tant qu'utilisateur non root?

21

Comment puis-je créer et utiliser des groupes de contrôle en tant qu'utilisateur non root?

Par exemple, puis-je, entièrement en tant qu'utilisateur non root:

  • créer un groupe de contrôle avec accès à un CPU
  • créer un nouveau processus dans ce groupe de contrôle

?

J'ai d'abord demandé ici, mais je n'ai pas reçu de réponse complète. J'ai également posé des questions sur stackoverflow , mais la question a été fermée hors sujet.

Adam Monsen
la source

Réponses:

18

Vous ne pouvez pas faire cela en tant qu'utilisateur normal. Mais vous pouvez configurer un cgroup en tant que root et le rendre configurable par votre utilisateur.

Si vous n'avez pas déjà les contrôleurs par défaut cgroups montés par exemple par 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

Créez un groupe de contrôle:

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

Vous pouvez maintenant modifier la configuration de votre groupe de contrôle en tant qu'utilisateur normal:

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

Ajoutez un processus à ce groupe:

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

Ou créez un sous-groupe:

$ 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
la source
comment supprimeriez-vous le sous-groupe? rm -réchoue pour moi
hbogert
1
rm -ressaierait de supprimer les fichiers en premier, ce qui échoue. Utilisez rmdirpour supprimer un groupe de contrôle.
Dennis B.
Vous ne pouvez pas rmdirtant que le tasksfichier n'est pas vide. root aurait besoin de regarder le fichier des tâches dans le sous-groupe, et d'échos chaque pid dans le fichier de tâches du groupe racine ( /dev/cpuset/taskssur ma boîte RHEL 6.7 [noyau 2.6.32-358], mais il semble que cela /sys/fs/cgroup/cpuset/taskspourrait être approprié ici).
Mike S
1

Si vous utilisez Ubuntu, vous (l'utilisateur root) pouvez installer cgroup-lite et ajouter ce dont vous avez besoin à /etc/cgconfig.conf, y compris les utilisateurs qui peuvent modifier la configuration du cgroup. Il fonctionne au démarrage.

À défaut, vous (l'utilisateur root) pourriez ajouter votre propre script à exécuter pendant le démarrage.

Ken Sharp
la source