Source : http://lafibre.info/tutoriels/tcp-offload-engine/
Compléments : http://lafibre.info/numericable-fttla/tcp-ack-suppression/
Comment TCP offload engine affecte ce que Wireshark capture ?
Quand les calculs de checksum sont réalisés par la carte réseau au lieu du CPU, Wieshark capture des trames avec un checksum incorrect en émission, rempli de 00000 (en réception il est bon, car la carte réseau de l'émetteur a fait le calcul et remplacé les 000000 par le vrai checksum).
Sous linux, il faut installer le paquet “ethtool” (sudo apt-get install ethtool)
Et taper en ligne de commande :
$ sudo ethtool -k eth0
Lexique :
TCP Offload Engine = Moteur de déchargement TCP
rx-checksumming (rx on|off) = Déchargement de la somme de contrôle en réception
tx-checksumming (tx on|off) = Déchargement de la somme de contrôle en émission
scatter-gather (sg on|off) = comme DMA : Les données circulant de ou vers la carte réseau sont transférées directement vers la mémoire principale de la machine, sans intervention du microprocesseur (si ce n'est pour lancer et conclure le transfert).
tcp-segmentation-offload (tso on|off) = Déchargement de la segmentation d'un gros paquet TCP en plusieurs petits (en émission)
udp-fragmentation-offload (ufo on|off) = Déchargement de la fragmentation d'un gros paquet UDP en plusieurs petits (en émission)
generic-segmentation-offload (gso on|off) = Déchargement de la segmentation d'un gros paquet TCP en plusieurs petits (en émission)
generic-receive-offload (gro on|off) = Déchargement en fusionnant des petits paquets TCP reçus du réseau en un gros paquet pour le système (c'est donc en réception)
large-receive-offload (lro on|off) = Déchargement important à la réception
rx-vlan-offload (rxvlan on|off) = Déchargement de la gestion des Vlan en réception
tx-vlan-offload (txvlan on|off) = Déchargement de la gestion des Vlan en émission
ntuple-filters (ntuple on|off) = ??
receive-hashing (rxhash on|off) = receive hashing offload
Combinaisons on / off :
Il est nécessaire d'activer tx-checksumming (tx on) pour activer scatter-gather
Il est nécessaire d'activer tx-checksumming (tx on) et scatter-gather (sg on) pour activer tcp-segmentation-offload ou generic-segmentation-offload
Désactiver ce qui fait chuter le débit avec “TCP ACK Supression” activé sur une box :
ethtool -K eth1 tso off gso off
tcp-segmentation-offload et generic-segmentation-offload chacun séparément ou activé tous les deux font chuter fortement le débit avec TCP ACK Supression.
Au contraire scatter-gather permet de gagner du débit avec “TCP ACK Supression” activé.
TOE entièrement activé (défaut) : 3 min 13 secondes pour télécharger le fichier test
TOE entièrement dés-activé : 56 secondes pour télécharger le fichier test
Tout désactivé sauf tx-checksumming et scatter-gather : 33 secondes pour télécharger le fichier test
Seul tcp-segmentation-offload et generic-segmentation-offload désactivé : 33 secondes pour télécharger le fichier test
A noter qu'avec “TCP ACK Supression” désactivé ou qui n'existe pas (cas des majorités des box) on a :
TOE entièrement activé (défaut) : 21 secondes pour télécharger le fichier test
TOE entièrement dés-activé : 49 secondes pour télécharger le fichier test
Tout désactivé sauf tx-checksumming et scatter-gather : 32 secondes pour télécharger le fichier test
Seul tcp-segmentation-offload et generic-segmentation-offload désactivé : 32 secondes pour télécharger le fichier test
Désactiver entièrement TCP offload engine :
# ethtool -K eth0 rx off tx off sg off tso off ufo off gso off gro off lro off rxvlan off txvlan off ntuple off rxhash off
Si vous avez le message “Cannot set device udp large send offload settings: Operation not supported”, utilisez la commande suivante :
# ethtool -K eth0 rx off tx off sg off tso off gso off gro off lro off rxvlan off txvlan off ntuple off rxhash off
Activer entièrement TCP offload engine :
# ethtool -K eth0 rx on tx on sg on tso on ufo on gso on gro on lro on rxvlan on txvlan on ntuple on rxhash on
En cas d'erreur sur l'UDP :
# ethtool -K eth0 rx on tx on sg on tso on gso on gro on lro on rxvlan on txvlan on ntuple on rxhash on
En cas d'erreur sur UDP, large-receive-offload, ntuple-filters :
# ethtool -K eth0 rx on tx on sg on tso on gso on gro on rxvlan on txvlan on rxhash on