DE112020004673T5 - Mehrpfad-Paketdeskriptor-Zustellschema - Google Patents

Mehrpfad-Paketdeskriptor-Zustellschema Download PDF

Info

Publication number
DE112020004673T5
DE112020004673T5 DE112020004673.7T DE112020004673T DE112020004673T5 DE 112020004673 T5 DE112020004673 T5 DE 112020004673T5 DE 112020004673 T DE112020004673 T DE 112020004673T DE 112020004673 T5 DE112020004673 T5 DE 112020004673T5
Authority
DE
Germany
Prior art keywords
tag
memory
tags
buffer
egress
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112020004673.7T
Other languages
English (en)
Inventor
Robert Southworth
Jonathan Dama
David Arditti Ilitzky
Karl Papadantonakis
Arvind Srinivasan
Mika Nystroem
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE112020004673T5 publication Critical patent/DE112020004673T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/625Queue scheduling characterised by scheduling criteria for service slots or service orders
    • H04L47/6255Queue scheduling characterised by scheduling criteria for service slots or service orders queue load conditions, e.g. longest queue first
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/901Buffering arrangements using storage descriptor, e.g. read or write pointers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching

Abstract

Beispiele beschreiben die Verwendung mehrerer Metadatenzustellschemata, um Tags bereitzustellen, die Pakete für eine Austritts-Port-Gruppe zu beschreiben. Ein Tag, das kleiner als ein Paket ist, kann einem Paket zugeordnet werden. Das Tag kann in einem Speicher als Gruppe mit anderen Tags gespeichert werden, und das Tag kann einer Warteschlange, die einem Austritts-Port zugeordnet ist, zugestellt werden. Pakete, die an einem Eintritts-Port empfangen werden, können als nicht verschachtelt sein, um ein Unterlaufen zu reduzieren und ein Durchschneiden zu einem Austritts-Port bereitzustellen. Ein gemeinschaftlich verwendeter Speicher kann zugewiesen werden, um Pakete zu speichern, die an einem einzigen Eintritts-Port empfangen werden, oder gemeinschaftlich verwendet werden, um Pakete von mehreren Eintritts-Ports zu speichern.

