TCP-Offloading deaktivieren {vollständig, generisch und einfach}


14

Ich möchte das TCP-Offloading ("TOE") auf meinen Debian-Servern deaktivieren.

ethtool -K .....

Ich habe jedoch einige Wünsche:

Integriere es sauber in Debian

Diese lautet: nein rc.local, ich möchte auch Pseudo-rc-Scripting vermeiden ...

Ich würde raten, es ist die Installation von ethtool und die Verwendung von pre-up.d / -Hook, das TOE mit den Optionen aus / etc / network / interfaces dekonfiguriert .

Ich möchte alle meine (zukünftigen) Server generisch mit FAI dekonfigurieren . (da fai bereits vorhanden ist - und gesucht wird!) Was ist mit Zehenoptionen, die auf einigen Hardwarekomponenten nicht unterstützt werden? Schlägt das Netzwerk fehl, wenn eine nicht vorhandene Option deaktiviert werden soll? Ich denke, es sollte robust sein, dies nicht zu tun, aber dies scheint auch nicht meine gewünschte Lösung zu sein.

Es macht die Konfiguration sehr unübersichtlich, da es 11 Optionen gibt! Bei Verwendung mehrerer Netzwerkkarten riecht dies für mich nach Fehlern.

Gibt es keine allgemeinere Lösung? Ich habe ein System im Sinn, aber noch kein gefunden. Mein Wunsch war:

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

PS: Ich bin überrascht , ganz nach meinen „neueren Geräten haben“ TOE standardmäßig aktiviert, weil dies: http://www.linuxfoundation.org/collaborate/workgroups/networking/toe


1
Ich möchte darauf hinweisen, dass die Argumente gegen TOE zwar zutreffen, es aber meistens Tin-Foil-Huttypen sind, die nicht mit realistischen Einschränkungen leben müssen (wo jede Beschleunigung normalerweise hilfreich ist). Es gibt viele Randfälle, in denen TOE deaktiviert werden sollte, aber es ist nicht üblich und es lohnt sich nicht, die Deaktivierung "allgemein und einfach" zu gestalten.
Chris S

1
@ Chris S: Richtig, aber mir hat TOE nichts ausgemacht, bis es versaut hat. Und es fasst wirklich in letzter Zeit zusammen, dass sich Netzwerkprobleme auf "TOE deaktivieren" beschränken. Also ich will es! : DI könnte mit der ethtool-Methode leben, hoffe aber, dass jemand "den Knopf"
kennt

@Michuelnik ja - wenn es funktioniert, würde ich es laufen lassen, aber wenn es funktioniert und Probleme für Sie verursacht, ist das ein guter Grund, es zu deaktivieren. Möglicherweise möchten Sie einige Teile der Offload-Engine aktiv lassen, wenn Linux dies zulässt: Zum Beispiel das Abladen von Prüfsummen (CRC32 lässt sich nur schwer vermasseln, und die Karten erledigen dies in Hardware, die schneller ist und Ihnen einige CPU-Zyklen pro Paket erspart, die dies können in stark frequentierten Netzen addieren)
voretaq7

@ voretaq7: Guter Punkt! Überlegte kurz, ob ich zwischen brauchbaren und miserablen Optionen unterscheiden sollte. Aber ich brauchte eine recht schnelle Lösung, ohne zu lange TOE zu studieren, zumal das TOE-Zeug so herstellerspezifisch zu sein scheint, dass es Wissen gibt, das zu schnell altert, um Zeit in es zu investieren. Ist TX-Chksum-Offloading der Ursprung, warum sich mein Wireshark über falsche Chksum beschwert?
Michuelnik

Ich muss sagen, die Funktionen, die Sie deaktivieren, sind nicht TOE. TOE ist eine vollständige TCP-Offload-Engine. Sie deaktivieren nur das Prüfsummen-Offload, senden das Segmentierungs-Offload und empfangen das Remontage-Offload. Keine dieser Funktionen ist TOE. Linux unterstützt TOE nicht: wiki.linuxfoundation.org/networking/toe
juhist

Antworten:


11

Unter Debian enthält das ethtoolPaket jetzt ein if-up.dSkript, das Optionen zum Auslagern (und andere ethtoolEinstellungen) implementiert .

Sie müssen nur dieses Paket installieren und der Schnittstelle in Zeilen wie diese hinzufügen /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

3
Dies sollte die akzeptierte Antwort sein
Spongman

7

Eureka! "Meine" Lösung gefunden!

Ich platziere einfach mein eigenes Disable -Toe- Skript in /etc/network/if-up.d/, wodurch das TCP-Offloading vollständig deaktiviert wird.

Als Bonus habe ich eine / etc / network / interfaces -Option hinzugefügt, die dies deaktiviert.

#!/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

"Eureka" hat kein "H".
Chris S

In meiner Muttersprache hat es ... ;-p
Michuelnik

1
Debian (ish) spezifisch (oder zumindest Dinge, die Respekt erfordern if-up.d), aber ziemlich elegant - ich mag.
Voretaq7

@ voretaq7: Danke! Noch zu verbessern - Umgang mit Bondgeräten und vielleicht anderen Sonderfällen.
Michuelnik

Verwenden Sie besser einen post-up for i in rx tx gso ; do ethtool -K $IFACE $i off; donein/etc/network/interfaces
JB. Mit Monica.

0

Off topic (irgendwie), aber ich bin hier gelandet, als ich versucht habe, herauszufinden, wie man dasselbe für einige RHEL6-Server macht. Wenn also jemand dasselbe für RHEL / CentOS / Fedora wie Distributionen sucht, finden Sie die Antwort hier .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.