Throughput massimo aggregazione link (LACP / 802.3ad)


10

Sto vedendo alcuni comportamenti confusi riguardo alle interfacce legate su Linux e mi piacerebbe gettare la situazione là fuori nella speranza che qualcuno possa chiarirmi.

Ho due server: il Server 1 (S1) ha 4 connessioni Ethernet da 1 Gbit; Il server 2 (S2) ha 2 connessioni Ethernet da 1 Gbit. Entrambi i server eseguono Ubuntu 12.04, anche se con il kernel 3.11.0-15 (dal pacchetto lts-saucy linux-generic).

Entrambi i server hanno tutte le rispettive interfacce di rete raggruppate in un'unica interfaccia bond0 con la seguente configurazione (in /etc/network/interfaces):

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

Tra i server ci sono un paio di switch HP che sono (credo) correttamente configurati per LACP sulle porte in questione.

Ora il collegamento funziona: il traffico di rete scorre felicemente da e verso entrambe le macchine. E vengono utilizzate tutte le rispettive interfacce, quindi non è come se l'aggregazione fallisse completamente. Tuttavia, ho bisogno della massima larghezza di banda possibile tra questi due server e non ottengo i ~ 2Gbit / s che mi aspetterei.

Nei miei test, posso osservare che ogni server sembra allocare ogni connessione TCP (ad esempio iperf, scp, nfs, qualunque cosa) a una singola interfaccia slave. In sostanza tutto sembra limitato a un massimo di 1 gigabit.

Impostando bond-xmit-hash-policy layer3+4, posso usare iperf -c S1 -P2per inviare su due interfacce slave, ma sul lato server, la ricezione si verifica ancora solo su un'interfaccia slave e il throughput totale è quindi limitato a 1 Gbit / s, ovvero il client mostra ~ 40-50MB / s su due interfacce slave, il server mostra ~ 100 MB / s su un'unica interfaccia slave. Senza impostare bond-xmit-hash-policyl'invio è anche limitato a un'interfaccia slave.

Avevo l'impressione che LACP dovesse consentire questo tipo di raggruppamento di connessioni, consentendo, ad esempio, un singolo trasferimento scp per utilizzare tutte le interfacce disponibili tra i due host.

La mia comprensione di LACP è sbagliata? O ho perso alcune opzioni di configurazione da qualche parte? Eventuali suggerimenti o indizi per le indagini sarebbero molto apprezzati!

Risposte:


18

Una spiegazione rapida e sporca è che una singola linea di comunicazione che utilizza LACP non dividerà i pacchetti su più interfacce. Ad esempio, se si dispone di una singola connessione TCP per lo streaming di pacchetti da HostA a HostB, non si estenderanno le interfacce per l'invio di tali pacchetti. Ultimamente ho cercato LACP qui per una soluzione a cui stiamo lavorando e questo è un malinteso comune sul fatto che "legare" o "trunking" interfacce di rete multiple con LACP ti dia un "throughput" delle interfacce combinate. Alcuni fornitori hanno creato driver proprietari che eseguiranno il routing su più interfacce ma lo standard LACP non è quello che ho letto. Ecco un link a un diagramma e una spiegazione decenti che ho trovato da HP durante la ricerca di problemi simili: http://www.hp.com/rnd/library/pdf/59692372.pdf


1
Tutto ciò ha senso. Non ho idea del perché non avessi scoperto prima il mio malinteso; Devo aver semplicemente aggirato i termini di ricerca e le pagine di documentazione giuste. Sembra che, a seconda dell'hardware di rete, potremmo essere in grado di cambiare la modalità di hash src-dest e fortuna sulla produttività multi-interfaccia, ma penso che in questa fase sarò solo felice di ciò che abbiamo. Grazie per i tuoi chiarimenti e il link molto utile.
Zetten,

Felice di aiutare. Ho letto molto su questo ultimamente cercando di ottenere chiarimenti sulla terminologia relativa al trunking e al legame che viene utilizzato in modo diverso da diversi fornitori. Ho scoperto che al di fuori di standard specifici come quelli definiti dai venditori IEEE tendono ad usare alcuni termini in modo intercambiabile ...
Mike Naylor,

6
Il documento non è più disponibile sull'URL originale, ma è ancora accessibile tramite Internet Archive: web.archive.org/web/20030324105208/http://www.hp.com/rnd/…
smbear

3

bond-xmit-hash-policy layer3+4imposta il bilanciamento del carico dal server di origine allo switch. Non imposta l'algoritmo di bilanciamento del carico dallo switch al secondo server. Questo è quasi certamente ancora bilanciato di livello 2 o livello 3, cioè per niente.


2

Bene, prima di tutto, quando si utilizza un driver di gruppo, ciò creerà un sovraccarico e ridurrà la velocità massima prevista, che è ~ 940 MB / s su un adattatore da 1 GB, del ~ 10%.

Non sono sicuro del tipo di adattatore in uso, ma se si utilizzano driver integrati, le impostazioni non sono probabilmente ideali per la velocità effettiva massima. potresti prendere in considerazione l'aggiunta di code, fino a 4, poiché una singola coda sull'adattatore probabilmente non può raggiungere la velocità del filo.

Un'altra considerazione, è che un thread di iperf probabilmente non otterrà la massima velocità. Per 1 GB, 2-6 thread è probabilmente più ideale, è possibile utilizzare un semplice script bash per avviare più thread contemporaneamente.

Per una scheda di rete Intel, ma RSC e hardware RSC possono influire sulla velocità effettiva, su Broadcom assicurarsi che TOE funzioni.

Il primo passo, tuttavia, sarebbe quello di rimuovere i GAL e provare a testare 1 porta di traffico su ciascun sistema per vedere quanto throughput ottiene, farlo con tutte le porte, quindi provare 2. LACP è una bestia volubile da configurare giusto, e non ho mai provato a configurarlo su uno switch HP, solo Force10 (pre-Dell).

Inoltre, perché ci sono un paio di interruttori?


Come descritto nell'altra risposta, il problema di fondo era la mia comprensione di LACP, ma solo per compilare il quadro: le scatole di Linux stanno usando il driver di bonding del kernel. Ogni interfaccia individualmente può spingere il throughput quasi max-gigabit (apparentemente circa 110-117 MB / s a ​​seconda dell'altro traffico), quindi stavo davvero cercando di aumentare quella larghezza di banda piuttosto che ottimizzare le singole schede di rete. Per quanto riguarda gli switch, abbiamo un sito multi-ufficio e ci sono switch di trunking con fibra mux / demux e vari altri bit e bob sulla strada. Avevo entrambi i server su uno switch HP 2920-48G per i test però.
Zetten,

iperf ha un --parallelparametro che controlla il numero di flussi client paralleli da eseguire
8.8.8.8
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.