Yeniden başlatma yoluyla ethtool ayarlarına nasıl devam edilir


15

Bir CentOS5 sunucusunda tcp segmentasyon yükünü kapatmak istiyorum. Ethtool kullanarak komut ethtool -K eth0 tso offAncak, bu ayar sadece bu oturum için devam eder. Yeniden başlatmalarla nasıl devam ettirebilirim?


2
bir yerde bir başlangıç ​​komut dosyasına koyun.
Zoredache

Yanıtlar:


15

Bu web sayfasından :

/etc/rc.localGeçerli çalışma seviyesi tamamlandıktan sonra komutların çalıştırıldığı ethtool komutlarını (veya dağıtımınızın eşdeğerini) girebilirsiniz , ancak bu ideal değildir. Ağ hizmetleri çalışma düzeyi sırasında başlamış olabilir ve ettool komutları ağ trafiğini kesme eğilimindedir. Arayüz açılırken komutların uygulanması daha çok tercih edilir.

CentOS'taki ağ hizmeti bunu yapabilir. Senaryo /etc/sysconfig/network-scripts/ifup-postvarlığını denetler /sbin/ifup-localve varsa, bir parametre olarak arayüz adla çalıştırır (örn: /sbin/ifup-local eth0)

Bu dosyayı , SELinux bağlamını ayarlayarak /sbin/ifup-localçalıştırılabilir hale chmod +x /sbin/ifup-localgetirerek dokunabilir chcon --reference /sbin/ifup /sbin/ifup-localve ardından bir düzenleyicide açabiliriz.

Tüm ayarları aynı ayarları uygulamak için basit bir komut dosyası

#!/bin/bash
if [ -n "$1" ]; then
/sbin/ethtool -G $1 rx 4096 tx 4096
/sbin/ethtool -K $1 tso on gso on
fi

Bunun, ayarları geri döngü de dahil olmak üzere TÜM arabirimlere uygulamaya çalışacağını unutmayın.

Farklı ayarları uygulamak istediğimiz veya geri döngüyü atlamak istediğimiz farklı arayüzlerimiz varsa, bir vaka bildirimi yapabiliriz

#!/bin/bash
case "$1" in
eth0)
/sbin/ethtool -G $1 rx 16384 tx 16384
/sbin/ethtool -K $1 gso on gro on
;;
eth1)
/sbin/ethtool -G $1 rx 64 tx 64
/sbin/ethtool -K $1 tso on gso on
/sbin/ip link set $1 txqueuelen 0
;;
esac
exit 0

Şimdi, ethtool ayarları başlangıçta arabirimlere uygulanır, ağ iletişimi için tüm olası kesintiler arabirim getirildikçe yapılır ve sunucunuz tam ağ yetenekleriyle önyüklemeye devam edebilir.


Ayrıca burada açıklanan ETHTOOL_OPTS hakkında not access.redhat.com/documentation/tr-TR/Red_Hat_Enterprise_Linux/… Ancak bir nedenden dolayı henüz
makinemde çalışmıyor

13

/ Etc / sysconfig / network-scriptleri / ifcfg- * içindeki RHEL7 için şunlara sahip olabilirsiniz:

ETHTOOL_OPTS = "- K $ {DEVICE} gso off gro off tso off"

daha fazla seçenek varsa

ETHTOOL_OPTS = "- K $ {DEVICE} gso kapalı; -K $ {DEVICE} devre dışı bırakıldı--K $ {DEVICE} tso kapalı"

ifcfg dosyanızda doğal olarak CİHAZIN tanımlanmış olması gerekir.

Rc.local veya ekstra ifup komut dosyalarına gerek yoktur. Genel dağıtım sistemlerinde size kolay.


10

Eğer biri RHEL7 (veya benzeri) ve kullanımı Ağ Yöneticisi yerine /etc/init.d/network , olmaz iş sizin arayüzleri beri teklif edilen cevabı kontrol etmek / sbin / ifup-yerel (yanı sıra ifdown-öncesi yerel ve ifdown-local ) hiçbir zaman yürütülmez.

