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

44

Ich habe ein minimales CentOS 6.3, 64-Bit-Gateway mit 4 Netzwerkkarten (1 Gbit / s), die jeweils für den öffentlichen und für den privaten Verkehr miteinander verbunden sind und NAT durchführen. Es verfügt über 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-Disks verwenden. Wie kann eine Box mit geringer Hardwarekonfiguration eine bessere Leistung (wie in behandelt sie mehr gleichzeitige Verbindungen) erzielen als eine Maschine mit mehr RAM und CPU?

Was sind die einschränkenden Faktoren, abgesehen davon, dass IOS verschiedene Methoden verwendet, um damit umzugehen?

Blaues Gen.
quelle
5
Implementierungen in Hardware sind schneller als Firmware für dieselbe Lösung.
Mdpc
3
Die "besseren Spezifikationen", die Sie erwähnen, sind für den vorliegenden Job irrelevant. Es gibt andere Eigenschaften, die wirklich wichtig sind.
29.
Ok, also ... sollte ich nach dem, was Sie geschrieben haben, davon ausgehen, dass es sich bei Ihrem Centos um eine virtuelle Maschine handelt? Abgesehen von speziellen Netzwerkoptimierungen für virtuelle Maschinen, sowohl auf Hypervisor- als auch auf Gast-Seite, ist allgemein bekannt, dass virtuelle Maschinen in dieser Rolle nicht gut sind. Für den Einsatz als Router / Firewall wird Bare Metal immer empfohlen!
Gesteinigt
Leiten Sie tatsächlich 1 Gbit / s Verkehr, wie in Ihrer Konfiguration vorgeschlagen? Sie können einen Dumptruck verwenden, um eine Schaufel voller Sand zu bewegen. 6 GB RAM und 4 Kerne werden für einen Router im Grunde genommen nie in Frage kommen. Sie könnten Strom und Platz im Rack sparen, indem Sie einen kleinen Intel Atom-Rechner für diese Aufgabe verwenden.
Bert

Antworten:

64

ASICs .

Anstatt eine Allzweck-CPU und eine aufgabenspezifische Software zu verwenden, können Sie die Software überspringen und das Silicon direkt mit der Aufgabe befassen.

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 anhand einer ACL . Dies macht einen enormen Unterschied in der Geschwindigkeit dieser zeitkritischen Vorgänge und bietet einen signifikanten Vorteil gegenüber einer Allzweck-CPU.

Shane Madden
quelle
1
Obwohl ich mit Shane einverstanden bin, würde ich mich jeden Tag für iptables entscheiden, die auf einem generischen Server über eine Appliance laufen. In meiner Firma sind Iptables, die auf Fedora ausgeführt werden, schneller, flexibler, einfacher zu konfigurieren, belasten weniger CPU und Speicher, sind schneller zu booten und wesentlich billiger als unsere Cisco ASA.
rvh
@rvh: für firewalling oder nur routing?
Mveroone
2
und insgesamt ist 'speed' hier ein ziemlich loser begriff. Ich bin mir sicher, dass es viele Situationen gibt, in denen ein PC eine Operation "so schnell" wie eine HW-Operation ausführen kann oder eine konstante Dauer aufweist, die länger dauert als die HW-Operation. Aber es ist wirklich zu Stabilität kommen und ‚für Ihr buck'- Sie kaufen noch weniger RAM / CPU mit einem Gerät, aber es wird mehr aus ihm heraus, und nur das tut , was es braucht , damit Sie Stabilität erhalten
Colin Godsey
Diese Antwort ist aus Kommissionsgründen falsch. Nur "ASICs" zu schreien, ist auch ein bisschen naiv, da die meisten Router, die NAT verwenden, Allzweck-CPUs verwenden, es sei denn, wir streben extreme Leistung an. Auch Hardware-NAT-Router haben strengere Grenzen für die Anzahl der gleichzeitigen Verbindungen. Was das OP erlebt, ist eine Fehlkonfiguration und die Verwendung eines Betriebssystems, das nicht zur Aufgabe passt.
Dualed
@dualed most routers that do NAT use general purpose CPUsJa, das ist eine wahre Aussage, aber ohne die Tatsache zu kennen, dass viele dieser Geräte bestimmte Vorgänge auf dedizierte Chips verlagern (wie aus der obigen vollständigen Antwort hervorgeht). Denken Sie nicht an NAT und Connection Tracking (was in modernen Geräten in ASICs nicht vorkommt), denken Sie an Routing-Tabelle und Switching Offloading.
Shane Madden
12

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

Aus dem gleichen Grund kann ein 60-Dollar-Gigabit-Ethernet-Switch einen 2000-Dollar-PC mit vier GigE-Karten mit zwei Anschlüssen, die als Ethernet-Switch fungieren, übertreffen. Der Schalter ist von Grund auf so aufgebaut, dass er ein Schalter ist.

