Lors du précédent épisode, j'ai présenté comment décharger le processeur, d'une partie de la gestion réseau, avec le TOE ou TCP Offload. Passons à présent aux optimisations du driver réseau Linux, en particulier des paramètres RX et TX.
Le protocole TCP a été élaboré, il y a longtemps. A cette époque, les communications étaient peu fiables, lentes. Cette époque est bien révolue, mais, TCP perdure. Le principe de fonctionnement de TCP, veut que chaque paquet envoyé sur le réseau, soit acquitté par le récepteur.
TCP/IP utilise le principe suivant, une requête est envoyé au serveur :
Le serveur accuse réception du SYN :
Le client acquite réception avec un ACK (en TCPIP ACK pour Acknowledge) :
Quand l'Internet était lent (à l'origine), le serveur envoyait l'ensemble de ses paquets de données, puis, le client acquittait, l'ensemble avec des ACK qui arrivaient tranquillement.
Mais, avec la vitesse actuelle des connexions, les ACK arrivent en rafale à un train d'enfer, le serveur "perd" du temps, a traiter tout les ACK !
La solution, est d'augmenter la taille des buffers d'entrée et de sortie au niveau du driver réseau. Ces buffers spécifiques, sont connus sous le nom de fenêtres TCP/IP. Le système ne traitera les données reçues que lorsque la fenêtre TCPIP est pleine.
Ethtool va encore nous servir. Avec le flag -g, nous allons connaitre les settings par défaut réglés au niveau du driver, ainsi que la taille maximum des RWIN, Receive Windows et TWIN, Transmit Windows :
ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256
Comme l'indique wikipedia, le throughput ou débit du réseau est maximisé par l'augmentation de la Recieve Windows :
Je vais pouvoir définir de façon définitive, l'ensemble des réglages dans le fichier : /etc/modprobe.conf
alias eth0 e1000
options e1000 RxDescriptors=4096,4096 TxDescriptors=4096,4096
Nous avons vu les 2 premiers points. Avant de mettre l'ensemble en oeuvre, je décrirai dans le prochain épisode les optimisations au niveau du noyau Linux.