Вимкнути завантаження TCP {повністю, загально та легко}


15

Я хочу відключити tcp-offloading ("TOE") на своїх серверах debian.

ethtool -K .....

У мене є деякі побажання:

Інтегруйте його чисто в debian

Це означає: немає rc.local, я також хотів би уникати псевдо-rc-сценаріїв ...

Я б здогадувався, це встановлення ethtool та використання pre-up.d / -Hook, який деконфігурує TOE, використовуючи параметри з / etc / network / інтерфейсів .

Я хотів би деконфігурувати всі мої (майбутні) сервери загальним способом за допомогою FAI . (оскільки фай вже на місці - і потрібен!) А що з опціями "toe", які не підтримуються на певному апаратному забезпеченні? Чи вийде з ладу мережа, якщо неіснуючий варіант буде відключений? Я думаю, це повинно бути надійним, щоб цього не робити, але це, здається, і не є моїм розшукуваним рішенням.

Це дуже захаращує конфігурацію, оскільки в атмі є 11 варіантів! Використовуючи кілька NIC, це пахне мені схильною до помилок.

Хіба немає більш загального рішення? Я маю на увазі sysctl, але ще не знайшов. Моє бажання було:

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

PS: Я дуже здивований, коли мої "новіші програмні засоби" мають TOE включеним за замовчуванням через це: http://www.linuxfoundation.org/collaborate/workgroups/networking/toe


1
Я хотів би зазначити, що хоча аргументи агаїстичного TOE правдиві, в основному типи олово-фольгових капелюхів не потребують життя з реалістичними обмеженнями (де будь-яке прискорення зазвичай корисне). Існує безліч кращих випадків, коли TOE слід відключити, але це не є звичайним явищем і не заслуговує на те, щоб зробити його відключення "загальним та простим".
Кріс С

1
@Chris S: Правильно, але я не проти TOE, поки це не заплуталося. І справді підсумовується останнім часом, що проблеми з мережею зводяться до "відключення TOE". Так я цього хочу! : DI міг би жити з методом ettool, але сподіваюся, що хтось знає "ручку" ....
Michuelnik

@Michuelnik так - якщо він працює, я б дозволив йому працювати, але якщо він працює і створює проблеми для вас, це хороший привід вимкнути його. Ви можете залишити деякі частини двигуна завантаження активними, хоча якщо Linux це дозволяє: Наприклад, завантаження контрольних сум (важко накрутити CRC32, і картки роблять це апаратніше, що швидше і економить кілька циклів процесора на пакет, який може скласти в мережах з високим трафіком)
voretaq7

@ voretaq7: Добрий момент! Невдовзі подумав, чи варто розрізняти корисні та жалюгідні варіанти. Але мені було потрібно досить швидке рішення, не вивчаючи TOE занадто довго, тим більше, що речі TOE здаються специфічними для постачальника, що це знання, яке старіє занадто швидко, щоб вкласти час у нього. Чи TX-chksum-розвантажує походження, чому мій проводник скаржиться на неправильні chksums?
Мічуельник

Я мушу сказати, що функції, які ви відключаєте, це не TOE. TOE - це повноцінний двигун розвантаження TCP. Ви відключаєте лише завантаження контрольної суми, надсилаєте завантаження сегментації та отримуєте повторну збірку. Жодна з цих особливостей не є TOE. Linux не підтримує TOE: wiki.linuxfoundation.org/networking/toe
1717

Відповіді:


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

4
це має бути прийнята відповідь
Спонсор

7

Еврика! Знайшов "моє" рішення!

Я просто розміщую свій власний скрипт відключення-toe в /etc/network/if-up.d/, який повністю відключає tcp-offloading.

Як бонус я додав / 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

"Еврика" не має "Н" в ньому.
Chris S

У моїй рідній мові вона є ...
;-p

1
Дебіан (іш) специфічний (або, принаймні, потрібний матеріал, який поважає 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, як дистрибутиви, відповідь ви знайдете тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.