Étranglement du processeur
Étranglement du processeur (en anglais CPU throttling) : mise à l'arrêt d'un groupe de processus qui a épuisé son quota de temps processeur avant la fin de la période en cours, jusqu'à la période suivante, même si la machine a du processeur libre.
Le quota s'écrit dans le fichier cpu.max du cgroup (50000 100000 : 50 ms par période de 100 ms). Avec systemd, CPUQuota=50% donne au plus la moitié d'un processeur, par période de 100 ms par défaut. Le quota se compte pour tous les cœurs ensemble : deux fils d'exécution qui tournent en parallèle épuisent 50 ms de quota en 25 ms, puis tout le groupe attend la fin de la période. Le résultat est de la latence pure, invisible dans une consommation moyenne qui paraît modeste.
Le diagnostic se lit dans le fichier cpu.stat du groupe (par exemple /sys/fs/cgroup/system.slice/signalements.service/cpu.stat), à deux instants : si nr_throttled et throttled_usec augmentent, le groupe est étranglé. Pour un service interactif, un poids (CPUWeight=), qui ne ralentit le service que s'il y a réellement concurrence, vaut mieux qu'un quota. Dans Kubernetes, une limit de processeur devient ce même quota, d'où les mêmes surprises. À ne pas confondre avec la baisse de fréquence d'un processeur trop chaud.
Dans les cours
- Linux : administration système, leçon 11 : Borner les ressources : limites et cgroups
- Kubernetes : les fondamentaux, leçon 8 : Ressources, planification et qualité de service
- Docker : les fondamentaux, leçon 2 : Un conteneur à la main : namespaces, cgroups, capabilities