Desative o TCP-Offloading {completa, genericamente e facilmente}

15

Eu quero desativar o tcp-offloading ("TOE") nos meus servidores debian.

ethtool -K .....

Tenho alguns desejos, no entanto:

Integre-o corretamente no debian

Lê-se: no rc.local, também gostaria de evitar pseudo-rc-scripting ...

Eu acho que ele está instalando o ethtool e usando o pre-up.d / -Hook, que desconfigura o TOE usando as opções de / etc / network / interfaces .

Gostaria de desconfigurar todos os meus (futuros) servidores de maneira genérica usando FAI . (já que o fai já está em vigor - e desejado!) E as opções de toe que não são suportadas em algum hardware? A rede falhará se uma opção inexistente for desabilitada? Eu acho que deve ser robusto não fazer isso, mas essa também não parece ser a minha solução desejada.

Isso confunde muito a configuração, pois o atm tem 11 opções! Usando várias NICs, isso cheira a erros.

Não existe uma solução mais genérica? Eu tenho um sysctl em mente, mas ainda não encontrei um. Meu desejo era:

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

PS: Estou bastante surpreso ao encontrar meus "novos hardwares" para ativar o TOE por padrão, por causa disso: http://www.linuxfoundation.org/collaborate/workgroups/networking/toe

Michuelnik
fonte
1
Gostaria de salientar que, embora os argumentos contra o TOE sejam verdadeiros, na maioria das vezes são tipos de chapas de estanho que não precisam viver com restrições realistas (onde qualquer aceleração geralmente é útil). Existem muitos casos em que o TOE deve ser desativado, mas isso não é comum e não merece o esforço de torná-lo "genérico e fácil".
28512 Chris S
1
@ Chris S: Certo, mas eu não me importei até que estraguei tudo. E realmente resume ultimamente que os problemas de rede se resumem a "desativar o TOE". Então eu quero isso! : DI poderia viver com o ethtool-Método, mas a esperança para alguém saber "o botão" ....
Michuelnik
@ Micheluelnik, sim - se estiver funcionando, eu deixaria funcionar, mas se estiver agindo e causando problemas para você, é um bom motivo para desativá-lo. Você pode deixar algumas partes do mecanismo de descarregamento ativas, se o Linux permitir: Descarregando somas de verificação, por exemplo (difícil de estragar o CRC32, e as placas fazem isso em hardware que é mais rápido e economiza alguns ciclos de CPU por pacote, que podem somam em redes de alto tráfego)
voretaq7
@ voretaq7: Bom ponto! Pensei sobre isso em breve, se eu deveria distinguir entre opções utilizáveis ​​e opções miseráveis. Mas eu precisava de uma solução rápida sem estudar o TOE por muito tempo, especialmente porque o material do TOE parece tão específico do fornecedor que seu conhecimento está envelhecendo rápido demais para investir tempo nele. O TX-chksum-offloading é a origem do motivo pelo qual o meu wireshark reclama de chksums incorretos?
Michuelnik 29/08/2012
Devo dizer que os recursos que você está desativando não são TOE. O TOE é um mecanismo de transferência TCP completo. Você está desativando apenas o descarregamento da soma de verificação, envia o descarregamento da segmentação e recebe o descarregamento da remontagem. Nenhum desses recursos é TOE. O Linux não suporta TOE: wiki.linuxfoundation.org/networking/toe
juhist

Respostas:

12

No Debian, o ethtoolpacote agora fornece um if-up.dscript que implementa opções para descarregar (e outras ethtoolconfigurações).

Você só precisa instalar este pacote e adicionar linhas como estas à interface /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
fonte
4
esta deve ser a resposta aceita
Spongman
7

Eureka! Encontrei "minha" solução!

Estou simplesmente colocando meu próprio script de desativação em /etc/network/if-up.d/, que desativa completamente o tcp-offloading.

Como bônus, adicionei uma opção / etc / network / interfaces -Option, que desativa isso.

#!/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
fonte
"Eureka" não tem um "H".
Chris S
Na minha língua materna, tem ... ;-p
Michuelnik
1
Debian (ish) específico (ou pelo menos exigindo coisas que respeitem if-up.d), mas bastante elegante - eu gosto.
voretaq7
@ voretaq7: Obrigado! Ainda temos que melhorar - manipular dispositivos bond e talvez outros casos especiais.
Michuelnik 29/08/2012
É melhor você usar um post-up for i in rx tx gso ; do ethtool -K $IFACE $i off; donein/etc/network/interfaces
JB. Com a Monica.
0

Fora do tópico (mais ou menos), mas acabei aqui ao tentar descobrir como fazer a mesma coisa em alguns servidores RHEL6. Portanto, se alguém está procurando a mesma coisa para as distribuições do RHEL / CentOS / Fedora, você encontrará a resposta aqui .

PaddyD
fonte