Dlaczego router sprzętowy działa lepiej niż router Linux z lepszą specyfikacją (RAM i procesor)?

44

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?

Niebieski gen
źródło
5
Wdrożenia w sprzęcie są szybsze niż oprogramowanie wewnętrzne w przypadku tego samego rozwiązania.
mdpc
3
Wspomniane „lepsze specyfikacje” nie mają znaczenia dla danego zadania. Istotne są inne właściwości.
nim
Ok, więc ... z tego, co napisałeś, czy powinienem założyć, że twoje Centos to maszyna wirtualna? Oprócz specjalnych optymalizacji sieci dla maszyn wirtualnych, zarówno po stronie hiperwizora, jak i po stronie gościa, maszyny wirtualne są ogólnie znane z tego, że nie są dobre w tego rodzaju roli ... do użytku jako router / zapora ogniowa zawsze zaleca się używanie gorzej !
ukamienowany
Czy faktycznie kierujesz ruchem 1 Gb / s, jak sugeruje konfiguracja? Być może używasz wywrotki do przesuwania łopaty pełnej piasku. 6 GB pamięci RAM i 4 rdzenie w zasadzie nigdy nie będą dotykane przez router, możesz zaoszczędzić energię elektryczną i miejsce w szafie, używając do tego małej maszyny Intel Atom.
Bert

Odpowiedzi:

64

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.

Shane Madden
źródło
1
chociaż zgadzam się z Shane, wolałbym wybrać iptables działające na ogólnym serwerze zamiast urządzenia każdego dnia. w mojej firmie iptables działające na Fedorze jest szybsze, bardziej elastyczne, łatwiejsze do skonfigurowania, mniej obciążające procesor i pamięć, szybsze uruchamianie i znacznie tańsze niż nasze cisco asa.
rvh
@rvh: do zapory ogniowej lub po prostu routingu?
mveroone
2
i ogólnie „prędkość” jest tutaj dość luźnym określeniem. Jestem pewien, że istnieje wiele sytuacji, w których komputer PC może nadal wykonywać operację „tak szybko” jak sprzęt HW, lub może trwać dłużej niż sprzęt HW. Ale tak naprawdę sprowadza się to do stabilności i „huk za grosze” - wciąż kupujesz mniej pamięci RAM / procesora z urządzeniem, ale dostaje więcej z niego i robi tylko to, czego potrzebuje, aby uzyskać stabilność
Colin Godsey
Ta odpowiedź jest błędna z powodu rezygnacji. Samo wykrzykiwanie „ASIC” jest również trochę naiwne, ponieważ większość routerów korzystających z NAT korzysta z procesorów ogólnego przeznaczenia, chyba że osiągniemy ekstremalną wydajność. Również w rzeczywistości routery sprzętowo-NAT mają silniejsze ograniczenia liczby równoczesnych połączeń. To, czego doświadcza OP, to błędna konfiguracja i użycie systemu operacyjnego, który nie pasuje do zadania.
podwójny
@dualed most routers that do NAT use general purpose CPUsTak, 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.
Shane Madden
12

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.

David Schwartz
źródło
3
A ponieważ dedykowany router działa na dysku flash, mniej ruchomych części ulega awarii w nieodpowiednich momentach.
cpt_fink
3
Nie jestem pewien, czy masz rację. Stworzyłem bardzo podstawową ochronę anty-DDOS dla firmy, w której pracowałem, w oparciu o netmap ( info.iet.unipi.it/~luigi/netmap ) i działało bardzo dobrze nawet na normalnym sprzęcie (naprawdę pełne 1 Gb / s lub 11M pakiety / s). Istnieje również wersja openswitcha dla mapy sieci na tej stronie, która może przekazywać pakiety 3M / s na „normalnym” sprzęcie, nie znam żadnego taniego przełącznika (500 $), który mógłby to zrobić, ale mogę się mylić.
XzKto,
2
@XzKto Typowy tani (60 USD) 5-portowy przełącznik GigE może przesyłać pakiety między wszystkimi kombinacjami portów przy pełnej prędkości drutu. Zwykle używają pełnej, nieblokującej poprzeczki.
David Schwartz
@XzKto David miał na myśli, że w przeciwieństwie do komputerów PC, które będą obsługiwać prędkość „do własnych interfejsów”, przełącznik działa, jeśli dla każdej kombinacji port-port. Host1 może komunikować się z hostem 2 i 3 do 4, a każde połączenie może mieć pełny dupleks i maksymalną przepustowość . Nie możesz tego pokonać. (i więcej pieniędzy, więcej portów, jeszcze łatwiej zrozumieć, dlaczego jest szybszy). A w przypadku routera jest to trochę podobne: sprzęt będzie mógł przekierowywać szybciej niż oprogramowanie, ponieważ może przekierować, gdy tylko będzie miał wystarczającą ilość informacji (router linux zrobi to na każdej warstwie, ale dotarcie tam będzie już wolniejsze)
Olivier Dulac
11

„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ą.

Ryan Ries
źródło
3
+1. Dodaj do tego fakt, że Cisco posiada zasoby inżynieryjne i know-how, aby w razie potrzeby zastąpić oprogramowanie sprzętem . Oznacza to, że jeśli dana operacja jest wolniejsza niż chcieliby w oprogramowaniu, mogą włożyć wysiłek w zaprojektowanie ASIC, dodanie instrukcji do istniejących jednostek przetwarzania lub zbudować moduł sprzętowy, aby przyspieszyć. Tabele zdecydowanie przewyższają wydajność, gdy masz luksus kontrolowania zarówno oprogramowania, jak i sprzętu.
Justin ᚅᚔᚈᚄᚒᚔ
Działa to również w obie strony. Sprzęt nie musi również radzić sobie z rzadkimi, złożonymi przypadkami. Po prostu wyrzuca je do oprogramowania. Pętle routingu? Nie próbuj dowiedzieć się, jak sobie z tym poradzić.
MSalters
4

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
3

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:

ILMostro_7
źródło
2

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ęczne smp_affinitypisanie jest nudne, prawdopodobnie mój projekt dla zwierząt netutils-linux byłby niezwykle przydatny.

strizhechenko
źródło