TrueNAS Interface stopped DISTRIBUTING, possible flapping

Sobald LACP auf dem TrueNAS (ehem. FreeNAS) auf einer Intel Netzwerkkarte mit 82571EB/82571GB Chipsatz aktiviert wird. meldet das NAS unregelmässig stopped DISTRIBUTING, possible flapping. Ein möglicher Lösungsweg.

In meinem FreeNAS habe ich alte HP NC364T Netzwerkkarten verbaut. Erkennbar an der PCI-Kennung 8086:10bc.

lspci | grep 8086:10bc

Auf dem TrueNAS sollten eingentlich alle Storagethemen abgedeckt werden, kam dann aber ins stocken, weil TrueNAS dann immer wieder damit aufgehört hat, mit dem Netzwerk zu kommunizieren.

em0 - stopped DISTRIBUTING, possible flapping
em1 - stopped DISTRIBUTING, possible flapping
em2 - stopped DISTRIBUTING, possible flapping
em3 - stopped DISTRIBUTING, possible flapping

Auf dem Switch blieben die Links teilweise up, aber mit komplett falschen Connection Parameter. Anstatt 1000FDx waren die Links bei 100HDx oder sogar bei 10FDx.

In einem ersten Schritt ging ich mal daran, die Autonegatiation zu deaktivieren, damit zumindest dies nicht ein Flapping auslöst.

enable
config
interface 1-4
speed-duplex auto-1000

Das hat soweit nicht das Problem gelöst, nimmt aber eine Variable aus der Gleichung heraus.

Nun ging es weiter, TrueNAS oder FreeNAS basieren alle auf FreeBSD. Gab es ein Thema mit dem Treiber? Nach ein wenig recherche fand ich dann einen interessanten Beitrag in der FreeBSD Library, die mich doch ein wenig näher bringen könnte:

https://www.freebsd.org/cgi/man.cgi?query=if_em

Hier wird beschrieben, dass der Kernel spezifisch für eine Reihe Intelkarten ein Modul laden soll. Dafür ergänzt man die /boot/loader.conf um den Eintrag:

if_em_load="YES"

Unter TrueNAS kann dies auch einfacher unter System -> Tunables gemacht werden.

Bei den Recherchen stiess ich dann noch auf das Thema hier:

http://web.mit.edu/freebsd/head/sys/dev/ixgbe/

Important system configuration changes:
---------------------------------------

When there is a choice run on a 64bit OS rather than 32, it makes a significant difference in improvement.
  
The interface can generate a high number of interrupts. To avoid running into the limit set by the kernel, adjust hw.intr_storm_threshold 
setting using sysctl:
 
       sysctl hw.intr_storm_threshold=9000 (the default is 1000)

For this change to take effect on boot, edit /etc/sysctl.conf and add the 
line:  
       hw.intr_storm_threshold=9000

If you still see Interrupt Storm detected messages, increase the limit to a
 higher number, or the detection can be disabled by setting it to 0.

The default number of descriptors is 2048, increasing or descreasing
 may improve performance in some workloads, but change carefully.

Aktuell habe ich den Threshold bei 9000 gesetzt und seit den letzten Stunden ist auch kein Unterbruch der Netzwerkverbindung aufgetreten.

So wie ist das nun unter TrueNAS zum Einrichten? Ganz einfach:

Unter System -> Tunables werden die beiden Einträge erfasst und anschliessend das NAS neu gestartet.

Die Einträge kannst du dann mit folgenden Commands prüfen. Die SYSCTL können wir mit der Shell befragen, beim Loader leider nur prüfen, ob diese in der zugehörigen Config geschrieben wurde.

sysctl hw.intr_storm_threshold
-> sysctl hw.intr_storm_threshold: 9000
cat /boot/loader.conf.local | grep if_em_load
-> if_em_load="YES"

Was nun noch kam, war das Aktivieren von Auto Negotiation auf dem Switch.

enable
config
interface 1-4
speed-duplex auto

Aktuell sieht alles so aus, wie es zu erwarten ist, hoffen wir mal, dass die Verbindung weiterhin stabil bleibt.

Leave a Reply

Your email address will not be published. Required fields are marked *