Rechercher

Chapitre 31. Optimiser les performances du réseau

download PDF

Le réglage des paramètres du réseau est un processus complexe qui doit prendre en compte de nombreux facteurs. Par exemple, cela inclut l'architecture CPU-mémoire, le nombre de cœurs de CPU, etc. Red Hat Enterprise Linux utilise des paramètres par défaut qui sont optimisés pour la plupart des scénarios. Cependant, dans certains cas, il peut être nécessaire d'ajuster les paramètres du réseau afin d'augmenter le débit ou la latence ou de résoudre des problèmes, tels que des chutes de paquets.

31.1. Réglage des paramètres de la carte réseau

Dans les réseaux à haut débit de 40 Gbps et plus, certaines valeurs par défaut des paramètres du noyau liés à la carte réseau peuvent être à l'origine de chutes de paquets et d'une dégradation des performances. L'ajustement de ces paramètres peut éviter de tels problèmes.

31.1.1. Augmentation des tampons de l'anneau pour réduire un taux élevé de perte de paquets

Les tampons d'anneau de réception sont partagés entre le pilote du périphérique et le contrôleur d'interface réseau (NIC). La carte attribue un tampon circulaire de transmission (TX) et de réception (RX). Comme son nom l'indique, le ring buffer est un tampon circulaire dans lequel un débordement écrase les données existantes. Il existe deux façons de transférer des données de la carte d'interface réseau au noyau : les interruptions matérielles et les interruptions logicielles, également appelées SoftIRQ.

Le noyau utilise le tampon de l'anneau RX pour stocker les paquets entrants jusqu'à ce qu'ils puissent être traités par le pilote de périphérique. Le pilote de périphérique vide l'anneau RX, généralement à l'aide de SoftIRQ, ce qui place les paquets entrants dans une structure de données du noyau appelée sk_buff ou skb pour commencer son voyage à travers le noyau et jusqu'à l'application qui possède la prise correspondante.

Le noyau utilise le tampon circulaire TX pour contenir les paquets sortants destinés au réseau. Ces tampons en anneau se trouvent au bas de la pile et constituent un point crucial où des paquets peuvent être abandonnés, ce qui affecte négativement les performances du réseau.

Augmentez la taille des tampons en anneau d'un périphérique Ethernet si le taux de perte de paquets entraîne des pertes de données, des dépassements de délai ou d'autres problèmes pour les applications.

Procédure

  1. Affiche les statistiques de chute de paquets de l'interface :

    # ethtool -S enp1s0
        ...
        rx_queue_0_drops: 97326
        rx_queue_1_drops: 63783
        ...

    Notez que la sortie de la commande dépend de la carte réseau et du pilote.

    Des valeurs élevées dans les compteurs discard ou drop indiquent que le tampon disponible se remplit plus rapidement que le noyau ne peut traiter les paquets. L'augmentation des tampons de l'anneau peut aider à éviter de telles pertes.

  2. Affiche la taille maximale des tampons de l'anneau :

    # ethtool -g enp1s0
     Ring parameters for enp1s0:
     Pre-set maximums:
     RX:             4096
     RX Mini:        0
     RX Jumbo:       16320
     TX:             4096
     Current hardware settings:
     RX:             255
     RX Mini:        0
     RX Jumbo:       0
     TX:             255

    Si les valeurs de la section Pre-set maximums sont plus élevées que celles de la section Current hardware settings, vous pouvez modifier les paramètres dans les étapes suivantes.

  3. Identifier le profil de connexion NetworkManager qui utilise l'interface :

    # nmcli connection show
    NAME                UUID                                  TYPE      DEVICE
    Example-Connection  a5eb6490-cc20-3668-81f8-0314a27f3f75  ethernet  enp1s0
  4. Mettez à jour le profil de connexion et augmentez les tampons de l'anneau :

    • Pour augmenter la mémoire tampon de l'anneau RX, entrez :

      # nmcli connection modify Example-Connection ethtool.ring-rx 4096
    • Pour augmenter la mémoire tampon de l'anneau TX, entrez :

      # nmcli connection modify Example-Connection ethtool.ring-tx 4096
  5. Recharger la connexion au NetworkManager :

    # nmcli connection up Example-Connection
    Important

    Selon le pilote utilisé par votre carte d'interface réseau, un changement dans la mémoire tampon de l'anneau peut interrompre brièvement la connexion réseau.

31.1.2. Optimisation de la file d'attente des périphériques de réseau pour éviter les chutes de paquets

Lorsqu'une carte réseau reçoit des paquets et avant que la pile de protocoles du noyau ne les traite, le noyau stocke ces paquets dans des files d'attente. Le noyau maintient une file d'attente distincte pour chaque cœur de processeur.

Si la file d'attente d'un noyau est pleine, le noyau abandonne tous les autres paquets entrants que la fonction du noyau netif_receive_skb() assigne à cette file. Si le serveur contient une carte réseau de 10 Gbps ou plus, ou plusieurs cartes de 1 Gbps, réglez la taille de la file d'attente pour éviter ce problème.

