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?


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.


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.


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


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.


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:


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.