Nonaktifkan TCP-Offloading {sepenuhnya, umum, dan mudah}


15

Saya ingin menonaktifkan tcp-offloading ("TOE") di server debian saya.

ethtool -K .....

Saya punya beberapa keinginan:

Integrasikan dengan rapi ke dalam debian

Ini berbunyi: tidak ada rc.local, saya juga ingin menghindari pseudo-rc-scripting ...

Saya kira, itu menginstal ethtool dan menggunakan pre-up.d / -Hook yang mendekonfigurasi TOE menggunakan opsi dari / etc / network / interfaces .

Saya ingin mengonfigurasi semua server saya (yang akan datang) dengan cara yang umum menggunakan FAI . (karena fai sudah ada di tempatnya - dan ingin!) Bagaimana dengan opsi kaki yang tidak didukung pada beberapa perangkat keras? Akankah jaringan gagal jika opsi yang tidak ada harus dinonaktifkan? Saya kira itu harus kuat untuk tidak melakukannya, tetapi ini tampaknya juga bukan solusi yang saya inginkan.

Ini mengacaukan konfigurasi, karena atm ada 11 opsi! Menggunakan banyak NIC ini baunya rentan kesalahan bagi saya.

Apakah tidak ada solusi yang lebih umum? Saya memiliki sysctl dalam pikiran, tetapi belum menemukannya. Keinginan saya adalah:

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

PS: Saya cukup terkejut menemukan "hardware baru" saya untuk mengaktifkan TOE secara default, karena ini: http://www.linuxfoundation.org/collaborate/workgroups/networking/toe


1
Saya ingin menunjukkan bahwa sementara argumen TOE agaist benar, sebagian besar tipe topi Tin-Foil yang tidak harus hidup dengan kendala realistis (di mana akselerasi biasanya membantu). Ada banyak kasus tepi di mana TOE harus dinonaktifkan, tetapi itu tidak umum dan tidak pantas untuk membuatnya dinonaktifkan "generik dan mudah".
Chris S

1
@ Chris S: Benar, tapi saya tidak keberatan TOE sampai berantakan. Dan itu benar-benar meringkas akhir-akhir ini bahwa masalah jaringan mendidih menjadi "disable TOE". Jadi saya menginginkannya! : DI dapat hidup dengan ethtool-Method, tetapi berharap seseorang mengetahui "kenop" ....
Michuelnik

@Michuelnik ya - jika itu berfungsi saya akan membiarkannya berjalan, tetapi jika itu bertingkah dan menyebabkan masalah bagi Anda itu adalah alasan yang baik untuk menonaktifkannya. Anda mungkin ingin membiarkan beberapa bagian dari mesin offload aktif walaupun jika Linux mengizinkannya: Offloading checksum misalnya (sulit untuk mengacaukan CRC32, dan kartu melakukannya dalam perangkat keras yang lebih cepat dan menghemat siklus CPU per paket yang dapat Anda gunakan). dijumlahkan di jaringan lalu lintas tinggi)
voretaq7

@ voretaq7: Poin bagus! Pikirkan sebentar lagi, apakah saya harus membedakan antara opsi yang dapat digunakan dan yang menyedihkan. Tetapi saya membutuhkan solusi yang cukup cepat tanpa terlalu lama mempelajari TOE, terutama karena hal-hal TOE tampaknya sangat spesifik vendor sehingga pengetahuannya yang semakin cepat untuk menginvestasikan waktu ke dalamnya. Apakah TX-chksum-offloading asalnya mengapa wireshark saya mengeluh tentang chksum yang salah?
Michuelnik

Saya harus mengatakan bahwa fitur yang Anda nonaktifkan bukan TOE. TOE adalah mesin TCP offload penuh. Anda menonaktifkan off checksum saja, mengirim segmentasi offload dan menerima reassembly offload. Tidak satu pun dari fitur tersebut adalah TOE. Linux tidak mendukung TOE: wiki.linuxfoundation.org/networking/toe
juhist

Jawaban:


12

Pada Debian, ethtoolpaket sekarang menyediakan if-up.dskrip yang mengimplementasikan opsi untuk pembongkaran (dan ethtoolpengaturan lainnya ).

Anda hanya perlu menginstal paket ini dan menambahkan baris seperti ini ke antarmuka /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
ini seharusnya jawaban yang diterima
Spongman

7

Eureka! Menemukan solusi "saya"!

Saya hanya menempatkan Script disable-toe saya sendiri di /etc/network/if-up.d/ yang menonaktifkan sepenuhnya tcp-offloading.

Sebagai bonus saya telah menambahkan / etc / network / interface -Opsi, yang menonaktifkan ini.

#!/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" tidak memiliki "H" di dalamnya.
Chris S

Dalam bahasa ibu saya, ia memiliki ... ;-p
Michuelnik

1
Debian (ish) spesifik (atau setidaknya membutuhkan hal-hal yang dihormati if-up.d), tapi cukup elegan - saya suka.
voretaq7

@ voretaq7: Terima kasih! Masih harus meningkatkan - menangani perangkat ikatan dan mungkin kasus khusus lainnya.
Michuelnik

Anda sebaiknya menggunakan post-up for i in rx tx gso ; do ethtool -K $IFACE $i off; donein/etc/network/interfaces
JB. Dengan Monica.

0

Di luar topik (semacam) tapi saya berakhir di sini ketika mencoba mencari cara untuk melakukan hal yang sama untuk beberapa server RHEL6. Jadi jika ada yang mencari hal yang sama untuk distribusi seperti RHEL / CentOS / Fedora, Anda akan menemukan jawabannya di sini .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.