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 -P2
do 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-policy
wysył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!
bond-xmit-hash-policy layer3+4
ustawia 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.źródło
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?
źródło
--parallel
parametr, który kontroluje liczbę równoległych strumieni klienta do uruchomienia