Chciałbym wyłączyć odciążanie segmentacji TCP na serwerze CentOS5. Przy użyciu ethtool polecenie brzmi: ethtool -K eth0 tso off
To ustawienie jednak zachowuje się tylko dla tej sesji. Jak mogę utrzymać to przez ponowne uruchomienie?
centos
linux-networking
ethtool
Gus E.
źródło
źródło
Odpowiedzi:
Z tej strony :
Możesz wprowadzić polecenia ethtool w
/etc/rc.local
(lub odpowiedniku twojej dystrybucji), gdzie polecenia są uruchamiane po zakończeniu bieżącego poziomu pracy, ale nie jest to idealne. Usługi sieciowe mogły zostać uruchomione podczas poziomu pracy, a polecenia ethtool zwykle zakłócają ruch w sieci. Bardziej preferowane jest stosowanie poleceń podczas uruchamiania interfejsu.Usługa sieciowa w CentOS ma taką możliwość. Skrypt
/etc/sysconfig/network-scripts/ifup-post
sprawdza istnienie/sbin/ifup-local
, a jeśli istnieje, uruchamia go z nazwą interfejsu jako parametrem (np ./sbin/ifup-local eth0
:)Możemy utworzyć ten plik za pomocą dotyku,
/sbin/ifup-local
aby był wykonywalny,chmod +x /sbin/ifup-local
ustawiając kontekst SELinux za pomocą,chcon --reference /sbin/ifup /sbin/ifup-local
a następnie otwierając go w edytorze.Prosty skrypt do zastosowania tych samych ustawień do wszystkich interfejsów byłby podobny
Należy pamiętać, że spróbuje to zastosować ustawienia do WSZYSTKICH interfejsów, nawet do sprzężenia zwrotnego.
Jeśli mamy różne interfejsy, do których chcemy zastosować inne ustawienia lub chcemy pominąć sprzężenie zwrotne, możemy złożyć instrukcję case
Teraz ustawienia ettool są stosowane do interfejsów podczas ich uruchamiania, wszystkie potencjalne przerwy w komunikacji sieciowej są wykonywane w miarę uruchamiania interfejsu, a serwer może nadal uruchamiać się z pełnymi możliwościami sieci.
źródło
Dla RHEL7 w / etc / sysconfig / network-scripts / ifcfg- * możesz mieć:
ETHTOOL_OPTS = "- K $ {DEVICE} gso off gro off tso off"
jeśli więcej opcji, użyj jak
ETHTOOL_OPTS = "- K $ {DEVICE} gso wyłączone; -K $ {DEVICE} gro off; -K $ {DEVICE} tso wyłączone"
musisz oczywiście zdefiniować URZĄDZENIE w swoim pliku ifcfg.
Nie potrzeba żadnych skryptów rc.local ani dodatkowych skryptów ifup. Łatwy w ogólnych systemach wdrażania.
źródło
Jeśli korzystasz z RHEL7 (lub podobnego) i używasz Network Managera zamiast /etc/init.d/network do kontrolowania interfejsów, proponowana odpowiedź nie będzie działać, ponieważ / sbin / ifup-local (a także ifdown-pre-local i ifdown-local ) nigdy nie zostanie wykonany.
Zamiast tego umieść skrypty w /etc/NetworkManager/dispatcher.d/ i upewnij się, że usługa NetworkManager-dispatcher jest włączona
Wskazówka: dyspozytor uruchomi się tylko wtedy, gdy NetworkManager dokona zmian w interfejsie, nie musi być uruchomiony ani nic, więc jeśli status brzmi
w porządku!
Upewnij się także, że twój skrypt to:
Teraz NetworkManager przekaże dyspozytorowi dwie (2) zmienne:
i pozwala na tworzenie łańcuchów skryptów (tak jak / etc / rc ...), aby mieć pewną kontrolę nad kolejnością ich uruchamiania:
Kolejność będzie rosła przy połączeniu
i zejście po rozłączeniu
i tak dalej.
Aby osiągnąć to, czego szukał OP, możesz umieścić coś takiego:
w /etc/NetworkManager/dispatcher.d/20-ethtool
I nazwij to dniem.
Twoje zdrowie
źródło
if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then
Wystąpiły problemy z zaakceptowaną odpowiedzią (którą, pośpiesznie dodając, okazało się bardzo pomocne), ponieważ korzystałem z połączonych interfejsów.
Długo zajęło mi odkrycie, co się dzieje, ale odkryłem, że przywołując więź, a nawet osobno wychowując niewolnika,
ifup-local
skrypt nie będzie wywoływał interfejsów niewolników. Zakładam, że dzieje się tak, ponieważ interfejsy slave nie mają przypisanych żadnych adresów IP.Aby obejść ten problem, zmodyfikowałem mój,
ifup-local
aby przeanalizować zawartość/proc/bonding/bondX
interfejsu, który został przywołany, jeśli to była więź, aby uzyskać nazwy interfejsu slave, a następnie zrobiłem z nimi niezbędne rzeczy.W końcu mój
ifup-local
wyglądał następująco:Zastrzeżenie: zawartość / proc / net / bonding / bondX może być inna dla różnych wersji RedHat / Fedora / CentOS niż ta, z której korzystałem podczas pisania skryptu, więc polecenie wyciągnięcia nazw interfejsów slave może nie działać .
źródło
Nie na temat, dla użytkowników Ubuntu, którzy przybyli tutaj, jak ja, to jako notatka:
Na Ubuntu: podręcznik jest edycja pliku / etc / network / interfaces , który z kolei jest odczytywany przez skrypty init.d / pre-up-up itp. Tak an / etc / network / interfaces plik może wyglądać następująco:
Tak mówią doktorzy, ale to nie działa . Może być tak, że logika analizowania w skryptach wstępnego i wstępnego jest nieco przestarzała i nie analizują wymaganych ustawień z pliku interfejsów. Nie wiem Przynajmniej mi to nie działało.
Więc hack-ish, ale działającym rozwiązaniem jest na razie utworzenie / edycja lokalnego pliku /etc/rc.local i podanie polecenia, które ma zostać tam wykonane (należy jednak pamiętać, że może to przerwać pracę sieci na kilka sekund po tym, jak interfejs został już uruchomiony) wychowany). Mając to:
w /etc/rc.local jest działającym rozwiązaniem do spowolnienia interfejsu zgodnie z powyższym zamierzeniem.
Na Ubuntu 17.04 i nowszych
Nowsze wersje Ubuntus używają Systemd, a zatem plik rc.local niekoniecznie jest wykonywany po osiągnięciu na przykład poziomu uruchamiania. Usługa „rc-local” musi być włączona. Chociaż wydaje się, że jest to domyślnie, prawdopodobnie ze względu na kompatybilność wsteczną - sprawdź jego status za pomocą
sudo systemctl status rc-local
źródło
pre-up
Dyrektywa pracował dla mnie na Linux Mint 17,3 do ustawiania flagi OSP dzięki :)Przekonałem się, że ustawienie tego rodzaju konfiguracji w
/etc/network/interfaces
rzeczywistości działa dla Ubuntu (large-receive-offload
oczywiście, że użyłem go do wyłączenia , ale to nie powinno mieć znaczenia):źródło
W przypadku Ubuntu możesz to zrobić, dodając następujący wiersz
/etc/network/interfaces
:post-up tutaj wykona daną operację po uruchomieniu określonego interfejsu.
źródło
Tak, na razie nie można tego zrobić przy użyciu plików konfiguracyjnych. Możesz wprowadzić polecenie
/etc/init.d/rc.local
i należy to zrobić.Ten plik jest wykonywany na końcu sekwencji rozruchowej, więc interfejs zostałby wyłączony.
źródło