Moduloptionen für NIC e1000(e) werden nicht geladen

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
KapitaenHaddock
Beiträge: 8
Registriert: 29.03.2012 13:51:21

Moduloptionen für NIC e1000(e) werden nicht geladen

Beitrag von KapitaenHaddock » 29.03.2012 14:26:05

Hallo Community,

auf meinem frisch installierten Server (Debian 6.0.4, Kernel 2.6.32-5-amd64) will ich den einzelnen NICs Moduloptionen zum Feintuning mitgeben. Diese sollen bei einem Reboot aktiv werden.
Dazu habe ich unter /etc/modprobe.d ein File e1000.conf mit folgendem Inhalt angelegt:

Code: Alles auswählen

alias eth0 e1000e
alias eth1 e1000e
alias eth2 e1000
alias eth3 e1000
options e1000 RxDescriptors=4096,4096 TxDescriptors=4096,4096 TxIntDelay=64,0 InterruptThrottleRate=3,0
options e1000e RxDescriptors=4096,4096 TxDescriptors=4096,4096 TxIntDelay=64,0 InterruptThrottleRate=3,0
Beim Reboot und anschließender Überprüfung der NICs mit ethtool werden diese gesetzten Optionen mit Standardwerten überschrieben, bzw.
es scheint so, als ob das File nicht ausgelesen wird.

Falls das die Ursache sein könnte, ich habe bereits Änderungen in der Datei /etc/udev/rules.d/70-persistent-net.rules vorgenommen, weil die Benamung nicht der Installationsreihenfolge entsprach.

Code: Alles auswählen

# PCI device 0x8086:0x1010 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:02:a5:4c:2f:48", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"

# PCI device 0x8086:0x10d3 (e1000e)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:90:61:cf:39", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x8086:0x10d3 (e1000e)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:90:61:cf:38", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x1010 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:02:a5:4c:2f:49", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"
Auch ein Eintrag in der /etc/modules
mit

Code: Alles auswählen

e1000
e1000e
options e1000 RxDescriptors=4096,4096 TxDescriptors=4096,4096 TxIntDelay=64,0 InterruptThrottleRate=3,0
options e1000e RxDescriptors=4096,4096 TxDescriptors=4096,4096 TxIntDelay=64,0 InterruptThrottleRate=3,0
hat keinen nennenswerten Erfolg gebracht.

Ein manueller Test (Modul e1000 entladen und mit Optionen manuell wieder geladen) hat die Optionen gesetzt!

Muß die Datei /etc/modprobe.d/e1000.conf noch irgendwo eingetragen werden?
Wo liegt ansonsten der Fehler begraben?

Vielen Dank für eure Hilfe!
Gruß, Christian

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Moduloptionen für NIC e1000(e) werden nicht geladen

Beitrag von rendegast » 30.03.2012 07:11:47

