Disabilita TCP-Offloading {completamente, genericamente e facilmente}


15

Voglio disabilitare tcp-offloading ("TOE") sui miei server debian.

ethtool -K .....

Ho alcuni desideri, però:

Integralo in modo pulito in debian

Questo dice: no rc.local, vorrei anche evitare lo pseudo-rc-scripting ...

Immagino, sta installando ethtool e usando il pre-up.d / -Hook che deconfigura TOE usando le opzioni da / etc / network / interfaces .

Vorrei deconfigurare tutti i miei (futuri) server in modo generico usando FAI . (dal momento che fai è già a posto - e voluto!) Che dire di opzioni di punta che non sono supportate su alcuni hardware? La rete fallirà se un'opzione inesistente deve essere disabilitata? Immagino che dovrebbe essere robusto non farlo, ma questa non sembra neanche la mia soluzione desiderata.

Ingombra molto la configurazione, dato che atm ci sono 11 opzioni! L'utilizzo di più schede di rete ha un odore soggetto a errori.

Non esiste una soluzione più generica? Ho in mente un sistema, ma non ne ho ancora trovato uno. Il mio desiderio era:

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

PS: Sono abbastanza sorpreso di trovare i miei "nuovi hardware" per abilitare TOE di default, per questo motivo: http://www.linuxfoundation.org/collaborate/workgroups/networking/toe


1
Vorrei sottolineare che, sebbene gli argomenti agaist TOE siano veri, sono soprattutto i tipi di cappello Tin-Foil che non devono vivere con vincoli realistici (dove ogni accelerazione è di solito utile). Ci sono molti casi limite in cui TOE dovrebbe essere disabilitato, ma non è comune e non merita lo sforzo di rendere la disabilitazione "generica e facile".
Chris S,

1
@ Chris S: Giusto, ma non mi dispiaceva TOE fino a quando non si è incasinato. E riassume davvero ultimamente che i problemi di rete si riducono a "disabilitare TOE". Quindi lo voglio! : DI potrebbe vivere con il metodo ethtool, ma spero che qualcuno conosca "la manopola" ....
Michuelnik,

@Michuelnik sì - se funziona lo lascerei correre, ma se agisce e causa problemi per te è una buona ragione per disabilitarlo. Si può decidere di lasciare alcune parti del se attiva motore di offload se Linux permette: checksum offload per esempio (difficile sbagliare con CRC32, e le carte farlo in hardware che è più veloce e consente di risparmiare un paio di cicli di CPU per pacchetto che può aggiungere nelle reti ad alto traffico)
voretaq7,

@ voretaq7: buon punto! Ci ho pensato a breve, se dovessi distinguere tra opzioni utilizzabili e miserabili. Ma avevo bisogno di una soluzione abbastanza rapida senza studiare TOE troppo a lungo, soprattutto perché la roba TOE sembra così specifica del venditore che è la conoscenza che sta invecchiando troppo velocemente per investire tempo in esso. TX-chksum sta scaricando l'origine del motivo per cui il mio WireShark si lamenta di errori chksum?
Michuelnik,

Devo dire che le funzionalità che stai disabilitando non sono TOE. TOE è un motore offload TCP completo. Stai disabilitando solo l'offload di checksum, invia l'offload di segmentazione e ricevi l'offload di riassemblaggio. Nessuna di queste funzionalità è TOE. Linux non supporta TOE: wiki.linuxfoundation.org/networking/toe
juhist

Risposte:


12

Su Debian, il ethtoolpacchetto ora fornisce uno if-up.dscript che implementa le opzioni per l'offload (e altre ethtoolimpostazioni).

Devi solo installare questo pacchetto e aggiungere linee come queste all'interfaccia in /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

4
questa dovrebbe essere la risposta accettata
Spongman,

7

Eureka! Ho trovato la "mia" soluzione!

Sto semplicemente inserendo il mio Script disabilitato in /etc/network/if-up.d/ che disabilita completamente tcp-offloading.

Come bonus ho aggiunto un / etc / network / interfaces -Option, che lo disabilita.

#!/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" non contiene una "H".
Chris S,

Nella mia lingua madre, ha ... ;-p
Michuelnik,

1
Debian (ish) specifica (o almeno richiede cose che rispettano if-up.d), ma piuttosto elegante - Mi piace.
voretaq7,

@ voretaq7: grazie! Devono ancora migliorare: maneggiare i dispositivi di legame e forse altri casi speciali.
Michuelnik,

Faresti meglio a usare un post-up for i in rx tx gso ; do ethtool -K $IFACE $i off; donein/etc/network/interfaces
JB. Con Monica.

0

Fuori tema (una specie di) ma sono finito qui quando ho cercato di capire come fare la stessa cosa per alcuni server RHEL6. Quindi, se qualcuno sta cercando la stessa cosa per RHEL / CentOS / Fedora come le distribuzioni, troverai la risposta qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.