Description

  • ZUGEHÖRIGE ANMELDUNGEN
  • Diese Anmeldung ist eine Fortführung der US-Patentanmeldung 16/727,543 , die am 26. Dezember 2019 eingereicht wurde. Die US-Patentanmeldung 16/727,543 beansprucht die Vorteile der vorläufigen US-Patentanmeldung 62/908,490 , die am 30. September 2019 eingereicht wurde. Die gesamte Spezifikation wird hiermit durch Verweis in ihrer Gesamtheit in das Dokument aufgenommen.
  • HINTERGRUND
  • Auf dem Gebiet der Datenkommunikation werden Schalter (Switches) verwendet, um Pakete an einem oder mehreren Eintritts-Ports zu empfangen und über die Schalter-Struktur (Switch-Fabric) an den Ziel-Austritts-Port weiterzuleiten, um sie an einen Zwischenknoten oder einen Endpunkt-Zielempfänger zu übertragen. Bei Schaltern kann eine Austritts-Pipeline entscheiden, welchen Paketen es erlaubt wird, von einem Austritts-Port auszutreten und welche Pakete verworfen werden. Diese Entscheidung basiert auf dem Anfangsblock (Header) und den Metadaten des Pakets. Die Bandbreite für das Abrufen von Paketsegmenten aus der Schalter-Struktur in den Austritts-Port ist jedoch begrenzt und wird im Wesentlichen verschwendet, wenn ein Paket verworfen wird. Die Bandbreite für das Abrufen von Paketsegmenten von einem Schalter wird verschwendet, da die Daten zwar abgerufen, aber nicht auf der Leitung (wire) (z. B. dem Netzwerkmedium) ausgegeben werden. Dies kann zu einem Verlust der Bandbreitennutzung auf der Leitung führen (so genannte „Blasen“), der durch Zwischenräume zwischen den auf einer Leitung ausgegebenen Paketen entsteht, auch wenn es Pakete gibt, die zum Abrufen und Austritt bereit sind.
  • Figurenliste
    • 1 zeigt ein beispielhaftes System.
    • 2 stellt einen beispielhaften Schalter dar.
    • 3 zeigt eine beispielhafte Weise des Zuordnens von Tags zu Paketdaten in einem Gemeinschaftlich-Verwendeter-Speicher-Datensystem.
    • 4 zeigt ein beispielhaftes System.
    • 5A zeigt ein Beispiel für einen Tag-Sequenzer, der von einer Eintritts-Port-Gruppe verwendet wird.
    • 5B zeigt ein Beispiel für einen Tag-Sequenzer.
    • 5C zeigt ein Beispiel für eine Tag-Sequenz.
    • 6A zeigt ein Beispiel für einen Tag-Zusammensteller.
    • 6B zeigt ein Beispiel für einen Tag-Zusammensteller.
    • 7A zeigt ein Beispiel für ein Warteschlangen-Cache-Slice.
    • 7B zeigt ein Beispiel für ein Warteschlangen-Cache-Slice für 2 Tags pro Empfangsgruppe.
    • 8A zeigt ein Beispiel für einen Zeitplaner zur Verwendung durch eine Austritts-Port-Gruppe.
    • 8B zeigt ein Beispiel, bei dem 2 Tags pro Taktzyklus übertragen werden.
    • 9A stellt einen Prozess dar.
    • 9B zeigt einen Prozess zum Tag-Entschachteln.
    • 10 stellt eine Netzwerkschnittstelle dar.
    • 11 stellt ein System dar.
    • 12 stellt eine Umgebung dar.
  • DETAILLIERTE BESCHREIBUNG
  • Ethernet-Schalter benötigen mehrere hundert Megabyte an Paketspeicher, da die ankommenden Pakete nicht geplant sind. Ethernet-Schalter verwenden im Allgemeinen die folgende Speicherorganisation: Eingangspuffer, Ausgangspuffer und/oder vollständig gemeinschaftlich verwendeter Puffer (Warteschlangenbildung). Siehe z. B. Michael G. Hluchyj und Mark J. Karol, Queueing in High-Performance Packet Switching. IEEE Journal on Selected Areas in Communications, Vol. 6, Nr. 9, Dezember 1988. Eingangs- und Ausgangspuffer können durch Unterteilung eines Puffers in kleine Puffer implementiert werden, von denen jeder einen ausreichenden Durchsatz für nur eine kleine Gruppe von Ports (1-2 Tbit/s) verwendet.
  • 1 zeigt ein Beispiel für ein System, das einen Crossbar-Schalter verwendet, um Pakete von einem Eintritts-Port zu einem Austritts-Port bereitzustellen. Bei diesem Beispiel verwendet ein Crossbar-Schalter in direkter Warteschlange befindliche Ausgangspuffer. Bei Incast-Anwendungen, die gleichzeitige Bursts an eine einzige Ausgangswarteschlange liefern, kann das System einen Durchsatzengpass erfahren. Der Crossbar-Schalter erfährt ein Incast-Engpass, wenn jede Austritts-Port-Gruppe den vollen Eintrittsdurchsatz des gesamten Schalters unterstützen muss.
  • Maxim Podlesny und Carey Williamson, Solving the TCP-incast Problem with Application-Level Scheduling. 2012 IEEE 20th International Symposium on Modeling, Analysis and Simulation of Computer and Telecommunication Systems beschreibt, dass TCP-Incast auf der Anwendungs- oder TCP-Stapel-Ebene gelöst werden kann. Dieser Ansatz ändert jedoch das Anwendungsverhalten und führt daher zu weiterem Mehraufwand. Außerdem gibt es viele Beschränkungen für den Anwendungs- und TCP-Stapel-Entwurf, sodass es schwierig sein kann, diese zu ändern. Schließlich gehen diese Lösungen nicht auf das Incast-Problem in anderen Protokollen ein.
  • Yanpei Chen, Rean Griffith, Junda Liu, Randy H. Katz, und Anthony D. Joseph, Understanding TCP Incast Throughput Collapse in Datacenter Networks 2009 Proceedings of the Ist ACM Workshop on Research on Enterprise Networking (WREN 2009) beschreiben ein Szenario in einer typischen Transmission Control Protocol- (TCP-) Incast-Anwendung, in dem Hunderte von Eingangsströmen (die möglicherweise an allen Ports innerhalb einer einzigen Eintritts-Port- Gruppe ankommen) gleichzeitig Bursts von jeweils 256 KB an den Schalter liefern. Bei einem großen Schalter (z. B. 10 Tbit/s oder mehr) sind die Eingangs- und Ausgangspuffer stark unterteilt und nicht groß genug, um einen Burst von 10 MB zu speichern. Die Eingangspufferung kann in diesem Fall besser sein als die Ausgangspufferung, kann aber in Fällen, in denen viele Ströme an einer einzigen Eintritts-Port-Gruppe ankommen, oder wenn alle Ausgänge überlastet sind, zu Problemen führen.
  • Shang-Tse Chuang, Ashish Goel, Nick McKeown und Balaji Prabhakar, Matching Output Queueing with a Combined Input Output Queued Switch, Infocom (1999) beschreibt Ausgangs-Warteschlangenbildung, die über einen internen Schalter implementiert wird, der schneller ist als die externe Bandbreite. Dies ist bei einem großen Schalter möglicherweise nicht machbar. So ist beispielsweise die Implementierung eines 50-Tbit/s-Kerns für einen 25-Tbit/s-Schalter möglicherweise nicht machbar. Zusätzlich löst der Ansatz zwar potenziell das Blockierungsproblem von Eingangswarteschlangen, doch wird der Pro-Port-Speicher nicht gemeinschaftlich verwendet.
  • Saad Mneimneh, Vishal Sharma und Kai-Yeung Siu, Switching Using Parallel Input-Output Queued Switches with No Speedup. IEEE/ACM Transactions on Networking, Vol. 10, Nr. 5, Oktober 2002 beschreibt Ausgangs-Warteschlangenbildungs-Lösungen, die viele parallel geschaltete Schalter verwenden. Dieser Ansatz verhindert, dass sich die Eingänge gegenseitig blockieren, wenn sie um denselben Ausgang konkurrieren. Der Paketspeicher wird jedoch unter den Schaltern nicht gemeinschaftlich verwendet. Daher ist eine Verbindung zwischen einem einzelnen Port-Paar nicht in der Lage, den gesamten gemeinschaftlich verwendeten Speicher zu verwenden. Dies löst das Incast-Problem nur teilweise.
  • Incast schafft Durchsatz-Herausforderungen, die durch Verwendung von gemeinschaftlich verwendetem Speicher gelöst werden können. In jedem ratengesteuerten End-to-End-Protokoll (wie TCP oder Entfernter-Direktspeicherzugriff (RDMA; Remote Direct Memory Access) wird die Burst-Größe durch die Roundtrip-Zeit des Protokolls bestimmt, die Millisekunden betragen kann. Bei einem Chip, der 400 Gbit/s aktiven Incast unterstützt, können also 100 MB an Burst auftreten, die den gesamten Chip-Speicher verwenden können. Angenommen zwei 100- Gbit/s-Eintritts-Ports senden jeweils 100-MB-Bursts an einen einzigen 100-Gbit/s-Eintritts-Port. Wenn der Chip 100 MB Speicher aufweist und er bei diesem Beispiel dem einzigen aktiven Port zur Verfügung steht, gibt es keinen Gegendruck. Wenn der Speicher nicht zwischen allen Eingangs- oder Ausgangs-Ports gemeinschaftlich verwendbar ist, würde der größte Teil desselben für das Halten eines Bursts nicht zur Verfügung stehen.
  • Die Ausgangswarteschlangenbildung ist ein Ansatz, bei dem ein Austritts-Port seine eigenen Warteschlangen aufweist. Die Ausgangswarteschlangenbildung ermöglicht es, dass Pakete, die an dem gleichen Eingangs-Port ankommen, aber an verschiedene Ausgangs-Ports gehen, sich nicht gegenseitig blockieren, selbst wenn einer dieser Ausgangs-Ports blockiert ist. Diese Warteschlangen können zum Beispiel pro Fluss oder pro Verkehrsklasse (TC; Traffic Class) zugewiesen werden. Einer TC können ein oder mehrere Flüsse zugeordnet werden. Nach hiesigem Gebrauch kann sich ein Fluss auf eine TC beziehen und umgekehrt. Dementsprechend kann die Anzahl der Ausgangswarteschlangen in einem Schalter wie folgt dargestellt werden: (# Austritts-Ports) x (# TCs). Die Ausgangs-Warteschlangenbildung ist jedoch möglicherweise nicht gut skalierbar, da alle Daten, die in einen Schalter eintreten, zu der gleichen Zeit zu derselben Warteschlange gehen und sie beim Durchsatz geordnet bleiben.
  • Verschiedene Ausführungsbeispiele ermöglichen die Verwendung eines gemeinschaftlich verwendeten Paketspeichers in Schaltern durch Einführen einer Warteschlangenbildungsstruktur, die die direkte Kommunikation zwischen Eingangs- und Ausgangs-Ports unter Verwendung eines gemeinschaftlich verwendeten Speichers kombiniert. Das Incast-Verhalten kann durch die Verwendung eines gemeinschaftlich verwendeten Speichers und eines Ausgang-Warteschlangenbildungs-Modells angegangen werden, wobei der Auf-Chip-Speicher effizient und auch mit geringer Latenzzeit genutzt wird. Ein gemeinschaftlich verwendeter Speicher kann sowohl für Paketdaten als auch für Warteschlangenbildungs-Metadaten oder Tags verwendet werden. Tags (z. B. 6 Byte zum Repräsentieren von 256 Byte Daten) können unter Verwendung eines Tag-Verteilungsbus übertragen werden, der den vollen Incast-Durchsatz unterstützt. Der Tag-Verteilungsbus kann anstelle einer herkömmlichen Crossbar verwendet werden. Auf der Eintrittsseite wird ein Tag-Sequenzer verwendet, um die Anzahl der Ausgangswarteschlangen-Slices um einen Faktor N zu reduzieren, wobei N = (Anzahl der Ports pro Eingangsgruppe). Eine Warteschlangen-Cache-Struktur auf der Austrittsseite kann die Latenzzeit des gemeinschaftlich verwendeten Speichers „verbergen“, indem Tags vor Verfügbarkeit in dem gemeinschaftlich verwendeten Speicher gespeichert werden oder indem Tags zugänglich sind (gelesen werden), bevor die Tags aus dem gemeinsamen Speicher abrufbar sind (gelesen werden).
  • Verschiedene Ausführungsbeispiele stellen ein-Gemeinschaftlich-Verwendeter Speicher-Datenstrukturen bereit, die durch für Benutzer verfügbare Verwaltungs-Anwendungsprogrammierschnittstellen (APIs; application program interfaces) zugänglich sind (z. B. Anwendungen, Orchestratoren, Hypervisoren, virtuelle Maschinen, Container). Der gemeinschaftlich verwendete Speicher könnte zwischen Warteschlangen- und Paketdaten-Nutzung aufgeteilt werden.
  • 2 stellt einen beispielhaften Schalter dar. Der Switch kann Pakete unter Verwendung von Eintritts-Ports einer Eintritts-Port-Gruppe 202 empfangen. Eintritts-Ports können Pakete von einem Netzwerkmedium empfangen, das irgendeinem Standard entspricht, umfassend Ethernet, Transmission Control Protocol (TCP), User Datagram Protocol (UDP), FibreChannel, InfiniBand, OmniPath, Intel QuickPath Interconnect (QPI), Intel Ultra Path Interconnect (UPI), Intel On-Chip System Fabric (IOSF), InfiniBand, Compute Express Link (CXL), HyperTransport, High-Speed Fabric, Peripheral Component Interconnect Express (PCIe), NVLink, Advanced Microcontroller Bus Architecture (AMBA) Interconnect, OpenCAPI, Gen-Z, CCIX, NVMe over Fabrics (NVMe-oF) (beschrieben zumindest in NVM Express Base Specification Revision 1.4 (2019)), und Variationen davon, usw.
  • Bei diesem Beispiel wird ein Gemeinschaftlich-Verwendeter-Speicher-Schalter verwendet. Eintritts-Ports werden in M-Port-Gruppen gruppiert, wobei jeder Eintritts-Port den Eintritt bei einer bestimmten Rate unterstützt. Es können auch andere Schaltraten sowie Eintritts- und Austritts-Raten verwendet werden. Eine Portgruppe kann eine Eintritts-Port-Gruppe unter den Eintritts-Port-Gruppen 202 umfassen, die Pakete empfängt, und eine Austritts-Port-Gruppe unter den Austritts-Port-Gruppen 220, die Pakete an ein Netzwerkmedium oder eine Fabric sendet. Wenn eine Eintritts-Port-Gruppe ein Paket empfängt, schreibt die Eintritts-Port-Gruppe das Paket in den gemeinschaftlich verwendeten Speicher 206 in Paketdatenblöcken (z. B. 256B) in zumindest eine tiefe Warteschlange (z. B. Tag-Warteschlangen 208) (für Unicast oder Multicast). Bei diesem Beispiel werden Paketdaten in dem gemeinschaftlich verwendeten Speicher 206 gespeichert, aber Paketdaten können in irgendeiner Paketdaten-Pufferstruktur gespeichert werden, umfassend partitionierte Strukturen. Eintritts-Port-Gruppen 202 können auch ein Routing (z. B. eine Paketanalyse) durchführen, um eine Ausgangswarteschlange für das Paket auszuwählen.
  • Einige Technologien wie Omnipath und InfiniBand haben alternative Ansätze zur Verwaltung von Incast und verwenden keinen gemeinschaftlich verwendeten Speicher. Dennoch können auch diese anderen Technologien die vorgeschlagenen Geringe-Latenzzeit-Warteschlangenbildung-Schemata nutzen.
  • Es ist zu beachten, dass Ausführungsbeispiele auch für das Austreten von Paketen von einer Netzschnittstelle verwendet werden können.
  • Bei einigen Ausführungsbeispielen kann ein Schalter unter Verwendung eines Servers oder Rechenzentrums implementiert werden, der/das Software Defined Networking (SDN), Network Functions Virtualization (NFV) usw. verwendet, um Operationen eines Schalters durchzuführen und auf den gemeinschaftlich verwendeten Speicher des Servers zuzugreifen. Bei einigen Ausführungsbeispielen kann eine Netzwerk-Appliance die Funktionen eines Schalters ausführen und SDN oder NFV anwenden. NFV kann für den Lastausgleich verwendet werden (Austritts-Port-Ausgleich und Lastausgleichsdienst für die Verarbeitung von Paketen). Bei einigen Beispielen kann die Verarbeitung von Paketen vor dem Austritt und während des Speicherns von Paketen in einem gemeinschaftlich verwendeten Speicher erfolgen. Die Verarbeitung kann eines oder mehrere umfassen von: Firewall, TCP-Terminierung, Zugriffssteuerliste, Dienstfunktionsketten (Firewall, Zugriffskontrolle, Entkapselung, Paketverarbeitung), Router, Firewall, E-Mail-Server, Domain Name System (DNS), virtuelles privates Netzwerk (VPN), Datensicherung und Remote-Dateifreigabe.
  • Gemäß verschiedenen Ausführungsbeispielen erzeugt für einen Paketdatenblock (z. B. 256B), der in den gemeinschaftlich verwendeten Speicher 206 geschrieben wurde, eine Eintritts-Port-Gruppe ein Tag mit einem Zeiger auf Daten in dem gemeinschaftlich verwendeten Speicher 206. Die Eintritts-Port-Gruppe erzeugt ein Tag, das auf den Datenblock zeigt und den Datenblock beschreibt. Ein Tag kann ein Identifizieren eines Austritts-Ports eines Pakets und seiner Verkehrsklasse sowie von Identifizierern von Speicheradressen umfassen, die einen oder mehrere Paketdatenblöcke speichern. Ein Tag kann 6 Byte lang sein und zeigt auf und beschreibt den Datenblock. Ein Beispiel für ein Tag kann ein oder mehrere Felder in dem folgenden Format umfassen:
    Bits: Gebiet Beschreibung
    20 ptr Adresse des Segments (20b ermöglicht bis zu 256MB von 256B Segmenten)
    4 ptr toggle Semaphor-Bits für Segment-Zeiger
    8 Länge Bei EOP: Länge der Paketdaten im aktuellen Segment, in Bytes (0 steht für 256B). Wenn nicht am EOP: Die Anzahl der Bytes in dem Segment ist bekannt (256B wenn nicht SOP; 192B wenn am SOP). In diesem Fall steht dieses Feld für die Gesamtzahl der Segmente des Pakets, oder 0, wenn diese Informationen nicht verfügbar sind. Eintritt stellt diese Daten auf einer Best-Effort-Basis bereit; wenn sie nicht verfügbar sind, muss der Austritt davon ausgehen, dass das Paket bis zu 10 KB lang sein kann.
    1 SOP Paketstart
    1 EOP Paketende
    1 err xmd Bei SOP: Setzen, wenn eXtended MetaData (64B Metadaten) verwendet wird. Erweiterte Metadaten werden immer für Multisegment-Pakete verwendet, sind aber für Einzelsegment-Pakete optional. Wenn am EOP und nicht SOP: wird gesetzt, um einen Paketfehler wie z. B. eine schlechte CRC bei Eintritt anzuzeigen. Wenn es übertragen wird, muss das Paket mit einer schlechten CRC abgeschlossen werden. (Es ist zu beachten, dass Einzelsegment-Pakete kein Fehlerflag haben; fehlerhafte Einzelsegment-Pakete werden bei Eintritt verworfen und kein Tag übertragen)
    1 mirrored (gespiegelt) Wird auf die Originalkopie eines gespiegelten Pakets gesetzt. Zeigt an, dass die Speicherreferenzenanzahl überprüft werden muss, bevor der Paketspeicher freigegeben wird.
    1 at_egr_rate Gesetzt, wenn das Paket für eine Cut-Through- (Durchschneiden-) Handhabung in Frage kommt (verbleibende Segmente werden garantiert mit der Austritts-Port-Rate gesendet)
    4 src_port Lokaler logischer Quellport innerhalb des Eintritts-MGP (wenn nicht virtueller Port (VP)); wird für CM- und Policer-Abrechnung verwendet
    1 src_port_vp Wird gesetzt, wenn der lokale Quellport ein virtueller Port (VP) ist; wird für CM und Policer-Abrechnung verwendet
    3 src_TC Verkehrsklasse bei Eintritt; wird nur für CM-Abrechnung verwendet
    3 SLL Switch Lifetime Limit (Schalter-Lebensdauer-Begrenzung), verwendet für Paket-Timeout. Dieser 3b-Zeitstempel stellt die Zeit dar, zu der das Paket in den Schalter eingetreten ist; er wird aus einem konfigurierbaren 3b-Bereich des hochauflösenden Eintrittszeitstempels kopiert.
    48 Gesamt
  • Für einen Paketdatenblock (z. B. 256B), der in den gemeinschaftlich verwendeten Speicher 206 geschrieben wird, wird ein Tag in ein Slice einer tiefen Warteschlange des gemeinschaftlich verwendeten Speichers 206 geschrieben und außerdem über eine Tag-Verteilung 204 an ein Slice eines Warteschlangen-Caches innerhalb der Austritts-Port-Gruppe gesendet. Auf den gemeinschaftlich verwendeten Speicher 206 kann jeweils zumindest ein 64B-Wort zugegriffen werden. Um die Zeiger-Handhabung zu reduzieren, können Wörter in 256B-Blöcken zugewiesen werden.
  • Gemäß verschiedenen Ausführungsbeispielen wird ein Tag über einen Tag-Verteilungsbus an ein Slice eines Warteschlangen-Caches (Puffer) gesendet, der einer Austritts-Port-Gruppe zugeordnet ist. Das Tag wird auch gepackt (zusammengestellt), um in einem Wort in ein Slice einer tiefen Warteschlange in dem gemeinschaftlich verwendeten Speicher 206 geschrieben zu werden, sodass ein oder mehrere Wörter, die mit Tags gefüllt (oder zumindest teilweise gefüllt) sind, in den gemeinschaftlich verwendeten Speicher 206 geschrieben werden können. Die Tag-Verteilung 204 kann eine Verbindung zwischen Eintritts-Port-Gruppen 202 und Austritts-Port-Gruppen 220 sein, die es ermöglicht, dass der volle Durchsatz an Tags einer Eintritts-Port-Gruppe an einer Austritts-Port-Gruppe akzeptiert wird, selbst wenn alle Eintritts-Port-Gruppen an dieselbe Austritts-Port-Gruppe senden. So kann die Tag-Verteilung 204 beispielsweise separate Bus-Lanes umfassen, wobei eine Bus-Lane von einer Eintritts-Port-Gruppe getrieben wird. Eine Austritts-Port-Gruppe kann in einem Taktzyklus von irgendeiner oder allen Bus-Lanes von irgendeiner oder allen Eintritts-Port-Gruppen lesen. Eine Bus-Lane empfängt Tags von einer Eintritts-Port-Gruppe und liefert Tags von einer einzelnen Eintritts-Port-Gruppe an eine, einige oder alle Austritts-Port-Gruppen. Bei Unicast-Verkehr verbraucht eine der Austritts-Port-Gruppen das Tag. Bei Multicast-Verkehr verbrauchen mehrere der Austritts-Port-Gruppen das Tag. Bei Multicast-Verkehr werden die Paketdaten einmal in den Speicher geschrieben, und jeder Austritts-Port liest die Paketdaten. Multicast-Tags können unter Verwendung einer Multicast-Engine verarbeitet werden, die über den Tag-Verteilungsbus mit dem Austritt kommuniziert, oder durch Replikation der Tags am Eintritt, um sie in einem gemeinschaftlich verwendeten Speicher für den Zugriff durch irgendwelche von mehreren Austrittswarteschlangen parallel zu speichern.
  • Ein Cache-Slice ist einer Austritts-Port-Gruppe zugeordnet. Ein Cache-Slice empfängt direkte Tags von einer einzelnen Eintritts-Port-Gruppe über eine Lane der Tag-Verteilung 204. Bei Warteschlangen, die wenige Tags umfassen, speichert der Warteschlangen-Cache alle Tags innerhalb seiner End- und Kopfpuffer und umgeht so vollständig die Gemeinschaftlich-Verwendeter-Speicher-Latenzzeit. Der Warteschlangen-Cache (z. B. Puffer) ist einer Austritts-Port-Gruppe zugeordnet und kann 16 Warteschlangen-Cache-Slices umfassen, wie unten gezeigt. Ein Cache-Slice kann eine Region des Cache (z. B. Level 1, Level 2, Lower-Level-Cache), des Speichers (flüchtig, nichtflüchtig, persistenter Speicher, byteadressierbarer Speicher) sein. Ein Cache kann als N-fach satzassoziativer Cache konfiguriert werden.
  • Wenn die Warteschlangentiefe der tiefen Warteschlange ausreichend niedrig ist, derart, dass die Tags für die Austritts-Port-Gruppe aus dem Warteschlangen-Cache 222 zugänglich sind, ist es nicht erforderlich, dass die tiefe Warteschlange des gemeinschaftlich verwendeten Speichers 206 gelesen wird, außer um die Warteschlange selbst freizugeben. Wenn die Warteschlangentiefe der tiefen Warteschlange das übersteigt, was in einem Warteschlangen-Cache 222 gespiegelt werden kann, werden nur die Tags an dem Kopf und Ende in dem Warteschlangen-Cache gespeichert, und der Warteschlangen-Cache 222 ruft den Rest der Tags je nach Bedarf aus der tiefen Warteschlange (z. B. Tag-Warteschlangen 208) ab, und zwar so, dass die Latenzzeit des Lesens aus der tiefen Warteschlange verborgen bleibt.
  • Um zu versuchen zu verhindern, dass Incast-Situationen die Austritts-Rate für Pakete von einem Eintritts-Port beeinflussen, kann eine Austritts-Port-Gruppe die volle Eintritts-Tag-Rate des Schalters empfangen. So kann beispielsweise eine 1,6 Tbit/s-Eintritts-Port-Gruppe Tags mit 2,4 GHz erzeugen (die maximale Paketrate für 4 x 400 Gbit/s-Ethernet). Daher kann die Austritts-Port-Gruppe Tags mit 16 x 2,4 GHz empfangen (zur Unterstützung von 16 Port-Gruppen).
  • Der gemeinschaftlich verwendete Speicher 206 kann zum Speichern von Datenpaketen und Tags verwendet werden. Eintritts-Port-Gruppen 202 können Pakete und Tags an den gemeinschaftlich verwendeten Speicher 206 bereitstellen und der gemeinschaftlich verwendete Speicher 206 kann Pakete und Tags an Austritts-Port-Gruppen 220 bereitstellen. In einigen Fällen kann der gemeinschaftlich verwendete Speicher 206 überlastet werden und die Eintritts-Ports unter Druck setzen, was zu Paketverlust führen kann.
  • Eine Austritts-Port-Gruppe kann einen Warteschlangen-Cache 222-n verwenden, wobei n 0 bis 15 ist. Der einem Austritts-Port zugeordnete Warteschlangen-Cache 222 empfängt ein Tag und zählt es. Der Warteschlangen-Cache 222 kann einen Kopf-Cache verwenden, der Tags am Kopf der tiefen Warteschlange speichert. Der Warteschlangen-Cache 222 kann einen Ende-Cache verwenden, der Tags am Ende der tiefen Warteschlange speichert. Austritts-Port-Gruppen 220 können einen Zeitplaner 224 verwenden, der eine Warteschlange auswählt, Tags aus der Warteschlange zieht und Daten für den Austritt abruft. So kann beispielsweise eine Austritts-Port-Gruppe 220-0 bis n den zugeordneten Warteschlangen-Cache 222-0 bis n und den Zeitplaner 224-0 bis n verwenden.
  • Die getrennte Behandlung von Tags und Daten kann bei der Durchsatzskalierung helfen. Wenn es beispielsweise 16 Eintritts-Port-Gruppen und 16 Austritts-Port-Gruppen gibt, während eine Austritts-Gruppe Tags mit einer Rate von 16 x 2,4 GHz in ihren Warteschlangen-Cache einreiht, ist ihre Datenblockrate 1 x 2,4 GHz. Die Austritts-Port-Gruppe liest die Daten nach dem Dequeuing (Herausnehmen aus der Warteschlange) von Tags, was bei der maximalen Paketrate der Port-Gruppe (z. B. 2,4 Ghz) auftritt. Die Tag-Verteilung 204 kann in Kombination mit dem Warteschlangen-Cache 222 die Latenzzeit des Lesens von Daten aus den tiefen Warteschlangen aus dem gemeinschaftlich verwendeten Speicher verbergen. Eine Anzahl von Ports in einer Eintritts- oder Austritts-Port-Gruppe kann 2, 4, 8 oder irgendein Vielfaches von 2 sein.
  • Die Skalierung wird durch zumindest eines oder mehrere der folgenden Merkmale ermöglicht. Die Tags sind viel kleiner als die Daten. Ein 6B-Tag steht beispielsweise für 256B an Daten. Dies ermöglicht Austritts- zu Permutier- und Verschachtelt-Pakete in viel kleineren Speicherstrukturen, als dies erforderlich wäre, wenn die Daten direkt in die Warteschlangen-Caches der Austritts-Ports gestreamt würden. Tiefe Warteschlangen und Warteschlangen-Caches 222 werden pro Eintritts-Port-Gruppe aufgeteilt (sliced). Warteschlangen-Caches 222 haben die Möglichkeit, die meisten Tags zu verwerfen, da sie auch in dem gemeinschaftlich verwendeten Speicher 206 vorhanden sind und erneut gelesen werden können (mit Ausnahme einiger weniger Tags, die möglicherweise nicht in den gemeinschaftlich verwendeten Speicher geschrieben werden, was später erläutert wird).
  • 3 zeigt eine beispielhafte Weise des Zuordnens von Tags zu Paketdaten in einem Gemeinschaftlich-Verwendeter-Speicher-Datensystem. Der gemeinschaftlich verwendete Speicher 302 kann die Tag-Blöcke 304-0 und 304-1 sowie die Paketdatenblöcke 306-0 bis 306-N umfassen. Eine tiefe Warteschlange kann als verknüpfte Liste von Tag-Blöcken 304-0 oder 304-1 im gemeinschaftlich verwendeten Speicher gebildet werden. Bei einigen Beispielen können die Paketdaten in 256B-Blöcken in den gemeinschaftlich verwendeten Speicher geschrieben werden, obwohl auch andere Größen wie 512B, 1024B oder andere Vielfache von 128B verwendet werden können. Bei einigen Beispielen ist ein Tag 6 Bytes (6B) lang, obwohl auch andere Größen verwendet werden können. Dementsprechend wird für einen Datenblock ein 6B-Tag erzeugt. Ausgehend von der Beispielblock- und Tag-Größe werden bei diesem Beispiel 40 Tags in einen 256B-Tag-Block gepackt. Darüber hinaus kann ein Tag-Block 304-0 oder 304-1 einen nächsten Zeiger (4 Byte) umfassen (bei einer verknüpften Liste), um einen nächsten Tag-Block zu identifizieren. Das Packen von Tags in einem Tag-Block 304-0 oder 304-1 kann die Anzahl der Anfragen und die Anzahl der für den Transport der Blöcke verwendeten Busse verringern.
  • Durch das Schreiben der Tag-Blöcke, jeweils ein 64B-Wort, kann die erforderliche Größe des Endpuffers in dem Warteschlangen-Cache reduziert werden, wie nachfolgend erörtert wird.
  • 4 zeigt ein Beispielsystem, das ein Tag-Verteilungssystem verwendet, um Tags an den gemeinschaftlich verwendeten Speicher 420 und einen Warteschlangen-Cache 432 bereitzustellen, der einem oder mehreren Austritts-Ports zugeordnet ist. Eine Eintritts-Port-Gruppe 402 kann Routing und Speicherzuweisung verwenden, um Pakete zu verarbeiten, die von Ports einer Eintritts-Port-Gruppe empfangen werden. Die Routing- und Speicherzuweisung 404 kann Paketdaten zuweisen und in den gemeinschaftlich verwendeten Speicher 420 schreiben und eine Ausgangswarteschlange auswählen. Eine Eintritts-Port-Gruppe kann mit einer Austritts-Port-Gruppe gepaart werden. Eine Eintritts-Port-Gruppe kann den Tag-Sequenzer 406 für die gemeinschaftliche Verwendung eines einzelnen Warteschlangen-Slice für alle Eintritts-Ports (z. B. 16) innerhalb einer Eintritts-Gruppe verwenden. Pakete von verschiedenen Eintritts-Port-Gruppen werden in verschiedene Slices geschrieben. Eine Ausgangswarteschlange kann durch eine Anzahl von Eintritts-Port-Gruppen aufgeteilt werden. Die Pakete können zusammenhängend übertragen und am Eintritt entschachtelt werden, bevor sie zur Übertragung zur Verfügung gestellt werden.
  • Um zu verhindern, dass Teilpakete innerhalb einer einzigen Warteschlange verschachtelt werden, wenn mehrere Pakete gleichzeitig in dieselbe Ausgangswarteschlange gestreamt werden, streamt der Tag-Sequenzer 406 die Tags des ersten Pakets auf die Tag-Verteilungsverbindung 422 (z. B. Bus oder Verbindung) weiter (um Cut-Through zu unterstützen), während die Tags der anderen Pakete beiseitegelegt werden. Da sich die Eintrittspakete überschneiden können, wird eine Ausgangswarteschlange (a priori) nach Eintritts-Port aufgeteilt, um eine zusammenhängende, nicht verschachtelte Übertragung von Paketen an einem Ausgangs-Port und insgesamt mehrere Schreibvorgänge pro Zyklus zu unterstützen. Eine vollständige Partitionierung würde [(# Eintritts-Ports) x (# Austritts-Ports) x (# TCs)] Warteschlangen-Slices erfordern, was bei einem großen Schalter >100K Warteschlangen entspricht, und zumindest [(# Eintritts-Ports) x (# Austritts-Ports)] separate Speicherregionen. Die Partitionierung wird verwendet, um zu verhindern, dass Warteschlangen-Speicherstrukturen den Chipbereich dominieren. Der Tag-Sequenzer 406 kann die Eintritts-Ports gruppieren, um die Verwendung von Speicherstrukturen zu verringern.
  • Die Eintritts-Port-Gruppe 402 kann den Tag-Zusammensteller 406 verwenden, um Tags (z. B. 10) für jede tiefe Warteschlange 424 im gemeinschaftlich verwendeten Speicher 420 zu sammeln. Bei einigen Beispielen schreibt der Tag-Zusammensteller bei 10 Tags die Tags als 64B-Wort in den gemeinschaftlich verwendeten Speicher. Obwohl die Austritts-Gruppe auch einen Endpuffer aufweist, würde der gemeinschaftlich verwendete Speicherdurchsatz nicht ausreichen, um in einer Incast-Situation Tag-Blöcke zu schreiben. Die Tag-Verteilung ist so aufgeteilt, dass irgendein einzelner Fluss den gesamten gemeinschaftlich verwendeten Speicher für Paketdaten nutzen kann und das Gemeinschaftlich-Verwendeter-Speicher-Teilsystem vollständig umgangen wird, um den Austritts-Port zu benachrichtigen und so die Benachrichtigungs-Latenzzeit des Austritts-Ports zu reduzieren.
  • Die Austritts-Port-Gruppe 430 kann einen Warteschlangen-Cache verwenden, der ein Cache-Slice pro Eintritts-Port-Gruppe umfasst. In einigen Fällen hält der Warteschlangen-Cache 432 alle Tags in seinen End- und Kopfpuffern, und der gemeinschaftlich verwendete Speicher 420 wird nicht verwendet, und seine Latenzzeit hat keine Auswirkungen auf die Paket-Austritts-Rate. Wenn die Warteschlangentiefe ausreichend niedrig ist, dass alle Tags in den End- und Kopfpuffern zugänglich sind, ist es nicht erforderlich, dass die tiefe Warteschlange 424 in dem gemeinschaftlich verwendeten Speicher 420 gelesen wird, außer um die Warteschlange selbst freizugeben.
  • Ein Cache-Slice ist mit einer der Lanes oder Pfade der Tag-Verteilung 422 verbunden, um alle Tags von einer der Eintritts-Port-Gruppen zu empfangen und an ein Cache-Slice in dem Warteschlangen-Cache zu übertragen. Eine Austritts-Port-Gruppe implementiert (# TCs) x (# Austritt-Ports pro Austritts-Gruppe) Ausgangswarteschlangen und ein Cache-Slice implementiert ein Slice jeder dieser Warteschlangen. Eine Ausgangswarteschlange wird über die Cache-Slices aufgeteilt. Durch Banking kann die Austritts-Port-Gruppe z. B. Tags mit 16 x 2,4GHz empfangen.
  • Die Austritts-Port-Gruppe 430 kann den Zeitplaner 434 verwenden, um Warteschlangen-Belegungs-Informationen von den Warteschlangen-Caches zu erhalten. Der Zeitplaner 434 kann wählen, aus welchem Warteschlangen-Slice die Tags herausgenommen werden sollen. Bei einem Paket, das für den Austritt geplant ist, werden die Paketdaten abgerufen, teilweise akkumuliert und über die einzelnen Austritts-Ports gestreamt.
  • 5A zeigt ein Beispiel für einen Tag-Sequenzer, der von einer Eintritts-Port-Gruppe verwendet wird. Wenn Warteschlangen pro Eintritts-Port-Gruppe und nicht pro individuellem Port innerhalb dieser Port-Gruppe aufgeteilt werden, versucht der Tag-Sequenzer zu vermeiden, dass Teilpakete innerhalb eines einzelnen Warteschlangen-Slice verschachtelt werden. Die Entschachtelung eines Pakets kann ein Paket zusammenhängend in einem Warteschlangen-Slice bereitstellen. Der Tag-Sequenzer kann das Cut-Through-Verhalten beibehalten, um einen Geringe-Latenzzeit-Pfad (z. B. bei Port-Geschwindigkeiten wie 10 Gbit/s) bereitzustellen, damit ein Paket austreten kann, wenn die Austrittsbandbreite verfügbar ist, selbst wenn das gesamte Paket nicht an einem Eintritts-Port empfangen oder im Speicher gespeichert wird.
  • Verschiedene Ausführungsbeispiele können eine Anzahl und Größe der Warteschlangen reduzieren, da die Größe der Warteschlangen (Anzahl der Eintritts-Port-Gruppen)*(Anzahl der Austritts-Ports)*TC anstatt (Anzahl der Eintritts-Ports)*(Anzahl der Austritts-Ports)*TC ist. Bei einem 256-Port-, 8-TC-Schalter mit 16 Ports/Gruppe reduziert sich dies beispielsweise von 512Kauf 32K-Warteschlangen.) Verschiedene Ausführungsbeispiele stellen Pakete von N Eintritts-Ports in einen einzigen Stream von zusammenhängenden TC bereit. Zum Beispiel wird für Pakete, die an allen N Eintritts-Ports empfangen werden, ein vollständiges Paket nacheinander (kein Verschachteln) gestreamt, wenn es kein anderes Paket gibt, das an dieselbe Zielort-Virtuelle-Warteschlange gestreamt wird (z. B. derselbe QID). Verschiedene Ausführungsbeispiele ermöglichen die Verschachtelung anderer Pakete, die an verschiedene QIDs (z. B. virtuelle Warteschlangen) gehen, basierend auf dem verfügbaren Platz zwischen zusammenhängenden Paketen von verschiedenen Eintritts-Ports. Durch die Verwendung eines einzigen Streams kann eine Nachverfolgung von Eintritts-Port, Austritts-Port und Verkehrsklasse zum Zusammensetzen der Pakete vermieden werden, was speicherintensiv ist.
  • Pakete können in der Reihenfolge des Empfangs in einer Eingangs-Port-Warteschlange für die Ports 0 bis 15 gespeichert werden. Eingangs-Port-Warteschlangen reihen die von einem Paketprozessor verarbeiteten Tags ein (z. B. Routing, Look-up (Nachschlag), Zugriffskontrolllisten). Es kann ein Round-Robin- (Rundlauf-) Ausgang von Eingangs-Port-Warteschlangen angewendet werden. So können beispielsweise Tags von Eingangs-Ports über eine feste Zeitplansequenz (z. B. Zeitrad) oder andere Schemata ausgewählt werden. So kann ein X-Lane-Port beispielsweise X gleichmäßig verteilte Slots von 16 (für 16 Eingangs-Ports) empfangen.
  • Pakete, die noch nicht für Mit-Rate (at-rate) oder Set-Aside (Beiseitelegen) in Frage kommen, werden in den Eingangs-Warteschlangen gehalten. Die Eingangs-Port-Warteschlangen können groß genug sein, um ein komplettes Jumbo-Paket zu halten, da sie Teilpakete speichern, die durch die Speicherung in einen beiseitegelegten Puffer entschachtelt werden. Die Pakete werden einzeln aus den Eingangs-Warteschlangen in den Set-Aside-Puffer verschoben (um Verschachtelungen zu vermeiden).
  • Für die Aufnahme neuer Tags kann eine feste Zeitplaner-Sequenz 502 verwendet werden. Der feste Zeitplaner 502 kann beispielsweise ein festes Zeitrad sein, das neue Pakete aus den Eingangs-Port-Warteschlangen in den Rest der Tag-Sequenzer-Struktur (Ausgang der Multiplexer 504 und 506 auf der rechten Seite) aufnimmt. Das Eintritts-Warteschlangen-Zeitrad springt nicht vorwärts, wenn keine Tags für den Durchfluss aus der in diesem Zyklus ausgewählten Eintritts-Warteschlange verfügbar sind. Dies ermöglicht die Nutzung der Tag-Bandbreite für das Lesen von Set-Aside-Warteschlangen, wenn an einem bestimmten Eintritts-Port keine Durchfluss-Tags verfügbar sind.
  • Als Alternative zu den Eingangs-Warteschlangen könnte ein Set-Aside-Puffer 550 so entworfen werden, dass er eine verknüpfte Liste pro Paket unterstützt, was zu einer Liste von Listen führt.
  • Ein Tag-Sequenzer kann die Fluss- (oder TC-) Reihenfolge beibehalten. Der Tag-Sequenzer kann versuchen, eine Blockierung zwischen verschiedenen Port-Paaren zu verhindern. Der Tag-Sequenzer streamt die Tags nach Möglichkeit mit der Rate (at-rate). Mit-Rate-Pakete sind berechtigt, den Schalter zu passieren (cut-through) (auch wenn andere Bedingungen, wie die Port-Geschwindigkeits-Kompatibilität, ein Cut-Through bereitstellen). Der Tag-Sequenzer kann entschachtelte Eingangswarteschlangen (z. B. Pakete, die von PortO - Porti 5 empfangen werden) und einen Set-Aside-Puffer verwenden.
  • An einem Beginn eines Pakets (SOP) entscheidet die Steuerung 520, ob ein Tag in den Set-Aside-Puffer geht oder mit der Rate fortgesetzt wird. Eine gleiche Konfiguration wird für das gesamte Paket verwendet. Wenn ein Tag zum Mit-Rate-Streaming berechtigt ist, dann ist diese Eingangswarteschlange für die Mit-Rate-Übertragung von Tags reserviert, bis das Ende des Pakets gesendet wird. Tags, die von der Steuerung 520 nicht verbraucht werden, verbleiben in den Eingangs-Port-Warteschlangen. Die Steuerung 520 prüft den QID eines Pakets. Ein QID kann Teil eines „Tags“ sein und wird mit dem Paket geliefert. QID kann sein (Ausgangs-Port + TC (oder Fluss-Identifizierer)). Beispielsweise lässt die Steuerung 520 ein Tag von einem Eintritts-Port mit der Rate fortfahren, wenn Tags von dem Eintritts-Port mit demselben QID bereits mit der Rate weiterlaufen oder beide der folgenden Bedingungen erfüllt sind: 1) Es gibt kein aktuelles Tag, das mit dem gleichen QID mit der Rate weiterläuft, und 2) das aktuelle Set-Aside für den Ausgangs-Port ist leer (Pakete von dem Eintritts-Port und QID werden nicht beiseitegelegt). Anders ausgedrückt, ein Tag läuft mit der Rate weiter, wenn kein anderes Tag mit dem gleichen QID bereits mit der Rate weiterläuft (um Verschachtelung zu vermeiden) und kein Teil des Pakets beiseitegelegt wurde. Ein Tag kann von einer Eingangs-Port-Warteschlange mit der Rate gesendet werden, wenn kein anderes aktuelles Paket von Eingangs-Port-Warteschlangen oder Set-Aside-Puffer an dieselbe Austritts-Warteschlange gesendet wird („Keine Verschachtelung in Warteschlangen-Slice“-Anforderung) und sich keine Pakete in einem Set-Aside-Puffer an denselben Austritts-Port befinden (oder an dieselbe Warteschlange, wenn Set-Aside-Zähler pro Warteschlange beibehalten werden), um Paketen in dem Set-Aside-Puffer eine faire Chance zu geben. Mit-Rate-Pakete unterstützen Cut-Through und können vor Erreichen des Paketendes (EOP) aus der Warteschlange herausgenommen werden.
  • Wenn Tags mit einer Rate übertragen (durchgeschnitten) werden können und andere Tags nicht blockieren, laufen die Tags mit der Rate weiter und der Set-Aside-Puffer wird vermieden. Tags können in Set-Aside-Warteschlangen für einen anderen Austritts-Port vorhanden sein (für nicht blockierend).
  • Der Tag-Sequenzer verschachtelt kein anderes Tag mit einem selben QID wie ein Mit-Rate-Tag von einem anderen Eintritts-Port mit dem gleichen QID und legt das Tag in einen Set-Aside-Puffer. Wenn irgendein Tag für einen Eintritts-Port und ein QID beiseitegelegt ist, werden die Tags weiterhin beiseitegelegt. Nachdem Tags von einem Eingangs-Port und eines QID das Beginnen mit der Rate (EOP) beendet haben, kann es einem ältesten Tag mit demselben QID in dem Set-Aside-Puffer erlaubt werden, aus dem rechten MUX auszutreten.
  • Pakete, die nicht mit der Rate von den Eintritts-Warteschlangen gesendet werden, werden in Set-Aside-Warteschlangen in dem Set-Aside-Puffer 550 verschoben. Wenn ein Paket ankommt, das an eine Austritts-Warteschlange geroutet wurde, in der sich bereits ein aktuell streamendes Mit-Rate-Paket befindet (d. h. unterminiert ist), wird das neue Paket in den Set-Aside-Puffer 550 gelegt. Wenn ein vollständiges Paket in einer Eingangs-Port-Warteschlange ankommt, können die Tags des vollständigen Pakets in den Set-Aside-Puffer 550 geschrieben werden.
  • Bei einigen Beispielen kann 1 Tag pro Zyklus in den Set-Aside-Puffer 550 (pro 1,6T) verschoben werden, oder sogar nur 1 Tag bei Zyklen ohne Flow-Through-Übertragung von den Eintritts-Warteschlangen. Volle Pakete (z. B. Paketende (EOP) in der Eintritts-Warteschlange) können in den Set-Aside-Puffer 550 verschoben werden, um den Austritt nicht zu blockieren.
  • Tags in dem Set-Aside-Puffer 550 können gesendet werden, wenn kein Mit-Rate-Paket von den Eintritts-Warteschlangen an dieselbe Austritts-Warteschlange und denselben Austritts-Port (für keine Verschachtelung) gesendet wird. Für den Austritt von verschiedenen Austritts-Ports ist die Verschachtelung einer kleinen Anzahl von Paketen aus dem Set-Aside-Puffer 550 erlaubt, wie beispielsweise jeweils ein Set-Aside-Paket gesendet wird, um die Blockierung von Flow-Through-Paketen zu minimieren.
  • Der Set-Aside-Puffer 550 kann eine Warteschlange sein, die einem Ausgangs-Port zugeordnet ist. Der Set-Aside-Puffer 550 kann als mehrere verknüpfte Listen implementiert werden, die einen gemeinsamen Speicher gemeinschaftlich verwenden, da die Gesamtgröße, wie unten erläutert, begrenzt ist, und es einen Fall gibt, in dem eine einzige Warteschlange den gesamten Speicher nutzen kann. Bei dem in 5A gezeigten Beispiel gibt es 16 Eingangs-Ports, einen Set-Aside-Puffer für Ports 0 bis 7 und einen weiteren Set-Aside-Puffer für Ports 8 bis 15, um eine Gesamtrate von 2 Tags pro Takt zu ermöglichen. Der Set-Aside-Puffer kann den Empfang von 1 oder mehreren Tags pro Takt unterstützen.
  • Der Set-Aside-Puffer 550 kann einen Zeitgeberwert für ein Tag oder ein QID- und Eintritts-Port-Paar speichern, um das Alter eines QID- und Eintritts-Port-Paares zu identifizieren. Ein QID- und Eintritts-Port-Paar mit einem Ältesten kann zum Austritt aus dem Set-Aside-Puffer ausgewählt werden.
  • Der Multiplexer (MUX) 560 bildet einen Stream von Tags, die mit Rate und aus dem Set-Aside-Puffer empfangen werden. Mit-Rate hat höchste Priorität, und Tags aus dem Set-Aside füllen die verfügbaren Schlitze im Ausgangsstrom. Wenn irgendwelche Set-Aside-Pakete verfügbar sind, kann der Set-Aside-Ausgang alle Zeitschlitze auf dem Tag-Verteilungsbus nutzen, die nicht durch Mit-Rate-Tags belegt sind. Set-Aside-Tags werden so schnell gesendet, wie es die verfügbaren Schlitze und die Set-Aside-Umsetzung zulassen. Die Verschachtelung mehrerer „Set-Aside“-Warteschlangen kann erlaubt werden, um die volle Rate zu erreichen, und dies hat keine Auswirkungen auf die Performance, solange jede einzelne „Set-Aside“-Warteschlange mit der maximalen Rate eines einzelnen Ports betrieben werden kann. Pakete, die aus der Set-Aside-Warteschlange gesendet werden, können für den Austrittsseite-Speichern-und-Weiterleiten-(SAF-; store-and-forward) Betrieb markiert werden, da die Senderate der Set-Aside-Tags nicht garantiert werden kann.
  • Die Gesamtgröße aller Set-Aside-Warteschlangen hängt von dem Verhältnis zwischen der minimalen Tag-Rate bei der minimalen unterstützten Port-Geschwindigkeit und der maximalen Tag-Rate für den maximalen Durchsatz auf allen anderen Lanes zusammengenommen ab. Nehmen wir zum Beispiel an, dass 25 Gbit/s die minimale Portgeschwindigkeit ist und alle anderen 15 Lanes mit 100 Gbit/s laufen können. Dann müssen die Puffer groß genug sein, um Maximale-Rate-Pakete aufzunehmen, die an den 15 x 100- Gbit/s-Ports ankommen, die alle für denselben Austritts-Port bestimmt sind und durch ein 10-KB-Paket blockiert werden, das mit 25 Gbit/s an denselben Austritts-Port „cut-through“ gesendet wird. Ein Jumbo-Paket, das mit 25 Gbit/s durchläuft, braucht -3,2 us auf der Leitung. Bei der maximalen Eintrittsrate von ~150Mpps pro 100 Gbit/s-Port können die verbleibenden Ports in dem 1,6Tbit/s-Eintritt während dieser Zeit -7500 Tags erzeugen, sodass eine Gesamttiefe von etwa 8K Tags in dem Set-Aside pro 1,6 Tbit/s erforderlich ist.
  • 5B zeigt einen Tag-Sequenzer, der bei diesem Beispiel 2 Tags/Takt handhabt. Andere Anzahlen von Tags / Taktzyklus sind möglich, indem der Set-Aside-Puffer auf kleinere Gruppen von Ports aufgeteilt wird. Durch den Betrieb auf einem 2,4-GHz-Taktes werden Tags mit einer Rate von 2,4 GHz erzeugt (was z. B. 1,6 Tbit/s an Ethernet-Ports entspricht). So können z. B. die Eingangs-Port-Warteschlangen der Ports 0-7 und 8-15 ein Tag pro Taktzyklus empfangen. Der Ausgangs-Multiplexer 580 bildet einen Ausgangsstrom unter Verwendung von Tags, die mit Rate oder aus einem Set-Aside-Puffer gesendet werden.
  • 5C zeigt ein Beispiel für eine Tag-Sequenz, die unter Verwendung von Tags mit der Rate und Tags aus dem Set-Aside-Puffer gebildet wird. Bei diesem Beispiel sind die Tags mit den QIDs 13 und 7 von den jeweiligen Eintritts-Ports 0 und 1 der Start des Pakets (SOP) und der Fortschritt mit der Rate, da es keine anderen Tags mit demselben QID gibt. Tags mit den QIDs 13 und 7 von den jeweiligen Eintritts-Ports 0 und 1 laufen mit der Rate weiter und werden in dem Ausgangsstream vorrangig behandelt. Wenn ein Tag mit einem QID von 7, der ebenfalls ein SOP ist, aber von Eintritts-Port 2 kommt, empfangen wird (nach einem Tag mit einem QID von 7 von Eintritts-Port 1), wird der Tag in den Set-Aside-Puffer gelegt, weil es einen anderen Tag mit einem QID von 7 (von Eintritts-Port 1) gibt, der mit einer Rate ausgegeben wird und nach dem SOP ist. Wenn ein Tag auch mit einem QID von 7, der ebenfalls ein SOP ist, aber von Eintritts-Port 3 kommt, empfangen wird, wird der Tag in den Set-Aside-Puffer gelegt, weil es einen anderen Tag mit einer QID von 7 gibt, der mit einer Rate ausgegeben wird und nach dem SOP ist. Um eine Verschachtelung zu verhindern, werden Tags mit einem QID von 7 von Eintritts-Port 1 ausgegeben, bis vollständig (Ende des Pakets (EOP) ist erreicht), bevor irgendein anderes Tag mit demselben QID von einem anderen Eintritts-Port ausgegeben werden kann. Wenn in dem Ausgangsstream Platz ist und Tags mit QID von 7 abgeschlossen sind (Ende des Pakets (EOP)), werden Tags mit QID von 7 vom Eintritts-Port 2 von SOP bis EOP in den Ausgangsstream zugelassen. Tags mit QID von 7 vom Eintritts-Port 2 ist es erlaubt, als nächstes weiterzulaufen, da sie die ältesten Tags in dem Set-Aside-Puffer sind.
  • Um eine Verschachtelung zu verhindern, warten Tags mit QID von 7 von Eintritts-Port 3, bis alle Tags mit QID von 7 von Eintritts-Port 2 aus dem Stream ausgegeben sind. Tags mit der QID von 7 von Eintritts-Port 2 haben zuerst mit der Ausgabe begonnen (weil ihr SOP zuerst empfangen wurde) und sind daher fertig (Ausgabe EOP), bevor die Tags mit QID von 7 von Eintritts-Port 3 ausgegeben werden können (von SOP zu EOP), um ein Verschachteln von Tags mit QID 7 von Eintritts-Port 1 oder 2 zu vermeiden. Es wird darauf hingewiesen, dass Tags mit QID von 13 mit Tags einer anderen QID, QID 7, verschachtelt werden können.
  • 6A zeigt ein Beispiel für einen Tag-Zusammensteller. Der Tag-Zusammensteller kann verwendet werden, um Tags zu Wörtern (oder anderen Größen) zu akkumulieren und in den gemeinschaftlich verwendeten Speicher zu schreiben. Wenn ein Tag 6 Byte lang ist, kann der Tag-Zusammensteller bei einigen Beispielen zehn 6-Byte-Tags in ein 64-Byte-Wort packen. Der Tag-Zusammensteller kann als die Endpufferstruktur für eine Eintritts-Port-Gruppe fungieren und eine Kopie des Endes jedes Warteschlangen-Slice halten. Bei diesem Beispiel empfängt der Tag-Zusammensteller 1 Tag pro Taktzyklus von dem Tag-Sequenzer. Diese Tags können für dieselbe oder verschiedene Austritts-Warteschlangen sein. Bei diesem Beispiel werden diese Tags in einen 10-Bank-Puffer geschrieben. Wenn eine Warteschlange 10 Tags hat, wird ein komplettes 64B-Wort in den gemeinschaftlich verwendeten Speicher geschrieben.
  • 6B zeigt ein Beispiel für einen Tag-Zusammensteller, der 2 Tags pro Taktzyklus von dem Tag-Sequenzer empfängt (eine andere Anzahl von Tags / Taktzyklus ist möglich).
  • Ein Warteschlangen-Cache wird von einer Austritts-Port-Gruppe verwendet und umfasst eine oder mehrere Warteschlangen-Cache-Slices.
  • 7A zeigt ein Beispiel für ein Warteschlangen-Cache-Slice 702 zur Verwendung durch eine Austritts-Port-Gruppe. Ein Cache-Slice ist einer Austritts-Port-Gruppe zugeordnet. Ein Cache-Slice empfängt Tags von einer einzelnen Eintritts-Port-Gruppe über eine Tag-Verteilungs-Lane 204.
  • Der Endpuffer 704 empfängt Tags. Wenn der Endpuffer 704 der Kopf der Warteschlange ist, können einzelne Tags direkt an einen Zeitplaner gehen. Bei einigen Beispielen wird, wenn ein 64B-Wort voll ist, das Wort in den Kopfpuffer 720 kopiert, wenn es das nächste Wort ist und Platz im Kopfpuffer 720 verfügbar ist. Bei einigen Beispielen, in denen Tags auf der Austrittsseite zusammengestellt werden, bevor sie in den gemeinschaftlich verwendeten Speicher geschrieben werden, empfängt der Endpuffer 704 auch die Tags, die gerade zusammengestellt werden. So können beispielsweise 10 Tags gesammelt (zusammengestellt) werden, bevor sie in den gemeinschaftlich verwendeten Speicher geschrieben werden. Der Endpuffer 704 kann 9 der Tags speichern, wenn ein QID vorliegt, und wenn der 10. Tag des QID empfangen wird, wird der 10. Tag mit den 9 Tags zur Übertragung an den Kopfpuffer 720 verknüpft (wenn im Kopfpuffer 720 Platz vorhanden ist), ohne den 10. Tag in dem Endpuffer zu speichern. Wenn der Kopfpuffer 720 voll ist, können die 10 Tags aus dem Endpuffer 704 verworfen werden, da sie ebenfalls im gemeinschaftlich verwendeten Speicher gespeichert sind. Getrennte End- und Kopf-Puffer, um gleichzeitige Schreibvorgänge und Lesevorgänge zu ermöglichen.
  • Wenn Tag-Blöcke zusammengestellt und in 64B-Worte geschrieben werden (d. h. jeweils 10 Tags), werden höchstens 9 Tags zu irgendeinem bestimmten Zeitpunkt nicht in den gemeinschaftlich verwendeten Speicher geschrieben. Der Endpuffer 704 kann die 9 Tags von einer Eintritts-Port-Gruppe empfangen. Eine Eintritts-Port-Gruppe kann beispielsweise 9 Tags an jedes Warteschlangen-Slice senden, wobei die 9 Tags aufgrund der Zusammenstellung möglicherweise nicht in den gemeinschaftlich verwendeten Speicher geschrieben wurden (und möglicherweise auch nie geschrieben werden). Es ist nicht erlaubt, diese Tags zu verwerfen, bevor nicht zumindest der 10. Tag empfangen wurde, da der Austritt nicht aus dem gemeinschaftlich verwendeten Speicher lesen kann, bis der 10. Tag empfangen wird.
  • Der Kopfpuffer 720 umfasst die ältesten (beginnenden) Tags des zu Übertragenden. Bei einigen Beispielen empfängt der Kopfpuffer 720 Blöcke von 10 Tags aus dem Endpuffer oder liest Blöcke von 10 Tags aus dem gemeinschaftlich verwendeten Speicher. Der Kopfpuffer 720 ist so bemessen, dass er die schlimmstmögliche gemeinschaftlich verwendete Speicherlatenz abdeckt. Der Kopfpuffer 720 ist für die Freigabe von Tag-Blöcken aus den tiefen Warteschlangen im gemeinschaftlich verwendeten Speicher zuständig. Der Kopfpuffer 720 verwendet zumindest (Speicherlatenzzeit)*(Portdatenrate) Bits, sodass die Übertragung ohne Zwischenräume weiterlaufen kann, wenn eine Warteschlange ausgewählt wird und die Warteschlange nicht in den Kopfpuffer 720 passt. Es wird zum Beispiel angenommen, dass die Speicherlatenzzeit 100ns ist. Es kann eine Warteschlange ausgewählt werden, die mehr als 100ns an Daten umfasst. Bei dieser Auswahl wird ein Speicherlesevorgang gestartet, aber der gemeinschaftlich verwendete Speicher gibt 100ns lang keine Daten zurück. Während dieser 100ns werden die den Daten zugeordneten Tags aus dem Kopfpuffer entnommen.
  • Wenn Tags in Worten gelesen werden, kann der Kopfpuffer 720 zusätzlich ein weiteres Wort umfassen, um zu vermeiden, dass ein Wort aus dem Speicher angefordert wird, das nicht vollständig gespeichert werden kann. Es ist möglicherweise erforderlich, dass der Kopfpuffer 720 auch größer ist, wenn die Blöcke in größeren Einheiten als dem Wort verknüpft sind.
  • Die Steuerung 730 erzeugt eine nächste Abrufanforderung, wenn ein Tag im gemeinschaftlich verwendeten Speicher, aber nicht im Kopf- oder Endpuffer verfügbar ist und im Kopfpuffer Platz vorhanden ist.
  • 7B zeigt ein Beispiel für ein Warteschlangen-Cache-Slice für 2 Tags pro Empfangsgruppe.
  • 8A zeigt ein Beispiel für einen Zeitplaner zur Verwendung durch eine Austritts-Port-Gruppe. Der Zeitplaner 802 empfängt Warteschlangen-Belegungs-Informationen aus den Warteschlangen-Caches und wählt aus, aus welchen Warteschlangen-Slices Tags aus der Warteschlange herausgenommen werden sollen. Die Slices können in der Reihenfolge, in der die Pakete ankommen, neu kombiniert werden, indem ein Zeitstempel-Mechanismus verwendet wird, der in TIMESTAMP-BASED FAIRNESS EGRESS FROM INGRESS QUEUES, Anmeldung mit der Seriennummer 16/547,482, eingereicht am 21. August 2019 (AB9342-US), beschrieben ist. Alternativ zur Darstellung der Verfügbarkeit als Bit pro Warteschlangen-Slice könnte dies von dem Warteschlangen-Cache als Zählerdeltas (N, wenn N Tags in der Warteschlange stehen) kommuniziert werden. Pro Taktzyklus wird ein Tag übertragen. Tags können für den Austritt zugewiesen werden, indem ein Tag mit dem ältesten Zeitstempel ausgewählt wird. Bei einigen Beispielen kann der Zeitplaner 802 aus allen Cache-Slices lesen, die den Austritts-Ports zugeordnet sind.
  • 8B zeigt ein Beispiel, bei dem 2 Tags pro Taktzyklus übertragen werden.
  • Nachdem ein Zeitplaner ein Tag für den Austritt ausgewählt hat, können die zugeordneten Paketdaten aus dem gemeinschaftlich verwendeten Speicher abgerufen oder kopiert werden. Die abgerufenen oder kopierten Paketdaten können akkumuliert oder von einem zugeordneten Austritts-Port ausgegeben werden.
  • Die Verarbeitung der Pakete kann vor dem Austritt erfolgen. Eine Austritts-Port-Gruppe kann eine Zugriffssteuerliste (ACL; access control list) anwenden, um zu bestimmen, welche Pakete verworfen und nicht ausgegeben werden sollen.
  • Bei Austritt können Pakete in einem Ethernet-Frame oder Kommunikationen, die mit RDMA, InfiniBand, Internet Wide Area RDMA Protocol (iWARP), schnellen UDP-Internetverbindungen (QUIC) oder RDMA over Converged Ethernet (RoCE) kompatibel sind, bereitgestellt werden. Daten und Protokolle können unter Verwendung eines Protokolls wie beispielsweise NVMe over Fabrics (NVMe-oF) auf virtualisierten Speicherungsknoten gespeichert werden. Ein Netzwerk, eine Struktur, eine Verbindung, ein Bus oder ein Medium, der/die/das ausgebildet ist, ein Paket zu empfangen, kann kompatibel sein zumindest mit Ethernet, PCIe, Intel QuickPath Interconnect (QPI), Intel Ultra Path Interconnect (UPI), Intel On-Chip System Fabric (IOSF), Omnipath, Compute Express Link (CXL), HyperTransport, high-speed fabric, NVLink, Advanced Microcontroller Bus Architecture (AMBA) Interconnect, OpenCAPI, Gen-Z, CCIX, 3GPP Long Term Evolution (LTE; Langzeitentwicklung) (4G), 3GPP 5G und Variationen derselben.
  • 9A stellt einen Prozess dar. Der Prozess kann durch einen Schalter oder eine Netzwerkschnittstelle ausgeführt werden. Bei 902 wird ein Paket empfangen. Bei 904 wird für das empfangene Paket ein Tag erzeugt. Ein Tag kann ein QID, einen Austritts-Port, einen TC (oder Flussidentifizierer) und einen Identifizierer des Speicherplatzes umfassen, an dem ein Anschnitt eines Pakets gespeichert ist. Bei 906 können Tags an den gemeinschaftlich verwendeten Speicher und eine entsprechende Austritts-Port-Gruppe bereitgestellt werden. Zum Beispiel kann 906 einen oder mehrere von 908 und 910 umfassen.
  • Bei 908 werden Tags vor der Übertragung in den gemeinschaftlich verwendeten Speicher zusammengestellt. Das Zusammenstellen von Tags kann das Zusammenpacken von Tags vor der Übertragung in den gemeinschaftlich verwendeten Speicher umfassen, um eine Anzahl der Schreibvorgänge zu reduzieren. Wenn ein Tag 6 Byte und ein Wort 64 Byte groß ist, werden 10 Tags zusammengefasst, bevor sie als Teil eines 64B-Worts in den gemeinschaftlich verwendeten Speicher geschrieben werden. Durch das Zusammenstellen von Tags kann eine Reihe von Schreibvorgängen in den Speicher reduziert werden.
  • Bei 910 werden die Tags an eine Cache-Warteschlange übertragen, die einer Austritts-Port-Gruppe zugeordnet ist. Ein Tag-Zustellpfad kann verwendet werden, um einen Geringere-Latenzzeit-Pfad für die Übertragung eines Tags als den des Speichers zu erreichen. Der Tag-Zustellpfad kann unabhängige Bus-Lanes für irgendeine Eintritts-Port-Gruppe verwenden und eine einem Austritts-Port zugeordnete Warteschlange zum Empfangen von Tags zu verwenden. Bei einigen Beispielen kann die Übertragung von Tags in die Warteschlange ein Sequenzierungsschema verwenden. Ein Sequenzierungsschema kann verwendet werden, um ein Verschachteln von Tags, die für dieselbe virtuelle Ausgangswarteschlange bestimmt sind, zu verhindern. Ein Tag kann von Paketanfang (SOP) bis Paketende (EOP) an die Warteschlange gesendet werden, ohne dass es zu einer Verschachtelung mit irgendeinem anderen Tag kommt, das derselben QID zugeordnet ist. Allerdings können Tags aus anderen QIDs in den verfügbaren Schlitzen verschachtelt werden. Nach der Übertragung des dem EOP zugeordneten Tags kann ein nächster empfangener Tag, der einem SOP mit demselben QID, aber einem anderen Eintritts-Port zugeordnet ist, an das Warteschlangen-Slice gesendet werden.
  • Bei 912 wird für eine Austritts-Port-Gruppe ein Tag für den Austritt aus einem Warteschlangen-Cache für den Austritt eines zugehörigen Paketsegments ausgewählt. Der Tag kann basierend auf einem Zeitstempel, der dem Tag zugeordnet ist, als der älteste Tag ausgewählt werden. Wenn das Tag von einem Kopf- oder Endpuffer des Warteschlangen-Cache-Slice verfügbar ist, wird das Tag zur Identifizierung eines Paketsegments eines im gemeinschaftlich verwendeten Speicher gespeicherten Pakets verwendet. Ist das Tag nicht in dem Warteschlangen-Cache-Slice verfügbar, kann auf das Tag aus dem gemeinschaftlich verwendeten Speicher zugegriffen und das zugeordnete Paketsegment aus dem gemeinsamen Speicher abgerufen werden.
  • Bei 914 kann ein Tag für ein Paket geplant werden, das von einem Austritts-Port ausgegeben werden kann. Die dem geplanten Tag zugeordneten Paketdaten können aus dem gemeinschaftlich verwendeten Speicher abgerufen werden.
  • 9B zeigt einen Prozess zum Tag-Entschachteln. Der Prozess kann durch einen Schalter oder eine Netzwerkschnittstelle ausgeführt werden. Bei 950 wird ein Tag als zur Übertragung an ein Warteschlange-Cache-Slice, das einer Austritts-Port-Gruppe zugeordnet ist, verfügbar identifiziert. Der Tag hat einen zugeordneten QID. Das Tag kann einer Eingangs-Port-Warteschlange für einen Eingangs-Port einer Eingangs-Port-Gruppe zugeordnet werden. Bei 952 wird festgestellt, ob ein Tag mit dem gleichen QID von einem anderen Eingangs-Port im Transit ist. Befindet sich ein Tag mit demselben QID von einem anderen Eingangs-Port im Transit, wird der Prozess mit 954 fortgesetzt. Wenn kein Tag mit demselben QID von einem anderen Eingangs-Port im Transit ist oder kein Tag im Transit ist, wird der Prozess mit 956 fortgesetzt.
  • Bei 954 wird das verfügbare Tag in dem Set-Aside-Puffer gespeichert, und der Vorgang wird mit 958 fortgesetzt. Bei 956 wird dem für die Übertragung verfügbaren Tag erlaubt, mit der Rate zu dem Warteschlangen-Cache-Slice weiterzulaufen, und der Prozess geht weiter zu 958.
  • Bei 958 wird festgestellt, ob es in dem Ausgangsstream Platz für ein Tag gibt. So kann beispielsweise nach einem Paketende für ein QID Platz geschaffen werden, um ein Tag zu übertragen, das demselben QID zugeordnet ist, aber von einem anderen Eintritts-Port kommt. So kann beispielsweise Platz für einen anderen QID zur Verfügung gestellt werden. Wenn in dem Ausgangsstream Platz für ein Tag ist, wird der Vorgang mit 960 fortgesetzt. Wenn in dem Ausgangsstream kein Platz für ein Tag ist, wird 958 wiederholt.
  • Bei 960 wird die Ausgabe eines Tags in den Warteschlangen-Cache zugelassen. So darf z. B. das Tag, das mit einem Paketanfang verbunden ist und sich in dem Set-Aside-Puffer befindet, an den Warteschlangen-Cache-Slice gesendet werden. Ein Tag-Verteilungsbus kann zur Übertragung des Tags verwendet werden.
  • 10 stellt eine Netzwerkschnittstelle dar, die Ausführungsbeispiele verwenden oder von Ausführungsbeispielen verwendet werden kann. Beispielsweise können Pakete von der Netzwerkschnittstelle unter Verwendung der hier beschriebenen Ausführungsformen übertragen werden, um Tags und Pakete bereitzustellen. Eine Netzwerkschnittstelle 1000 kann einen Sendeempfänger 1002, Prozessoren 1004, eine Sendewarteschlange 1006, eine Empfangswarteschlange 1008, einen Speicher 1010 und eine Bus-Schnittstelle 1012 und eine DMA-Engine 1026 umfassen. Der Sendeempfänger 1002 kann fähig sein, Pakete in Übereinstimmung mit den anwendbaren Protokollen, wie beispielsweise Ethernet, wie in IEEE 802.3 beschrieben, zu empfangen und zu senden, obwohl andere Protokolle verwendet werden können. Der Sendeempfänger 1002 kann Pakete von und zu einem Netzwerk via ein Netzwerkmedium (nicht abgebildet) empfangen und senden. Der Sendeempfänger 1002 kann eine Physical-Layer- (PHY-) Schaltungsanordnung 1014 und eine Media-Access-Control- (MAC-) Schaltungsanordnung 1016 umfassen. Eine PHY-Schaltungsanordnung 1014 kann Codierungs- und Decodierungs-Schaltungsanordnungen (nicht gezeigt) zum Codieren und Decodieren von Datenpaketen gemäß anwendbaren Physical-Layer-Spezifikationen oder -Standards umfassen. Die MAC-Schaltungsanordnung 1016 kann ausgebildet sein, um die zu übertragenden Daten zu Paketen anzuordnen, die Ziel- und Quelladressen zusammen mit Netzwerksteuerungsinformationen und Fehlerdetektions-Hash-Werten umfassen. Die MAC-Schaltungsanordnung 1016 kann ausgebildet sein, um MAC-Anfangsblöcke von empfangenen Pakten durch Verifizieren der Datenintegrität, Entfernen von Präambeln und Auffüllungen und Bereitstellen von Paketinhalte zur Verarbeitung durch höhere Schichten zu verarbeiten.
  • Prozessoren 1004 können irgendeine Kombination sein aus: Prozessor, Kern, Grafikverarbeitungseinheit (GPU), feld-programmierbarem Gate-Array (FPGA), anwendungsspezifischer integrierter Schaltung (ASIC) oder einer anderen programmierbaren Hardware-Vorrichtung, die die Programmierung der Netzwerkschnittstelle 1000 erlauben. Prozessoren 1004 können zum Beispiel eine Zuweisung oder ein Aufheben der Zuweisung von Zwischenwarteschlangen bereitstellen. Beispielsweise kann eine „Smarte Netzwerkschnittstelle“ unter Verwendung von Prozessoren 1004 Paketverarbeitungsfähigkeiten in der Netzwerkschnittstelle bereitstellen.
  • Ein Paketzuweiser 1024 kann eine Verteilung empfangener Pakete für eine Verarbeitung durch mehrere CPUs oder Kerne unter Verwendung einer hierin beschriebenen Zeitschlitz-Zuweisung oder RSS bereitstellen. Wenn der Paketzuweiser 1024 RSS verwendet, kann der Paketzuweiser 1024 basierend auf den Inhalten eines empfangenen Pakets einen Hash berechnen oder eine andere Bestimmung vornehmen, um zu bestimmen, welche CPU oder welcher Kern ein Paket verarbeiten soll.
  • Eine Interrupt-Zusammenführung 1022 kann eine Interrupt-Moderation ausführen, wobei eine Netzwerkschnittstellen-Interrupt-Zusammenführung 1022 auf das Eintreffen mehrerer Pakete oder den Ablauf eines Time-Outs wartet, bevor sie einen Interrupt an das Host-System zur Verarbeitung (eines) empfangener(n) Pakete(s) erzeugt. Empfangssegment-Zusammenführung (RSC; Receive Segment Coalescing) kann durch eine Netzwerkschnittstelle 1000 ausgeführt werden, wobei Abschnitte eingehender Pakete zu Segmenten eines Pakets kombiniert werden. Die Netzwerkschnittstelle 1000 stellt dieses zusammengeführte Paket an eine Anwendung bereit.
  • Die Direktspeicherzugriffs- (DMA-) Maschine 1026 kann einen Paketanfangsblock, eine Paketnutzlast und/oder einen Deskriptor direkt von dem Host-Speicher an die Netzwerkschnittstelle oder umgekehrt kopieren, anstatt das Paket an einen Zwischenpuffer bei dem Host zu kopieren und dann eine weitere Kopieroperation von dem Zwischenpuffer zu dem Zielpuffer zu verwenden.
  • Der Speicher 1010 kann irgendeine Art von flüchtiger oder nichtflüchtiger Speichervorrichtung sein und kann irgendeine Warteschlange oder Anweisungen speichern, die zur Programmierung der Netzwerkschnittstelle 1000 verwendet werden. Die Sende-Warteschlange 1006 kann Daten oder Referenzen auf Daten zur Übertragung durch die Netzwerkschnittstelle umfassen. Die Empfangs-Warteschlange 1008 kann Daten oder Referenzen auf Daten umfassen, die durch eine Netzwerkschnittstelle von einem Netzwerk empfangen wurden. Deskriptor-Warteschlangen 1020 können Deskriptoren umfassen, die auf Daten oder Pakete in der Sende-Warteschlange 1006 oder Empfangs-Warteschlange 1008 Bezug nehmen. Die Bus-Schnittstelle 1012 kann eine Schnittstelle mit der Host-Vorrichtung (nicht dargestellt) bereitstellen. Zum Beispiel kann die Busschnittstelle 1012 mit einer peripheral connectPeripheral Component Interconnect- (PCI-), PCI-Express-, PCIx-, Serial ATA- (SATA) und/oder Universal Serial Bus- (USB; universeller serieller Bus) kompatiblen Schnittstelle kompatibel sein (obwohl andere Verbindungsstandards verwendet werden können).
  • Der Speicher 1010 kann einen gemeinschaftlich verwendeten Speicher umfassen, der zum Aggregieren von Paketsegmenten und Tags verwendet wird.
  • Das Tag-System 1050 kann die hierin beschriebenen Ausführungsbeispiele anwenden, um das Handhaben eintretender oder austretender Pakete zu managen.
  • 11 stellt ein System dar. Das System kann hierin beschriebene Ausführungsbeispiele verwenden, um Daten an das und von dem System an eine andere Vorrichtung über ein Gitter (mesh) oder eine Struktur (fabric) bereitzustellen. Ein System 1100 umfasst einen Prozessor 1110, der eine Verarbeitung, ein Operationsmanagement und eine Ausführung von Anweisungen für das System 1100 bereitstellt. Der Prozessor 1110 kann irgendeine Art von Mikroprozessor, zentraler Verarbeitungseinheit (CPU), Grafikverarbeitungseinheit (GPU), Verarbeitungskern oder andere Verarbeitungshardware umfassen, um die Verarbeitung für das System 1100 oder eine Kombination von Prozessoren bereitzustellen. Der Prozessor 1110 steuert den Gesamtbetrieb des Systems 1100 und kann ein oder mehrere programmierbare Allzweck- oder Spezialzweck-Mikroprozessoren, digitale Signalprozessoren (DSPs; digital signal processors), programmierbare Steuerungen, anwendungsspezifische integrierte Schaltungen (ASICs; application specific integrated circuits), programmierbare Logikbauelemente (PLDs; programmable logic devices) oder Ähnliches oder eine Kombination solcher Bauelemente sein oder umfassen.
  • Bei einem Beispiel umfasst das System 1100 eine Schnittstelle 1112, die mit dem Prozessor 1110 gekoppelt ist, was eine Höhere-Geschwindigkeit-Schnittstelle oder eine Hoher-Durchsatz-Schnittstelle für Systemkomponenten darstellen kann, die Höhere-Bandbreite-Verbindungen benötigt, wie beispielsweise ein Speicherteilsystem 1120 oder Grafikschnittstellen-Komponenten 1140 oder Beschleuniger 1142. Die Schnittstelle 1112 stellt eine Schnittstellenschaltung dar, die eine eigenständige Komponente oder auf einem Prozessor-Die integriert sein kann. Falls vorhanden, bildet die Grafikschnittstelle 440 eine Schnittstelle mit Grafikkomponenten, um an einen Benutzer des Systems 1100 eine visuelle Anzeige bereitzustellen. Bei einem Beispiel kann die Grafikschnittstelle 1140 eine hochauflösende (HD; high definition) Anzeige treiben, die an einen Benutzer eine Ausgabe bereitstellt. Hochauflösend kann sich auf eine Anzeige beziehen, die eine Pixeldichte von ungefähr 100 PPI (pixels per inch; Pixel pro Zoll) oder größer aufweist, und kann Formate wie beispielsweise Full HD (z. B. 1080p), Retina-Displays, 4K (ultrahochauflösend oder UHD (ultra-high definition)) oder andere umfassen. Bei einem Beispiel kann die Anzeige eine Touchscreen-Anzeige umfassen. Bei einem Beispiel erzeugt die Graphikschnittstelle 1140 eine Anzeige, basierend auf Daten, die in einem Speicher 1130 gespeichert sind, oder basierend auf Operationen, die durch den Prozessor 1110 ausgeführt werden, oder beidem. Bei einem Beispiel erzeugt die Grafikschnittstelle 1140 eine Anzeige basierend auf Daten, die in dem Speicher 1130 gespeichert sind, oder basierend auf Operationen, die durch den Prozessor 1110 ausgeführt werden, oder beidem.
  • Die Beschleuniger 1142 können eine Feste-Funktion-Offload-Engine sein, auf die ein Prozessor 1110 zugreifen kann oder die von diesem verwendet werden kann. Beispielsweise kann ein Beschleuniger unter den Beschleunigern 1142 aufeinanderfolgende und spekulative Decodieroperationen auf eine hierin beschriebene Weise, Kompressionsfähigkeit (DC), Kryptographiedienste wie beispielsweise Public-Key-Verschlüsselung (PKE; public key encryption), Chiffrieren, Hash-/Authentifizierung-Fähigkeiten, Entschlüsselung oder andere Fähigkeiten oder Dienste bereitstellen. Bei einigen Ausführungsbeispielen stellt ein Beschleuniger unter den Beschleunigern 1142 zusätzlich oder alternativ die hierin beschriebenen Feldauswahlsteuerungsfähigkeiten bereit. In einigen Fällen können die Beschleuniger 1142 in eine CPU-Buchse (z.B. ein Verbinder zu einer Hauptplatine oder Schaltungsplatine, die eine CPU umfasst und eine elektrische Schnittstelle mit der CPU bereitstellt) integriert sein. Beispielsweise können die Beschleuniger 1142 einen Einzel- oder Multi-Kern-Prozessor, eine Grafikverarbeitungseinheit, eine logische Ausführungseinheit, Einzel- oder Multi-Level-Cache, funktionale Einheiten, verwendbar zur unabhängigen Ausführung von Programmen oder Threads, anwendungsspezifische integrierte Schaltungen (ASICs), Neuronales-Netzwerk-Prozessoren (NNPs; neural network processors), programmierbare Steuerlogik und programmierbare Verarbeitungselemente wie beispielsweise feldprogrammierbare Gate-Arrays (FPGAs) umfassen.
  • Die Beschleuniger 1142 können mehrere neuronale Netzwerke, CPUs, Prozessorkerne, Allzweck-Grafikverarbeitungseinheiten bereitstellen oder Grafikverarbeitungseinheiten können für eine Verwendung durch Künstliche-Intelligenz- (KI-; artificial intelligence (AI)) oder Maschinelles-Lernen- (ML; machine learning) Modelle zur Verfügung gestellt werden. Beispielsweise kann das KI-Modell irgendeines oder eine Kombination verwenden oder umfassen von: einem Bestärkendes-Lernen-Schema, einem Q-Lernen-Schema, einem Deep-Q-Lernen oder einem Asynchronous Advantage Actor-Critic (A3C), einem kombinatorischen neuronalen Netzwerk, einem rekurrenten neuronalen Netzwerk oder einem anderen KI- oder ML-Modell. Mehrere neuronale Netzwerke, Prozessorkerne oder Grafikverarbeitungseinheiten können für die Verwendung durch AI- oder ML-Modelle zur Verfügung gestellt werden.
  • Ein Speicherteilsystem 1120 stellt den Hauptspeicher des Systems 1100 dar und stellt Speicherung für einen Code, der durch den Prozessor 1110 ausgeführt werden soll, oder für Datenwerte, die bei der Ausführung einer Routine verwendet werden sollen, bereit. Das Speicherteilsystem 1120 kann eine oder mehrere Speichervorrichtungen 1130 umfassen, wie beispielsweise Nur-Lese-Speicher (ROM; read-only memory), Flash-Speicher, eine oder mehrere Varianten von Direktzugriffsspeicher (RAM; random access memory), wie beispielsweise DRAM, oder andere Speichervorrichtungen, oder eine Kombination solcher Vorrichtungen. Ein Speicher 1130 speichert und hostet unter anderem ein Betriebssystem (OS; operating system) 1132, um eine Softwareplattform für eine Ausführung von Anweisungen in dem System 1100 bereitzustellen. Zusätzlich können Anwendungen 1134 auf der Software-Plattform des OS 1132 von dem Speicher 1130 ausgeführt werden. Die Anwendungen 1134 repräsentieren Programme, die ihre eigene operative Logik zur Ausführung einer oder mehrerer Funktionen aufweisen. Prozesse 1136 repräsentieren Mittel oder Routinen, die an das OS 1132 oder eine oder mehrere Anwendungen 1134 Hilfsfunktionen bereitstellen, oder eine Kombination. Das OS 1132, die Anwendungen 1134 und die Prozesse 1136 stellen Software-Logik bereit, um Funktionen für das System 1100 bereitzustellen. Bei einem Beispiel umfasst das Speicherteilsystem 1120 eine Speichersteuerung 1122, die eine Speichersteuerung zum Erzeugen und Ausgeben von Befehlen an den Speicher 1130 ist. Es versteht sich, dass die Speichersteuerung 1122 ein physischer Teil des Prozessors 1110 oder ein physischer Teil der Schnittstelle 1112 sein könnte. Zum Beispiel kann die Speichersteuerung 1122 eine integrierte Speichersteuerung sein, die auf einer Schaltung mit dem Prozessor 1110 integriert ist.
  • Auch wenn nicht eigens dargestellt, versteht es sich, dass das System 1100 einen oder mehrere Busse oder Bus-Systeme zwischen Vorrichtungen umfassen kann, wie beispielsweise einen Speicher-Bus, einen Grafik-Bus, Schnittstellen-Busse oder andere. Busse oder andere Signalleitungen können Komponenten kommunikativ oder elektrisch miteinander koppeln, oder die Komponenten sowohl kommunikativ als auch elektrisch koppeln. Busse können physikalische Kommunikationsleitungen, Punkt-zu-Punkt-Verbindungen, Brücken, Adapter, Steuerungen oder eine andere Schaltungsanordnung oder eine Kombination umfassen. Busse können zum Beispiel einen oder mehrere von einem Systembus, einem Peripheral Component Interconnect- (PCI-) Bus, einem Hyper Transport- oder Industry Standard Architecture- (ISA-) Bus, einem Small Computer System Interface- (SCSI-) Bus, einem universellen seriellen Bus (USB; universal serial bus) oder einem Institute of Electrical and Electronics Engineers (IEEE) Standard 1394-Bus (Firewire) umfassen.
  • Bei einem Beispiel umfasst das System 1100 eine Schnittstelle 1114, die mit der Schnittstelle 1112 gekoppelt sein kann. Bei einem Beispiel repräsentiert die Schnittstelle 1114 eine Schnittstellenschaltung, die eigenständige Komponenten und eine integrierte Schaltungsanordnung umfassen kann. Bei einem Beispiel koppeln mehrere Benutzerschnittstellenkomponenten oder Peripheriekomponenten oder beide mit der Schnittstelle 1114. Eine Netzwerkschnittstelle 1150 stellt an das System 1100 die Fähigkeit bereit, über ein oder mehrere Netzwerke mit entfernten Vorrichtungen (z. B. Servern oder anderen Rechenvorrichtungen) zu kommunizieren. Die Netzwerkschnittstelle 1150 kann einen Ethernet-Adapter, drahtlose Verbindungskomponenten, zelluläre Netzwerk-Verbindungskomponenten, USB (Universal Serial Bus) oder andere drahtgebundene oder drahtlos-standard-basierte oder proprietäre Schnittstellen umfassen. Die Netzwerkschnittstelle 1150 kann Daten an eine Vorrichtung senden, die in dem gleichen Rechenzentrum oder Rack ist, oder an eine entfernte Vorrichtung, was ein Senden von in einem Speicher gespeicherten Daten umfassen kann. Die Netzwerkschnittstelle 1150 kann Daten von einer entfernten Vorrichtung empfangen, was eine Speicherung von empfangenen Daten in Speicher umfassen kann. Verschiedene Ausführungsbeispiele können in Verbindung mit der Netzwerkschnittstelle 1150, dem Prozessor 1110 und dem Speicherteilsystem 1120 verwendet werden.
  • Bei einem Beispiel umfasst das System 1100 eine oder mehrere Eingangs-/Ausgangs- (I/O; Input/Output) Schnittstelle(n) 1160. Die I/O-Schnittstelle 1160 kann eine oder mehrere Schnittstellenkomponenten umfassen, über die ein Benutzer mit dem System 1100 interagiert (z. B. Audio-, alphanumerische, tastbare/berührbare oder andere Schnittstellbildung). Eine Peripherieschnittstelle 1170 kann irgendeine Hardwareschnittstelle umfassen, die oben nicht ausdrücklich erwähnt wurde. Peripherievorrichtungen beziehen sich im Allgemeinen auf Vorrichtungen, die abhängig mit dem System 1100 verbinden. Eine abhängige Verbindung ist eine, bei der das System 1100 die Software-Plattform oder Hardware-Plattform oder beide bereitstellt, auf der die Operation ausgeführt wird und mit der ein Benutzer interagiert.
  • Bei einem Beispiel umfasst das System 1100 ein Speichervorrichtungs-Teilsystem 1180, um Daten auf eine nichtflüchtige Weise zu speichern. Bei einem Beispiel können in bestimmten Systemimplementierungen zumindest bestimmte Komponenten einer Speicherung 1180 mit Komponenten des Speicherteilsystems 1120 überlappen. Das Speicherungsteilsystem 1180 umfasst eine oder mehrere Speicherungsvorrichtung(en) 1184, die irgendein herkömmliches Medium zum Speichern großer Datenmengen auf nichtflüchtige Weise sein oder umfassen können, wie beispielsweise eine oder mehrere magnetische, Festkörper- (solid state) oder optischbasierte Platten oder eine Kombination. Die Speicherung 1184 umfasst Code oder Anweisungen und Daten 1146 in einem dauerhaften Zustand (d. h. der Wert bleibt trotz Unterbrechung der Leistung zu dem System 1100 erhalten). Die Speicherung 1184 kann allgemein als ein „Speicher“ betrachtet werden, obwohl der Speicher 1130 üblicherweise der Ausführungs- oder Betriebsspeicher ist, um an den Prozessor 1110 Anweisungen bereitzustellen. Obwohl die Speicherung 1184 nichtflüchtig ist, kann der Speicher 1130 flüchtigen Speicher umfassen (d. h. der Wert oder Zustand der Daten ist unbestimmt, falls die Leistung zu dem System 1100 unterbrochen wird). Bei einem Beispiel umfasst das Speicherungsteilsystem 1180 eine Steuerung 1182, um eine Schnittstelle mit der Speicherung 1184 zu bilden. Bei einem Beispiel ist die Steuerung 1182 ein physischer Teil der Schnittstelle 1114 oder des Prozessors 1110 oder kann Schaltungen oder Logik sowohl in dem Prozessor 1110 als auch in der Schnittstelle 1114 umfassen.
  • Ein flüchtiger Speicher ist ein Speicher, dessen Zustand (und damit die darin gespeicherten Daten) unbestimmt ist, falls Leistung zu der Vorrichtung unterbrochen wird. Ein dynamischer flüchtiger Speicher kann ein Aktualisieren der Daten, die in der Vorrichtung gespeichert sind, um den Zustand aufrechtzuerhalten, umfassen. Ein Beispiel eines dynamischen flüchtigen Speichers umfasst DRAM (Dynamic Random Access Memory; dynamischen Direktzugriffsspeicher) oder eine Variante wie beispielsweise synchronen DRAM (SDRAM; Synchronous DRAM). Ein Speicherteilsystem, wie es hierin beschrieben ist, kann mit einer Reihe von Speichertechnologien kompatibel sein, wie beispielsweise DDR3 (Double Data Rate Version 3, ursprüngliche Herausgabe durch JEDEC (Joint Electronic Device Engineering Council) am 27. Juni 2007). DDR4 (DDR-Version 4, erste Spezifikation veröffentlicht im September 2012 durch JEDEC), DDR4E (DDR-Version 4), LPDDR3 (Low Power DDR-Version3 (Niedrig-Leistungs-DDR-Version3), JESD209-3B, August 2013 durch JEDEC), LPDDR4) LPDDR-Version 4, JESD209-4, ursprünglich veröffentlicht durch JEDEC im August 2014), WIO2 (Wide Input/Output Version 2 (breiter Eingang/Ausgang Version 2), JESD229-2, ursprünglich veröffentlicht durch JEDEC im August 2014, HBM (High Bandwidth Memory (Hohe-Bandbreite-Speicher), JESD325, ursprünglich veröffentlicht durch JEDEC im Oktober 2013, LPDDR5 (derzeit in Diskussion durch JEDEC), HBM2 (HBM-Version 2), derzeit in Diskussion durch JEDEC, oder anderen oder Kombinationen von Speichertechnologien, und Technologien, die auf Herleitungen oder Erweiterungen solcher Spezifikationen basieren.
  • Ein nichtflüchtiges Speicher- (NVM; non-volatile memory) Gerät ist ein Speicher, dessen Zustand bestimmt wird, auch falls Leistung zu dem Gerät unterbrochen wird. Bei einem Ausführungsbeispiel kann das NVM-Gerät ein blockadressierbares Speichergerät, wie beispielsweise NAND-Technologien, oder genauer, einen Multi-Schwellenpegel-NAND-Flash-Speicher (zum Beispiel Single-Level Cell („SLC“), Multi-Level Cell („MLC“), Quad-Level Cell („QLC“), Tri-Level Cell („TLC“) oder ein anderes NAND) umfassen. Ein NVM-Gerät kann auch ein byteadressierbares dreidimensionales Write-in-Place Cross Point (Vor-Ort-Schreiben-Kreuzpunkt-) Speichergerät oder ein anderes byteadressierbares Write-in-Place-NVM-Gerät (auch als dauerhafter Speicher bezeichnet) umfassen, wie beispielsweise einen ein- oder mehrstufigen Phasenwechselspeicher (PCM; Phase Change Memory) oder Phasenwechselspeicher mit einem Schalter (PCMS; phase change memory with a switch), NVM-Geräte, die Chalkogenidphasenwechselmaterial (zum Beispiel Chalkogenidglas) verwenden, einen resistiven Speicher umfassend Metalloxid-Basis, Sauerstoff-Leerstellenbasis und Conductive Bridge Random Access Memory (CB-RAM), Nanodrahtspeicher, ferroelektrischer Direktzugriffsspeicher (FeRAM, FRAM; ferroelectric random access memory), magnetoresistiver Direktzugriffsspeicher (MRAM; magneto resistive random access memory) mit Memristor-Technologie, Spin Transfer Torque (STT)-MRAM, ein auf Spintronik-Magnet-Übergang-Speicher basierendes Gerät, ein auf magnetischem Tunnelübergang (MTJ; magnetic tunneling junction) basiertes Gerät, ein DW (Domain Wall; Domänenwand) und SOT (Spin Orbit Transfer) -basiertes Gerät, ein thyristorbasiertes Speichergerät oder eine Kombination aus irgendeinem der obigen oder einen anderen Speicher.
  • Eine Leistungsquelle (nicht abgebildet) stellt an die Komponenten des Systems 1100 Leistung bereit. Genauer gesagt bildet eine Leistungsquelle üblicherweise eine Schnittstelle mit einer oder mehreren Leistungsversorgungen in dem System 1100, um an die Komponenten des Systems 1100 Leistung bereitzustellen. Bei einem Beispiel umfasst die Leistungsversorgung einen AC-zu-DC-(Wechselstrom-zu-Gleichstrom; alternating current to direct current) Adapter zum Einstecken in eine Steckdose. Eine solche Wechselstrom- (AC-) Leistung kann eine Erneuerbare-Energien-(z. B. Solarleistung-) Leistungsquelle sein. Bei einem Beispiel umfasst eine Leistungsquelle eine Gleichstrom- (DC-) Leistungsquelle, wie beispielsweise einen externen Wechselstrom-zu-Gleichstrom- (AC-zu-DC-) Wandler. Bei einem Beispiel umfasst eine Leistungsquelle oder Leistungsversorgung drahtlose Ladehardware zum Aufladen über die Nähe zu einem Ladefeld. Bei einem Beispiel kann eine Leistungsquelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Leistungsversorgung, eine Solarleistungsversorgung oder eine Brennstoffzellenquelle umfassen.
  • Bei einem Beispiel kann das System 1100 unter Verwendung von miteinander verbundenen Rechenschlitten aus Prozessoren, Speichern, Speicherungen, Netzwerkschnittstellen und anderen Komponenten implementiert sein. Es können Hochgeschwindigkeitsverbindungen wie beispielsweise PCIe, Ethernet oder optische Verbindungen (oder eine Kombination derselben) oder irgendein Verbindungsprotokoll, auf das hier verwiesen wird, verwendet werden.
  • Ausführungsbeispiele hierin können in verschiedenen Arten von Rechen- und Netzwerk-Ausrüstung, wie beispielsweise Schaltern, Routern, Racks und Blade-Servern, wie sie in einem Rechenzentrum und/oder einer Serverfarmumgebung verwendet werden, implementiert sein. Die Server, die in Rechenzentren und Serverfarmen verwendet werden, umfassen angeordnete Server-Konfigurationen wie beispielsweise Rack-basierte Server oder Blade-Server. Diese Server sind in Kommunikation via verschiedene Netzwerkzugänge miteinander verbunden, wie beispielsweise ein Partitionieren von Serversätzen in lokale Netzwerke (LANs; Local Area Networks) mit geeigneten Schalt- und Routing-Einrichtungen zwischen den LANs, um ein privates Intranet zu bilden. Zum Beispiel können Cloud-Hosting-Einrichtungen üblicherweise große Datenzentren mit einer Vielzahl von Servern nutzen. Ein Blade umfasst eine separate Rechenplattform, die ausgebildet ist, um serverartige Funktionen auszuführen, das heißt, einen „Server auf einer Karte“. Dementsprechend umfasst ein Blade Komponenten, die herkömmlichen Servern gemein sind, umfassend eine gedruckte Hauptschaltungsplatine (Hauptplatine; main board), die eine interne Verkabelung (d. h. Busse) zum Koppeln geeigneter integrierter Schaltungen (ICs) und anderer Komponenten, die auf der Platine befestigt sind, bereitstellt.
  • 12 stellt eine Umgebung 1200 dar, umfassend mehrere Rechen-Racks 1202, von denen einige einen Top of Rack- (ToR-) Schalter 1204, einen Pod-Manager 1206 und eine Mehrzahl von gepoolten Systemschubladen umfassen. In einem Schalter können verschiedene Ausführungsbeispiele verwendet werden. Im Allgemeinen können die gepoolten Systemschubladen gepoolte Rechenschubladen und gepoolte Speicherungsschubladen umfassen. Optional können die gepoolten Systemschubladen auch gepoolte Speicherschubladen und gepoolte Eingangs-/Ausgangs- (I/O-) Schubladen umfassen. Bei dem dargestellten Ausführungsbeispiel umfassen die gepoolten Systemschubladen eine Intel® XEON® gepoolte Computerschublade 1208 und eine Intel® ATOM™ gepoolte Rechenschublade 1210, eine gepoolte Speicherungsschublade 1212, eine gepoolte Speicherschublade 1214 und eine gepoolte I/O-Schublade 1216. Einige der gepoolten Systemschubladen ist über einen Hochgeschwindigkeits-Link 1218 mit dem ToR-Schalter 1204 verbunden, wie beispielsweise einen 40-Gigabit/Sekunde (Gb/s)- oder 100Gb/s-Ethernet-Link oder einen 100+ Gb/s Silizium-Photonik- (SiPh-) optischen Link. Bei einem Ausführungsbeispiel umfasst eine Hochgeschwindigkeitsverbindung 1218 einen 800 Gb/s SiPh-optischen Link.
  • Mehrere der Rechen-Racks 1202 können über ihre ToR-Schalter 1204 miteinander verbunden sein (z. B. mit einem Pod-Ebene-Schalter oder einem Datenzentrum-Schalter), wie durch die Verbindungen zu einem Netzwerk 1220 dargestellt. Bei einigen Ausführungsbeispielen werden Gruppen von Rechen-Racks 1202 als separate Pods über (einen) Pod-Manager 1206 gemanagt. Bei einem Ausführungsbeispiel wird ein einzelner Pod-Manager verwendet, um Racks in dem Pod zu managen. Alternativ können verteilte Pod-Manager für Pod-Management-Operationen verwendet werden.
  • Eine Umgebung 1200 umfasst ferner eine Management-Schnittstelle 1222, die verwendet wird, um verschiedene Aspekte der Umgebung zu managen. Dies umfasst ein Managen einer Rack-Konfiguration, mit entsprechenden Parametern, die als Rack-Konfigurationsdaten 1224 gespeichert sind.
  • Verschiedene Beispiele können unter Verwendung von Hardware-Elementen, Software-Elementen oder einer Kombination von beiden implementiert sein. Bei einigen Beispielen können Hardwareelemente Vorrichtungen, Komponenten, Prozessoren, Mikroprozessoren, Schaltungen, Schaltungselemente (z. B. Transistoren, Widerstände, Kondensatoren, Induktivitäten usw.), integrierte Schaltungen, ASICs, PLDs, DSPs, FPGAs, Speichereinheiten, Logik-Gates, Register, ein Halbleiterbauelement, Chips, Mikrochips, Chipsätze usw. umfassen. Bei einigen Beispielen können Softwareelemente Softwarekomponenten, Programme, Anwendungen, Computerprogramme, Anwendungsprogramme, Systemprogramme, Maschinenprogramme, Betriebssystemsoftware, Middleware, Firmware, Softwaremodule, Routinen, Unterroutinen, Funktionen, Verfahren, Prozeduren, Softwareschnittstellen, APIs, Anweisungssätze, einen Rechencode, einen Computercode, Codesegmente, Computercodesegmente, Wörter, Werte, Symbole oder irgendeine Kombination derselben umfassen. Die Bestimmung, ob ein Beispiel unter Verwendung von Hardware-Elementen und/oder Software-Elementen implementiert wird, kann gemäß irgendeiner Anzahl von Faktoren, wie beispielsweise der gewünschten Rechenrate, den Leistungspegeln, den Wärmetoleranzen, dem Verarbeitungszyklus-Budget, den Eingangsdatenraten, den Ausgangsdatenraten, den Speicherressourcen, den Datenbusgeschwindigkeiten und anderen Entwurf- oder Performanceeinschränkungen, wie für eine gegebene Implementierung gewünscht, variieren. Es wird darauf hingewiesen, dass Hardware-, Firmware- und/oder Software-Elemente hierin zusammen oder einzeln als „Modul“, „Logik“, „Schaltung“ oder „Schaltungsanordnung“ bezeichnet werden können. Ein Prozessor kann ein oder mehrere sein aus einer Kombination aus einer Hardware-Zustandsmaschine, digitalen Steuerlogik, zentralen Verarbeitungseinheit oder irgendwelchen Hardware-, Firmware- und/oder Software-Elementen.
  • Einige Beispiele können unter Verwendung von oder als ein Herstellungsartikel oder zumindest ein computerlesbares Medium implementiert sein. Ein computerlesbares Medium kann ein nichtflüchtiges Speicherungsmedium zur Speicherung von Logik umfassen. Bei einigen Beispielen kann das nichtflüchtige Speicherungsmedium eine oder mehrere Arten von computerlesbaren Speicherungsmedien umfassen, die fähig sind, elektronische Daten zu speichern, umfassend flüchtigen oder nichtflüchtigen Speicher, entfernbaren oder nicht entfernbaren Speicher, löschbaren oder nicht löschbaren Speicher, beschreibbaren oder wiederbeschreibbaren Speicher und so weiter. Bei einigen Beispielen kann die Logik verschiedene Software-Elemente, wie beispielsweise Softwarekomponenten, Programme, Anwendungen, Computerprogramme, Anwendungsprogramme, Systemprogramme, Maschinenprogramme, Betriebssystemsoftware, Middleware, Firmware, Softwaremodule, Routinen, Teilroutinen, Funktionen, Verfahren, Prozeduren, Softwareschnittstellen, API, Anweisungssätze, Rechencode, Computercode, Codesegmente, Computercodesegmente, Wörter, Werte, Symbole oder irgendeine Kombination davon umfassen.
  • Gemäß einigen Beispielen kann ein computerlesbares Medium ein nichtflüchtiges Speicherungsmedium zum Speichern oder Aufrechterhalten von Anweisungen umfassen, die, wenn sie von einer Maschine, einem Rechengerät oder einem System ausgeführt werden, die Maschine, das Rechengerät oder das System veranlassen, Verfahren und/oder Operationen gemäß den beschriebenen Beispielen auszuführen. Die Anweisungen können irgendeine geeignete Art von Code umfassen, wie beispielsweise einen Quellcode, einen kompilierten Code, einen interpretierten Code, einen ausführbaren Code, einen statischen Code, einen dynamischen Code und Ähnliches. Die Anweisungen können gemäß einer vordefinierten Computersprache, -weise oder -syntax implementiert sein, um eine Maschine, ein(e) Rechenvorrichtung oder System anzuweisen, eine bestimmte Funktion auszuführen. Die Anweisungen können unter Verwendung irgendeiner geeigneten Hochsprachen-, Niedersprachen-, objektorientierten, visuellen, kompilierten und/oder interpretierten Programmiersprache implementiert sein.
  • Ein oder mehrere Aspekte von zumindest einem Beispiel können durch repräsentative Anweisungen implementiert sein, die auf zumindest einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logiken innerhalb des Prozessors repräsentiert, die, wenn sie von einer Maschine, einer Rechenvorrichtung oder einem System gelesen werden, die Maschine, die Rechenvorrichtung oder das System veranlassen, Logik zur Ausführung der hierin beschriebenen Techniken herzustellen. Solche Darstellungen, die als „IP-Kerne“ bekannt sind, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, um sie in die Fertigungsmaschinen zu laden, die die Logik oder den Prozessor tatsächlich herstellen.
  • Das Auftreten der Phrase „ein einzelnes Beispiel“ oder „ein Beispiel“ bezieht sich nicht notwendigerweise auf dasselbe Beispiel oder Ausführungsbeispiel. Irgendein hierin beschriebener Aspekt kann mit irgendeinem anderen Aspekt oder ähnlichen hierin beschriebenen Aspekt kombiniert werden, unabhängig davon, ob die Aspekte in Bezug auf dieselbe Figur oder dasselbe Element beschrieben sind. Ein Teilen, Auslassen oder Umfassen von Blockfunktionen, die in den beiliegenden Figuren abgebildet sind, lässt nicht herleiten, dass die Hardwarekomponenten, Schaltungen, Software und/oder Elemente zur Implementierung dieser Funktionen notwendigerweise unterteilt, weggelassen oder bei Ausführungsbeispielen umfasst sein müssten.
  • Einige Beispiele können unter Verwendung der Ausdrücke „gekoppelt“ und „verbunden“ zusammen mit ihren Ableitungen beschrieben sein. Diese Begriffe sind nicht notwendigerweise als Synonyme füreinander vorgesehen. Beispielsweise können Beschreibungen, die die Begriffe „verbunden“ und/oder „gekoppelt“ verwenden, möglicherweise anzeigen, dass zwei oder mehr Elemente in direktem physischem oder elektrischem Kontakt miteinander stehen. Der Begriff „gekoppelt“ kann jedoch auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander sind, jedoch weiter miteinander zusammenarbeiten oder interagieren.
  • Die Begriffe „erste,r,s“, „zweite,r,s“ und Ähnliches bezeichnen hierin nicht irgendeine Reihenfolge, Menge oder Bedeutung, sondern werden vielmehr dazu verwendet, ein Element von einem anderen zu unterscheiden. Die Begriffe „ein,e,s“ (a, an) bezeichnen hierin nicht eine Mengenbeschränkung, sondern vielmehr das Vorhandensein von zumindest einem von den Gegenständen, auf die Bezug genommen wird. Der Begriff „aufgeschaltet“ (asserted), der hierin in Bezug auf ein Signal verwendet wird, bezeichnet einen Zustand des Signals, in dem das Signal aktiv ist und der durch Anwenden irgendeines Logikpegels auf das Signal, entweder Logik 0 oder Logik 1, erreicht werden kann. Die Begriffe „folgen“ oder „nach“ können sich auf unmittelbar folgen oder folgen nach einem anderen Ereignis oder Ereignissen beziehen. Andere Abfolgen von Schritten können auch gemäß alternativen Ausführungsbeispielen ausgeführt werden. Ferner können zusätzliche Schritte, abhängig von den bestimmten Anwendungen, hinzugefügt oder entfernt werden. Es kann irgendeine Kombination von Änderungen verwendet werden und ein Fachmann auf dem Gebiet, der den Nutzen dieser Offenbarung hat, würde die vielen Variationen, Modifikationen und alternativen Ausführungsbeispiele verstehen.
  • Eine disjunktive Sprache, wie beispielsweise die Phrase „zumindest eines von X, Y oder Z“, sofern nicht anderweitig spezifisch angegeben, wird ansonsten innerhalb des Kontexts verstanden, wie er im Allgemeinen verwendet wird, um darzustellen, dass ein Gegenstand, ein Begriff usw. entweder X, Y oder Z oder irgendeine Kombination davon (z. B. X, Y und/oder Z) sein kann. Somit ist solch disjunktive Sprache nicht im Allgemeinen dafür vorgesehen und soll nicht implizieren, dass bestimmte Ausführungsbeispiele das jeweilige Vorliegen von zumindest einem von X, zumindest einem von Y oder zumindest einem von Z erfordern. Zusätzlich soll konjunktive Sprache wie beispielsweise die Phrase „zumindest eines von X, Y und Z“, sofern nicht anderweitig spezifisch angegeben, auch als X, Y, Z oder irgendeine Kombination davon, umfassend „X, Y und/oder Z“, verstanden werden.
  • Darstellende Beispiele der Geräte, Systeme und Verfahren, die hierin offenbart sind, sind nachfolgend bereitgestellt. Ein Ausführungsbeispiel der Vorrichtungen, Systeme und Verfahren kann irgendein einzelnes oder mehrere und irgendeine Kombination der nachfolgend beschriebenen Beispiele umfassen.
  • Beispiel 1 umfasst eine Vorrichtung, die umfasst: einen Speicher; einen Tag-Zustellpfad; einen Tag-Puffer zum Empfangen eines Tags aus dem Tag-Zustellpfad; und einen Austritts-Zeitplaner, wobei der Austritts-Zeitplaner ausgebildet ist: ein Paket zu bestimmen, das ausgebildet ist, unter Verwendung eines verfügbaren Tags von einem von dem Speicher oder dem Tag-Puffer auszutreten.
  • Beispiel 2 umfasst ein Beispiel, wobei: das Tag ausgebildet ist, einen Ort eines Abschnitts des Pakets in dem Speicher zu identifizieren, und der Austritts-Zeitplaner ausgebildet ist, auf das Tag zuzugreifen, wobei der Austritts-Zeitplaner zum Zugreifen auf das Tag ausgebildet ist, zu versuchen, auf das Tag aus dem Tag-Puffer zuzugreifen, oder, wenn das Tag in dem Tag-Puffer abwesend ist, ausgebildet ist, zu versuchen, auf das Tag aus dem Speicher zuzugreifen.
  • Beispiel 3 umfasst ein Beispiel, wobei: der Tag-Puffer in dem Speicher zugewiesen wird und der Tag-Puffer ausgebildet ist, eine Anzahl von Tags zu speichern, aber kein Tag zu speichern, wenn der Tag-Puffer voll ist.
  • Beispiel 4 umfasst ein Beispiel, wobei: der Tag-Puffer in dem Speicher zugewiesen wird, der Tag-Puffer ausgebildet ist, eine Anzahl von Tags zu speichern, um ein verfügbares Tag zu haben, um zu versuchen, eine Paketaustrittsrate zu erreichen, unabhängig davon, ob ein Tag aus dem Tag-Puffer oder dem Speicher abgerufen wird, und der Tag-Puffer ausgebildet ist, Tags in einer Paketaustrittsreihenfolge zu speichern.
  • Beispiel 5 umfasst ein Beispiel, wobei: der Tag-Zustellpfad ausgebildet ist, einen Geringere-Latenzzeit-Tag-Zugriff als der des Speichers bereitzustellen, wobei der Tag-Zustellpfad ausgebildet ist, unabhängige Bus-Lanes für eine Eintritts-Port-Gruppe zu verwenden und der Tag-Puffer einem Austritts-Port zugeordnet ist.
  • Beispiel 6 umfasst ein Beispiel und umfasst einen Router, der einem Eintritts-Port zugeordnet ist, wobei der Router ausgebildet ist, Tags zusammenzustellen und Blöcke von Tags in den Speicher zu schreiben, um Gemeinschaftlich-Verwendeter-Speicher-Transaktionen zu reduzieren.
  • Beispiel 7 umfasst ein Beispiel, wobei der Tag-Puffer einen Endpuffer und einen Kopfpuffer umfasst.
  • Beispiel 8 umfasst ein Beispiel, wobei der Tag-Puffer ein Warteschlangen-Cache-Slice umfasst, das pro Austritts-Port-Gruppe zugewiesen wird.
  • Beispiel 9 umfasst ein Beispiel, wobei der Speicher ausgebildet ist, einer einzelnen Warteschlange zu erlauben, eine Gesamtheit des Speichers zu verwenden, um Tags und Paketdaten von einem oder mehreren Eintritts-Ports zu speichern.
  • Beispiel 10 umfasst ein Beispiel, und umfasst eine Eintritts-Port-Gruppe und einen Tag-Sequenzer, um Pakete als nicht verschachtelt für einen Eintritts-Port aufrechtzuerhalten, um ein Unterlaufen (underrun) zu reduzieren und ein Durchschneiden zu ermöglichen.
  • Beispiel 11 umfasst ein Beispiel, wobei der Tag-Sequenzer ausgebildet ist, Pakete, die gespeichert-und-weitergeleitet werden, daran zu hindern, Cut-Through-Pakete zu blockieren.
  • Beispiel 12 umfasst ein Beispiel, und umfasst ein oder mehrere von: einer Netzwerkschnittstelle, einem Schalter, einem Rechenzentrum, einem Server, einem Rack oder einem Blade.
  • Beispiel 13 umfasst ein Beispiel, und umfasst einen Server, wobei der Server ausgebildet ist, Pakete vor dem Austritt zu verarbeiten und eines oder mehrere auszuführen von: Software Defined Networking (SDN) oder Network Functions Virtualization (NFV).
  • Beispiel 14 umfasst ein Verfahren, dass umfasst: Zuordnen eines Tags zu einem Paket; Speichern von Tags als Gruppe in einen Speicher; und Verwenden eines Tag-Zustellpfads, um ein Tag an einen Puffer bereitzustellen, der einem Austritts-Port zugeordnet ist, wobei der Tag-Zustellpfad ausgebildet ist, einen Geringere-Latenzzeit-Tag-Zugriff auf den Austritts-Port als der des Speichers bereitzustellen.
  • Beispiel 15 umfasst ein Beispiel, und umfasst: Aufrechterhalten von Paketen, die an einem Eintritts-Port empfangen werden, als nicht verschachtelt, um ein Unterlaufen zu reduzieren und ein Durchschneiden zu einem Austritts-Port bereitzustellen.
  • Beispiel 16 umfasst ein Beispiel und umfasst Planen eines Austritts eines Pakets aus einem Austritts-Port durch Zugriff auf sein Tag, wobei: wenn das Tag sich in dem Puffer, der dem Austritts-Port zugeordnet ist, befindet, Lesen des Tags aus dem Puffer und wenn das Tag nicht in dem Puffer gespeichert ist, Lesen des Tags aus dem Speicher.
  • Beispiel 17 umfasst ein Beispiel und umfasst: Speichern einer Anzahl von Tags in dem Puffer, um zu versuchen, ein verfügbares Tag zu haben, um eine Paketaustrittsrate von einem Austritts-Port zu erreichen, unabhängig davon, ob ein Tag aus dem Puffer oder dem Speicher abgerufen wird, und Speichern von Tags in dem Puffer in einer Paketaustrittsreihenfolge.
  • Beispiel 18 umfasst ein Beispiel und umfasst es einer Tag-Warteschlange zu erlauben, einen gesamten Speicher zu verwenden, wobei die Tag-Warteschlange Tags und Paketdaten von einem oder mehreren Eintritts-Ports speichert.
  • Beispiel 19 umfasst ein Beispiel, wobei das Speichern von Tags als Gruppe in einen Speicher ein Zusammenstellen einer Schwellenanzahl von Tags und ein Speichern der Schwellenanzahl von Tags in den Speicher umfasst.
  • Beispiel 20 umfasst ein Beispiel und umfasst Speichern eines empfangenen Pakets in dem Speicher und Ausführen des Paketverarbeitens auf einem in dem Speicher gespeicherten Paket.
  • Beispiel 21 umfasst ein System, das umfasst einen Speicher und einen Schalter, der umfasst: zumindest einen Eintritts-Port; zumindest einen Austritts-Port; einen Tag-Zustellpfad; und zumindest einen Prozessor, der ausgebildet ist:
    • ein Tag einem Paket zuzuordnen; Tags als Gruppe in den Speicher zu speichern; und den Tag-Zustellpfad zu verwenden, um ein Tag an einen Puffer bereitzustellen, der einem Austritts-Port zugeordnet ist, wobei der Tag-Zustellpfad ausgebildet ist, einen Geringere-Latenzzeit-Tag-Zugriff auf den Austritts-Port als der des Speichers bereitzustellen.
  • Beispiel 22 umfasst ein Beispiel, und umfasst einen Austritts-Zeitplaner, und wobei: das Tag ausgebildet ist, einen Ort eines Abschnitts des Pakets in dem Speicher zu identifizieren, und der Austritts-Zeitplaner ausgebildet ist, auf ein Tag zuzugreifen, wobei der Austritts-Zeitplaner zum Zugreifen auf das Tag ausgebildet ist, zu versuchen, auf das Tag aus dem Puffer zuzugreifen, oder, wenn das Tag in dem Tag-Puffer abwesend ist, ausgebildet ist, auf das Tag aus dem Speicher zuzugreifen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 16/727543 [0001]
    • US 62/908490 [0001]

Claims (22)

  1. Eine Vorrichtung, umfassend: einen Speicher; einen Tag-Zustellpfad; einen Tag-Puffer zum Empfangen eines Tags aus dem Tag-Zustellpfad; und einen Austritts-Zeitplaner, wobei der Austritts-Zeitplaner ausgebildet ist: ein Paket zu bestimmen, das ausgebildet ist, unter Verwendung eines verfügbaren Tags von einem von dem Speicher oder dem Tag-Puffer auszutreten.
  2. Die Vorrichtung gemäß Anspruch 1, wobei: das Tag ausgebildet ist, einen Ort eines Abschnitts des Pakets in dem Speicher zu identifizieren, und der Austritts-Zeitplaner ausgebildet ist, auf das Tag zuzugreifen, wobei der Austritts-Zeitplaner zum Zugreifen auf das Tag ausgebildet ist, zu versuchen, auf das Tag aus dem Tag-Puffer zuzugreifen, oder, wenn das Tag in dem Tag-Puffer abwesend ist, ausgebildet ist, zu versuchen, auf das Tag aus dem Speicher zuzugreifen.
  3. Die Vorrichtung gemäß Anspruch 1, wobei: der Tag-Puffer in dem Speicher zugewiesen wird und der Tag-Puffer ausgebildet ist, eine Anzahl von Tags zu speichern, aber kein Tag zu speichern, wenn der Tag-Puffer voll ist.
  4. Die Vorrichtung gemäß Anspruch 1, wobei: der Tag-Puffer in dem Speicher zugewiesen wird, der Tag-Puffer ausgebildet ist, eine Anzahl von Tags zu speichern, um ein verfügbares Tag zu haben, um zu versuchen, eine Paketaustrittsrate zu erreichen, unabhängig davon, ob ein Tag aus dem Tag-Puffer oder dem Speicher abgerufen wird, und der Tag-Puffer ausgebildet ist, Tags in einer Paketaustrittsreihenfolge zu speichern.
  5. Die Vorrichtung gemäß Anspruch 1, wobei: der Tag-Zustellpfad ausgebildet ist, einen Geringere-Latenzzeit-Tag-Zugriff als der des Speichers bereitzustellen, wobei der Tag-Zustellpfad ausgebildet ist, unabhängige Bus-Lanes für eine Eintritts-Port-Gruppe zu verwenden und der Tag-Puffer einem Austritts-Port zugeordnet ist.
  6. Die Vorrichtung gemäß Anspruch 1, umfassend einen Router, der einem Eintritts-Port zugeordnet ist, wobei der Router ausgebildet ist, Tags zusammenzustellen und Blöcke von Tags in den Speicher zu schreiben, um Gemeinschaftlich-Verwendeter-Speicher-Transaktionen zu reduzieren.
  7. Die Vorrichtung gemäß Anspruch 1, wobei der Tag-Puffer einen Endpuffer und einen Kopfpuffer umfasst.
  8. Die Vorrichtung gemäß Anspruch 1, wobei der Tag-Puffer ein Warteschlangen-Cache-Slice umfasst, das pro Austritts-Port-Gruppe zugewiesen wird.
  9. Die Vorrichtung gemäß Anspruch 1, wobei der Speicher ausgebildet ist, einer einzelnen Warteschlange zu erlauben, eine Gesamtheit des Speichers zu verwenden, um Tags und Paketdaten von einem oder mehreren Eintritts-Ports zu speichern.
  10. Die Vorrichtung gemäß Anspruch 1, umfassend eine Eintritts-Port-Gruppe und einen Tag-Sequenzer, um Pakete als nicht verschachtelt für einen Eintritts-Port aufrechtzuerhalten, um ein Unterlaufen zu reduzieren und ein Durchschneiden zu ermöglichen.
  11. Die Vorrichtung gemäß Anspruch 10, wobei der Tag-Sequenzer ausgebildet ist, Pakete, die gespeichert-und-weitergeleitet werden, daran zu hindern, Cut-Through-Pakete zu blockieren.
  12. Die Vorrichtung gemäß Anspruch 1, umfassend ein oder mehrere von: einer Netzwerkschnittstelle, einem Schalter, einem Rechenzentrum, einem Server, einem Rack oder einem Blade.
  13. Die Vorrichtung gemäß Anspruch 12, umfassend einen Server, wobei der Server ausgebildet ist, Pakete vor dem Austritt zu verarbeiten und eines oder mehrere auszuführen von: Software Defined Networking (SDN) oder Network Functions Virtualization (NFV).
  14. Ein Verfahren, umfassend: Zuordnen eines Tags zu einem Paket; Speichern von Tags als Gruppe in einen Speicher; und Verwenden eines Tag-Zustellpfads, um ein Tag an einen Puffer bereitzustellen, der einem Austritts-Port zugeordnet ist, wobei der Tag-Zustellpfad ausgebildet ist, einen Geringere-Latenzzeit-Tag-Zugriff auf den Austritts-Port als der des Speichers bereitzustellen.
  15. Das Verfahren gemäß Anspruch 14, umfassend: Aufrechterhalten von Paketen, die an einem Eintritts-Port empfangen werden, als nicht verschachtelt, um ein Unterlaufen zu reduzieren und ein Durchschneiden zu einem Austritts-Port bereitzustellen.
  16. Das Verfahren gemäß Anspruch 14, umfassend: Planen eines Austritts eines Pakets aus einem Austritts-Port durch Zugriff auf sein Tag, wobei: wenn das Tag sich in dem Puffer, der dem Austritts-Port zugeordnet ist, befindet, Lesen des Tags aus dem Puffer und wenn das Tag nicht in dem Puffer gespeichert ist, Lesen des Tags aus dem Speicher.
  17. Das Verfahren gemäß Anspruch 14, umfassend: Speichern einer Anzahl von Tags in dem Puffer, um zu versuchen, ein verfügbares Tag zu haben, um eine Paketaustrittsrate von einem Austritts-Port zu erreichen, unabhängig davon, ob ein Tag aus dem Puffer oder dem Speicher abgerufen wird, und Speichern von Tags in dem Puffer in einer Paketaustrittsreihenfolge.
  18. Das Verfahren gemäß Anspruch 14, umfassend es einer Tag-Warteschlange zu erlauben, einen gesamten Speicher zu verwenden, wobei die Tag-Warteschlange Tags und Paketdaten von einem oder mehreren Eintritts-Ports speichert.
  19. Das Verfahren gemäß Anspruch 14, wobei das Speichern von Tags als Gruppe in einen Speicher ein Zusammenstellen einer Schwellenanzahl von Tags und ein Speichern der Schwellenanzahl von Tags in den Speicher umfasst.
  20. Das Verfahren gemäß Anspruch 14, umfassend: Speichern eines empfangenen Pakets in dem Speicher und Ausführen des Paketverarbeitens auf einem in dem Speicher gespeicherten Paket.
  21. Ein System umfassend: einen Speicher und einen Schalter, umfassend: zumindest einen Eintritts-Port; zumindest einen Austritts-Port; einen Tag-Zustellpfad; und zumindest einen Prozessor, der ausgebildet ist: ein Tag einem Paket zuzuordnen; Tags als Gruppe in den Speicher zu speichern; und den Tag-Zustellpfad zu verwenden, um ein Tag an einen Puffer bereitzustellen, der einem Austritts-Port zugeordnet ist, wobei der Tag-Zustellpfad ausgebildet ist, einen Geringere-Latenzzeit-Tag-Zugriff auf den Austritts-Port als der des Speichers bereitzustellen.
  22. Das System gemäß Anspruch 21, umfassend einen Austritts-Zeitplaner, und wobei: das Tag ausgebildet ist, einen Ort eines Abschnitts des Pakets in dem Speicher zu identifizieren, und der Austritts-Zeitplaner ausgebildet ist, auf ein Tag zuzugreifen, wobei der Austritts-Zeitplaner zum Zugreifen auf das Tag ausgebildet ist, zu versuchen, auf das Tag aus dem Puffer zuzugreifen, oder, wenn das Tag in dem Tag-Puffer abwesend ist, ausgebildet ist, auf das Tag aus dem Speicher zuzugreifen.
DE112020004673.7T 2019-09-30 2020-06-09 Mehrpfad-Paketdeskriptor-Zustellschema Pending DE112020004673T5 (de)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201962908490P 2019-09-30 2019-09-30
US62/908,490 2019-09-30
US16/727,543 US11700209B2 (en) 2019-09-30 2019-12-26 Multi-path packet descriptor delivery scheme
US16/727,543 2019-12-26
PCT/US2020/036851 WO2021066893A1 (en) 2019-09-30 2020-06-09 Multi-path packet descriptor delivery scheme

Publications (1)

Publication Number Publication Date
DE112020004673T5 true DE112020004673T5 (de) 2022-06-30

Family

ID=70326046

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020004673.7T Pending DE112020004673T5 (de) 2019-09-30 2020-06-09 Mehrpfad-Paketdeskriptor-Zustellschema

Country Status (3)

Country Link
US (1) US11700209B2 (de)
DE (1) DE112020004673T5 (de)
WO (1) WO2021066893A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6977699B2 (ja) * 2018-10-30 2021-12-08 日本電信電話株式会社 転送装置及びリソース割当方法
US11722438B2 (en) * 2019-08-21 2023-08-08 Intel Corporation Maintaining bandwidth utilization in the presence of packet drops
US11700209B2 (en) 2019-09-30 2023-07-11 Intel Corporation Multi-path packet descriptor delivery scheme
CN112084136B (zh) * 2020-07-23 2022-06-21 西安电子科技大学 队列缓存管理方法、系统、存储介质、计算机设备及应用
KR20220060326A (ko) 2020-11-04 2022-05-11 삼성전자주식회사 확장 패킷을 제공하는 인터페이스 회로 및 이를 포함하는 프로세서
US11558316B2 (en) * 2021-02-15 2023-01-17 Mellanox Technologies, Ltd. Zero-copy buffering of traffic of long-haul links
US20220393975A1 (en) * 2021-06-07 2022-12-08 Microsoft Technology Licensing, Llc Transmitting multi-dimensional data between devices

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6157955A (en) * 1998-06-15 2000-12-05 Intel Corporation Packet processing system including a policy engine having a classification unit
US6904043B1 (en) * 1999-05-21 2005-06-07 Advanced Micro Devices, Inc. Apparatus and methods for storing and processing header information in a network switch
US7558890B1 (en) * 2003-12-19 2009-07-07 Applied Micro Circuits Corporation Instruction set for programmable queuing
US7433364B2 (en) * 2003-12-24 2008-10-07 Intel Corporation Method for optimizing queuing performance
US8868790B2 (en) 2004-02-13 2014-10-21 Oracle International Corporation Processor-memory module performance acceleration in fabric-backplane enterprise servers
US7457296B2 (en) * 2004-09-30 2008-11-25 Intel Corporation Method and apparatus for sorting packets in packet schedulers using a connected trie data structure
US7489625B2 (en) 2005-01-27 2009-02-10 Intel Corporation Multi-stage packet switching system with alternate traffic routing
US8050263B1 (en) * 2006-10-11 2011-11-01 Marvell International Ltd. Device and process for efficient multicasting
US7916718B2 (en) * 2007-04-19 2011-03-29 Fulcrum Microsystems, Inc. Flow and congestion control in switch architectures for multi-hop, memory efficient fabrics
US7844760B2 (en) * 2007-09-29 2010-11-30 Intel Corporation Schedule and data caching for wireless transmission
US9094343B1 (en) * 2008-11-13 2015-07-28 Qlogic, Corporation Method and system for taking a network port offline
US8483218B2 (en) 2008-12-04 2013-07-09 Electronics And Elecommunications Research Institute Packet transport layer apparatus
US9008113B2 (en) * 2010-12-20 2015-04-14 Solarflare Communications, Inc. Mapped FIFO buffering
US9055114B1 (en) 2011-12-22 2015-06-09 Juniper Networks, Inc. Packet parsing and control packet classification
US9634953B2 (en) 2013-04-26 2017-04-25 Mediatek Inc. Scheduler for deciding final output queue by selecting one of multiple candidate output queues and related method
US9531641B2 (en) * 2014-07-29 2016-12-27 Oracle International Corporation Virtual output queue linked list management scheme for switch fabric
EP3032785B1 (de) * 2014-12-12 2022-04-06 Net Insight AB Transportverfahren in einem kommunikationsnetz
US10708189B1 (en) * 2016-12-09 2020-07-07 Barefoot Networks, Inc. Priority-based flow control
CN108462646B (zh) * 2017-02-17 2020-08-25 华为技术有限公司 一种报文处理方法及装置
US20200412670A1 (en) * 2019-06-28 2020-12-31 Intel Corporation Output queueing with scalability for segmented traffic in a high-radix switch
US11700209B2 (en) 2019-09-30 2023-07-11 Intel Corporation Multi-path packet descriptor delivery scheme

Also Published As

Publication number Publication date
WO2021066893A1 (en) 2021-04-08
US11700209B2 (en) 2023-07-11
US20200136986A1 (en) 2020-04-30

Similar Documents

Publication Publication Date Title
DE112020004673T5 (de) Mehrpfad-Paketdeskriptor-Zustellschema
DE112020007201T5 (de) Speicherzuordnung für verteilte Verarbeitungsvorrichtungen
DE102020133262A1 (de) Arbeitslastscheduler für Speicherzuweisung
EP3706394B1 (de) Schreiben auf mehrere speicherziele
DE102018006890A1 (de) Technologien zur Verarbeitung von Netzpaketen durch einen intelligenten Netzwerk-Schnittstellenkontroller
DE112020006859T5 (de) Beibehaltung von speicher-namensraum-identifizierern für die migration von virtualisierten ausführungsumgebungen im laufenden betrieb
DE102020113544A1 (de) Bedarfsgesteuerte paketwarteschlangen in einer netzwerkvorrichtung
DE60125678T2 (de) Vermittlungstelle mit Flusssteurungverwaltung
CN116018790A (zh) 基于接收方的精密拥塞控制
EP3758318A1 (de) Geteiltes speichergitter zur umschaltung
US20220078119A1 (en) Network interface device with flow control capability
US8825927B2 (en) Systems and methods for managing queues
DE102019127285A1 (de) Verfahren und Vorrichtung zur sicheren Datenzentrumsüberbrückung in einem Multi-Tenant-System
DE102018127751A1 (de) Einheitlicher Adressraum für mehrere Verbindungen
US9137173B2 (en) Devices and methods for interconnecting server nodes
DE102019102883A1 (de) Technologien zum Bewegen von Arbeitslasten zwischen Hardwarewarteschlangenmanagern
DE102020119017A1 (de) Ausgang aus Eingangswarteschlangen mit Gerechtigkeit auf Zeitstempelbasis
DE102020105715A1 (de) Vorrichtung und Verfahren zum Puffermanagement für Empfangssegment-Zusammenführung
DE112017004907T5 (de) System, Vorrichtung und Verfahren zur Durchführung einer verteilten Arbitration
DE102020119018A1 (de) Aufrechterhalten der Bandbreitennutzung in Anwesenheit von Paketverwürfen
DE112021000155T5 (de) Vorrichtungen und verfahren für netzwerknachrichtensequenzierung
DE112022002377T5 (de) Paketformatanpassungstechnologien
DE102021122233A1 (de) Beschleuniger-controller-hub
DE102022107778A1 (de) Adressübersetzung an einer zielnetzwerk-schnittstellenvorrichtung
US11601531B2 (en) Sketch table for traffic profiling and measurement