Deshabilite la descarga de TCP {completa, genérica y fácilmente}

15

Quiero deshabilitar tcp-offloading ("TOE") en mis servidores Debian.

ethtool -K .....

Sin embargo, tengo algunos deseos:

Integrelo limpiamente en Debian

Esto dice: no rc.local, también me gustaría evitar pseudo-rc-scripting ...

Supongo que está instalando ethtool y usando pre-up.d / -Hook que desconfigura TOE usando opciones de / etc / network / interfaces .

Me gustaría desconfigurar todos mis (futuros) servidores de manera genérica utilizando FAI . (ya que fai ya está en su lugar, ¡y quería!) ¿Qué pasa con las opciones de dedo del pie que no son compatibles con algunos hardware? ¿Fallarán las redes si se deshabilita una opción no existente? Supongo que debería ser robusto no hacerlo, pero esta tampoco parece ser mi solución deseada.

Abarrota mucho la configuración, ya que cajeros automáticos hay 11 opciones. El uso de múltiples NIC me huele propenso a errores.

¿No hay una solución más genérica? Tengo un sysctl en mente, pero aún no encontré uno. Mi deseo fue:

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

PD: Estoy bastante sorprendido de encontrar mis "hardwares más nuevos" para tener TOE habilitado por defecto, debido a esto: http://www.linuxfoundation.org/collaborate/workgroups/networking/toe

Michuelnik
fuente
1
Me gustaría señalar que, si bien los argumentos contra TOE son ciertos, en su mayoría son los tipos de sombreros de papel de aluminio que no tienen que vivir con restricciones realistas (donde cualquier aceleración suele ser útil). Hay muchos casos extremos en los que TOE debería deshabilitarse, pero no es común y no merece el esfuerzo de hacer que deshabilitarlo sea "genérico y fácil".
Chris S
1
@ Chris S: Correcto, pero no me importó TOE hasta que se estropeó. Y realmente se resume últimamente que los problemas de red se reducen a "deshabilitar TOE". ¡Entonces lo quiero! : DI podría vivir con el método ethtool, pero espero que alguien conozca "la perilla" ...
Michuelnik
@Michuelnik, sí, si funciona, lo dejaría funcionar, pero si está actuando y te está causando problemas, esa es una buena razón para desactivarlo. Sin embargo, es posible que desee dejar algunas partes del motor de descarga activas si Linux lo permite: descargar sumas de verificación, por ejemplo (difícil de arruinar CRC32, y las tarjetas lo hacen en un hardware que es más rápido y le ahorra algunos ciclos de CPU por paquete que puede agregar en redes de alto tráfico)
voretaq7
@ voretaq7: ¡Buen punto! Pensé en esto brevemente, si debería distinguir entre opciones utilizables y miserables. Pero necesitaba una solución bastante rápida sin estudiar demasiado TOE, especialmente porque el material de TOE parece tan específico del proveedor que su conocimiento está envejeciendo demasiado rápido para invertir tiempo en él. ¿TX-chksum-offloading es el origen por qué mi Wirehark se queja de chksums incorrectos?
Michuelnik
Tengo que decir que las funciones que está deshabilitando no son TOE. TOE es un motor de descarga TCP completo. Está desactivando solo la descarga de suma de comprobación, enviar la descarga de segmentación y recibir la descarga de reensamblado. Ninguna de esas características son TOE. Linux no es compatible con TOE: wiki.linuxfoundation.org/networking/toe
juhist

Respuestas:

12

En Debian, el ethtoolpaquete ahora proporciona un if-up.dscript que implementa opciones para descargar (y otras ethtoolconfiguraciones).

Solo tiene que instalar este paquete y agregar líneas como estas a la interfaz /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
fuente
44
esta debería ser la respuesta aceptada
Spongman
7

Eureka! ¡Encontré "mi" solución!

Simplemente estoy colocando mi propio script de deshabilitar-dedo del pie en /etc/network/if-up.d/ que deshabilita completamente la descarga de tcp.

Como beneficio adicional, agregué una / etc / network / interfaces -Option, que deshabilita esto.

#!/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
fuente
"Eureka" no tiene una "H".
Chris S
En mi lengua materna, tiene ... ;-p
Michuelnik
1
Debian (ish) específico (o al menos requiere cosas que respete if-up.d), pero bastante elegante, me gusta.
voretaq7
@ voretaq7: ¡Gracias! Todavía tiene que mejorar: manejar dispositivos de enlace y quizás otros casos especiales.
Michuelnik
Es mejor utilizar una post-up for i in rx tx gso ; do ethtool -K $IFACE $i off; doneen/etc/network/interfaces
JB. Con monica.
0

Fuera de tema (más o menos) pero terminé aquí cuando intentaba descubrir cómo hacer lo mismo para algunos servidores RHEL6. Entonces, si alguien está buscando lo mismo para distribuciones similares a RHEL / CentOS / Fedora, encontrará la respuesta aquí .

PaddyD
fuente