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+4
kann ich iperf -c S1 -P2
auf 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-policy
das 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!
bond-xmit-hash-policy layer3+4
Legt 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.quelle
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?
quelle
--parallel
Parameter, der die Anzahl der parallelen Client-Streams steuert, die ausgeführt werden sollen