Bunun yerine komut dosyalarınızı /etc/NetworkManager/dispatcher.d/ içine koyun ve NetworkManager-dağıtıcı hizmetinin etkinleştirildiğinden emin olun

systemctl enable NetworkManager-dispatcher

İpucu: Görev dağıtıcı yalnızca NetworkManager bir arabirimde değişiklik yaptıktan sonra devreye girer, çalışması veya başka bir şey olması gerekmez, bu nedenle durum okursa

Active: inactive (dead)

bu tamamen iyi!

Ayrıca betiğinizin:

  1. yürütülebilir (chmod + x)
  2. köke ait (chown root: root)
  3. yalnızca root tarafından yazılabilir (chmod 755)

Şimdi NetworkManager dağıtım programına iki (2) değişken iletecektir:

$ 1 arayüz ( eno16777984 , eth0 , ppp0 , vb ...)

Durumu tutan 2 $ ( yukarı veya aşağı )

ve komut dosyalarının zincirlenmesine (tıpkı / etc / rc ... gibi) göndericinin bunları yürütme sırası üzerinde biraz kontrol sahibi olmasını sağlar:

10-birinci, 20-saniye vb ...

Sipariş, bir bağlantıda artan olacak

[2 $ = "yukarı"] ise 10'undan sonra 20 saniyeden sonra

ve bağlantıyı kesme

[$ 2 = "aşağı"] ise 20 saniye, ardından 10 saniye alırsınız

ve bunun gibi.

OP'nin aradığı şeyi başarmak için şöyle bir şey koyabilirsiniz:

#!/bin/bash
if [ "$1" = "eth0" && "$2" = "up" ]; then
  /sbin/ethtool --offload eth0 tso off
fi

içinde /etc/NetworkManager/dispatcher.d/20-ethtool

Ve bir gün deyin.

Şerefe


Bu sorunun çok eski olduğunu ve zaten kabul edilmiş bir cevabı olduğunu ve cevabınızın gerçekten yeni olmadığını unutmayın. Lütfen ön sayfayı karıştırmaya eğilimli olduğundan çok eski yayınları yanıtlamaktan kaçının.
Catherine MacInnes

3
Google'da "ifup-local" ifadesini aradığınızda, bunu 6. hit olarak alırsınız. Hiçbir şey "eski" düşünün
user1972814

2
Bu kesinlikle CentOS 7 ile ilgili bir şey katıyor. CentOS 7'de başka hiçbir çözüm benim için işe yaramadı
JDL

3
Bash betiğinin bir hatası var, şöyle olmalıdır:if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then
dreua

5

Bağlı arayüzler kullandığım için, kabul edilen cevapla ilgili problemlerle karşılaştım (eklemek için acele ediyorum, çok yararlı buldum).

Ne olduğunu keşfetmem biraz zaman aldı ama bir bağ kurarken ya da tek başına bir bağ kölesi getirirken bile ifup-localkomut dosyasının, köle arayüzleri için çağrılmayacağını buldum . Bunun, bağımlı arayüzlerin kendilerine atanmış herhangi bir IP adresi olmadığı için olduğunu varsayıyorum.

Bunu yapmak için, bağ kurulmuşsa, bağımlı arayüz adlarını almak için getirilen arayüzün ifup-localiçeriğini ayrıştırmak için modemi değiştirdim /proc/bonding/bondXve sonra onlarla gerekli şeyleri yaptım.

Sonunda benim ifup-localgibi görünüyordu:

#!/bin/bash

