Das leidige Thema: Realtek

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:

[ccN]
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
re1: link state changed to DOWN
re1: link state changed to UP
re1: watchdog timeout
[/ccN]

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:

[ccN]
re1: port 0xd000-0
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
[/ccN]

Folgende Dinge sind zu tun um den Treiber zu ersetzen:

  1. Download des Treibers von der Realtek Seite: Hier
  2. Entpacken des selbigen
  3. Die zwei Dateien if_re.c und if_rereg.h wollen ins Verzeichnis /usr/src/sys/dev/re
  4. Das Makefile geht nach /usr/src/sys/modules/re
  5. Bauen des Modules. Dazu nach /usr/src/sys/modules/re wechseln und [cci]make clean && make[/cci] ausführen.
  6. Für die mutigen einen [cci]make install[/cci] hinter her. Besser ist erst das originale /boot/kernel/if_re.ko wegsichern ;-).
  7. Der Datei /boot/loader.conf den Eintrag [cci]if_re_load=“YES“[/cci] hinzufügen.
  8. Reboot

Mit [cci]dmesg[/cci] überprüfen wir, ob denn nun der „neue“ Treiber geladen wurde.

[ccN]
re1: port 0xd000-0xd0ff mem 0x91104000-0x91104fff,0x91100000-0x91103fff irq 23 at device 0.0 on pci3
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.
[/ccN]

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

[ccN]
Starting Test: protocol: TCP, 1 streams, 131072 byte blocks, omitting 0 seconds, 3600 second test, tos 0
[ 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)
[/ccN]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert