Mam minimalny CentOS 6.3, 64-bitowy, działający jako brama z 4 kartami sieciowymi (1 Gb / s), z których każdy jest połączony, jeden dla ruchu publicznego i drugi dla prywatnego, który wykonuje NAT. Ma 6 GB pamięci RAM i 4 rdzenie logiczne. Używamy tego od dwóch lat bez żadnych problemów.
Nie mam doświadczenia z routerami sprzętowymi, ale słyszałem, że mają mniej pamięci RAM i procesora i używają dysków flash. W jaki sposób urządzenie o niskiej konfiguracji sprzętowej może działać lepiej (jak w przypadku obsługi większej liczby równoczesnych połączeń) niż urządzenie z większą ilością pamięci RAM i procesora?
Jakie są czynniki ograniczające, inne niż IOS używający różnych metod do obsługi tego?
linux
router
packetloss
Niebieski gen
źródło
źródło
Odpowiedzi:
ASIC .
Zamiast używać procesora ogólnego przeznaczenia i oprogramowania specyficznego dla zadania, możesz pominąć oprogramowanie i po prostu sprawić, by krzem bezpośrednio wykonał zadanie.
Wydajny sprzęt sieciowy wykorzystuje ASIC zamiast oprogramowania do obliczeniowo ciężkich (ale stosunkowo logicznie prostych) zadań, takich jak porównywanie adresu IP z ogromną tabelą routingu internetowego, sprawdzanie tabeli CAM pod kątem decyzji o przełączeniu lub sprawdzanie pakietu na liście ACL . To robi ogromną różnicę w szybkości tych wrażliwych na czas operacji, zapewniając znaczącą przewagę nad procesorem ogólnego przeznaczenia.
źródło
most routers that do NAT use general purpose CPUs
Tak, to prawdziwe stwierdzenie, ale nieświadomy faktu, że wiele z tych urządzeń przenosi określone operacje na dedykowane układy scalone (jak czytam moją pełną odpowiedź powyżej). Nie myśl, że NAT i śledzenie połączeń (które, zgadzam się, nie występują w ASIC w nowoczesnych urządzeniach), myśl o tablicy routingu i wyłączaniu odciążania.Wysokiej klasy, dedykowany router może wyprzedzić komputer z szybszym procesorem i większą pamięcią RAM, ponieważ może wykonać więcej routingu sprzętowego.
Z tego samego powodu przełącznik Gigabit Ethernet o wartości 60 USD może przewyższyć komputer o wartości 2000 USD za pomocą 4 dwuportowych kart GigE działających jako przełącznik Ethernet. Przełącznik jest zbudowany od podstaw, aby był przełącznikiem.
źródło
„Inny niż IOS”?
IOS robi prawie całą różnicę. CentOS to system operacyjny ogólnego zastosowania. Został zaprojektowany, aby działać wystarczająco dobrze w bardzo szerokim zakresie scenariuszy, przy użyciu szerokiej gamy różnych konfiguracji sprzętowych. Z drugiej strony IOS jest wyjątkowo dobrze dostosowany do obsługi tylko tego rodzaju obciążeń, których można oczekiwać od sprzętu sieciowego, przy użyciu bardzo specyficznych rodzajów sprzętu, który można znaleźć w sprzęcie Cisco.
Wiedząc dokładnie, dla jakiego sprzętu programujesz, zajmie Ci bardzo dużo czasu pod względem wydajności w porównaniu z kompatybilnością.
źródło
Zarówno oprogramowanie, jak i sprzęt mają coś do powiedzenia. Mam porównanie Intel i TP-Link NIC (który używa chipa Realtek w swoim sercu) na ogólnym sprzęcie serwerowym, a także na oprogramowaniu wbudowanym i ogólnym przeznaczonym do routingu.
Po stronie sprzętowej, jeśli ASIC na pokładzie może obsługiwać ruch IP, obciążenie procesora może być niższe, a zatem szybsze. Zauważyłem, że dwa wbudowane układy INtel NIC komunikują się bezpośrednio przez DMA, omijając główny procesor w obsłudze przesyłania pakietów; tymczasem chip Realtek przerywa za każdym razem, gdy nadchodzi pakiet.
Po stronie oprogramowania, jeśli oprogramowanie jest przeznaczone do wykorzystania w routingu, można zwiększyć jego wydajność. Użyłem zarówno pfSense + PF (zmodyfikowanego FreeBSD, który ma być używany jako router), jak i ogólnego programu Ubuntu 12.04 + iptables jako oprogramowania do routingu, a pierwszy wyraźnie przełącza ruch znacznie szybciej. (Ubuntu 14.04 jest teraz prawie tak szybki, dzięki nowym nftables w jądrze Linux 3.13.)
Jednak router dedykowany ma jedną poważną wadę: nie może wykonywać innych czynności poza przełączaniem ruchu i nie może być zwirtualizowany. Mój obecny router brzegowy jest maszyną wirtualną w klastrze ESXi z systemem Ubuntu 14.04, a także działa jako system wykrywania włamań i moduł równoważenia obciążenia.
źródło
AFAIK, to narzut systemu operacyjnego ogólnego przeznaczenia; bez względu na to, jak szybkie są twoje połączenia, pakiety są przetwarzane na zasadzie pakiet po pakiecie w kontekście jądra, zwiększając opóźnienia i obciążenie systemu. Wierzę, że zostało to już wyjaśnione w innych odpowiedziach lepiej niż mogłem.
Powiedziawszy to, istnieją obiecujące nowe technologie „ish”, które zyskują na popularności i wykonalności, które mogą stworzyć potężniejszego konkurenta z systemów Linux zarówno pod tym, jak i pod innymi względami; tj. InfiniBand
Spójrz na następujące pytania i odpowiedzi dotyczące StackOverflow: W jaki sposób implementowane jest obejście jądra TCP
Dalsza lektura:
źródło
Jest to zwykle spowodowane brakiem konfiguracji stosu sieciowego / urządzeń w systemie Linux. W prawie 90% przypadków ruch sieciowy jest przetwarzany przez CPU0, podczas gdy inne są w stanie bezczynności. Jeśli rozwiążesz ten problem, różnica między routerami sprzętowymi nie będzie tak drastyczna, jak mogłoby się wydawać. Powinieneś skonfigurować przynajmniej RSS lub RPS (dystrybucja pakietów oparta na sterownikach / stosach między procesorami).
Jeśli naprawdę zależy Ci na wydajności routera z linuksem i masz wystarczająco dużo czasu, polecam przeczytanie tego artykułu na blogu packagecloud (jest też artykuł o przesyłaniu pakietów).
Jeśli będziesz potrzebować rzucić okiem na dystrybucję i uważasz, że oglądanie
while sleep 1; do cat $some_file_in_procfs; done
, ocena maski procesora i ręcznesmp_affinity
pisanie jest nudne, prawdopodobnie mój projekt dla zwierząt netutils-linux byłby niezwykle przydatny.źródło