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.
the packet will then be exploded into cells to reduce latency
?