Persistenter txqueuelen Netzwerk-Parameter mithilfe udev

Einer von vielen konfigurierbaren Netzwerkschnittstellen-Parametern ist txqueuelen. Dieser Parameter definiert die Größe der Warteschlange, in welcher Daten vom Kernel zwischengespeichert werden, bis diese über das Netzwerk versendet wurden. Standardmäßig hat dieser Parameter den Wert 1000 - je nach Anwendung bedarf es hier einer Änderung, die man in aller Regel über ifconfig oder ip setzt:

1# ifconfig eth0 txqueuelen 5000
2# ip link set eth0 txqueuelen 5000

Das ist keine sonderlich elegante Lösung, da dieses Kommando nach jedem Reboot oder Netzwerk-Neustart erneut abgesetzt werden muss. Natürlich kann man das auch in die /etc/rc.local eintragen - aber das geht auch schöner.. 🙂

Unter Red Hat Enterprise Linux bzw. CentOS soll es gemäß einem Bugfix-Report eine Variable geben, die in der Konfigurationsdatei der Netzwerkschnittstelle hierfür verwendet werden kann - unter RHEL5 und 6 funktionierte das jedoch nicht bei mir:

1# vi /etc/sysconfig/network-scripts/ifcfg-eth0
2...
3IFCONFIG_OPTS="txqueuelen 5000"
4
5ESC ZZ
6
7# ifdown eth0; ifup eth0
8# ifconfig eth0|grep txqueuelen
9          collisions:0 txqueuelen:1000

Schöner lässt sich das Ganze mit udev lösen. Es genügt einfach eine kleine Regel unter /etc/udev/rules.d/60-custom-txqueuelen.rules anzulegen, die beim Erkennen der Netzwerkkarte das oben genannte ifconfig-Kommando absetzt:

 1#
 2# custom txqueuelen parameter value
 3#
 4# Sets a custom txqueuelen parameter value for network interfaces.
 5# This variable sets the length of the transmit queue of a device.
 6# The default value is 1000 - depending on your application setup you
 7# might want to increase this value (e.g. 5000)
 8#
 9
10KERNEL=="eth[0,1]", RUN+="/sbin/ifconfig %k txqueuelen 5000"
11#KERNEL=="eth[0-9]", RUN+="/sbin/ifconfig %k txqueuelen 5000"

Wer möchte, kann auch gleich das ip-Kommando verwenden - denn ifconfig ist ja bekanntlicherweise obsolet:

1...
2KERNEL=="eth[0,1]", RUN+="/sbin/ip link set %k txqueuelen 5000"
3#KERNEL=="eth[0-9]", RUN+="/sbin/ip link set %k txqueuelen 5000"

Zum Übernehmen genügt eines der folgenden Kommandos:

1# udevtrigger
2# /sbin/udevadm trigger

Und siehe da - der Wert wurde angepasst:

1# ifconfig eth0|grep txqueuelen
2          collisions:0 txqueuelen:5000
3# ifconfig eth1|grep txqueuelen
4          collisions:0 txqueuelen:5000

🙂

Übersetzungen: