Maximaler Durchsatz der Link-Aggregation (LACP / 802.3ad)

10

Ich sehe ein verwirrendes Verhalten in Bezug auf verbundene Schnittstellen unter Linux und möchte die Situation in der Hoffnung, dass jemand sie für mich klären kann, auf den Markt bringen.

Ich habe zwei Server: Server 1 (S1) hat 4x 1Gbit-Ethernet-Verbindungen; Server 2 (S2) verfügt über 2x 1-Gbit-Ethernet-Verbindungen. Auf beiden Servern wird Ubuntu 12.04 ausgeführt, allerdings mit Kernel 3.11.0-15 (aus dem lts-saucy linux-generic-Paket).

Beide Server haben alle ihre jeweiligen Netzwerkschnittstellen in einer einzigen bond0-Schnittstelle mit der folgenden Konfiguration (in /etc/network/interfaces) gebündelt :

bond-mode 802.3ad
bond-miimon 100
bond-lacp-rate fast
bond-slaves eth0 eth1 [eth2 eth3]

Zwischen den Servern befinden sich einige HP Switches, die (glaube ich) für LACP an den betreffenden Ports korrekt konfiguriert sind.

Jetzt funktioniert die Verbindung - der Netzwerkverkehr fließt problemlos zu und von beiden Computern. Und alle entsprechenden Schnittstellen werden verwendet, sodass die Aggregation nicht vollständig fehlschlägt. Ich benötige jedoch so viel Bandbreite wie möglich zwischen diesen beiden Servern und erhalte nicht die ~ 2 Gbit / s, die ich erwarten würde.

Bei meinen Tests kann ich feststellen, dass jeder Server jede TCP-Verbindung (z. B. iperf, scp, nfs usw.) einer einzelnen Slave-Schnittstelle zuzuordnen scheint. Im Wesentlichen scheint alles auf maximal 1 Gigabit begrenzt zu sein.

Durch die Einstellung bond-xmit-hash-policy layer3+4kann ich iperf -c S1 -P2auf zwei Slave-Schnittstellen senden, aber auf der Serverseite erfolgt der Empfang immer noch nur auf einer Slave-Schnittstelle, und der Gesamtdurchsatz ist daher auf 1 Gbit / s begrenzt, dh der Client zeigt ~ 40-50 MB / s an Auf zwei Slave-Schnittstellen zeigt der Server auf einer Slave-Schnittstelle ~ 100 MB / s an. Ohne Einstellung ist bond-xmit-hash-policydas Senden auch auf eine Slave-Schnittstelle beschränkt.

Ich hatte den Eindruck, dass LACP diese Art der Verbindungsbündelung zulassen sollte, sodass beispielsweise eine einzige SCP-Übertragung alle verfügbaren Schnittstellen zwischen den beiden Hosts nutzen kann.

Ist mein Verständnis von LACP falsch? Oder habe ich irgendwo einige Konfigurationsoptionen verpasst? Anregungen oder Hinweise zur Untersuchung wäre sehr dankbar!

Zetten
quelle

Antworten:

18

Eine schnelle und schmutzige Erklärung ist, dass eine einzelne Kommunikationsleitung mit LACP keine Pakete über mehrere Schnittstellen aufteilt. Wenn Sie beispielsweise über eine einzelne TCP-Verbindung verfügen, die Pakete von HostA zu HostB überträgt, werden keine Schnittstellen zum Senden dieser Pakete überspannt. Ich habe in letzter Zeit viel nach LACP gesucht, um eine Lösung zu finden, an der wir arbeiten. Dies ist ein weit verbreitetes Missverständnis, dass das "Verbinden" oder "Trunking" mehrerer Netzwerkschnittstellen mit LACP Ihnen einen "Durchsatz" der kombinierten Schnittstellen bietet. Einige Anbieter haben proprietäre Treiber entwickelt, die über mehrere Schnittstellen weitergeleitet werden, aber der LACP-Standard entspricht nicht dem, was ich gelesen habe. Hier ist ein Link zu einem anständigen Diagramm und einer Erklärung, die ich bei der Suche nach ähnlichen Themen von HP gefunden habe: http://www.hp.com/rnd/library/pdf/59692372.pdf

