Chapitre 31. Optimiser les performances du réseau
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
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
oudrop
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.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 sectionCurrent hardware settings
, vous pouvez modifier les paramètres dans les étapes suivantes.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
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
Recharger la connexion au NetworkManager :
# nmcli connection up Example-Connection
ImportantSelon 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.
Ressources supplémentaires
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
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
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 :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
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.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
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'interfaceenp1s0
est1000
.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) ...
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 :
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
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
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
Recharger la connexion au NetworkManager :
# nmcli connection up Example-Connection
Vérification
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 ...
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.