FreeBSD-Link-Aggregation nicht schneller als einzelne Links

10

Wir haben eine Intel I340-T4-Netzwerkkarte mit 4 Ports in einen FreeBSD 9.3-Server 1 eingebaut und für die Verbindungsaggregation im LACP-Modus konfiguriert , um die Zeit zum Spiegeln von 8 bis 16 TiB Daten von einem Master-Dateiserver auf 2 zu verkürzen. 4 Klone parallel. Wir hatten erwartet, eine Gesamtbandbreite von bis zu 4 Gbit / s zu erreichen, aber egal, was wir versucht haben, es kommt nie schneller als eine Gesamtbandbreite von 1 Gbit / s heraus. 2

Wir verwenden dies iperf3, um dies in einem ruhenden LAN zu testen. 3 Die erste Instanz erreicht erwartungsgemäß fast einen Gigabit, aber wenn wir eine zweite parallel starten, sinken die Geschwindigkeit der beiden Clients auf ungefähr ½ Gbit / s. Durch Hinzufügen eines dritten Clients werden die Geschwindigkeiten aller drei Clients auf ~ ⅓ Gbit / s usw. gesenkt.

Wir haben beim Einrichten der iperf3Tests darauf geachtet , dass der Datenverkehr von allen vier Testclients über verschiedene Ports in den zentralen Switch gelangt:

LACP-Testaufbau

Wir haben überprüft, dass jeder Testcomputer einen unabhängigen Pfad zurück zum Rack-Switch hat und dass der Dateiserver, seine Netzwerkkarte und der Switch über die Bandbreite verfügen, um dies zu erreichen, indem wir die lagg0Gruppe aufteilen und jedem eine separate IP-Adresse zuweisen der vier Schnittstellen auf dieser Intel-Netzwerkkarte. In dieser Konfiguration haben wir eine Gesamtbandbreite von ~ 4 Gbit / s erreicht.

Als wir diesen Pfad eingeschlagen haben, haben wir dies mit einem alten verwalteten SMC8024L2-Switch getan . (PDF-Datenblatt, 1,3 MB.) Es war nicht der High-End-Switch seiner Zeit, aber es soll dazu in der Lage sein. Wir dachten, der Switch könnte aufgrund seines Alters fehlerhaft sein, aber ein Upgrade auf einen viel leistungsfähigeren HP 2530-24G hat das Symptom nicht geändert.

Der HP 2530-24G-Switch behauptet, die vier fraglichen Ports seien tatsächlich als dynamischer LACP-Trunk konfiguriert:

# show trunks
Load Balancing Method:  L3-based (default)

  Port | Name                             Type      | Group Type    
  ---- + -------------------------------- --------- + ----- --------
  1    | Bart trunk 1                     100/1000T | Dyn1  LACP    
  3    | Bart trunk 2                     100/1000T | Dyn1  LACP    
  5    | Bart trunk 3                     100/1000T | Dyn1  LACP    
  7    | Bart trunk 4                     100/1000T | Dyn1  LACP    

Wir haben sowohl passives als auch aktives LACP ausprobiert.

Wir haben überprüft, dass alle vier NIC-Ports Datenverkehr auf der FreeBSD-Seite erhalten mit:

$ sudo tshark -n -i igb$n

Seltsamerweise tsharkzeigt sich, dass bei nur einem Client der Switch den 1-Gbit / s-Stream auf zwei Ports aufteilt, anscheinend zwischen ihnen. (Sowohl der SMC- als auch der HP-Switch zeigten dieses Verhalten.)

Da die Gesamtbandbreite der Clients nur an einem einzigen Ort zusammenkommt - am Switch im Server-Rack - ist nur dieser Switch für LACP konfiguriert.

Es spielt keine Rolle, in welchem ​​Client wir zuerst starten oder in welcher Reihenfolge wir sie starten.

ifconfig lagg0 auf der FreeBSD-Seite sagt:

lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=401bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,VLAN_HWTSO>
    ether 90:e2:ba:7b:0b:38
    inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
    inet6 fe80::92e2:baff:fe7b:b38%lagg0 prefixlen 64 scopeid 0xa 
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    media: Ethernet autoselect
    status: active
    laggproto lacp lagghash l2,l3,l4
    laggport: igb3 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
    laggport: igb2 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
    laggport: igb1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
    laggport: igb0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>

Wir haben so viele Ratschläge im FreeBSD-Netzwerk-Tuning-Handbuch angewendet, wie es für unsere Situation sinnvoll ist. (Vieles davon ist irrelevant, wie das Zeug über das Erhöhen der maximalen FDs.)

Wir haben versucht , das Auslagern der TCP-Segmentierung zu deaktivieren , ohne die Ergebnisse zu ändern.

Wir haben keine zweite 4-Port-Server-Netzwerkkarte, um einen zweiten Test einzurichten. Aufgrund des erfolgreichen Tests mit 4 separaten Schnittstellen gehen wir davon aus, dass keine Hardware beschädigt ist. 3