Mike Naylor
quelle
1
Das alles macht Sinn. Ich habe keine Ahnung, warum ich mein Missverständnis nicht früher entdeckt hatte; Ich muss nur die richtigen Suchbegriffe und Dokumentationsseiten umgangen haben. Es scheint, dass wir abhängig von der Netzwerkhardware möglicherweise den src-dest-Hashing-Modus ändern und den Durchsatz für mehrere Schnittstellen verbessern können, aber ich denke, dass ich in diesem Stadium nur mit dem zufrieden sein werde, was wir haben. Vielen Dank für Ihre Klarstellungen und den sehr nützlichen Link.
Zetten
Froh, dass ich Helfen kann. Ich habe in letzter Zeit viel darüber gelesen und versucht, die Terminologie für Trunking und Bonding zu klären, die von verschiedenen Anbietern unterschiedlich verwendet wird. Ich habe festgestellt, dass außerhalb spezifischer Standards, wie sie von IEEE-Anbietern definiert wurden, einige Begriffe synonym verwendet werden ...
Mike Naylor
6
Das Dokument ist nicht mehr unter der ursprünglichen URL verfügbar, aber es ist weiterhin über das Internetarchiv zugänglich: web.archive.org/web/20030324105208/http://www.hp.com/rnd/…
smbear
3

bond-xmit-hash-policy layer3+4Legt den Lastenausgleich von Ihrem Quellserver auf den Switch fest. Der Lastausgleichsalgorithmus von Ihrem Switch auf den zweiten Server wird nicht festgelegt. Das ist mit ziemlicher Sicherheit immer noch Schicht-2 oder Schicht-3 ausgeglichen, dh überhaupt nicht.

MSalters
quelle
2

Wenn Sie einen Teaming-Treiber verwenden, entsteht zunächst ein gewisser Overhead, und der erwartete maximale Durchsatz von ~ 940 MB / s auf einem 1-GB-Adapter wird um ~ 10% gesenkt.

Ich bin nicht sicher, welche Art von Adapter Sie haben, aber wenn Sie In-Box-Treiber verwenden, sind die Einstellungen wahrscheinlich nicht ideal für maximalen Durchsatz. Sie können Warteschlangen bis zu 4 hinzufügen, da eine einzelne Warteschlange auf dem Adapter wahrscheinlich die Übertragungsrate nicht erreichen kann.

Eine weitere Überlegung ist, dass ein Thread von iperf wahrscheinlich keine Höchstgeschwindigkeit erreichen wird. Für 1 GB sind 2-6 Threads wahrscheinlich idealer. Sie können ein einfaches Bash-Skript verwenden, um mehrere Threads gleichzeitig zu starten.

Stellen Sie bei einer Intel-Netzwerkkarte, aber RSS und Hardware-RSC können den Durchsatz beeinflussen, bei Broadcom sicher, dass TOE funktioniert.

Schritt eins wäre jedoch, die LAGs zu entfernen und einfach 1 Port des Datenverkehrs auf jedem System zu testen, um zu sehen, wie viel Durchsatz es erhält. Tun Sie dies mit allen Ports und versuchen Sie dann 2. LACP ist ein launisches Biest, das eingerichtet werden muss Richtig, und ich habe nie versucht, es auf einem HP Switch einzurichten, nur auf Force10 (vor Dell).

Warum gibt es auch ein paar Schalter?

mortenya
quelle
Wie die andere Antwort beschrieb, war das zugrunde liegende Problem mein Verständnis von LACP, aber nur um das Bild auszufüllen: Die Linux-Boxen verwenden den Bonding-Treiber des Kernels. Jede Schnittstelle kann einzeln einen Durchsatz von nahezu maximal Gigabit erzielen (anscheinend etwa 110 bis 117 MB / s, abhängig von anderem Datenverkehr). Ich wollte also wirklich nur diese Bandbreite erhöhen, anstatt die einzelnen Netzwerkkarten zu optimieren. In Bezug auf die Switches haben wir einen Multi-Office-Standort und es gibt Trunking-Switches mit Glasfaser-Mux / Demux und verschiedenen anderen Bits und Bobs im Weg. Ich hatte beide Server auf einem HP 2920-48G-Switch zum Testen.
Zetten
iperf hat einen --parallelParameter, der die Anzahl der parallelen Client-Streams steuert, die ausgeführt werden sollen
8.8.8.8