Wie kann ein Prozessor mit einer Datenrate von 10 Gigabit pro Sekunde oder mehr umgehen?


11

Ich weiß nicht, ob es der richtige Ort ist, um zu fragen. Es kann eine sehr dumme Frage sein. Ich gehe davon aus, dass ein Prozessor Datenrahmen für das Switching / Routing verarbeiten muss. Moderne Prozessoren haben eine Geschwindigkeit von wenigen GHz. Wie gehen sie mit Daten um, die schneller kommen als sie arbeiten?

Antworten:


16

Sie haben völlig Recht, wenn wir einen Befehlszyklus pro Bit verwenden müssen, wären 10 Gbit / s nicht erreichbar. Das erste, was zu beachten ist, ist, dass wir ein Wort pro CPU-Befehl verarbeiten - 64 Bit.

Selbst dann ist das Schlimmste, was wir für die Leistung tun können, dass die CPU auf alle Wörter eines Pakets zugreift. Daher liegt der Fokus auf der "Zero-Copy" -Handhabung von Paketen. Einige dieser Tricks liegen in den Schnittstellen selbst: Sie verfügen über DMA ("Direct Memory Access"), sodass der Ethernet-Controller-Chip die Daten in den RAM kopiert. Sie berechnen die Prüfsummen so, dass die CPU nicht auf alle Wörter im Paket zugreifen muss, um dies zu tun. Einiges davon ist im Datenstrukturdesign enthalten: Wir achten darauf, die Paketpuffer so auszurichten, dass wir sie verschieben können, indem wir die Eigentümerschaft eines Seitentabelleneintrags ändern. Ein Teil davon ist nur eine sorgfältige Programmierung, um sicherzustellen, dass auf Paketdaten am seltensten zugegriffen wird und vorzugsweise erst nach dem empfangenden Anwendungsprogramm überhaupt zugegriffen wird.

Sobald wir dies alles getan haben, ist die nächste Einschränkung der Aufwand für die Verarbeitung von Paketen nacheinander. Daher gibt es sowohl im Ethernet-Controller als auch im Kernel eine Menge "Segmentation Offload" -Funktionen, sodass wir Gruppen von Paketen verarbeiten können. Wir verzögern sogar das Abrufen von Daten vom Ethernet-Controller, sodass diese Gruppen größer sind.

Schließlich haben wir Verknüpfungen für Sonderfälle, wie den sendfile () -Aufruf des Kernels, der ein Expresspfad von der Festplatte zum Netzwerk mit minimalem Arbeitsaufwand ist.

Wir können sogar das Routing in Sonderfällen (das Weiterleiten von Paketen von einer Schnittstelle zur anderen) unter Verwendung der Hardwarefunktionen der Netzwerkschnittstellenkarten durchführen und den PCI-Bus als Bus zwischen den Karten behandeln, anstatt die CPU einzubeziehen. Dies ist in Allzweckbetriebssystemen nicht möglich, aber Anbieter wie Intel bieten Softwarebibliotheken an, um solche Funktionen auf ihren Ethernet-Controllern zu implementieren.

Wenn wir uns von CPUs entfernen, können wir sogar spezielle Router bauen, bei denen alle Weiterleitungsaufgaben in Hardware ausgeführt werden. Da der PCI-Bus dann eine Einschränkung darstellen würde, werden mehrere parallele Busse betrieben. oder sogar mehrere parallele Busse zu mehreren parallelen Crossbar-Schalteranordnungen. An einem Ende des Marktes wäre ein kleiner TCAM-basierter Ethernet-Switch ein Beispiel; Am anderen Ende des Marktes wäre der Juniper M40 ein kanonisches Design.

Ein typischer Switch empfängt ein Paket, sucht die Zieladresse im TCAM, hängt ein Tag mit dem Ausgangsport an das Paket an und sendet das noch eingehende Paket per DMA an den Controller des Ausgangsports. Beachten Sie, dass bei einem überlasteten Ausgangsport auf diesem einfachen Switch nur das Eingangspaket weggeworfen werden kann. Daher sind einfache Switches keine gute Wahl, wenn sich die Geschwindigkeit von Links ändert und eine gewisse Warteschlange wünschenswert ist. Natürlich gibt es anspruchsvollere Schalter, für die Sie mehr bezahlen.

