8.4.2. File de sockets
Tout comme la file du matériel de la carte d'interface réseau, la file des sockets est remplie par la pile réseau en provenance du contexte
softirq
. Les applications vident ensuite les files de leurs sockets correspondants via des appels read
, recvfrom
et ainsi de suite.
Pour surveiller le statut de cette file, veuillez utiliser l'utilitaire
netstat
; la colonne Recv-Q
affiche la taille de la file. De manière générale, les débordements dans la file des sockets sont gérés de la même façon que les débordements de mémoire tampon de matériel de carte d'interface réseau (voir la Section 8.4.1, « Mémoire tampon matérielle de la carte d'interface réseau (NIC) ») :
- Trafic des entrées
- La première option est de ralentir le trafic des entrées en configurant la vitesse à laquelle la file se remplit. Pour ce faire, filtrez les trames ou supprimez-les de manière préventive. Vous pouvez aussi ralentir le trafic des entrées en rabaissant le poids du périphérique de la carte d'interface réseau[6].
- Profondeur de file
- Vous pouvez aussi éviter les débordements de files de sockets en augmentant la profondeur des files. Pour ce faire, augmentez la valeur du paramètre de noyau
rmem_default
ou de l'option de socketSO_RCVBUF
. Pour obtenir davantage d'informations sur les deux, veuillez consulter la Section 8.2, « Paramètres réseau optimisés ». - Fréquence des appels d'application
- Lorsque possible, veuillez optimiser l'application afin qu'elle effectue des appels plus fréquemment. Cela implique la modification ou la reconfiguration de l'application réseau pour effectuer des appels POSIX (comme
recv
,read
) plus fréquemment. En conséquence, cela permettra à une application de vider la file plus rapidement.
Pour de nombreux administrateurs, augmenter la profondeur de la file est une solution préférable. Il s'agit de la solution la plus facile, mais elle ne fonctionne pas toujours sur le long-terme. Comme les technologies de réseau sont de plus en plus rapides, les files de sockets continueront à se remplir plus vite. Sur le long-terme, cela signifie qu'il faudra réajuster la profondeur de file de manière conséquente.
La meilleure solution est d'améliorer ou de configurer l'application afin qu'elle vide les données du noyau plus rapidement, même si cela signifie mettre les données en file d'attente dans l'espace de l'application. Cela permet aux données d'être stockées de manière plus flexible puisqu'elles peuvent être mises en swap et remises en page comme nécessaire.
[6]
Le poids d'un périphérique (« Device weight ») est contrôlé via
/proc/sys/net/core/dev_weight
. Pour obtenir davantage d'informations sur le poids d'un périphérique et les implications liées à son ajustement, veuillez consulter la Section 8.4.1, « Mémoire tampon matérielle de la carte d'interface réseau (NIC) ».