8.2. Paramètres réseau optimisés
L'optimisation des performances est habituellement effectuée de manière préventive. Le plus souvent, nous ajustons les variables connues avant d'exécuter une application ou de déployer un système. Si le réglage se révèle inefficace, nous tentons d'ajuster d'autres variables. La logique derrière ce raisonnement est que par défaut, le système n'opère pas à son niveau de performance optimale. Ainsi, nous pensons devoir régler le système en conséquence. Dans certains cas, nous le faisons en calculant les risques.
Comme mentionné plus tôt, la pile réseau s'optimise principalement elle-même. En outre, l'optimisation du réseau requiert une complète compréhension non-seulement de la manière dont la pile réseau fonctionne, mais aussi des conditions spécifiques requises des ressources réseau du système spécifique. Une configuration incorrecte des performances peut mener à une performance dégradée.
Par exemple, prenez en considération le problème bufferfloat. Augmenter les profondeurs des files d'attente de la mémoire-tampon se traduit par des connexions ayant des fenêtres de congestion plus grandes que le lien aurait normalement autorisé (dû à la mémoire-tampon profonde). Cependant, ces connexions ont aussi d'énormes valeurs RTT puisque les trames passent tant de temps en file d'attente. Ceci provoquera en retour une sortie sous-optimale car il sera impossible de détecter la congestion.
Lorsqu'il s'agit des performances réseau, il est recommandé de conserver les paramètres par défaut, à moins qu'un problème de performance particulier ne devienne apparent. De tels problèmes incluent les pertes de trames, un débit réduit de manière significative, et ainsi de suite. Même ainsi, la meilleure solution sera souvent celle résultant d'une étude méticuleuse du problème, plutôt que de simplement augmenter les paramètres de réglage (augmenter les longueurs des files d'attente et de la mémoire-tampon, réduire la latence des interruptions, etc).
Pour correctement diagnostiquer un problème de performance, veuillez utiliser les outils suivants :
- netstat
- Utilitaire sur la ligne de commande qui imprime des connexions réseau, tables de routage, statistiques d'interface, connexions fictives et adhésions à des multidiffusions. Il récupère des informations sur le sous-système « networking » à partir du système de fichiers
/proc/net/
. Ces fichiers incluent :/proc/net/dev
(informations sur le périphérique)/proc/net/tcp
(informations sur le socket TCP)/proc/net/unix
(informations sur le socket du domaine Unix)
Pour obtenir des informations supplémentaires surnetstat
et ses fichiers référencés depuis/proc/net/
, veuillez consulter la page mannetstat
:man netstat
. - dropwatch
- Utilitaire de surveillance qui suit les paquets laissés par le noyau. Pour obtenir davantage d'informations, veuillez consulter la page man
dropwatch
:man dropwatch
. - ip
- Utilitaire pour gérer et surveiller les itinéraires, les périphériques, les routages basés sur stratégie et les tunnels. Pour obtenir davantage d'informations, veuillez consulter la page man
ip
:man ip
. - ethtool
- Utilitaire pour afficher et modifier les paramètres de NIC. Pour obtenir davantage d'informations, veuillez consulter la page man
ethtool
:man ethtool
. - /proc/net/snmp
- Fichier affichant des données ASCII nécessaires pour les bases d'informations de gestion IP, ICMP, TCP et UDP pour un agent
snmp
. Il affiche aussi des statistiques UDP allégées en temps réel.
Le Guide du débutant SystemTap contient plusieurs exemples de script que vous pouvez utiliser pour profiler et surveiller les performances réseau. Ce guide est disponible sur http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.
Après avoir collecté les données pertinentes à un problème de performances réseau, vous devriez être en mesure de formuler une théorie, et probablement une solution.[5] Par exemple, une augmentation des erreurs d'entrées UDP dans
/proc/net/snmp
indique qu'une ou plusieurs des files de réception des sockets sont pleines lorsque la pile réseau tente de mettre des nouvelles trames dans la file d'attente d'un socket d'application.
Ceci indique que les paquets sont congestionnés sur au moins une file d'attente de socket, ce qui signifie que soit la file vide les paquets trop lentement, soir le volume de paquets est trop important pour cette file. S'il s'agit de la seconde possibilité, alors veuillez rechercher des données perdues dans les journaux de toute application utilisant le réseau de manière intensive. Pour résoudre ceci, vous devrez optimiser ou reconfigurer l'application fautive.
Taille du tampon de réception du socket
Les tailles des sockets d'envoi et de réception sont ajustées dynamiquement. Ainsi, elles doivent rarement être modifiées manuellement. Si des analyses supplémentaires, comme celle présentée dans l'exemple du réseau SystemTap,
sk_stream_wait_memory.stp
, suggèrent que le taux de vidage de la file du socket est trop lent, alors vous pouvez augmenter la profondeur de la file du socket de l'application. Pour ce faire, augmentez la taille des tampons utilisés par les sockets en configurant l'une des valeurs suivantes :
- rmem_default
- Paramètre du noyau qui contrôle la taille par défaut des tampons de réception utilisés par les sockets. Pour le configurer, veuillez exécuter la commande suivante :
sysctl -w net.core.rmem_default=N
RemplacezN
par la taille de tampon souhaitée, en octets. Pour déterminer la valeur de ce paramètre du noyau, affichez/proc/sys/net/core/rmem_default
. N'oubliez pas que la valeur dermem_default
ne doit pas être supérieure àrmem_max
(/proc/sys/net/core/rmem_max
) ; si besoin est, augmentez la valeur dermem_max
. - SO_RCVBUF
- Option de socket contrôlant la taille maximale d'un tampon de réception d'un socket, en octets. Pour obtenir davantage d'informations sur
SO_RCVBUF
, veuillez consulter la page man :man 7 socket
.Pour configurerSO_RCVBUF
, veuillez utiliser l'utilitairesetsockopt
. Vous pouvez récupérer la valeurSO_RCVBUF
actuelle avecgetsockopt
. Pour obtenir davantage d'informations sur l'utilisation de ces deyx utilitaires, veuillez consulter la page mansetsockopt
:man setsockopt
.
[5]
La Section 8.3, « Aperçu des réceptions de paquets » contient un aperçu du voyage du paquet, ce qui devrait vous aider à trouver et mapper les zones prônes à une certaine congestion dans la pile réseau.