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 Copier lienLien copié sur presse-papiers!
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 Copier lienLien copié sur presse-papiers!
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
# ethtool -S enp1s0 ... rx_queue_0_drops: 97326 rx_queue_1_drops: 63783 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow Notez que la sortie de la commande dépend de la carte réseau et du pilote.
Des valeurs élevées dans les compteurs
discardoudropindiquent 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 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Si les valeurs de la section
Pre-set maximumssont 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
# nmcli connection show NAME UUID TYPE DEVICE Example-Connection a5eb6490-cc20-3668-81f8-0314a27f3f75 ethernet enp1s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
# nmcli connection modify Example-Connection ethtool.ring-rx 4096Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pour augmenter la mémoire tampon de l'anneau TX, entrez :
nmcli connection modify Example-Connection ethtool.ring-tx 4096
# nmcli connection modify Example-Connection ethtool.ring-tx 4096Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Recharger la connexion au NetworkManager :
nmcli connection up Example-Connection
# nmcli connection up Example-ConnectionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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.
31.1.2. Optimisation de la file d'attente des périphériques de réseau pour éviter les chutes de paquets Copier lienLien copié sur presse-papiers!
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# 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 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow La commande
awkconvertit les valeurs de/proc/net/softnet_statdu 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_stataugmentent 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
# sysctl net.core.netdev_max_backlog net.core.netdev_max_backlog = 1000Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez le fichier
/etc/sysctl.d/10-netdev_max_backlog.confavec le contenu suivant :net.core.netdev_max_backlog = 2000
net.core.netdev_max_backlog = 2000Copy to Clipboard Copied! Toggle word wrap Toggle overflow Fixer le paramètre
net.core.netdev_max_backlogau 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
# sysctl -p /etc/sysctl.d/10-netdev_max_backlog.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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# awk '{for (i=1; i<=NF; i ) printf strtonum("0x" $i) (i==NF?"\n":" ")}' /proc/net/softnet_stat | column -tCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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 Copier lienLien copié sur presse-papiers!
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
# 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 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans cet exemple, la longueur de la file d'attente de transmission (
qlen) de l'interfaceenp1s0est1000.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
# 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) ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
# nmcli connection show NAME UUID TYPE DEVICE Example-Connection a5eb6490-cc20-3668-81f8-0314a27f3f75 ethernet enp1s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez le script
/etc/NetworkManager/dispatcher.d/99-set-tx-queue-length-upNetworkManager dispatcher avec le contenu suivant :Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
# chmod x /etc/NetworkManager/dispatcher.d/99-set-tx-queue-length-upCopy to Clipboard Copied! Toggle word wrap Toggle overflow Recharger la connexion au NetworkManager :
nmcli connection up Example-Connection
# nmcli connection up Example-ConnectionCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérification
Affiche la longueur de la file d'attente d'émission :
ip -s link show enp1s0
# 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 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow Surveiller le compteur de paquets abandonnés :
tc -s qdisc show dev enp1s0
# tc -s qdisc show dev enp1s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow Si le compteur
droppedcontinue 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.