if [ -n "$1" ]
then
  IFACE="$1"

  # If interface is physical
  if [[ $IFACE =~ ^eth[0-9]+$ ]]
  then
    # Do whatever you need for a physical interface here
    # example below
    /sbin/ethtool -K $IFACE rx off    

  # Else if it's a bond
  elif [[ $IFACE =~ ^bond[0-9]+$ ]]
  then
    # Do whatever you need for the bond here
    # example below
    /sbin/ethtool -K $IFACE gso off

    # Now deal with slaves
    # Pull out slave interface names from /proc/net/bonding/bondX
    SLAVES=$(/bin/grep -oP "Slave Interface: \K(eth[0-9]+)" /proc/net/bonding/$IFACE)
    for SLAVE in $SLAVES
    do
      # Do whatever you need with the slave here
      # example below
      /sbin/ethtool -K $SLAVE tso off gso off
    done
  fi
fi

Dikkat: / proc / net / bonding / bondX içeriği, RedHat / Fedora / CentOS'un farklı sürümleri için komut dosyasını yazarken kullandığımdan farklı olabilir, bu nedenle slave arabirim adlarını çıkarma komutu çalışmayabilir .


4

Konu dışı, buraya gelen Ubuntu kullanıcıları için, benim gibi, bu bir not:

Ubuntu'da ders kitabı bunu yapmak için init.d / pre-up-up, vb. Komut dosyaları tarafından okunan / etc / network / interfaces dosyasını düzenlemektir . Yani bir / etc / network / interfaces dosyası şöyle görünebilir:

auto eth0
iface eth0 inet static
pre-up /sbin/ethtool -s eth0 speed 10 duplex full

Dokümanlar böyle diyor, ama çalışmıyor . Hazırlama ve yukarı komut dosyalarındaki ayrıştırma mantığı biraz tarihli olabilir ve gerekli ayarları arabirimler dosyasından ayrıştırmazlar. Bilmiyorum. En azından benim için işe yaramıyordu.

Şimdilik hack-ish ancak çalışan bir çözüm hala yerel /etc/rc.local dosyasını oluşturmak / düzenlemek ve orada çıkartılacak komutu belirtmektir (ancak arayüz zaten yapıldıktan sonra bir saniyeliğine ağı kesintiye uğratabileceğini unutmayın) getirdi). Yani buna sahip olmak:

ethtool -s eth0 hız 10 dubleks tam autoneg açık

içinde /etc/rc.local üzerinde istenen şekilde bir arayüz yavaşlatmak için çalışan bir çözümdür.

On Ubuntu 17.04 ve üzeri

Daha yeni Ubuntus, Systemd kullanır ve bu nedenle rc.local dosyası, 'start' çalışma seviyesine ulaşıldığında zorunlu olarak yürütülmez. "Rc-local" servisi etkinleştirilmelidir. Varsayılan olarak görünse de, geriye dönük uyumluluk nedenlerinden dolayı, muhtemelen - durumunu kontrol ettiğinizden emin olun.sudo systemctl status rc-local


pre-upSayesinde :) TSO bayrağını ayarlamak için Linux Mint 17.3 benim için çalıştı yönerge
Joril

1

Bu tür bir yapılandırmanın /etc/network/interfacesaslında Ubuntu için çalıştığını gördüm (kapatmak için kullandım large-receive-offload, ancak bu gerçekten önemli değil):

otomatik eth1
iface eth1 inet statik
    adres xxx.xxx.xxx.xxx
    netmask xx
    pre-up / sbin / ethtool -K $ IFACE lro kapalı

1

Ubuntu için, bunu aşağıdaki satırı ekleyerek yapabilirsiniz /etc/network/interfaces:

auto eth0
iface eth0 inet static
[...]
post-up /sbin/ethtool -K eth0 tso off gso off gro off

Burada post-up, belirli bir arayüzü getirdikten sonra verilen işlemi gerçekleştirecektir.


0

Evet, şu an için yapılandırma dosyaları kullanılarak yapılamaz. Komutu koyabilirsiniz /etc/init.d/rc.localve yapılması gerekir.

Bu dosya önyükleme sırasının sonunda yürütülür ve böylece arabirim için kapatılır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.