Die /etc/modules braucht keine Einträge,
die entsprechenden Module werden durch udev beim Erkennen der Karten automatisch geladen.
Die Moduloptionen der options-Zeilen gehören da nicht hin.
Die Datei dient nur zur Anweisung für das Laden dort aufgeführter Module
mit den in den modprobe.d/*.conf oder Kernel-Commandline gesetzten Optionen.
Siehe auch /etc/init.d/kmod (wheezy/testing) resp. /etc/init.d/module-init-tools (squeeze/stable),
zusätzlich 'man modprobe' + 'man modprobe.d'.

EDIT Hätte ich selber nochmalmal alles nachlesen sollen (s.u.), auch in der /etc/modules können Modul-optionen gesetzt werden. :oops:
Allerdings in der Form
'modulname option option option ...'


Die 'alias eth* ...' der e1000.conf sind nutzlos, da die Interfaces erst mit dem Laden der Module erstellt werden.
Mit einem 'modprobe eth0' (das vom System nicht aufgerufen wird) würde nicht die Schnittstelle "eth0" mit einem Treiber versehen,
sondern einfach der Treiber (in diesem Fall) e1000e geladen,
und udev erstellt dazu Schnittstellen eth* (Entweder die nächsten freien oder die in der persistent-net.rules für entsprechende Karten festgelegten).

EDIT Es heißt 'option', nicht 'options'.
Sorry, habe das mit der Ausgabe von 'modprobe -c' verwechselt

Code: Alles auswählen

# modprobe -c | grep ^option
option loop max_loop=32
option nbd max_part=32
option ipv6 disable=1 disable_ipv6=1
option k10temp force
option nouveau modeset=0
option radeon modeset=0
option radeon dynclks=1
option radeon audio=0
option bt87x index=-2
option cx88_alsa index=-2
option snd_atiixp_modem index=-2
option snd_intel8x0m index=-2
option snd_via82xx_modem index=-2
option snd_pcsp index=-2
option snd_usb_audio index=-2

Code: Alles auswählen

# modprobe -c | grep ^option
libkmod: ERROR ../libkmod/libkmod-config.c:653 kmod_config_parse: /etc/modprobe.d/zzzzzz.conf line 1: ignoring bad line starting with 'option'
libkmod: ERROR ../libkmod/libkmod-config.c:653 kmod_config_parse: /etc/modprobe.d/zzzzzz.conf line 2: ignoring bad line starting with 'option'
Es heißt 'options', :hail:
Zuletzt geändert von rendegast am 01.08.2012 16:43:44, insgesamt 3-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

KapitaenHaddock
Beiträge: 8
Registriert: 29.03.2012 13:51:21

Re: Moduloptionen für NIC e1000(e) werden nicht geladen

Beitrag von KapitaenHaddock » 02.04.2012 14:25:00

Hallo,
Die /etc/modules braucht keine Einträge, die entsprechenden Module werden durch udev beim Erkennen der Karten automatisch geladen.
...das hab ich nach einen Neustart auch gemerkt, eben weil es keinerlei Auswirkungen hat.

Die Optionen haben aber leider auch sonst keinerlei Auswirkungen nach einem Neustart, es scheint, als würden diese Einträge mit Standardwerten jedens Mal nach einem Neustart überschrieben.
Übrigens, lt. man modprobe.d sollte es doch 'options' heißen... :?:

Ein weiterer Test mit einem Eintrag in die /etc/initramfs-tools/modules

Code: Alles auswählen

 cat /etc/initramfs-tools/modules
# List of modules that you want to include in your initramfs.
# They will be loaded at boot time in the order below.
#
# Syntax:  module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod

e1000 RxDescriptors=4096,4096 TxDescriptors=4096,4096 TxIntDelay=64,0 InterruptThrottleRate=3,0
e1000e RxDescriptors=4096,4096 TxDescriptors=4096,4096 TxIntDelay=64,0 InterruptThrottleRate=3,0
mit anschließendem update-initramfs -v -k -u -all hat auch nichts bewirkt... :(

Gruß, Christian

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Moduloptionen für NIC e1000(e) werden nicht geladen

Beitrag von rendegast » 02.04.2012 14:48:58

Übrigens, lt. man modprobe.d sollte es doch 'options' heißen... :?:
Yepp, sorry, :hail:

Code: Alles auswählen

# modprobe -c | grep ^option
libkmod: ERROR ../libkmod/libkmod-config.c:653 kmod_config_parse: /etc/modprobe.d/zzzzzz.conf line 1: ignoring bad line starting with 'option'
libkmod: ERROR ../libkmod/libkmod-config.c:653 kmod_config_parse: /etc/modprobe.d/zzzzzz.conf line 2: ignoring bad line starting with 'option'
option loop max_loop=32
option nbd max_part=32
option ipv6 disable=1 disable_ipv6=1
option k10temp force
option nouveau modeset=0
...
"options" in der Eingabe, "option" in der Ausgabe.
:oops:


Wegen der Anweisungen in /etc/modules / /etc/initramfs-tools/modules
(kmod / module-init-tools selber mal angesehen)

Code: Alles auswählen

# Loop over every line in /etc/modules.
grep '^[^#]' $MODULES_FILE | \
while read module args; do
  [ "$module" ] || continue
  load_module "$module" "$args"
done
also im einen Fall schonmal :hail: , da aus /etc/modules die Optionen eingearbeitet werden.
In /boot/initrd.../scripts/functions:

Code: Alles auswählen

# Load custom modules first
load_modules()
{
        if [ -e /conf/modules ]; then
                cat /conf/modules | while read m; do
                        # Skip empty lines
                        if [ -z "$m" ];  then
                                continue
                        fi
                        # Skip comments - d?ash removes whitespace prefix
                        com=$(printf "%.1s" "${m}")
                        if [ "$com" = "#" ]; then
                                continue
                        fi
                        modprobe $m
                done
        fi
}
Mit $m wird die komplette Zeile dem modprobe übergeben, also auch :hail:
:oops:



Einen Vergleich, wann /etc/modules und udev zuschlagen.
Bsp. k10temp aus /etc/modules und msr aus /etc/initramfs-modules und udev-Automatik:

Code: Alles auswählen

$ ls -1 /etc/rcS.d/*{mod,udev}*
/etc/rcS.d/S02udev
/etc/rcS.d/S09kmod
/etc/rcS.d/S15udev-mtab

-> 'lsmod'
...
eeprom                 12481  0 
hwmon_vid              12398  0 
snd_hda_codec_hdmi     26319  1 
snd_hda_codec_realtek   142180  1 
snd_hda_intel          21856  0 
snd_hda_codec          63477  3 snd_hda_intel,snd_hda_codec_realtek,snd_hda_codec_hdmi
snd_hwdep              12943  1 snd_hda_codec
snd_pcm                53390  4 snd_hda_codec,snd_hda_intel,snd_hda_codec_hdmi,snd_pcm_oss
snd_seq                39487  0 
snd_timer              22356  2 snd_seq,snd_pcm
snd_seq_device         13016  1 snd_seq
snd                    42691  11 snd_seq_device,snd_timer,snd_seq,snd_pcm,snd_hwdep,snd_hda_codec,snd_hda_intel,snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_mixer_oss,snd_pcm_oss
soundcore              12921  1 snd
sp5100_tco             12752  0 
snd_page_alloc         12867  2 snd_pcm,snd_hda_intel
k10temp                12539  0 
i2c_piix4              12480  0 
parport_pc             22036  0 
psmouse                54927  0 
serio_raw              12803  0 
evdev                  17225  7 
pcspkr                 12515  0 
parport                31254  1 parport_pc
i2c_core               19116  2 i2c_piix4,eeprom
processor              27483  1 powernow_k8
wmi                    13051  0 

ext3                  138190  1 
jbd                    51377  1 ext3
mbcache                12897  2 ext3,ext4
msr                    12655  0 
cpuid                  12620  0 
usbhid                 31523  0 
hid                    60120  1 usbhid
sd_mod                 35425  9 
crc_t10dif             12332  1 sd_mod
ata_generic            12439  0 
ahci                   20821  3 
ohci_hcd               22059  0 
libahci                18308  1 ahci
floppy                 48121  0 
pata_atiixp            12648  2 
thermal                13103  0 
thermal_sys            17752  3 thermal,processor,video
ehci_hcd               35509  0 
libata                124981  4 pata_atiixp,libahci,ahci,ata_generic
r8169                  41810  0 
mii                    12595  1 r8169
scsi_mod              135194  5 libata,sd_mod,usb_storage,uas,sr_mod
usbcore               104352  6 ehci_hcd,ohci_hcd,usbhid,usb_storage,uas
usb_common             12338  1 usbcore
it87 / k10temp / eeprom in der /etc/modules.
msr / cpuid in der /etc/initramfs-tools/modules resp. initrd.../conf/modules.
r8169 / usbcore kommt durch MOST in die initrd.
vgl. MODULES=dep, "geleerte" initrd:

Code: Alles auswählen

k10temp                12539  0 
r8169                  41810  0 
ahci                   20821  3 
libahci                18308  1 ahci
usb_common             12338  1 usbcore
mii                    12595  1 r8169
wmi                    13051  0 
sp5100_tco             12752  0 
i2c_piix4              12480  0 
soundcore              12921  1 snd
i2c_core               19116  2 i2c_piix4,eeprom
floppy                 48121  0 
psmouse                54927  0 
processor              27483  1 powernow_k8
button                 12817  1 fglrx
parport_pc             22036  0 
parport                31254  1 parport_pc
pcspkr                 12515  0 
serio_raw              12803  0 
evdev                  17225  7 

ext3                  138190  1 
mbcache                12897  2 ext3,ext4
jbd                    51377  1 ext3
msr                    12655  0 
cpuid                  12620  0 
sd_mod                 35425  8 
crc_t10dif             12332  1 sd_mod
ata_generic            12439  0 
pata_atiixp            12648  1 
thermal                13103  0 
thermal_sys            17752  3 thermal,processor,video
libata                124981  4 pata_atiixp,ata_generic,libahci,ahci
scsi_mod              135194  2 libata,sd_mod
ext3 kommt noch aus der initrd, evdev dann aus dem installierten System.
r8169 / ahci zeigen also den Punkt, an dem udev die Hardware-Module lädt.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

KapitaenHaddock
Beiträge: 8
Registriert: 29.03.2012 13:51:21

Re: Moduloptionen für NIC e1000(e) werden nicht geladen

Beitrag von KapitaenHaddock » 01.08.2012 16:13:10

Hallo,

oh je, ganz vergessen dass da noch ein Artikel von mir offen ist... :hail: Hier meine Lösung:

Ich habe mir den aktuellsten Treiber von Intel heruntergeladen und installiert und
die entsprechenden Kernelparmeter mit ethtool nachgeladen - Grund, im aktuellsten Treiber werden nur noch ganz wenige Kernel-Moduloptionen unterstützt.

Nachfolgend die Konfigruation für die Parameter RxDescriptors, TxDescriptors und InterruptThrottleRate mittels ethtool...

Code: Alles auswählen

ethtool -C <INTERFACE> rx-usecs 0
ethtool -G <INTERFACE> rx 4096
ethtool -G <INTERFACE> tx 4096
..das ganze mittels eines Skriptes in /etc/rc.local starten lassen und et voilà...

Das Thema kann somit geschlossen werden.

Viele Grüße,
Christian

Antworten