18.2. Que sont les contrôleurs de ressources du noyau ?
La fonctionnalité des groupes de contrôle est activée par les contrôleurs de ressources du noyau. RHEL 9 prend en charge différents contrôleurs pour control groups version 1 (cgroups-v1
) et control groups version 2 (cgroups-v2
).
Un contrôleur de ressources, également appelé sous-système de groupe de contrôle, est un sous-système du noyau qui représente une ressource unique, telle que le temps de l'unité centrale, la mémoire, la bande passante du réseau ou les entrées/sorties du disque. Le noyau Linux fournit une gamme de contrôleurs de ressources qui sont montés automatiquement par le système systemd
et le gestionnaire de services. La liste des contrôleurs de ressources actuellement montés se trouve dans le fichier /proc/cgroups
.
Les contrôleurs suivants sont disponibles pour cgroups-v1
:
-
blkio
- peut fixer des limites à l'accès aux entrées/sorties vers et depuis les périphériques de bloc. -
cpu
- peut ajuster les paramètres de l'ordonnanceur Completely Fair Scheduler (CFS) pour les tâches du groupe de contrôle. Il est monté avec le contrôleurcpuacct
sur le même support. -
cpuacct
- crée des rapports automatiques sur les ressources CPU utilisées par les tâches d'un groupe de contrôle. Il est monté avec le contrôleurcpu
sur le même support. -
cpuset
- peut être utilisé pour limiter l'exécution des tâches du groupe de contrôle à un sous-ensemble spécifié de CPU et pour ordonner aux tâches d'utiliser la mémoire uniquement sur les nœuds de mémoire spécifiés. -
devices
- peut contrôler l'accès aux appareils pour les tâches d'un groupe de contrôle. -
freezer
- peut être utilisé pour suspendre ou reprendre des tâches dans un groupe de contrôle. -
memory
- peut être utilisé pour fixer des limites à l'utilisation de la mémoire par les tâches d'un groupe de contrôle et génère des rapports automatiques sur les ressources mémoire utilisées par ces tâches. -
net_cls
- marque les paquets réseau avec un identifiant de classe (classid
) qui permet au contrôleur de trafic Linux (la commandetc
) d'identifier les paquets qui proviennent d'une tâche de groupe de contrôle particulière. Un sous-système denet_cls
,net_filter
(iptables), peut également utiliser cette étiquette pour effectuer des actions sur ces paquets. Lenet_filter
marque les sockets réseau avec un identifiant de pare-feu (fwid
) qui permet au pare-feu Linux (via la commandeiptables
) d'identifier les paquets provenant d'une tâche particulière du groupe de contrôle. -
net_prio
- définit la priorité du trafic réseau. -
pids
- peut fixer des limites pour un certain nombre de processus et leurs enfants dans un groupe de contrôle. -
perf_event
- peut regrouper les tâches à surveiller par l'utilitaire de surveillance des performances et de création de rapportsperf
. -
rdma
- peut fixer des limites aux ressources spécifiques Remote Direct Memory Access/InfiniBand dans un groupe de contrôle. -
hugetlb
- peut être utilisé pour limiter l'utilisation de pages de mémoire virtuelle de grande taille par les tâches d'un groupe de contrôle.
Les contrôleurs suivants sont disponibles pour cgroups-v2
:
-
io
- Un suivi deblkio
ofcgroups-v1
. -
memory
- Un suivi dememory
ofcgroups-v1
. -
pids
- Identique àpids
danscgroups-v1
. -
rdma
- Identique àrdma
danscgroups-v1
. -
cpu
- Un suivi decpu
etcpuacct
decgroups-v1
. -
cpuset
- Ne prend en charge que la fonctionnalité de base (cpus{,.effective}
,mems{,.effective}
) avec une nouvelle fonction de partition. -
perf_event
- La prise en charge est inhérente, il n'y a pas de fichier de contrôle explicite. Vous pouvez spécifier une adressev2 cgroup
en tant que paramètre de la commandeperf
qui établira le profil de toutes les tâches contenues dans cette adressecgroup
.
Un contrôleur de ressources peut être utilisé soit dans une hiérarchie cgroups-v1
, soit dans une hiérarchie cgroups-v2
, mais pas simultanément dans les deux.
Ressources supplémentaires
-
cgroups(7)
page du manuel -
Documentation dans le répertoire
/usr/share/doc/kernel-doc-<kernel_version>/Documentation/cgroups-v1/
(après avoir installé le paquetagekernel-doc
).