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?
linux
router
packetloss
Blaues Gen.
quelle
quelle
Antworten:
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.
quelle
most routers that do NAT use general purpose CPUs
Ja, 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.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.
quelle
"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.
quelle
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
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:
quelle
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 manuellessmp_affinity
Schreiben für langweilig halten, finden Sie mein pet-project netutils-linux wahrscheinlich äußerst nützlich.quelle