Отключить TCP-разгрузку {полностью, обобщенно и легко}

15

Я хочу отключить tcp-offloading ("TOE") на моих серверах Debian.

ethtool -K .....

У меня есть некоторые пожелания, хотя:

Тщательно интегрируйте его в Debian

Это гласит: нет rc.local, я также хотел бы избежать псевдо-rc-сценариев ...

Я предполагаю, что он устанавливает ethtool и использует pre-up.d / -Hook, который деконфигурирует ОО, используя параметры из / etc / network / interfaces .

Я хотел бы деконфигурировать все мои (будущие) серверы в общем виде, используя FAI . (поскольку fai уже есть - и хотел!) А как насчет опций, которые не поддерживаются на некоторых аппаратных средствах? Будет ли сбой в сети, если отключить несуществующую опцию? Я полагаю, что это не должно быть решительным, но это, похоже, тоже не мое решение.

Конфиг очень сильно загромождает, так как у него 11 вариантов! При использовании нескольких сетевых карт это пахнет ошибкой для меня.

Разве нет более общего решения? Я имею в виду sysctl, но пока не нашел. Мое желание было:

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

PS: Я очень удивлен, обнаружив, что на моем «новом оборудовании» по умолчанию включена поддержка ОО, из-за этого: http://www.linuxfoundation.org/collaborate/workgroups/networking/toe

Michuelnik
источник
1
Я хотел бы отметить, что, хотя аргументы agaist TOE верны, в основном это типы шляп Tin-Foil, которым не приходится жить с реалистичными ограничениями (где обычно полезно любое ускорение). Существует множество крайних случаев, когда ОО следует отключить, но это не является распространенным явлением и не заслуживает усилий, чтобы сделать его отключенным «универсальным и простым».
Крис С
1
@Chris S: Точно, но я не возражал против TOE, пока он не испортился. И в последнее время действительно подводит итог, что проблемы сети сводятся к «отключению ОО». Так я этого хочу! : D Я мог бы жить с помощью ethtool-метода, но надеюсь, что кто-то знает "ручку" ....
Мичуэльник
@Michuelnik да - если он работает, я бы позволил ему работать, но если он работает и создает проблемы для вас, это хорошая причина отключить его. Вы можете хотеть оставить некоторые части активного Хотя Разгрузка двигателя , если Linux это позволяет: разгружая контрольные суммы, например (трудно завинчивать CRC32, и карты делают это в аппаратных средствах , которые быстрее и экономит вам несколько циклов центрального процессора для каждого пакета , который может добавить в сети с высоким трафиком)
voretaq7
@ voretaq7: Хороший вопрос! Вскоре подумал, стоит ли мне различать полезные и убогие варианты. Но мне нужно было довольно быстрое решение, не изучая ОО слишком долго, тем более что ОО кажется слишком специфичным для производителя, так как его знания стареют слишком быстро, чтобы тратить на них время. Является ли TX-chksum-offloading источником, почему мой wireshark жалуется на неправильные chksums?
Мичуельник,
Я должен сказать, что функции, которые вы отключаете, не являются ОО. TOE - это полноценный TCP-механизм разгрузки. Вы отключаете только разгрузку контрольной суммы, отправляете разгрузку сегментации и получаете разгрузку повторной сборки. Ни одна из этих функций не является ОО. Linux не поддерживает ОО: wiki.linuxfoundation.org/networking/toe
юрист,

Ответы:

13

В Debian ethtoolпакет теперь содержит if-up.dскрипт, который реализует параметры для выгрузки (и другие ethtoolпараметры).

Вам просто нужно установить этот пакет и добавить такие строки в интерфейс /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
источник
4
это должен быть принятый ответ
Spongman
7

Эврика! Нашел "мое" решение!

Я просто размещая свои собственные отключают пяты Script в /etc/network/if-up.d/ , который отключает TCP-отгрузочный полностью.

В качестве бонуса я добавил / etc / network / interfaces -Option, который отключает это.

#!/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
источник
«Эврика» не имеет «H» в нем.
Крис С
На моем родном языке, он имеет ... ;-p
Мичуельник
1
Debian (ish) специфический (или, по крайней мере, требующий того, что уважает if-up.d), но довольно элегантный - мне нравится.
voretaq7
@ voretaq7: Спасибо! По-прежнему приходится улучшать - обработка устройств связи и, возможно, другие особые случаи.
Мичуельник,
Вы бы лучше использовать post-up for i in rx tx gso ; do ethtool -K $IFACE $i off; doneв/etc/network/interfaces
JB. С моникой.
0

Не по теме (вроде), но я оказался здесь, когда попытался выяснить, как сделать то же самое для некоторых серверов RHEL6. Поэтому, если кто-то ищет то же самое для дистрибутивов, подобных RHEL / CentOS / Fedora, вы найдете ответ здесь .

PaddyD
источник