8.4. Résoudre des problèmes communs de perte de file ou de trame
La cause la plus commune pour une perte de trame est le débordement de file d'attente. Le noyau définit une limite à la longueur de la file et dans certains cas, la file se remplit plus vite qu'elle ne se vide. Lorsque ceci se produit trop longtemps, des trames finissent par être perdues.
Comme illustré dans Figure 8.1, « Diagramme du chemin de réception réseau », il existe deux files majeures dans le chemin de réception : la file de la mémoire tampon matérielle de la NIC et la file du socket. Ces deux files doivent être conformément configurées pour pouvoir être protégées des débordements de files.
8.4.1. Mémoire tampon matérielle de la carte d'interface réseau (NIC)
La NIC remplit sa mémoire tampon avec des trames ; la mémoire tampon est ensuite vidée par les interruptions
softirq
, ce que la carte réseau affirme via une interruption. Pour interroger le statut de cette file, veuillez utiliser la commande suivante :
ethtool -S ethX
Remplacez
ethX
par le nom du périphérique correspondant de la carte réseau. Ceci affichera combien de trames ont été supprimées dans ethX
. Souvent, les suppressions se produisent lorsque la file ne possède plus d'espace dans la mémoire tampon pour stocker les trames.
Il existe plusieurs manières de répondre à ce problème, principalement :
- Trafic des entrées
- Vous pouvez aider à empêcher les débordements de files en ralentissant le trafic des entrées. Ceci peut être effectué en filtrant, en réduisant le nombre de groupes de multidiffusion rejoints, en réduisant le trafic de diffusion, et ainsi de suite.
- Longueur des files
- Alternativement, vous pouvez aussi augmenter la longueur des files. Ceci implique l'augmentation des tampons dans une file spécifiée au maximum autorisé par le pilote. Pour ce faire, modifiez les paramètres d'anneau
rx
/tx
deethX
en utilisant :ethtool --set-ring ethX
Ajoutez les valeursrx
outx
appropriées à la commande mentionnée ci-dessus. Pour obtenir davantage d'informations, veuillez consulterman ethtool
. - « Device weight » (Poids du périphérique)
- Vous pouvez aussi augmenter la vitesse à laquelle une file est vidée. Pour ce faire, veuillez ajuster device weight en conséquence. Cet attribut fait référence ay nombre maximal de trames que la carte réseau peut recevoir avant que le contexte
softirq
ne doive céder au CPU et se reprogrammer. Il est contrôlé par la variable/proc/sys/net/core/dev_weight
.
La plupart des administrateurs ont tendance à choisir la troisième option. N'oubliez pas, cependant, que des conséquences en résulteront. Augmenter le nombre de trames pouvant être reçues en provenance d'une carte d'interface réseau en une seule itération implique des cycles de CPU supplémentaires, pendant lesquels aucune application ne peut être programmée sur ce CPU.