David Schwartz
quelle
3
Und da der dedizierte Router auf einer Flash-Festplatte ausgeführt wird, fallen zu unpassenden Zeiten weniger bewegliche Teile aus.
Cpt_fink
3
Ich bin mir nicht sicher, ob du recht hast. Ich habe für ein Unternehmen, das ich mit netmap ( info.iet.unipi.it/~luigi/netmap ) betrieben habe, einen sehr einfachen Anti-DDOS-Schutz erstellt, der auch auf normaler Hardware (wirklich volle 1 Gbit / s oder 11 Mbit / s) sehr gut funktioniert Pakete / Sek.). Es gibt auch eine Version von openswitch für netmap auf dieser Site, die 3M Pakete / Sek. Auf "normaler" Hardware weiterleiten kann. Ich kenne keinen billigen (500 $) Switch, der das kann, aber ich kann mich irren.
XzKto
2
@XzKto Ein typischer billiger GigE-Switch mit 5 Ports (60 USD) kann Pakete zwischen allen Portkombinationen mit voller Drahtgeschwindigkeit weiterleiten. Sie verwenden normalerweise eine volle, nicht blockierende Querstange.
David Schwartz
@XzKto Was David meinte, ist, dass der Switch im Gegensatz zum PC, der die Geschwindigkeit "bis zu seinem eigenen Schnittstellendurchsatz" bewältigt, dies für jede Kombination von Port-zu-Port tut. Sie können Host1 mit Host2 und 3 bis 4 und jede Verbindung mit Vollduplex und maximalem Durchsatz ansprechen lassen . Das ist nicht zu übertreffen. (und für mehr Geld, mehr Häfen, noch einfacher zu sehen, warum es schneller ist). Und für Router ist es ähnlich: Hardware kann schneller umleiten als Software, da sie umleiten kann, sobald sie über genügend Informationen verfügt (Ihr Linux-Router erledigt dies auf jeder Ebene, aber der Weg dorthin ist bereits langsamer).
Olivier Dulac
11

"Anders als IOS"?

IOS macht fast den Unterschied. CentOS ist ein Allzweck-Betriebssystem. Es ist so konzipiert, dass es in einer Vielzahl von Szenarien mit einer Vielzahl unterschiedlicher Hardwarekonfigurationen eine ausreichende Leistung erbringt. IOS hingegen ist extrem 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 Hardware, die Sie in Cisco-Geräten finden würden.

Wenn Sie genau wissen , für welche Hardwareteile Sie programmieren, ist die Leistung im Vergleich zur Kompatibilität sehr hoch.

Ryan Ries
quelle
3
+1. Hinzu kommt, dass Cisco über die technischen Ressourcen und das Know-how verfügt, um bei Bedarf Software durch Hardware zu ersetzen . Das heißt, wenn eine bestimmte Operation langsamer ist als in der Software gewünscht, können sie sich bemühen, einen ASIC zu entwickeln, Anweisungen zu ihren vorhandenen Verarbeitungseinheiten hinzuzufügen oder ein Hardwaremodul zu erstellen, um diese zu beschleunigen. Die Tabellen sprechen vor allem für die Leistung, wenn Sie den Luxus haben, sowohl die Software als auch die Hardware zu steuern .
Justin ᚅᚔᚈᚄᚒᚔ
Es funktioniert auch in beide Richtungen. Die Hardware muss sich auch nicht mit seltenen, komplexen Fällen befassen. Es wirft diese einfach zur Software. Routing-Schleifen? Versuchen Sie nicht, in Hardware herauszufinden, wie Sie damit umgehen sollen.
MSalters
4

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

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

Auf der Softwareseite kann die Effizienz gesteigert werden, wenn die Software für die Verwendung beim Routing entwickelt wurde. 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 das erste Tool schaltet den Datenverkehr deutlich schneller um. (Ubuntu 14.04 ist jetzt dank der neuen nftables im Linux 3.13-Kernel fast genauso schnell.)

Dedizierte Router haben jedoch einen großen Nachteil: Sie können nur den Datenverkehr wechseln und sie können nicht virtualisiert werden. Mein aktueller Edge-Router ist eine virtuelle Maschine in meinem ESXi-Cluster, auf der Ubuntu 14.04 ausgeführt wird. Außerdem fungiert er als Intrusion Detection-System und Load Balancer.


quelle
3

AFAIK, es ist der Overhead eines Allzweck-Betriebssystems; Unabhängig davon, wie schnell Ihre Verbindungen sind, werden die Pakete paketweise im Kontext des Kernels 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 es tun könnte.

Trotzdem gibt es vielversprechende neue "ish" -Technologien, die an Popularität und Machbarkeit zunehmen und unter Linux-Systemen sowohl in dieser als auch in anderer Hinsicht einen schärferen Konkurrenten hervorbringen könnten. dh InfiniBand

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

Weitere Lektüre:

ILMostro_7
quelle
2

Dies liegt normalerweise an der mangelnden Konfiguration von Netzwerkstacks / -geräten unter Linux. In fast 90% der Fälle wird Ihr Netzwerkverkehr von CPU0 verarbeitet, während andere sich im Leerlauf befinden. 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 / Stack-basierte Paketverarbeitungsverteilung unter den CPUs) einrichten.

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

Wenn Sie einen Blick auf die Distribution werfen müssen und das Anschauen while sleep 1; do cat $some_file_in_procfs; done, Auswerten von CPU-Masken und manuelles smp_affinitySchreiben für langweilig halten, finden Sie mein pet-project netutils-linux wahrscheinlich äußerst nützlich.

strizhechenko
quelle