20.2. Contrôle de la répartition du temps d'utilisation de l'unité centrale pour les applications en ajustant le poids de l'unité centrale
Vous devez attribuer des valeurs aux fichiers pertinents du contrôleur cpu
pour réguler la distribution du temps de CPU aux applications sous l'arborescence spécifique du cgroup.
Conditions préalables
- Vous disposez des droits d'accès à la racine.
- Vous disposez d'applications pour lesquelles vous souhaitez contrôler la répartition du temps de l'unité centrale.
Vous avez créé une hiérarchie à deux niveaux de child control groups à l'intérieur de
/sys/fs/cgroup/
root control group comme dans l'exemple suivant :… ├── Example │ ├── g1 │ ├── g2 │ └── g3 …
-
Vous avez activé le contrôleur
cpu
dans le groupe de contrôle parent et dans les groupes de contrôle enfants de la même manière que celle décrite dans la section Création de cgroups et activation de contrôleurs dans le système de fichiers cgroups-v2.
Procédure
Configurez les poids CPU souhaités afin de respecter les restrictions de ressources au sein des groupes de contrôle :
# echo "150" > /sys/fs/cgroup/Example/g1/cpu.weight # echo "100" > /sys/fs/cgroup/Example/g2/cpu.weight # echo "50" > /sys/fs/cgroup/Example/g3/cpu.weight
Ajoutez les PID des applications aux groupes enfants
g1
,g2
, etg3
:# echo "33373" > /sys/fs/cgroup/Example/g1/cgroup.procs # echo "33374" > /sys/fs/cgroup/Example/g2/cgroup.procs # echo "33377" > /sys/fs/cgroup/Example/g3/cgroup.procs
Les commandes de l'exemple garantissent que les applications souhaitées deviennent membres des cgroups enfants
Example/g*/
et que leur temps d'utilisation de l'unité centrale est réparti conformément à la configuration de ces cgroups.Les poids des cgroups enfants (
g1
,g2
,g3
) qui ont des processus en cours sont additionnés au niveau du cgroup parent (Example
). Les ressources de l'unité centrale sont ensuite réparties proportionnellement en fonction des poids respectifs.Par conséquent, lorsque tous les processus s'exécutent en même temps, le noyau alloue à chacun d'entre eux un temps d'utilisation proportionnel basé sur le fichier
cpu.weight
de leur cgroupe respectif :Enfant cgroup cpu.weight
fichierAttribution du temps de l'unité centrale g1
150
~50% (150/300)
g2
100
~33% (100/300)
g3
50
~16% (50/300)
La valeur du fichier du contrôleur
cpu.weight
n'est pas un pourcentage.Si un processus cessait de fonctionner, laissant le cgroup
g2
sans aucun processus en cours, le calcul ne tiendrait pas compte du cgroupg2
et ne prendrait en compte que les poids des cgroupsg1
etg3
:Enfant cgroup cpu.weight
fichierAttribution du temps de l'unité centrale g1
150
~75% (150/200)
g3
50
~25% (50/200)
ImportantSi un cgroup enfant a plusieurs processus en cours d'exécution, le temps CPU alloué au cgroup respectif sera distribué de manière égale aux processus membres de ce cgroup.
Vérification
Vérifiez que les applications s'exécutent dans les groupes de contrôle spécifiés :
# cat /proc/33373/cgroup /proc/33374/cgroup /proc/33377/cgroup 0::/Example/g1 0::/Example/g2 0::/Example/g3
La sortie de la commande montre les processus des applications spécifiées qui s'exécutent dans les cgroups enfants
Example/g*/
.Examinez la consommation actuelle de l'unité centrale des applications limitées :
# top top - 05:17:18 up 1 day, 18:25, 1 user, load average: 3.03, 3.03, 3.00 Tasks: 95 total, 4 running, 91 sleeping, 0 stopped, 0 zombie %Cpu(s): 18.1 us, 81.6 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st MiB Mem : 3737.0 total, 3233.7 free, 132.8 used, 370.5 buff/cache MiB Swap: 4060.0 total, 4060.0 free, 0.0 used. 3373.1 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 33373 root 20 0 18720 1748 1460 R 49.5 0.0 415:05.87 sha1sum 33374 root 20 0 18720 1756 1464 R 32.9 0.0 412:58.33 sha1sum 33377 root 20 0 18720 1860 1568 R 16.3 0.0 411:03.12 sha1sum 760 root 20 0 416620 28540 15296 S 0.3 0.7 0:10.23 tuned 1 root 20 0 186328 14108 9484 S 0.0 0.4 0:02.00 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthread ...
NoteNous avons forcé tous les processus de l'exemple à s'exécuter sur une seule unité centrale pour une illustration plus claire. Le poids de l'unité centrale applique les mêmes principes lorsqu'il est utilisé sur plusieurs unités centrales.
Notez que la ressource CPU pour les applications
PID 33373
,PID 33374
etPID 33377
a été allouée en fonction des poids, 150, 100, 50, que vous avez attribués aux groupes enfants respectifs. Ces poids correspondent à environ 50 %, 33 % et 16 % du temps d'utilisation de l'unité centrale pour chaque application.
Ressources supplémentaires