Maksymalna przepustowość agregacji łączy (LACP / 802.3ad)

10

Widzę pewne mylące zachowanie dotyczące połączonych interfejsów pod Linuksem i chciałbym wyrzucić tę sytuację w nadziei, że ktoś może mi to wyjaśnić.

Mam dwa serwery: Serwer 1 (S1) ma 4x połączenia Ethernet 1Gbit; Serwer 2 (S2) ma dwa połączenia Ethernet 1Gbit. Na obu serwerach działa Ubuntu 12.04, choć z jądrem 3.11.0-15 (z pakietu lts-saucy linux-generic).

Oba serwery mają wszystkie odpowiednie interfejsy sieciowe w jednym interfejsie bond0 z następującą konfiguracją (w /etc/network/interfaces):

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

Pomiędzy serwerami jest kilka przełączników HP, które (myślę) poprawnie skonfigurowane dla LACP na danych portach.

Teraz łącze działa - ruch sieciowy przepływa szczęśliwie do i z obu komputerów. Wszystkie odpowiednie interfejsy są używane, więc agregacja nie kończy się niepowodzeniem. Potrzebuję jednak jak największej przepustowości między tymi dwoma serwerami i nie otrzymuję ~ 2 Gbit / s, czego bym się spodziewał.

Podczas moich testów mogę zaobserwować, że każdy serwer wydaje się przydzielać każde połączenie TCP (np. Iperf, scp, nfs, cokolwiek) do jednego interfejsu slave. Zasadniczo wszystko wydaje się ograniczone do 1 gigabita.

Ustawiając bond-xmit-hash-policy layer3+4, mogę użyć iperf -c S1 -P2do wysyłania na dwóch interfejsach slave, ale po stronie serwera odbiór nadal występuje tylko na jednym interfejsie slave, a zatem całkowita przepustowość jest ograniczona do 1 Gbit / s, tzn. Klient pokazuje ~ 40-50 MB / s na dwóch interfejsach slave serwer pokazuje ~ 100 MB / s na jednym interfejsie slave. Bez ustawienia bond-xmit-hash-policywysyłanie jest również ograniczone do jednego interfejsu slave.

Miałem wrażenie, że LACP powinien pozwolić na tego rodzaju wiązanie połączeń, pozwalając na przykład na pojedynczy transfer scp w celu wykorzystania wszystkich dostępnych interfejsów między dwoma hostami.

Czy moje rozumienie LACP jest nieprawidłowe? A może gdzieś przegapiłem jakieś opcje konfiguracji? Wszelkie sugestie lub wskazówki dotyczące dochodzenia będą mile widziane!

Zetten
źródło

Odpowiedzi:

18

Szybkim i nieprzyzwoitym wyjaśnieniem jest to, że pojedyncza linia komunikacji przy użyciu LACP nie podzieli pakietów na wiele interfejsów. Na przykład, jeśli masz pojedyncze połączenie przesyłające strumieniowo pakiety TCP z HostA do HostB, nie będzie obejmował interfejsów do wysyłania tych pakietów. Ostatnio często patrzyłem na LACP na rozwiązanie, nad którym pracujemy, i jest to powszechne błędne przekonanie, że „łączenie” lub „trunking” wielu interfejsów sieciowych z LACP zapewnia „przepustowość” połączonych interfejsów. Niektórzy dostawcy stworzyli zastrzeżone sterowniki, które będą trasować przez wiele interfejsów, ale standard LACP nie pochodzi z tego, co przeczytałem. Oto link do przyzwoitego schematu i wyjaśnienia, które znalazłem w HP podczas wyszukiwania podobnych problemów: http://www.hp.com/rnd/library/pdf/59692372.pdf

Mike Naylor
źródło
1
To wszystko ma sens. Nie mam pojęcia, dlaczego wcześniej nie odkryłem mojego nieporozumienia; Musiałem właśnie omijać odpowiednie wyszukiwane hasła i strony dokumentacji. Wygląda na to, że w zależności od sprzętu sieciowego możemy zmienić tryb mieszania src-dest i mieć szczęście w zakresie przepustowości wielu interfejsów, ale myślę, że na tym etapie będę po prostu zadowolony z tego, co mamy. Dziękujemy za wyjaśnienia i bardzo przydatny link.
Zetten
Miło, że mogłem pomóc. Ostatnio dużo o tym czytałem, próbując wyjaśnić terminologię związaną z trunkingiem i wiązaniem, która jest różnie wykorzystywana przez różnych dostawców. Przekonałem się, że poza określonymi standardami, takimi jak te określone przez dostawców IEEE, niektóre terminy używają zamiennie ...
Mike Naylor
6
Dokument nie jest już dostępny pod oryginalnym adresem URL, ale nadal jest dostępny przez Internet Archive: web.archive.org/web/20030324105208/http://www.hp.com/rnd/…
smbear
3

bond-xmit-hash-policy layer3+4ustawia równoważenie obciążenia z serwera źródłowego na przełącznik. Nie ustawia algorytmu równoważenia obciążenia z przełączenia na drugi serwer. To prawie na pewno jest jeszcze zrównoważone w warstwie 2 lub 3, czyli wcale.

MSalters
źródło
2

Po pierwsze, gdy używasz sterownika zespołowego, który spowoduje pewne obciążenie i obniży oczekiwaną maksymalną przepustowość, wynoszącą ~ 940 MB / s na karcie 1 GB, o ~ 10%.

Nie jestem pewien, jakiego rodzaju masz adapter, ale jeśli używasz sterowników wbudowanych, ustawienia prawdopodobnie nie są idealne dla maksymalnej przepustowości. możesz rozważyć dodanie kolejek, do 4, ponieważ pojedyncza kolejka na adapterze prawdopodobnie nie może osiągnąć prędkości transmisji.

Inną kwestią jest to, że jeden wątek iperf prawdopodobnie nie uzyska najwyższych prędkości. W przypadku 1 GB 2-6 wątków jest prawdopodobnie bardziej idealne, możesz użyć prostego skryptu bash, aby uruchomić wiele wątków jednocześnie.

W przypadku karty sieciowej Intel, ale RSS i sprzętowy RSC mogą wpływać na przepustowość, na Broadcom upewnij się, że TOE działa.

Pierwszym krokiem byłoby jednak usunięcie LGD i po prostu przetestowanie 1 portu ruchu w każdym systemie, aby zobaczyć, ile przepustowości ono osiąga, zrób to ze wszystkimi portami, a następnie spróbuj 2. LACP to kapryśna bestia do skonfigurowania tak, i nigdy nie próbowałem ustawić go na przełączniku HP, tylko Force10 (wcześniejsza wersja Dell).

Ponadto, dlaczego jest kilka przełączników?

mortenya
źródło
Jak opisano w innej odpowiedzi, podstawowym problemem było moje zrozumienie LACP, ale tylko po to, aby wypełnić obraz: pola linuksowe używają sterownika wiązania jądra. Każdy interfejs z osobna może zwiększyć przepustowość prawie do gigabitów (najwyraźniej około 110-117 MB / s, w zależności od innego ruchu), więc naprawdę chciałem po prostu zwiększyć to pasmo, a nie dostroić poszczególne karty sieciowe. Jeśli chodzi o przełączniki, mamy witrynę z wieloma biurami i są tam przełączniki trunkingowe z multiplekserem światłowodowym / demultiplekserem i różnymi innymi bitami i bobami. Miałem jednak oba serwery na jednym przełączniku HP 2920-48G do testowania.
Zetten
iperf ma --parallelparametr, który kontroluje liczbę równoległych strumieni klienta do uruchomienia
8.8.8.8