31.3. Améliorer la latence du réseau
Les fonctions de gestion de l'alimentation du processeur peuvent entraîner des retards indésirables dans le traitement des applications sensibles au facteur temps. Vous pouvez désactiver tout ou partie de ces fonctions de gestion de l'alimentation pour améliorer la latence du réseau.
Par exemple, si la latence est plus élevée lorsque le serveur est inactif que lorsqu'il est fortement sollicité, les paramètres de gestion de l'alimentation du processeur peuvent influer sur la latence.
La désactivation des fonctions de gestion de l'alimentation du processeur peut entraîner une augmentation de la consommation d'énergie et une perte de chaleur.
31.3.1. Comment les états de puissance de l'unité centrale influencent la latence du réseau
Les états de consommation (C-states) des CPU optimisent et réduisent la consommation d'énergie des ordinateurs. Les états C sont numérotés, en commençant par C0. En C0, le processeur est entièrement alimenté et en cours d'exécution. En C1, le processeur est entièrement alimenté mais n'est pas en cours d'exécution. Plus le numéro de l'état C est élevé, plus le processeur éteint de composants.
Chaque fois qu'un cœur de processeur est inactif, la logique d'économie d'énergie intégrée intervient et tente de faire passer le cœur de l'état C actuel à un état supérieur en éteignant divers composants du processeur. Si le cœur du processeur doit traiter des données, Red Hat Enterprise Linux (RHEL) envoie une interruption au processeur pour réveiller le cœur et ramener son état C à C0.
Sortir des états C profonds pour revenir à C0 prend du temps en raison de la remise sous tension des différents composants du processeur. Sur les systèmes multicœurs, il peut également arriver que de nombreux cœurs soient simultanément inactifs et, par conséquent, dans des états C profonds. Si RHEL tente de les réveiller en même temps, le noyau peut générer un grand nombre d'interruptions inter-processeurs (IPI) pendant que tous les cœurs reviennent d'états C profonds. En raison du verrouillage requis lors du traitement des interruptions, le système peut alors se bloquer pendant un certain temps pour traiter toutes les interruptions. Cela peut entraîner des retards importants dans la réponse de l'application aux événements.
Exemple 31.2. Affichage des temps dans l'état C par cœur
La page Idle Stats
de l'application PowerTOP affiche le temps que les cœurs de l'unité centrale passent dans chaque état C :
Pkg(HW) | Core(HW) | CPU(OS) 0 CPU(OS) 4 | | C0 active 2.5% 2.2% | | POLL 0.0% 0.0 ms 0.0% 0.1 ms | | C1 0.1% 0.2 ms 0.0% 0.1 ms C2 (pc2) 63.7% | | C3 (pc3) 0.0% | C3 (cc3) 0.1% | C3 0.1% 0.1 ms 0.1% 0.1 ms C6 (pc6) 0.0% | C6 (cc6) 8.3% | C6 5.2% 0.6 ms 6.0% 0.6 ms C7 (pc7) 0.0% | C7 (cc7) 76.6% | C7s 0.0% 0.0 ms 0.0% 0.0 ms C8 (pc8) 0.0% | | C8 6.3% 0.9 ms 5.8% 0.8 ms C9 (pc9) 0.0% | | C9 0.4% 3.7 ms 2.2% 2.2 ms C10 (pc10) 0.0% | | | | C10 80.8% 3.7 ms 79.4% 4.4 ms | | C1E 0.1% 0.1 ms 0.1% 0.1 ms ...
Ressources supplémentaires
31.3.2. Paramètres de l'état C dans le micrologiciel EFI
Dans la plupart des systèmes dotés d'un microprogramme EFI, vous pouvez activer et désactiver les différents états de consommation (C-states). Cependant, sur Red Hat Enterprise Linux (RHEL), le pilote de veille détermine si le noyau utilise les paramètres du microprogramme :
-
intel_idle
: Il s'agit du pilote par défaut sur les hôtes dotés d'un processeur Intel, qui ignore les paramètres d'état C du micrologiciel EFI. -
acpi_idle
: RHEL utilise ce pilote sur les hôtes équipés de processeurs de fournisseurs autres qu'Intel et siintel_idle
est désactivé. Par défaut, le piloteacpi_idle
utilise les paramètres d'état C du micrologiciel EFI.
Ressources supplémentaires
-
/usr/share/doc/kernel-doc-<version>/Documentation/admin-guide/pm/cpuidle.rst
fournie par le paquetkernel-doc
31.3.3. Désactivation des états C par l'utilisation d'un profil TuneD personnalisé
Le service TuneD utilise l'interface Power Management Quality of Service (PMQOS
) du noyau pour définir le verrouillage des états de consommation (C-states). Le pilote d'inactivité du noyau peut communiquer avec cette interface pour limiter dynamiquement les états C. Cela évite aux administrateurs de devoir coder en dur une valeur maximale d'état C en utilisant le pilote d'inactivité du noyau. Cela évite aux administrateurs de devoir coder en dur une valeur maximale d'état C en utilisant les paramètres de la ligne de commande du noyau.
Conditions préalables
-
Le paquet
tuned
est installé. -
Le service
tuned
est activé et fonctionne.
Procédure
Afficher le profil actif :
# tuned-adm active Current active profile: network-latency
Créez un répertoire pour le profil TuneD personnalisé :
# mkdir /etc/tuned/network-latency-custom/
Créez le fichier
/etc/tuned/network-latency-custom/tuned.conf
avec le contenu suivant :[main] include=network-latency [cpu] force_latency=cstate.id:1|2
Ce profil personnalisé hérite de tous les paramètres du profil
network-latency
. Le paramètreforce_latency
TuneD spécifie la latence en microsecondes (µs). Si la latence de l'état C est supérieure à la valeur spécifiée, le pilote de ralenti de Red Hat Enterprise Linux empêche le CPU de passer à un état C supérieur. Avecforce_latency=cstate.id:1|2
, TuneD vérifie d'abord si le répertoire/sys/devices/system/cpu/cpu_<number>_/cpuidle/state_<cstate.id>_/
existe. Dans ce cas, TuneD lit la valeur de latence à partir du fichierlatency
dans ce répertoire. Si le répertoire n'existe pas, TuneD utilise 2 microsecondes comme valeur de repli.Activer le
network-latency-custom
profil :# tuned-adm profile network-latency-custom
Ressources supplémentaires
31.3.4. Désactivation des états C à l'aide d'une option de la ligne de commande du noyau
Les paramètres de ligne de commande du noyau processor.max_cstate
et intel_idle.max_cstat
configurent les états de consommation maximum (C-state) que les cœurs du CPU peuvent utiliser. Par exemple, en réglant les paramètres sur 1
, on s'assure que le processeur ne demandera jamais un état C inférieur à C1.
Utilisez cette méthode pour tester si la latence des applications sur un hôte est affectée par les états C. Pour ne pas coder en dur un état spécifique, envisagez d'utiliser une solution plus dynamique. Voir Désactiver les états C en utilisant un profil TuneD personnalisé.
Conditions préalables
-
Le service
tuned
n'est pas en cours d'exécution ou est configuré pour ne pas mettre à jour les paramètres de l'état C.
Procédure
Affiche le pilote d'inactivité utilisé par le système :
# cat /sys/devices/system/cpu/cpuidle/current_driver intel_idle
Si l'hôte utilise le pilote
intel_idle
, définissez le paramètre du noyauintel_idle.max_cstate
pour définir l'état C le plus élevé que les cœurs de CPU doivent pouvoir utiliser :# grubby --update-kernel=ALL --args="intel_idle.max_cstate=0"
Le réglage de
intel_idle.max_cstate=0
désactive le piloteintel_idle
. Par conséquent, le noyau utilise le piloteacpi_idle
qui utilise les valeurs d'état C définies dans le microprogramme EFI. Pour cette raison, définissez égalementprocessor.max_cstate
pour remplacer ces paramètres d'état C.Sur chaque hôte, indépendamment du fournisseur de l'unité centrale, définir l'état C le plus élevé que les cœurs de l'unité centrale devraient être en mesure d'utiliser :
# grubby --update-kernel=ALL --args="processor.max_cstate=0"
ImportantSi vous définissez
processor.max_cstate=0
en plus deintel_idle.max_cstate=0
, le piloteacpi_idle
remplace la valeur deprocessor.max_cstate
et la fixe à1
. Par conséquent, avecprocessor.max_cstate=0 intel_idle.max_cstate=0
, l'état C le plus élevé que le noyau utilisera est C1, et non C0.Redémarrez l'hôte pour que les modifications soient prises en compte :
# reboot
Vérification
Afficher l'état C maximal :
# cat /sys/module/processor/parameters/max_cstate 1
Si l'hôte utilise le pilote
intel_idle
, affichez l'état C maximum :# cat /sys/module/intel_idle/parameters/max_cstate 0
Ressources supplémentaires
- Que sont les "C-states" du processeur et comment les désactiver si nécessaire ?
-
/usr/share/doc/kernel-doc-<version>/Documentation/admin-guide/pm/cpuidle.rst
fournie par le paquetkernel-doc