Wir sehen diese Wege vorwärts, keiner von ihnen ist ansprechend:

  1. Kaufen Sie einen größeren, schlechteren Switch, in der Hoffnung, dass die LACP-Implementierung von SMC einfach nur scheiße ist und der neue Switch besser wird. (Ein Upgrade auf einen HP 2530-24G hat nicht geholfen.)

  2. Starren Sie noch einmal auf die FreeBSD- laggKonfiguration und hoffen Sie, dass wir etwas verpasst haben. 4

  3. Vergessen Sie die Link-Aggregation und verwenden Sie stattdessen Round-Robin-DNS, um den Lastausgleich zu bewirken.

  4. Ersetzen Sie die Server-Netzwerkkarte und wechseln Sie erneut, diesmal durch 10-GigE- Daten, was etwa dem 4- fachen der Hardwarekosten dieses LACP-Experiments entspricht.


Fußnoten

  1. Warum nicht zu FreeBSD 10 wechseln? Da FreeBSD 10.0-RELEASE weiterhin ZFS-Pool Version 28 verwendet und dieser Server auf ZFS-Pool 5000 aktualisiert wurde, eine neue Funktion in FreeBSD 9.3. Die 10. x- Zeile wird das erst erhalten, wenn FreeBSD 10.1 in etwa einem Monat ausgeliefert wird . Und nein, eine Neuerstellung von der Quelle auf die 10.0-STABLE-Aktualisierung ist keine Option, da dies ein Produktionsserver ist.

  2. Bitte springen Sie nicht zu Schlussfolgerungen. Unsere Testergebnisse später in der Frage zeigen Ihnen, warum dies kein Duplikat dieser Frage ist .

  3. iperf3ist ein reiner Netzwerktest. Während das letztendliche Ziel darin besteht, diese 4-Gbit / s-Aggregatleitung von der Festplatte zu füllen, ist das Festplattensubsystem noch nicht beteiligt.

  4. Vielleicht fehlerhaft oder schlecht designt, aber nicht kaputter als beim Verlassen der Fabrik.

  5. Ich habe schon die Augen verschränkt.

Warren Young
quelle
1
Meine anfängliche Vermutung wäre, dass es etwas sein könnte, das mit dem verwendeten Hashing-Algorithmus zusammenhängt, aber die Pakete genau untersuchen müsste. Wenn dies nicht hilft, versuchen Sie, das von iperf verwendete TCP-Fenster in etwas Größeres zu ändern. Die Manpage lagg (4) enthält Informationen zum Deaktivieren des Hash-Offloads. Vielleicht möchten Sie das versuchen.
Giovanni Tirloni

Antworten:

2

Welcher Lastausgleichsalgorithmus wird sowohl auf dem System als auch auf dem Switch verwendet?

Alle meine Erfahrungen damit sind unter Linux und Cisco, nicht unter FreeBSD und SMC, aber die gleiche Theorie gilt immer noch.

Der Standardmodus für den Lastausgleich im LACP-Modus des Linux-Bonding-Treibers und bei älteren Cisco-Switches wie dem 2950 besteht darin, nur anhand der MAC-Adresse auszugleichen.

Dies bedeutet, wenn der gesamte Datenverkehr von einem System (Dateiserver) zu einem anderen MAC (entweder einem Standard-Gateway oder einer geschalteten virtuellen Schnittstelle auf dem Switch) geleitet wird, sind der Quell- und der Ziel-MAC identisch, sodass immer nur ein Slave verfügbar ist verwendet werden.

In Ihrem Diagramm sieht es nicht so aus, als würden Sie Datenverkehr an ein Standard-Gateway senden, aber ich bin nicht sicher, ob sich die Testserver in 10.0.0.0/24 befinden oder ob sich die Testsysteme in anderen Subnetzen befinden und über weitergeleitet werden eine Layer 3-Schnittstelle am Switch.

Wenn Sie auf dem Switch routen, gibt es Ihre Antwort.

Die Lösung hierfür besteht darin, einen anderen Lastausgleichsalgorithmus zu verwenden.

Auch hier habe ich keine Erfahrung mit BSD oder SMC, aber Linux und Cisco können entweder anhand von L3-Informationen (IP-Adresse) oder L4-Informationen (Portnummer) einen Ausgleich erzielen.

Da jedes Ihrer Testsysteme eine andere IP haben muss, versuchen Sie, einen Ausgleich basierend auf L3-Informationen vorzunehmen. Wenn dies immer noch nicht funktioniert, ändern Sie einige IP-Adressen und prüfen Sie, ob Sie das Lastausgleichsmuster ändern.

suprjami
quelle
Danke, aber deine Vermutung ist falsch. Die oben gezeigte HP Switch-Konfiguration besagt, dass der L3-Ausgleich durchgeführt wird. Dies sind auch keine L3 "Switches", auch bekannt als Router. Sie haben nur genug L3-Smarts, um IGMP-Snooping und LACP durchzuführen. Der einzig wahre Router im Gebäude ist der im Internet-Gateway, der aus der Perspektive des obigen Testdiagramms auf einem Seitenbein ausgeschaltet ist.
Warren Young
Es spielt keine Rolle, ob es sich um einen L2- oder L3-Schalter handelt. Dies ist die Konfiguration, mit der die Bindung den Lastausgleich durchführt. Dies ist eine andere Sache. Der Switch selbst verfügt möglicherweise nicht über die Intelligenz, um zwischen VLANs zu routen oder Datenverkehr über L2 hinaus zu manipulieren, aber der Lastausgleichsalgorithmus der Anleihe kann dies (wahrscheinlich).
Suprjami
Ich sehe oben dein Schalter sagt Load Balancing Method: L3-based (default). Versuchen Sie dies zu ändern.
Suprjami