Rechercher

31.3. Améliorer la latence du réseau

download PDF

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.

Important

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
...

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 si intel_idle est désactivé. Par défaut, le pilote acpi_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 paquet kernel-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

  1. Afficher le profil actif :

    # tuned-adm active
    Current active profile: network-latency
  2. Créez un répertoire pour le profil TuneD personnalisé :

    # mkdir /etc/tuned/network-latency-custom/
  3. 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ètre force_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. Avec force_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 fichier latency dans ce répertoire. Si le répertoire n'existe pas, TuneD utilise 2 microsecondes comme valeur de repli.

  4. Activer le network-latency-custom profil :

    # tuned-adm profile network-latency-custom

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

  1. Affiche le pilote d'inactivité utilisé par le système :

    # cat /sys/devices/system/cpu/cpuidle/current_driver
    intel_idle
  2. Si l'hôte utilise le pilote intel_idle, définissez le paramètre du noyau intel_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 pilote intel_idle. Par conséquent, le noyau utilise le pilote acpi_idle qui utilise les valeurs d'état C définies dans le microprogramme EFI. Pour cette raison, définissez également processor.max_cstate pour remplacer ces paramètres d'état C.

  3. 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"
    Important

    Si vous définissez processor.max_cstate=0 en plus de intel_idle.max_cstate=0, le pilote acpi_idle remplace la valeur de processor.max_cstate et la fixe à 1. Par conséquent, avec processor.max_cstate=0 intel_idle.max_cstate=0, l'état C le plus élevé que le noyau utilisera est C1, et non C0.

  4. Redémarrez l'hôte pour que les modifications soient prises en compte :

    # reboot

Vérification

  1. Afficher l'état C maximal :

    # cat /sys/module/processor/parameters/max_cstate
    1
  2. 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

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.