Chapitre 20. Utilisation de cgroupfs pour gérer manuellement les cgroups
Vous pouvez gérer les hiérarchies cgroup
sur votre système en créant des répertoires sur le système de fichiers virtuel cgroupfs
. Le système de fichiers est monté par défaut sur le répertoire /sys/fs/cgroup/
et vous pouvez spécifier les configurations souhaitées dans des fichiers de contrôle dédiés.
En général, Red Hat vous recommande d'utiliser systemd
pour contrôler l'utilisation des ressources du système. Vous ne devez configurer manuellement le système de fichiers virtuel cgroups
que dans des cas particuliers. Par exemple, lorsque vous devez utiliser des contrôleurs cgroup-v1
qui n'ont pas d'équivalents dans la hiérarchie cgroup-v2
.
20.1. Création de cgroups et activation de contrôleurs dans le système de fichiers cgroups-v2
Vous pouvez gérer le répertoire control groups (cgroups
) en créant ou en supprimant des répertoires et en écrivant sur les fichiers du système de fichiers virtuel cgroups
. Le système de fichiers est monté par défaut sur le répertoire /sys/fs/cgroup/
. Pour utiliser les paramètres des contrôleurs cgroups
, vous devez également activer les contrôleurs souhaités pour l'enfant cgroups
. La racine cgroup
a, par défaut, activé les contrôleurs memory
et pids
pour son enfant cgroups
. Par conséquent, Red Hat recommande de créer au moins deux niveaux d'enfants cgroups
à l'intérieur de la racine /sys/fs/cgroup/
cgroup
. De cette manière, vous pouvez éventuellement supprimer les contrôleurs memory
et pids
de l'enfant cgroups
et maintenir une meilleure clarté organisationnelle des fichiers cgroup
.
Conditions préalables
- Vous disposez des droits d'accès à la racine.
Procédure
Créez le répertoire
/sys/fs/cgroup/Example/
:# mkdir /sys/fs/cgroup/Example/
Le répertoire
/sys/fs/cgroup/Example/
définit un groupe enfant. Lorsque vous créez le répertoire/sys/fs/cgroup/Example/
, certains fichiers d'interfacecgroups-v2
sont automatiquement créés dans le répertoire. Le répertoire/sys/fs/cgroup/Example/
contient également des fichiers spécifiques aux contrôleursmemory
etpids
.Il est possible d'inspecter le groupe de contrôle enfant nouvellement créé :
# ll /sys/fs/cgroup/Example/ -r—r—r--. 1 root root 0 Jun 1 10:33 cgroup.controllers -r—r—r--. 1 root root 0 Jun 1 10:33 cgroup.events -rw-r—r--. 1 root root 0 Jun 1 10:33 cgroup.freeze -rw-r—r--. 1 root root 0 Jun 1 10:33 cgroup.procs … -rw-r—r--. 1 root root 0 Jun 1 10:33 cgroup.subtree_control -r—r—r--. 1 root root 0 Jun 1 10:33 memory.events.local -rw-r—r--. 1 root root 0 Jun 1 10:33 memory.high -rw-r—r--. 1 root root 0 Jun 1 10:33 memory.low … -r—r—r--. 1 root root 0 Jun 1 10:33 pids.current -r—r—r--. 1 root root 0 Jun 1 10:33 pids.events -rw-r—r--. 1 root root 0 Jun 1 10:33 pids.max
L'exemple de sortie montre les fichiers généraux de l'interface de contrôle
cgroup
tels quecgroup.procs
oucgroup.controllers
. Ces fichiers sont communs à tous les groupes de contrôle, quels que soient les contrôleurs activés.Les fichiers tels que
memory.high
etpids.max
se rapportent aux contrôleursmemory
etpids
, qui se trouvent dans le groupe de contrôle racine (/sys/fs/cgroup/
), et sont activés par défaut parsystemd
.Par défaut, le groupe enfant nouvellement créé hérite de tous les paramètres du parent
cgroup
. Dans ce cas, aucune limite n'est imposée par la racinecgroup
.Vérifiez que les contrôleurs souhaités sont disponibles dans le fichier
/sys/fs/cgroup/cgroup.controllers
:# cat /sys/fs/cgroup/cgroup.controllers cpuset cpu io memory hugetlb pids rdma
Activez les contrôleurs souhaités. Dans cet exemple, il s'agit des contrôleurs
cpu
etcpuset
:# echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control # echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_control
Ces commandes activent les contrôleurs
cpu
etcpuset
pour les groupes enfants immédiats du groupe de contrôle racine/sys/fs/cgroup/
. Y compris le groupe de contrôleExample
nouvellement créé. Un site child group est l'endroit où vous pouvez spécifier des processus et appliquer des contrôles à chacun des processus en fonction de vos critères.Les utilisateurs peuvent lire le contenu du fichier
cgroup.subtree_control
à n'importe quel niveau pour avoir une idée des contrôleurs qui seront disponibles pour l'activation dans le groupe enfant immédiat.NotePar défaut, le fichier
/sys/fs/cgroup/cgroup.subtree_control
du groupe de contrôle racine contient les contrôleursmemory
etpids
.Activez les contrôleurs souhaités pour l'enfant
cgroups
du groupe de contrôleExample
:# echo " cpu cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_control
Cette commande garantit que le groupe de contrôle enfant immédiat only aura des contrôleurs pertinents pour réguler la distribution du temps CPU - et non des contrôleurs
memory
oupids
.Créez le répertoire
/sys/fs/cgroup/Example/tasks/
:# mkdir /sys/fs/cgroup/Example/tasks/
Le répertoire
/sys/fs/cgroup/Example/tasks/
définit un groupe enfant avec des fichiers qui se rapportent uniquement aux contrôleurscpu
etcpuset
. Vous pouvez maintenant affecter des processus à ce groupe de contrôle et utiliser les options des contrôleurscpu
etcpuset
pour vos processus.Optionnellement, inspecter le groupe de contrôle de l'enfant :
# ll /sys/fs/cgroup/Example/tasks -r—r—r--. 1 root root 0 Jun 1 11:45 cgroup.controllers -r—r—r--. 1 root root 0 Jun 1 11:45 cgroup.events -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.freeze -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.max.depth -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.max.descendants -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.procs -r—r—r--. 1 root root 0 Jun 1 11:45 cgroup.stat -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.subtree_control -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.threads -rw-r—r--. 1 root root 0 Jun 1 11:45 cgroup.type -rw-r—r--. 1 root root 0 Jun 1 11:45 cpu.max -rw-r—r--. 1 root root 0 Jun 1 11:45 cpu.pressure -rw-r—r--. 1 root root 0 Jun 1 11:45 cpuset.cpus -r—r—r--. 1 root root 0 Jun 1 11:45 cpuset.cpus.effective -rw-r—r--. 1 root root 0 Jun 1 11:45 cpuset.cpus.partition -rw-r—r--. 1 root root 0 Jun 1 11:45 cpuset.mems -r—r—r--. 1 root root 0 Jun 1 11:45 cpuset.mems.effective -r—r—r--. 1 root root 0 Jun 1 11:45 cpu.stat -rw-r—r--. 1 root root 0 Jun 1 11:45 cpu.weight -rw-r—r--. 1 root root 0 Jun 1 11:45 cpu.weight.nice -rw-r—r--. 1 root root 0 Jun 1 11:45 io.pressure -rw-r—r--. 1 root root 0 Jun 1 11:45 memory.pressure
Le contrôleur cpu
n'est activé que si le groupe de contrôle enfant concerné comporte au moins deux processus qui se disputent le temps d'une seule unité centrale.
Verification steps
Facultatif : confirmez que vous avez créé un nouveau site
cgroup
avec uniquement les contrôleurs souhaités actifs :# cat /sys/fs/cgroup/Example/tasks/cgroup.controllers cpuset cpu
Ressources supplémentaires
- Comprendre les groupes de contrôle
- Que sont les contrôleurs de ressources du noyau ?
- Montage de cgroups-v1
-
cgroups(7)
,sysfs(5)
pages de manuel