it-swarm.com.de

Warum arbeitet ein Hardware-Router besser als ein Linux-Router mit besseren Spezifikationen (RAM & CPU)?

Ich habe ein minimales CentOS 6.3, 64-Bit, das als Gateway mit 4 NIC (1 Gbit/s)) fungiert, wobei jedes für den öffentlichen Verkehr und eines für den privaten Verkehr miteinander verbunden ist und NATing ausführt. Es hat 6 GB = RAM und 4 logische Kerne. Wir verwenden dies seit zwei Jahren ohne Probleme.

Ich habe keine Erfahrung mit Hardware-Routern, aber ich habe gehört, dass sie weniger RAM und CPU) haben und Flash-Festplatten verwenden. Wie kann eine Box mit niedriger Hardwarekonfiguration eine bessere Leistung erzielen (wie in, mehr gleichzeitige Verbindungen verarbeiten) als eine Maschine mit mehr RAM und CPU?

Was sind die einschränkenden Faktoren außer IOS, die verschiedene Methoden verwenden, um damit umzugehen?

44
Blue Gene

ASICs .

Anstatt eine Allzweck-CPU und eine aufgabenspezifische Software zu verwenden, können Sie die Software überspringen und das Silizium die Aufgabe direkt erledigen lassen.

Hochleistungs-Netzwerkhardware verwendet ASICs anstelle von Software für die rechenintensiven (aber relativ logisch einfachen) Aufgaben wie das Vergleichen einer IP-Adresse mit einer riesigen Internet-Routing-Tabelle, das Überprüfen einer CAM-Tabelle auf eine Vermittlungsentscheidung oder das Überprüfen eines Pakets gegen eine ACL . Dies macht einen enormen Unterschied in der Geschwindigkeit dieser zeitkritischen Vorgänge und bietet einen erheblichen Vorteil gegenüber einer Allzweck-CPU.

64
Shane Madden

Ein dedizierter High-End-Router kann einen PC mit einer schnelleren CPU und mehr RAM) übertreffen, da er mehr Routing in der Hardware ausführen kann.

Dies ist der gleiche Grund, warum ein 60-Dollar-Gigabit-Ethernet-Switch einen 2.000-Dollar-PC mit 4 GigE-Karten mit zwei Ports als Ethernet-Switch übertreffen kann. Der Schalter ist von Grund auf als Schalter aufgebaut.

12
David Schwartz

"Außer IOS"?

IOS macht fast den Unterschied. CentOS ist ein Allzweckbetriebssystem. Es wurde entwickelt, um unter einer Vielzahl von Szenarien mit einer Vielzahl unterschiedlicher Hardwarekonfigurationen eine ausreichende Leistung zu erzielen. IOS hingegen ist äußerst fein abgestimmt, um nur die Art von Workloads zu bewältigen, die Sie von einem Netzwerkgerät erwarten würden, und zwar unter Verwendung der sehr spezifischen Hardwaretypen, die in Cisco-Geräten zu finden sind.

Wenn Sie wissen, gena für welche Hardware Sie programmieren, sind Sie in Bezug auf Leistung und Kompatibilität sehr weit.

11
Ryan Ries

Sowohl Software als auch Hardware haben etwas zu sagen. Ich habe den Vergleich von Intel und TP-Link NIC (der im Kern einen Realtek-Chip verwendet) auf generischer Serverhardware sowie speziell entwickelter und generischer Software für das Routing.

Auf der Hardwareseite kann die Prozessorlast geringer und damit schneller sein, wenn der ASIC an Bord etwas IP-Verkehr verarbeiten kann). Ich habe die beiden integrierten INtel NIC Chips kommunizieren direkt über DMA und umgehen die Haupt-CPU bei der Paketweiterleitung. Währenddessen unterbricht der Realtek-Chip jedes Mal, wenn ein Paket eintrifft.

Auf der Softwareseite kann die Software effizienter gestaltet werden, wenn sie für das Routing ausgelegt ist. Ich habe sowohl pfSense + PF (ein modifiziertes FreeBSD, das als Router verwendet werden soll) als auch Ubuntu 12.04 + iptables für allgemeine Zwecke als Routing-Software verwendet und die ersten Daten werden deutlich schneller umgeschaltet. (Ubuntu 14.04 ist jetzt dank der neuen nftables im Linux 3.13-Kernel fast genauso schnell.)

Ein dedizierter Router hat jedoch einen großen Nachteil: Er kann nur das Umschalten des Datenverkehrs ausführen und kann nicht virtualisiert werden. Mein aktueller Edge-Router ist eine virtuelle Maschine in meinem ESXi-Cluster, auf der Ubuntu 14.04 ausgeführt wird. Er fungiert auch als Intrusion Detection-System und Load Balancer.

4
user197565

AFAIK, es ist der Overhead eines Allzweckbetriebssystems; Unabhängig davon, wie schnell Ihre Verbindungen sind, werden die Pakete im Kontext des Kernels paketweise verarbeitet, was die Latenz und die Belastung des Systems erhöht. Ich glaube, es wurde bereits in den anderen Antworten besser erklärt als ich.

Trotzdem gibt es vielversprechende neue "ish" -Technologien, deren Popularität und Durchführbarkeit zunimmt und die sowohl in dieser als auch in anderer Hinsicht einen stärkeren Konkurrenten aus Linux-Systemen hervorbringen könnten. InfiniBand

Schauen Sie sich die folgenden Fragen und Antworten zu StackOverflow an: Wie wird TCP Kernel-Bypass implementiert

Weiterführende Literatur:

3
ILMostro_7

Dies liegt normalerweise an der fehlenden Konfiguration des Netzwerkstapels/der Geräte unter Linux. In fast 90% der Fälle wird Ihr Netzwerkverkehr von CPU0 verarbeitet, während andere im Leerlauf sind. Wenn Sie dieses Problem lösen, wird der Unterschied zu Hardware-Routern nicht so drastisch sein, wie Sie vielleicht denken. Sie sollten mindestens RSS oder RPS (treiber-/stapelbasierte Paketverarbeitungsverteilung zwischen den CPUs) einrichten.

Wenn Sie sich wirklich für die Leistung Ihres Linux-Routers interessieren und genügend Zeit haben, empfehle ich Ihnen, diesen zu lesen Artikel im packagecloud-Blog (es gibt auch einen Artikel über das Übertragen von Paketen).

Wenn Sie sich die Distribution ansehen müssen und denken, dass Sie bei while sleep 1; do cat $some_file_in_procfs; done, CPU-Maskenauswertung und Handbuch smp_affinity Schreiben ist langweilig, du hattest wahrscheinlich mein Lieblingsprojekt netutils-linux als äußerst nützlich empfunden.

3
strizhechenko