Conditions préalables

  • Un adaptateur réseau de 10 Gbps ou plus rapide ou plusieurs adaptateurs réseau de 1 Gbps

Procédure

  1. Déterminer s'il est nécessaire d'ajuster la file d'attente de l'arriéré, afficher les compteurs dans le fichier /proc/net/softnet_stat:

    # awk '{for (i=1; i<=NF; i++) printf strtonum("0x" $i) (i==NF?"\n":" ")}' /proc/net/softnet_stat | column -t
    221951548  0      0  0  0  0  0  0  0  0  0  0  0
    192058677  18862  0  0  0  0  0  0  0  0  0  0  1
    455324886  0      0  0  0  0  0  0  0  0  0  0  2
    ...

    La commande awk convertit les valeurs de /proc/net/softnet_stat du format hexadécimal au format décimal et les affiche sous forme de tableau. Chaque ligne représente un cœur de CPU en commençant par le cœur 0.

    Les colonnes concernées sont les suivantes :

    • Première colonne : Nombre total de trames reçues
    • Deuxième colonne : Nombre de trames abandonnées en raison d'une file d'attente pleine
    • Dernière colonne : Le numéro du cœur de l'unité centrale
  2. Si les valeurs de la deuxième colonne du fichier /proc/net/softnet_stat augmentent avec le temps, augmentez la taille de la file d'attente :

    1. Affiche la taille actuelle de la file d'attente de l'arriéré :

      # sysctl net.core.netdev_max_backlog
      net.core.netdev_max_backlog = 1000
    2. Créez le fichier /etc/sysctl.d/10-netdev_max_backlog.conf avec le contenu suivant :

      net.core.netdev_max_backlog = 2000

      Fixer le paramètre net.core.netdev_max_backlog au double de la valeur actuelle.

    3. Charger les paramètres du fichier /etc/sysctl.d/10-netdev_max_backlog.conf:

      # sysctl -p /etc/sysctl.d/10-netdev_max_backlog.conf

Vérification

  • Contrôler la deuxième colonne du fichier /proc/net/softnet_stat:

    # awk '{for (i=1; i<=NF; i ) printf strtonum("0x" $i) (i==NF?"\n":" ")}' /proc/net/softnet_stat | column -t

    Si les valeurs continuent d'augmenter, doublez à nouveau la valeur de net.core.netdev_max_backlog. Répétez ce processus jusqu'à ce que les compteurs de chutes de paquets n'augmentent plus.

31.1.3. Augmenter la longueur de la file d'attente de transmission d'un NIC pour réduire le nombre d'erreurs de transmission

Le noyau stocke les paquets dans une file d'attente avant de les transmettre. La longueur par défaut (1000 paquets) est généralement suffisante pour les réseaux à 10 Gbps et souvent aussi pour les réseaux à 40 Gbps. Cependant, dans les réseaux plus rapides, ou si vous rencontrez un nombre croissant d'erreurs de transmission sur un adaptateur, augmentez la longueur de la file d'attente.

Procédure

  1. Affiche la longueur de la file d'attente d'émission actuelle :

    # ip -s link show enp1s0
    2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    ...

    Dans cet exemple, la longueur de la file d'attente de transmission (qlen) de l'interface enp1s0 est 1000.

  2. Surveillez le compteur de paquets abandonnés de la file d'attente de transmission logicielle d'une interface réseau :

    # tc -s qdisc show dev enp1s0
    qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn drop_batch 64
     Sent 16889923 bytes 426862765 pkt (dropped 191980, overlimits 0 requeues 2)
     ...
  3. Si le nombre d'erreurs de transmission est élevé ou en augmentation, définissez une longueur de file d'attente de transmission plus élevée :

    1. Identifier le profil de connexion NetworkManager qui utilise cette interface :

      # nmcli connection show
      NAME                UUID                                  TYPE      DEVICE
      Example-Connection  a5eb6490-cc20-3668-81f8-0314a27f3f75  ethernet  enp1s0
    2. Créez le script /etc/NetworkManager/dispatcher.d/99-set-tx-queue-length-up NetworkManager dispatcher avec le contenu suivant :

      #!/bin/bash
      # Set TX queue length on enp1s0 to 2000
      
      if [ "$1" == "enp1s0" ] && [ "$2" == "up" ] ; then
          ip link set dev enp1s0 txqueuelen 2000
      fi
    3. Définir le bit exécutable sur le fichier /etc/NetworkManager/dispatcher.d/99-set-tx-queue-length-up:

      # chmod x /etc/NetworkManager/dispatcher.d/99-set-tx-queue-length-up
    4. Recharger la connexion au NetworkManager :

      # nmcli connection up Example-Connection

Vérification

  1. Affiche la longueur de la file d'attente d'émission :

    # ip -s link show enp1s0
    2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 2000
    ...
  2. Surveiller le compteur de paquets abandonnés :

    # tc -s qdisc show dev enp1s0

    Si le compteur dropped continue d'augmenter, doublez à nouveau la longueur de la file d'attente d'émission. Répétez ce processus jusqu'à ce que le compteur n'augmente plus.

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.