Désactiver le déchargement TCP {complètement, génériquement et facilement}

15

Je veux désactiver tcp-offloading ("TOE") sur mes serveurs Debian.

ethtool -K .....

J'ai cependant quelques souhaits:

Intégrez-le proprement dans Debian

Cela se lit: pas de rc.local, je voudrais également éviter les pseudo-rc-scripts ...

Je suppose que c'est d'installer ethtool et d'utiliser le pre-up.d / -Hook qui déconfigure la TOE en utilisant les options de / etc / network / interfaces .

Je voudrais déconfigurer tous mes (futurs) serveurs de manière générique en utilisant FAI . (puisque fai est déjà en place - et recherché!) Qu'en est-il des options d'orteils qui ne sont pas prises en charge sur certains matériels? La mise en réseau échouera-t-elle si une option non existante doit être désactivée? Je suppose que cela ne devrait pas être le cas, mais cela ne semble pas non plus être ma solution souhaitée.

Il encombre beaucoup la config, puisque atm il y a 11 options! L'utilisation de plusieurs cartes réseau me semble sujette aux erreurs.

N'y a-t-il pas une solution plus générique? J'ai un sysctl en tête, mais je n'en ai pas encore trouvé. Mon souhait était:

echo 0 > /proc/sys/net/core/enable_tcp_offloading

PS: je suis assez surpris de trouver mes "nouveaux matériels" pour activer la TOE par défaut, à cause de cela: http://www.linuxfoundation.org/collaborate/workgroups/networking/toe

Michuelnik
la source
1
Je voudrais souligner que si les arguments contre la TOE sont vrais, ce sont principalement les types de chapeaux en étain qui n'ont pas à vivre avec des contraintes réalistes (où toute accélération est généralement utile). Il y a beaucoup de cas limites où la TOE devrait être désactivée, mais ce n'est pas courant et ne mérite pas l'effort pour la rendre "générique et facile".
Chris S
1
@Chris S: D'accord, mais cela ne me dérangeait pas TOE jusqu'à ce qu'il se dérange. Et il résume vraiment récemment que les problèmes de réseau se résument à «désactiver la TOE». Alors je le veux! : DI pourrait vivre avec la méthode ethtool, mais espérons que quelqu'un sachant "le bouton" ....
Michuelnik
@Michuelnik ouais - si ça marche, je le laisserais fonctionner, mais s'il agit et vous cause des problèmes, c'est une bonne raison de le désactiver. Vous voudrez peut -être laisser certaines parties du moteur de déchargement actives si Linux le permet: Déchargement des sommes de contrôle par exemple (difficile de bousiller CRC32, et les cartes le font avec du matériel qui est plus rapide et vous permet d'économiser quelques cycles CPU par paquet qui peut s'additionnent dans les réseaux à fort trafic)
voretaq7
@ voretaq7: Bon point! J'y ai réfléchi rapidement, si je devais faire la distinction entre les options utilisables et les options misérables. Mais j'avais besoin d'une solution assez rapide sans étudier la TOE trop longtemps, d'autant plus que la substance TOE semble tellement spécifique au fournisseur que ses connaissances vieillissent trop vite pour y investir du temps. TX-chksum-offloading est-il à l'origine de la raison pour laquelle mon wirehark se plaint de mauvais chksums?
Michuelnik
Je dois dire que les fonctionnalités que vous désactivez ne sont pas des TOE. TOE est un moteur de déchargement TCP complet. Vous désactivez simplement le déchargement de la somme de contrôle, envoyez le déchargement de segmentation et recevez le déchargement de réassemblage. Aucune de ces fonctionnalités n'est TOE. Linux ne prend pas en charge la TOE: wiki.linuxfoundation.org/networking/toe
juhist

Réponses:

13

Sur Debian, le ethtoolpaquet fournit maintenant un if-up.dscript qui implémente des options de déchargement (et d'autres ethtoolparamètres).

Il vous suffit d'installer ce package et d'ajouter des lignes comme celles-ci à l'interface dans /etc/network/interfaces.

auto eth0
iface eth0 inet static
    address 10.0.3.1/255.255.248.0
    gateway 10.0.2.10
    offload-tx  off
    offload-sg  off
    offload-tso off
hmlth
la source
4
cela devrait être la réponse acceptée
Spongman
7

Eureka! J'ai trouvé "ma" solution!

Je place simplement mon propre script disable-toe dans /etc/network/if-up.d/ qui désactive complètement le déchargement de TCP .

En bonus, j'ai ajouté une option / etc / network / interfaces , qui désactive cela.

#!/bin/bash

RUN=true
case "${IF_NO_TOE,,}" in
    no|off|false|disable|disabled)
        RUN=false
    ;;
esac

if [ "$MODE" = start -a "$RUN" = true ]; then
  TOE_OPTIONS="rx tx sg tso ufo gso gro lro rxvlan txvlan rxhash"
  for TOE_OPTION in $TOE_OPTIONS; do
    /sbin/ethtool --offload "$IFACE" "$TOE_OPTION" off &>/dev/null || true
  done
fi
Michuelnik
la source
"Eureka" n'a pas de "H".
Chris S
Dans ma langue maternelle, il a ... ;-p
Michuelnik
1
Debian (ish) spécifique (ou au moins nécessitant des choses qui respectent if-up.d), mais assez élégant - j'aime.
voretaq7
@ voretaq7: Merci! Reste à améliorer - la gestion des dispositifs de liaison et peut-être d'autres cas spéciaux.
Michuelnik
Vous feriez mieux d'utiliser un post-up for i in rx tx gso ; do ethtool -K $IFACE $i off; donein/etc/network/interfaces
JB. Avec Monica.
0

Hors sujet (en quelque sorte) mais je me suis retrouvé ici en essayant de comprendre comment faire la même chose pour certains serveurs RHEL6. Donc, si quelqu'un cherche la même chose pour les distributions RHEL / CentOS / Fedora, vous trouverez la réponse ici .

PaddyD
la source