Ein typischer Router empfängt ein Paket und hält es in einer kurzen Warteschlange. Die Ziel-IP-Adresse wird im statischen RAM nachgeschlagen, das Paket wird dann in Zellen aufgelöst, um die Latenz zu verringern, und jede Zelle wird an einen Cross-Bar-Switch an die Ausgangskarte gesendet. Diese Karte setzt die Zellen wieder zu einem Paket zusammen und stellt das Paket an der Ausgangsschnittstelle in die Warteschlange. Die Warteschlange auf der Ausgangsschnittstelle kann komplex sein.


Gute Antwort. Können Sie näher darauf eingehen the packet will then be exploded into cells to reduce latency?
Eddie

In einem Router-Design können Sie einfach ein Paket von einer Leitungskarte zur anderen über die Cross-Bar-Vermittlung (oder eine andere Art von Inter-Card-Bus) senden. Dann ist die Latenz jedoch an die Länge des Pakets gebunden - Sie hätten eine weitere vollständige Paketübertragungsverzögerung, wenn das Paket über die Crossbar-Vermittlung gesendet wird. Um dies zu vermeiden, können wir mehrere parallele Verbindungen in die Crossbar-Vermittlung einbinden und das Paket auf diese Verbindungen aufteilen. Dann wird die Latenz für große Pakete stark reduziert. Ein Teil eines aufgeteilten Pakets wird als "Zelle" bezeichnet.
vk5tu

Ich weiß, dass diese Antwort von vor zwei Jahren stammt, aber ich danke Ihnen vielmals. Ich hatte die gleiche Frage wie das Originalplakat und fand Ihre Antwort bei meiner Suche. Es ist sehr gut geschrieben und gründlich. Vielen Dank!
einsames Boot

0

Heutzutage werden fast alle Switches und ein Großteil des Routings in Hardware abgewickelt, sodass die Prozessorgeschwindigkeit für Ausnahmen ins Spiel kommt. Bei Servern ist es möglich, dass der Prozessor nicht schnell genug ist. Dies war in der Vergangenheit der Fall. Als das 1-Gbit / s-Ethernet zum ersten Mal herauskam, konnte der in PCs und Servern verwendete Bus nur 400 Mbit / s verarbeiten.

Was passiert, wenn der Prozessor nicht schnell genug ist, ist, dass der Datenverkehr unterbrochen wird. Es kann ohnehin viel Verkehr fallen, da auf diese Weise bei korrekter Ausführung mit Überlastungen umgegangen wird. RED (Random Early Detection) ist eine Methode, mit der Pakete in Warteschlangen zufällig abgelegt werden, um zu verhindern, dass sie Pakete füllen und abwerfen. Dies kann dazu beitragen, die TCP-Synchronisierung zu verhindern. Bei Switches, bei denen möglicherweise mehrere Ports einer Geschwindigkeit an einen anderen Port derselben Geschwindigkeit gesendet werden müssen, treten viele Unterbrechungen auf.


1
Dies verwechselt eingehende Rückwürfe mit Austrittsabfällen. Verwerfungen treten normalerweise auf, wenn der Ringpuffer der Ethernet-Schnittstelle überfüllt ist - wie dies der Fall ist, wenn eine CPU nicht mit der Ankunftsrate von Daten Schritt halten kann. Dieser Ringpuffer ist zu klein für die Implementierung von RED.
vk5tu

@ vk5tu, du hast meinen Punkt verpasst, dass der Verkehr ständig unterbrochen wird, egal ob ein- oder ausgehend. Wenn ein Teil des Systems den Datenverkehr nicht verarbeiten kann, werden einige gelöscht und andere absichtlich gelöscht.
Ron Maupin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.