Das Problem mit Barebones ist, dass man meist an irgendeinem Ende einen Kompromiss eingehen muss. Mein neuer Gateway ist ein ZOTAC CI-327 nano. Eigentlich eine nette Kiste… Eigentlich, weil die Ethernet NICs eben von Realtek sind… Und das die äußerst Buggy sind wenn es um „High Performance“ geht, ist bekannt…
Das Problem – Ein OpenSource Treiber
In meinem Fall wirkt sich das wie folgt aus: Jede Nacht wenn mein Amanda Backup anspringt, stalled das interne NIC. Nichts geht mehr durch, und ein dmsg output verrät folgendes:
re1: link state changed to UP
re1: watchdog timeout
re1: link state changed to DOWN
re1: link state changed to UP
re1: watchdog timeout
re1: link state changed to DOWN
re1: link state changed to UP
re1: watchdog timeout
re1: link state changed to DOWN
re1: link state changed to UP
re1: watchdog timeout
Das ist äußerst ärgerlich. Der einzige „fix“ ist ein reboot. Und das ist auf dauer natürlich nicht tragbar…
Tatsächlich ist es wohl so, dass der FreeBSD native Treiber eine Open Source Version ist, die sich gegenüber dem Realtek eigenem etwas strange verhält…
Die Lösung – Ein anderer Treiber
Wenn man im Netz nach ner Lösung sucht, gibt es einige Ansätze. So beschreiben User Besserung wenn man den Mediatyp auf 100MBit setzt und/oder TX/RX Checksuming disabled etc.
All diese Dinge haben mir nicht wirklich weitergeholfen. Bis auf den Tipp, den FreeBSD nativen Treiber durch den von Realtek zu ersetzen. Ich nutze FreeBSD 10.4 auf besagter Kiste. Die Treiber auf den Seiten von Realtek sprechen zwar von FreeBSD 7/8 aber, ich hatte keine Probleme dieses Module unter 10 zu bauen und zu laden. (Unter 11 soll er nicht bauen, es gibt aber einen Patch…)
Also ran ans Werk…. Vor der Kosmetik sagt uns dmsg folgendes:
xd0ff mem 0x91104000-0x91104fff,0x91100000-0x91103fff irq 23 at device 0.0 on pci3
re1: Using 1 MSI-X message
re1: turning off MSI enable bit.
re1: Chip rev. 0x4c000000
re1: MAC rev. 0x00000000
miibus1: on re1
rgephy1: PHY 1 on miibus1
rgephy1: none, 10baseT, 10baseT-FDX, 10baseT-FDX-flow, 100baseTX, 100baseTX-F
DX, 100baseTX-FDX-flow, 1000baseT-FDX, 1000baseT-FDX-master, 1000baseT-FDX-flow, 1000baseT-FDX-flow-master, auto, auto-flow
re1: Using defaults for TSO: 65518/35/2048
re1: Ethernet address: 00:01:2e:7a:XX:XX
Folgende Dinge sind zu tun um den Treiber zu ersetzen:
- Download des Treibers von der Realtek Seite: Hier
- Entpacken des selbigen
- Die zwei Dateien if_re.c und if_rereg.h wollen ins Verzeichnis /usr/src/sys/dev/re
- Das Makefile geht nach /usr/src/sys/modules/re
- Bauen des Modules. Dazu nach /usr/src/sys/modules/re wechseln und
make clean && make
ausführen. - Für die mutigen einen
make install
hinter her. Besser ist erst das originale /boot/kernel/if_re.ko wegsichern ;-). - Der Datei /boot/loader.conf den Eintrag
if_re_load="YES"
hinzufügen. - Reboot
Mit dmesg
überprüfen wir, ob denn nun der „neue“ Treiber geladen wurde.
re1: Using Memory Mapping!
re1: Using 1 MSI-X message
re1: ASPM disabled
re1: version:1.94.01
re1: Ethernet address: 00:01:2e:7a:XX:XX
This product is covered by one or more of the following patents:
US6,570,884, US6,115,776, and US6,327,625.
Ergebnisse
Im Moment teste ich das ganze noch…. Zumindest kann ich das hier schreiben, und das obwohl Amanda gerade ein Backup fährt…
Nachtrag:
Bis jetzt scheint es recht stabil zu laufen…. Auch der Durchsatz ist nicht verkehrt…
Hier ein iperf3 Test
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 103 MBytes 865 Mbits/sec 46 100 KBytes
[ 5] 1.00-2.00 sec 108 MBytes 908 Mbits/sec 55 102 KBytes
[ 5] 2.00-3.00 sec 108 MBytes 906 Mbits/sec 60 65.5 KBytes
[ 5] 3.00-4.00 sec 108 MBytes 909 Mbits/sec 42 105 KBytes
[ 5] 4.00-5.00 sec 109 MBytes 915 Mbits/sec 35 87.9 KBytes
[ 5] 5.00-6.00 sec 109 MBytes 916 Mbits/sec 37 64.1 KBytes
[ 5] 6.00-7.00 sec 109 MBytes 914 Mbits/sec 38 100 KBytes
[ 5] 7.00-8.00 sec 109 MBytes 917 Mbits/sec 30 18.1 KBytes
[ 5] 8.00-9.00 sec 109 MBytes 911 Mbits/sec 51 43.2 KBytes
[ 5] 9.00-10.00 sec 109 MBytes 915 Mbits/sec 37 73.9 KBytes
[ 5] 10.00-11.00 sec 108 MBytes 910 Mbits/sec 49 16.7 KBytes
[ 5] 11.00-12.00 sec 110 MBytes 918 Mbits/sec 33 93.4 KBytes
[ 5] 12.00-12.40 sec 43.5 MBytes 919 Mbits/sec 9 184 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-12.40 sec 1.31 GBytes 909 Mbits/sec 522 sender
[ 5] 0.00-12.40 sec 0.00 Bytes 0.00 bits/sec receiver
CPU Utilization: local/sender 80.4% (1.7%u/78.8%s), remote/receiver 0.0% (0.0%u/0.0%s)