-
HINTERGRUND
-
Switches müssen Pakete für Flüsse mit variierenden Erfordernissen weiterleiten. Obwohl die Mehrheit von Flüssen maßvolle Durchsatzanforderungen aufweisen, belegt eine kleine Untermenge gewöhnlich einen wesentlichen Teil der verfügbaren Kapazität. Diese Flüsse werden „Heavy Hitters“ genannt. Wenn sie unbeschränkt belassen werden, führen Heavy Hitters zu Rückgängen und zum Aufbau von Warteschlangen für alle Flüsse. Es ist folglich wünschenswert, Heavy Hitters zu identifizieren und ihre nachteiligen Auswirkungen auf die Beendigungszeit von anderen Flüssen durch Verwenden von Techniken wie faires Fallenlassen von Paketen, Vorrangwarteschlangenbildung usw. abzuschwächen.
-
KURZDARSTELLUNG
-
Einige Ausführungsformen der Erfindung stellen eine Datenebenenweiterleitungsschaltung (Datenebene) bereit, die eine Flussgrößenerkennungsschaltung aufweist, die eine Flussgrößendichtenverteilung für alle oder einige der Datennachrichtenflüsse erzeugt, die sie zur Weiterleitung in einem Netzwerk verarbeitet. Um ihre Weiterleitungsvorgänge durchzuführen, beinhaltet die Datenebene mehrere Datennachrichtenverarbeitungsstufen, die dazu konfiguriert sind, die Datentupel zu verarbeiten, die mit den Datennachrichten assoziiert sind, die von der Datenebene empfangen werden. In einigen Ausführungsformen sind Teile der Datenebenennachrichtenverarbeitungsstufen außerdem dazu konfiguriert, eine Flussgrößenerkennungsschaltung zu implementieren. In anderen Ausführungsformen weist die Datenebene eine dedizierte Flussgrößenerkennungsschaltung auf, die keine umfunktionierten Nachrichtenverarbeitungsstufen für Flussgrößenerkennungsvorgänge verwendet.
-
Die Vorgänge der Nachrichtenverarbeitungsstufen der Datenebene werden in einigen Ausführungsformen von einer lokalen oder entfernten Steuerebene konfiguriert. In einigen Ausführungsformen wird eine lokale Steuerebene von einer Steuersoftwareschicht implementiert, die von einem oder mehreren Universalprozessoren (z. B. CPU) des Weiterleitungselements ausgeführt wird, während eine entfernte Steuerebene von einer Steuersoftwareschicht implementiert wird, die von einem oder mehreren CPU eines anderen Weiterleitungselements oder eines entfernten Computers (z. B. ein Server) ausgeführt wird.
-
Die Flussgrößenerkennungsschaltung (FS-Erkennungsschaltung) erzeugt in einigen Ausführungsformen statistische Werte in Bezug auf die verarbeiteten Datennachrichtenflüsse und erzeugt auf der Basis dieser statistischen Werte eine FS-Dichtenverteilung, die eine Anzahl von Flüssen in unterschiedlichen Flussgrößenunterbereichen in einem Bereich von Flussgrößen ausdrückt. In einigen Ausführungsformen ist die Dichtenverteilung eine probabilistische Dichtenverteilung, die auf probabilistischen statistischen Werten basiert, die die Flussgrößenerkennungsschaltung für die Datennachrichtenflüsse erzeugt, die zur Weiterleitung innerhalb des Netzwerks verarbeitet werden. Die FS-Erkennungsschaltung erzeugt in einigen Ausführungsformen probabilistische statistische Werte für die Datennachrichtenflüsse durch Erzeugen von Hash-Werten aus Kopfwerten der Datennachrichtenflüsse und Akkumulieren von Flussgrößenwerten an Speicherstellen, die von den erzeugten Hash-Werten identifiziert werden. In einigen Ausführungsformen können die erzeugten Hashs für unterschiedliche Datennachrichtenflüsse kollidieren, was dazu führt, dass die akkumulierten Flussgrößenwerte probabilistische Werte sind, die einen gewissen Grad an Ungenauigkeit aufweisen könnten.
-
Die Dichtenverteilung, die die FS-Erkennungsschaltung produziert, ist eine FS-Dichtenverteilung (FSDD), die über einen programmierbaren Zeitraum definiert ist. Beispielsweise produziert die Flussgrößenerkennungsschaltung eine erste FS-Dichtenverteilung, die eine Anzahl von verarbeiteten Flüssen in den unterschiedlichen Flussgrößenunterbereichen während eines ersten Zeitraums ausdrückt, und produziert dann eine zweite FS-Dichtenverteilung, die eine Anzahl von verarbeiteten Flüssen in den unterschiedlichen Flussgrößenunterbereichen während eines zweiten Zeitraums ausdrückt.
-
In einigen Ausführungsformen ruft die Steuerebene des Weiterleitungselements die FS-Dichtenverteilung ab, die die FS-Erkennungsschaltung der Datenebene durch eine Steuerebenenschnittstelle der Datenebene produziert. In anderen Ausführungsformen weist die Datenebene einen Nachrichtengenerator auf, der Datennachrichten erzeugt, die die FS-Erkennungsschaltung mit der FS-Dichtenverteilung, die sie produziert, populiert. Die Datenebene leitet dann in einigen Ausführungsformen diese FSDD-populierten Datennachrichten an die Steuerebene ihres Weiterleitungselements durch ihre Steuerebenenschnittstelle weiter. In anderen Ausführungsformen leitet die Datenebene diese FSDD-populierten Datennachrichten durch das Netzwerk an einen Rechner, der von dem Netzwerkweiterleitungselement getrennt ist, weiter.
-
Um die FS-Dichtenverteilung für einen bestimmten Zeitraum zu produzieren, verwendet die FS-Erkennungsschaltung zwei unterschiedliche FS-Verteilung-Tracker. Der erste Verteilung-Tracker ist ein Aktuelle-Nachricht-FS-Verteilung-Tracker, der eine erste FSDD, die für den bestimmten Zeitraum in einem ersten FSDD-Register gespeichert ist, auf der Basis einer Nutzlastgröße einer aktuell verarbeiteten Nachricht, die Teil eines bestimmten Nachrichtenflusses ist, aktualisiert. Der zweite Verteilung-Tracker ist ein Vorherige-Nachrichten-FS-Verteilung-Tracker, der eine zweite FSDD, die in einem zweiten FSDD-Register gespeichert ist, aktualisiert, um redundante Aktualisierungen des ersten FSDD-Registers für mehrere Nachrichten für jeden verarbeiteten Nachrichtenfluss während des Zeitraums zu negieren.
-
Spezifischer weist jedes FSDD-Register mehrere Zellen auf, wobei jede Zelle einem anderen Unterbereich von FS-Werten entspricht. Um das erste FSDD-Register für die aktuelle Nachricht, die Teil eines bestimmten Nachrichtenflusses ist, zu aktualisieren, inkrementiert der erste Verteilung-Tracker den Wert, der in der ersten FSDD-Registerzelle gespeichert ist und der einer ersten Flussgröße entspricht, die die FS-Erkennungsschaltung für den bestimmten Nachrichtenfluss in dem bestimmten Zeitraum pflegt, um eins. Die erste Flussgröße beinhaltet die Nutzlastgröße der aktuellen Nachricht.
-
Wie oben erwähnt, pflegt die Flussgrößenerkennungsschaltung in einigen Ausführungsformen eine probabilistische Flussgröße für jeden bestimmten Nachrichtenfluss, den die Datenebene in jedem bestimmten Zeitraum verarbeitet. Während des bestimmten Zeitraums könnte die FS-Erkennungsschaltung mehr als eine Nachricht eines bestimmten Nachrichtenflusses verarbeiten. Für jede dieser Nachrichten aktualisiert der erste Verteilung-Tracker die erste FSDD in dem ersten FSDD-Register. Jede Aktualisierung nach der ersten für einen bestimmten Nachrichtenfluss in einem bestimmten Zeitraum ist redundant, mit Ausnahme davon, wenn eine anschließende Aktualisierung eine anschließende Registerzelle inkrementiert, die mit einem anschließenden FS-Bereich assoziiert ist, um anzugeben, dass die Flussgröße des bestimmten Datennachrichtenflusses von einem FS-Unterbereich zu einem anderen FS-Unterbereich übergegangen ist.
-
Um mehrere redundante Aktualisierungen des ersten FSDD-Registers für einen bestimmten Datennachrichtenfluss während eines bestimmten Zeitraums zu berücksichtigen, verwendet die FS-Erkennungsschaltung daher den zweiten Verteilung-Tracker. Um das zweite FSDD-Register für die aktuelle Nachricht zu aktualisieren, inkrementiert der zweite Verteilung-Tracker den Wert, der in der zweiten FSDD-Registerzelle gespeichert ist und der einer zweiten Flussgröße entspricht, die die FS-Erkennungsschaltung für den bestimmten Nachrichtenfluss vor der Verarbeitung der empfangenen Nachricht gepflegt hat, um eins. In einigen Ausführungsformen berechnet der zweite Verteilung-Tracker die zweite Flussgröße durch Subtrahieren der Nutzlastgröße der aktuellen Nachricht von der ersten Flussgröße, die die Flusserkennungsschaltung für die aktuelle Nachricht produziert. Die FSDD für den bestimmten Zeitraum ist die erste FSDD des ersten FSDD-Registers minus der zweiten FSDD des zweiten FSDD-Registers. Die Aktualisierung der zweiten FSDD auf der Basis der aktuellen Nachricht ist daher dazu vorgesehen, jeglichen vorherigen Beitrag von jeglicher früherer Nachricht des bestimmten Datennachrichtenflusses zu der ersten FSDD aus der FSDD für den bestimmten Zeitraum zu löschen.
-
Die vorstehende Zusammenfassung ist dazu vorgesehen, als eine kurze Einführung in einige Ausführungsformen der Erfindung zu dienen. Sie soll nicht eine Einführung oder Übersicht von allen erfinderischen Gegenständen sein, die in diesem Dokument offenbart sind. Die folgende ausführliche Beschreibung und die Zeichnungen, auf die in der ausführlichen Beschreibung Bezug genommen wird, werden die in der Zusammenfassung beschriebenen Ausführungsformen sowie andere Ausführungsformen weiter beschreiben. Um alle von diesem Dokument beschriebenen Ausführungsformen zu verstehen, ist dementsprechend eine umfassende Prüfung der Zusammenfassung, der ausführlichen Beschreibung und der Zeichnungen erforderlich. Darüber hinaus sollten die beanspruchten Gegenstände nicht durch die veranschaulichenden Einzelheiten in der Zusammenfassung, der ausführlichen Beschreibung und den Zeichnungen eingeschränkt werden, sondern sollen stattdessen durch die angefügten Ansprüche definiert werden, da die beanspruchten Gegenstände in anderen spezifischen Formen verkörpert werden können, ohne vom Sinn der Gegenstände abzuweichen.
-
Figurenliste
-
Die neuartigen Merkmale der Erfindung sind in den angefügten Ansprüchen dargelegt. Zum Zwecke der Erläuterung sind jedoch mehrere Ausführungsformen der Erfindung in den folgenden Figuren dargelegt.
- 1 veranschaulicht einen Prozess von einigen Ausführungsformen, der von der Datenebene eines Netzwerk-Weiterleitungselements durchgeführt wird, um große Datennachrichtenflüsse zu erkennen, die von der Datenebene verarbeitet werden.
- 2 veranschaulicht ein Beispiel, das zwei unterschiedliche Sätze von Hash-adressierten Tabellen verwendet, die durch zwei unterschiedliche Sätze von Hash-Werten adressiert werden.
- 3 veranschaulicht ein Beispiel von akkumulierenden Statistiken für drei unterschiedliche Nachrichten von drei unterschiedlichen Nachrichtenflüssen in dem ersten Satz von Hash-Tabellen.
- 4 veranschaulicht das periodische Zurücksetzen der zwei Sätze von Hash-adressierbaren Tabellen von 2 sowie die Nur-Akkumulieren-Perioden und die Akkumulieren-und-Zugreifen-Perioden von jedem der zwei Hash-adressierbaren Tabellensätze.
- 5 veranschaulicht ein Beispiel einer empfangenen Datennachricht.
- 6 veranschaulicht ein Beispiel eines Weiterleitungselements mit einer Datenebenenschaltung, die dazu konfiguriert werden kann, einen Heavy-Hitter-Detektor (HH-Detektor) zu implementieren, der HH-Flüsse in der Datenebene erkennt.
- 7 veranschaulicht Beispiele von zustandsbehafteten Speichern und Verarbeitungseinheiten, die einige Ausführungsformen in einer Aktionsabgleichseinheit verwenden, um die verschiedenen Komponenten des HH-Detektors zu implementieren.
- 8 stellt eine konzeptionelle Veranschaulichung eines Prozesses bereit, den ein HH-Detektor in einigen Ausführungsformen.
- 9 veranschaulicht ein Beispiel einer Datenebene, die dazu konfiguriert werden kann, eine FS-Erkennungsschaltung zu implementieren.
- 10 veranschaulicht einen Prozess, den eine FS-Erkennungsschaltung in einigen Ausführungsformen durchführt, um eine Datennachricht zu verarbeiten, die die Datenebene empfängt.
-
Die 11 - 13 zeigen die Vorgänge, die eine FS-Erkennungsschaltung für die drei Datennachrichten durchführt, die in einem Zeitintervall verarbeitet werden.
-
14 veranschaulicht einen Prozess, der zeigt, wie die FS-Erkennungsschaltung von zwei Aktionsabgleichseinheitenstufen (MAU-Stufen) einer Datenebene in einigen Ausführungsformen implementiert wird.
-
15 zeigt zwei MAU-Stufen, die eine FS-Erkennungsschaltung implementieren.
-
AUSFÜHRLICHE BESCHREIBUNG
-
In der folgenden ausführlichen Beschreibung der Erfindung sind zahlreiche Einzelheiten, Beispiele und Ausführungsformen der Erfindung dargelegt und beschrieben. Es wird für einen Fachmann jedoch klar und offensichtlich sein, dass die Erfindung nicht auf die dargelegten Ausführungsformen beschränkt ist und dass die Erfindung ohne einige der erörterten spezifischen Einzelheiten und Beispiele ausgeübt werden kann.
-
Einige Ausführungsformen der Erfindung stellen ein Verfahren zum Identifizieren von großen Datennachrichtenflüssen, die von einem Netzwerk-Weiterleitungselement verarbeitet werden, bereit. Für eine Datennachricht, die von dem Weiterleitungselement empfangen wird, erzeugt das Verfahren zwei Sätze von Speicheradresswerten. Um die empfangene Datennachricht zu berücksichtigen, inkrementiert das Verfahren statistische Werte, die in zwei Sätzen von Speicherstellen gespeichert sind, die von den zwei Sätzen von erzeugten Adresswerten identifiziert werden. Auf der Basis eines Satzes von Verschachtelungskriterien, der einen der zwei Sätze von Speicherstellen als den Speicherstellensatz identifiziert, der die statistischen Werte speichert, die für die Nachricht analysiert werden müssen, analysiert das Verfahren dann die statistischen Werte, die von dem identifizierten Satz von Speicherstellen gespeichert werden, um zu bestimmen, ob die Nachricht ein Teil eines großen Flusses ist. Das Verfahren kennzeichnet dann die Datennachricht als eine Nachricht, die Teil eines großen Flusses ist, wenn es bestimmt, dass die Datennachricht Teil eines großen Flusses ist.
-
Die erzeugten und analysierten statistischen Werte sind in einigen Ausführungsformen probabilistische Werte. Diese probabilistischen Werte sind nicht deterministische statistische Werte, die durch Verwenden eines deterministischen Berechnungsmodells berechnet werden. Stattdessen werden die probabilistische Werte durch Verwenden eines probabilistischen Berechnungsmodells berechnet, das definiert ist, um das Auftreten eines Ereignisses (in diesem Fall die Wahrscheinlichkeit, dass ein Datennachrichtenfluss Teil eines großen Datennachrichtenflusses ist) mit einem bestimmten Wahrscheinlichkeitsgrad zu übermitteln. Unterschiedliche Ausführungsformen verwenden unterschiedliche probabilistische Berechnungsmodelle zum Bestimmen, ob die Datennachrichtenflüsse Teil von großen Datennachrichtenflüssen sind. Beispielsweise, wie unten weiter beschrieben, verwenden einige Ausführungsformen das Count-Min-Sketch-Modell für diese Bestimmung. Ein Durchschnittsfachmann wird jedoch erkennen, dass andere Ausführungsformen andere probabilistische Berechnungsmodelle verwenden.
-
In diesem Dokument werden große Datennachrichtenflüsse als Heavy-Hitter-Flüsse bezeichnet. Heavy-Hitter-Flüsse (HH-Flüsse) sind in einigen Ausführungsformen Flüsse, die eine bestimmte Anzahl an Nachrichten oder einen bestimmten Umfang einer Nachrichtennutzlast (z. B. 50 - 100 KB) innerhalb einer bestimmten Zeitdauer (z. B. 1 ms) übersteigen. Heavy-Hitter-Flüsse können auch mit anderen Namen bezeichnet werden, wie Megaflüsse, Elefantenflüsse usw. Ebenfalls in diesem Dokument beziehen sich Datennachrichten auf eine Sammlung von Bits in einem bestimmen Format, die über ein Netzwerk gesendet wird. Ein Durchschnittsfachmann wird erkennen, dass der Begriff Datennachricht hierin dazu verwendet werden kann, sich auf verschiedene formatierte Sammlungen von Bits zu beziehen, die über ein Netzwerk gesendet werden können, wie Ethernet-Rahmen, IP-Pakete, TCP-Segmente, UDP-Datagramme usw. Ebenfalls, wie in diesem Dokument verwendet, sind Bezugnahmen auf L2-, L3-, L4- und L7-Schichten (oder Schicht 2, Schicht 3, Schicht 4 und Schicht 7) Bezugnahmen auf die zweite Datenverbindungsschicht, die dritte Netzwerkschicht, die vierte Transportschicht bzw. die siebte Anwendungsschicht des OSI-Schichtmodells (OSI = Open System Interconnection).
-
1 veranschaulicht konzeptionell einen Prozess 100, den die Datenebene eines Netzwerk-Weiterleitungselements in einigen Ausführungsformen durchführt, um große Datennachrichtenflüsse (d. h. Flüsse, die als Heavy Hitter, Megaflüsse, Elefantenflüsse usw. bezeichnet werden) zu erkennen, die von der Datenebene verarbeitet werden. Durch Verwenden dieses Prozesses 100 akkumuliert die Datenebene in einigen Ausführungsformen probabilistische statistische Werte für jeden verarbeiteten Datennachrichtenfluss in zwei oder mehr Sätzen von Speicherstellen. Die Datenebene setzt Sätze von Speicherstellen auf verschachtelte Weise zurück und liest diese, um sicherzustellen, dass jedem Speicherstellensatz, nachdem er zurückgesetzt wurde, ein Nur-Akkumulation-Zeitraum gewährt wird, während dem er probabilistische statistische Werte akkumuliert, ohne gelesen zu werden. Unter diesem Verschachtelungsansatz liest der Prozess 100 zu einer beliebigen gegebenen Zeit nur einen Speicherstellensatz (d. h. analysiert probabilistische Werte daraus) für eine empfangene Datennachricht von den zwei oder mehr Sätzen von Speicherstellen, die mit der Datennachricht assoziiert sind.
-
Für eine empfangene Datennachricht erzeugt das Verfahren (bei 105) mehrere Sätze von Adresswerten auf der Basis eines Satzes von Kennungen, die mit der Datennachricht assoziiert sind. In einigen Ausführungsformen ist jeder erzeugte Adresswert ein Hash-Wert, der von einem Hash-Generator aus der Flusskennung (z. B. Fünf-Tupel-Kennung) der Datennachricht der empfangenen Datennachrichten erzeugt wird. Um beispielsweise jeden Satz von Hash-Adresswerten zu erzeugen, verwendet der Prozess 100 in einigen Ausführungsformen mehrere Hash-Generatoren, um mehrere Hash-Adresswerte aus der Fünf-Tupel-Kennung (d. h. die Quell- und die Ziel-IP-Adresse, die Quell- und die Zielanschlussadresse und das Protokoll, das im Kopf der Datennachricht spezifiziert ist) der Datennachricht zu erzeugen. In anderen Ausführungsformen verwendet der Prozess 100 einen Hash-Generator, um einen Hash-Wert aus der Flusskennung der Datennachricht zu erzeugen, und verwendet dann mehrere unterschiedliche Teile des erzeugten Hash-Werts, um mehrere Hash-Adresswerte zu spezifizieren.
-
Jeder Satz von erzeugten Adressen identifiziert mehrere Stellen in mehreren Sätzen von Speichern. 2 veranschaulicht ein Beispiel, das zwei unterschiedliche Sätze von Hash-adressierten Tabellen 205 und 210 verwendet, die durch zwei unterschiedliche Sätze von Hash-Werten 215 und 220 adressiert werden. In diesem Beispiel werden die zwei Sätze von Hash-Werten 215 und 220 von zwei Sätzen von Hash-Generatoren 225 und 230 aus einer Fünf-Tupel-Kennung 240 einer Datennachricht erzeugt. Wie gezeigt, identifiziert jeder erzeugte Hash-Wert in jedem Satz 225 oder 230 eine Speicherstelle in einer Hash-Tabelle jedes Hash-Tabellensatzes 205 und 210. Spezifisch identifizieren die drei erzeugten Hash-Adresswerte in dem Satz 215 jeweils drei Stellen 242, 244 und 246 in dem ersten Satz von Tabellen 205 und die drei erzeugten Hash-Adresswerte in dem Satz 220 identifizieren jeweils drei Stellen 252, 254 und 256 in dem zweiten Satz von Tabellen 210.
-
Nach Erzeugen (bei 105) der Adresswerte aus dem Kennungssatz der empfangenen Datennachricht inkrementiert (bei 110) der Prozess 100 mehrere probabilistische statistische Werte, die an den Speicherstellen gespeichert sind, die von den erzeugten Adresswerten identifiziert werden. 2 veranschaulicht die Addition der Bytezahl der empfangenen Datennachricht zu dem Bytezahlwert, der an den drei Stellen 242, 244 und 246 in dem ersten Satz von Tabellen 205 und den drei Stellen 252, 254 und 256 in dem zweiten Satz von Tabellen 210 gespeichert ist. Andere Ausführungsformen akkumulieren und speichern jedoch andere Nachrichtenattribute oder akkumulieren und speichern sogar nur die Anzahl von Datennachrichten in den Hash-adressierten Speicherstellen.
-
Unter dem in 2 veranschaulichten Ansatz können Hash-Kollisionen auftreten, die dann die Statistiken, die an der Speicherstelle gepflegt werden, die von zwei kollidierenden Hash-Werten von zwei unterschiedlichen Nachrichtenwerten identifiziert werden, ungenau machen würden. 3 veranschaulicht ein Beispiel von akkumulierenden Statistiken für drei unterschiedliche Nachrichten 305, 310 und 315 von drei unterschiedlichen Nachrichtenflüssen in dem ersten Satz 205 von Hash-Tabellen. In diesem Beispiel wird die Fünf-Tupel-Kennung jeder Nachricht zu einer einzigartigen Speicherstelle 302, 304, 306, 308, 312, 314 oder 316 gehasht, mit Ausnahme des dritten Hashs der zweiten und der dritten Nachricht 310 und 315, die kollidieren, um dieselbe Stelle 318 zu identifizieren. Daher sind in diesem Beispiel die Daten, die an der Speicherstelle 318 der dritten Tabelle des ersten Hash-Tabellensatzes 205 gepflegt werden, verfälscht, da sie Statistiken beinhalten, die für sowohl den zweiten als auch den dritten Datennachrichtenfluss akkumuliert sind.
-
Ein Bearbeiten von akkumulierten Statistikungenauigkeiten aufgrund von Hash-Kollisionen ist jedoch in das Modell zur Akkumulation von probabilistischen Statistiken von 2 eingebaut. Wie unten weiter beschrieben ist, adressiert das Modell zur Akkumulation von probabilistischen Statistiken von 2 Ungenauigkeiten aufgrund von Hash-Kollisionen durch Verwenden der minimalen Bytezahl, die für ein Datennachricht in den Hash-adressierten Speicherstellen von einem der Hash-Tabellensätze gespeichert ist, um zu bestimmen, ob die Datennachricht Teil eines HH-Flusses ist. Dieser Ansatz ist ein Count-Min-Sketch-Ansatz, wobei jede Hash-adressierte Tabelle eine statistische Skizze der verarbeiteten Datennachrichtenflüsse pflegt und zu einer beliebigen gegebenen Zeit die minimale erzeugte Zahl für jeden Datennachrichtenfluss verwendet, um den HH-Status des Flusses zu beurteilen.
-
Nach Inkrementieren (bei 110) von mehreren probabilistischen statistischen Werten, die an den Speicherstellen gespeichert sind, die von den erzeugten Adresswerten identifiziert werden, identifiziert (bei 115) der Prozess 100 einen der Speicherstellensätze als den Speicherstellensatz, der die probabilistischen statistischen Werte speichert, um für die empfangene Datennachricht zu analysieren. Wie oben erwähnt, setzt die Datenebene die unterschiedlichen Sätze von Speicherstellen periodisch zurück, setzt sie jedoch zu unterschiedlichen Zeiten zurück, so dass jeder Speicherstellensatz, nachdem er zurückgesetzt wurde, in einer Nur-Akkumulieren-Periode arbeitet, um probabilistische statistische Werte zu speichern, bevor er in einer Akkumulieren-und-Zugreifen-Periode arbeitet, während der er gelesen werden kann, um zu bestimmen, ob eine Datennachricht Teil eines großen Datennachrichtenflusses ist.
-
4 veranschaulicht das periodische Zurücksetzen der zwei Sätze von Hash-adressierbaren Tabellen 205 und 210 von 2 sowie die Nur-Akkumulieren-Perioden und die Akkumulieren-und-Zugreifen-Perioden von jedem der zwei Hash-adressierbaren Tabellensätze. In diesem Beispiel werden die Nur-Akkumulieren-Perioden als die Nur-Schreibzeiträume bezeichnet, während die Akkumulieren-und-Zugreifen-Perioden als die Lese-Schreibzeiträume bezeichnet werden. Wie gezeigt, setzt die Datenebene jeden Tabellensatz periodisch alle 2 ms zurück, verschachtelt jedoch dieses Zurücksetzen, so dass in jeder 2-ms-Periode der ersten Tabellensatz 205 in einem Nur-Schreibmodus für eine erste 1-ms-Unterperiode und in einem Lese-Schreibmodus für eine zweite 1-ms-Unterperiode arbeitet, während der zweite Tabellensatz 210 in einem Lese-Schreibmodus für die erste 1-ms-Unterperiode und in einem Nur-Schreibmodus für die zweite 1-ms-Unterperiode arbeitet.
-
Während ein Speicherstellensatz in seiner ersten Nur-Schreibperiode arbeitet, nachdem er zurückgesetzt wurde, arbeitet folglich der andere Speicherstellensatz in einer zweiten Lese-Schreibperiode, um probabilistische statistische Werte zu speichern und gespeicherte probabilistische statistische Werte bereitzustellen, um zu bestimmen, ob eine beliebige Datennachricht Teil eines großen Datennachrichtenflusses ist. Dementsprechend, wenn der Prozess 100 eine Datennachricht unter diesem Ansatz empfängt, erzeugt der Prozess einen ersten und einen zweiten Satz von Speicheradresswerten (z. B. zwei Sätze von Hash-Werten) und inkrementiert probabilistische statistische Werte, die in beiden Tabellensätzen 205 und 210 an mehreren Stellen gespeichert sind, die von den mehreren erzeugten Hash-Werten identifiziert werden, um die empfangene Datennachricht zu berücksichtigen. Um zu bestimmen, ob die empfangene Datennachricht Teil eines HH-Flusses zu einer beliebigen gegebenen Zeit ist, analysiert der Prozess 100 jedoch nur die statistischen Werte, die an den adressierten Stellen des Tabellensatzes gespeichert sind, der zu dieser Zeit in seiner Lese-Schreibperiode arbeitet.
-
Nach Identifizieren (bei 115) von einem der Speicherstellensätze als den Speicherstellensatz, der die probabilistischen statistischen Werte speichert, um für die empfangene Datennachricht zu analysieren, analysiert (bei 120) der Prozess die probabilistischen statistischen Werte, die an dem identifizierten Speicherstellensatz gespeichert sind, an den Stellen, die bei 110 inkrementiert wurden (d. h. an den Stellen, die von den bei 105 erzeugten Adressen spezifiziert werden), um zu bestimmen, ob die Datennachricht als Teil eines HH-Flusses gekennzeichnet werden sollte.
-
5 veranschaulicht ein Beispiel einer Datennachricht, die zu einer Zeit t1 empfangen wird. Zu dieser Zeit arbeitet der erste Satz von Hash-Tabellen 205 in seinem Lese-Schreibmodus. Um zu bestimmen, ob die empfangene Datennachricht als Teil eines HH-Flusses gekennzeichnet werden sollte, werden dementsprechend die drei Hash-Tabellen dieses Satzes 205 an den drei Speicherstellen gelesen, die mit der empfangenen Datennachricht assoziiert sind (d. h. an den Stellen in diesem Satz von Tabellen 205, die von den Adressen spezifiziert werden, die bei 105 für die empfangene Datennachricht erzeugt wurden). In diesem Beispiel sind die drei gelesenen Datenwerte drei Bytezahlwerte, die einem Min-Count-Selektor/Komparator 505 zugeführt werden. Dieses Modul wählt den kleinsten der drei Bytezahlwerte aus und bestimmt dann, ob dieser kleinste Wert einen Bytezahlschwellenwert übersteigt.
-
Wenn dies der Fall ist, ist die Annahme, dass die Datennachricht zu einem HH-Fluss gehört, da obwohl eine beliebige oder zwei beliebige Hash-adressierte Stellen unter Hash-Kollisionen zwischen mehreren unterschiedlichen Flüssen gelitten haben könnten, die Wahrscheinlichkeit, dass alle drei Hash-adressierten Stellen verfälscht sind, sehr gering ist. Zudem ist es am wenigsten wahrscheinlich, dass die Stelle mit dem kleinsten Bytezahlwert verfälscht wurde. Dies liegt darin begründet, dass die verfälschten Stellen notwendigerweise größere Bytezahlen haben würden, da ihre Bytezahlen die Bytezahlen der Nachrichten von demselben Fluss wie die empfangenen Datennachrichten und die Bytezahlen von anderen kollidierenden Nachrichtenflüssen berücksichtigen würden. Andererseits würde die Stelle mit dem kleinsten Bytezahlwert wahrscheinlich nur die Bytezahl für den empfangenen Nachrichtenfluss widerspiegeln.
-
Ein Durchschnittsfachmann wird erkennen, dass der Prozess 100 in anderen Ausführungsformen den Min-Count-Selektor/Komparator 505 in 5 nicht verwenden würde. Beispielsweise, wie unten weiter beschrieben, wird der Prozess 100 in einigen Ausführungsformen von zustandsbehafteten arithmetisch-logischen Einheiten (ALU) implementiert, die nach Inkrementieren ihres jeweiligen probabilistischen statistischen Werts für eine Datennachricht einen Schwellenwertvorgang durchführen, um zu bestimmen, ob ihr jeweiliger inkrementierter Wert einen Schwellenwert übersteigt, und falls dies der Fall ist, ein Bit auszugeben, um anzugeben, dass die Datennachricht gemäß ihren Aufzeichnungen Teil eines HH-Flusses ist. In diesen Ausführungsformen wird die Datennachricht als Teil eines HH-Flusses gekennzeichnet, wenn die Bits, die von allen zustandsbehafteten ALU ausgegeben werden, angeben, dass die Datennachricht Teil eines HH-Flusses ist.
-
Nach Analysieren (bei 120) der probabilistischen statistischen Werte, die an dem identifizierten Speicherstellensatz gespeichert sind, bestimmt (bei 125) der Prozess, ob die Datennachricht als Teil eines HH-Flusses gekennzeichnet werden sollte. Falls dies nicht der Fall ist, endet der Prozess. Andernfalls kennzeichnet der Prozess (bei 130) die Datennachricht als Teil eines HH-Flusses. 5 veranschaulicht dies durch Präsentieren eines Nachrichtenkennzeichners 510, der (1) ein HHD-Satz-Bit von dem Min-Count-Selektor/Komparator 505 empfängt (das angibt, dass die drei Bytezahlen alle den Schwellenwert überstiegen), und (2) die Datennachricht mit einem HHD-Satz-Tag 515 assoziiert (z. B. diesen Tag in einen Kopf der Datennachricht oder einen Kopfvektor der Datennachricht einfügt), der angibt, dass die Datennachricht Teil eines HH-Flusses ist. Wie unten weiter beschrieben, kann diese HHD-Kennzeichnung dann von anderen Komponenten des Netzwerk-Weiterleitungselements oder von anderen Netzwerk-Weiterleitungselementen oder Middlebox-Diensten verwendet werden, um einen Vorgang an der Datennachricht durchzuführen. Nach 130 endet der Prozess 100.
-
6 veranschaulicht ein Beispiel eines Weiterleitungselements 600 mit einer Datenebenenschaltung 620, die dazu konfiguriert werden kann, einen HH-Detektor 650 zu implementieren, der HH-Flüsse in der Datenebene erkennt. Das Weiterleitungselement 600 leitet Datennachrichten innerhalb eines Netzwerks 610 weiter. Das Weiterleitungselement 600 kann ein beliebiger Weiterleitungselementtyp sein, wie ein Switch, ein Router, eine Bridge usw. In 6 wird das Weiterleitungselement als ein Non-Edge-Weiterleitungselement im Inneren des Netzwerks eingesetzt, um Datennachrichten von einer Quellvorrichtung 605 zu einer Zielvorrichtung 607 weiterzuleiten.
-
In anderen Fällen wird das Weiterleitungselement 600 als ein Edge-Weiterleitungselement an der Edge (Kante) des Netzwerks eingesetzt, um eine Verbindung mit Rechenvorrichtungen (z. B. Einzel- oder Host-Computer) herzustellen, die als Quellen und Ziele der Datennachrichten dienen. Als ein Non-Edge-Weiterleitungselement leitet das Weiterleitungselement 600 Datennachrichten zwischen Weiterleitungselementen in dem Netzwerk (d. h. durch eine eingreifende Netzwerk-Fabric 610) weiter. Als ein Edge-Weiterleitungselement leitet das Weiterleitungselement Datennachrichten an und von Edge-Rechenvorrichtungen zueinander, an andere Edge-Weiterleitungselemente und/oder an Non-Edge-Weiterleitungselemente weiter.
-
Wie gezeigt, beinhaltet das Weiterleitungselement 600 (1) eine Datenebenenschaltung 620 (die „Datenebene 620“), die die Weiterleitungsvorgänge des Weiterleitungselements 600 durchführt, um Datennachrichten, die von dem Weiterleitungselement empfangen werden, an andere Vorrichtungen weiterzuleiten, und (2) eine Steuerebenenschaltung 625 (die „Steuerebene 625“), die die Datenebenenschaltung konfiguriert. Das Weiterleitungselement 600 beinhaltet außerdem physische Anschlüsse 612, die Datennachrichten von Vorrichtungen außerhalb des Weiterleitungselements 600 empfangen und Datennachrichten an diese übertragen.
-
Die Steuerebene 625 konfiguriert die Datenebene 620. In einigen Ausführungsformen beinhaltet die Steuerebene (1) ein oder mehrere Prozessoren (wie einen Mikroprozessor mit mehreren Verarbeitungskernen oder -einheiten) und (2) einen Speicher, der Anweisungen für Prozesse speichert, die bei Ausführung durch die Prozessoren die Steuerebenenvorgänge durchführen. Diese Anweisungen können von (1) einem Hersteller des Netzwerk-Weiterleitungselements 600, das die Steuer- und die Datenebene 625 und 620 beinhaltet, (2) einen Netzwerk-Administrator, der die Netzwerk-Weiterleitung 600 einsetzt und pflegt, oder (3) ein oder mehrere automatische Prozesse, die auf Servern und/oder Netzwerk-Weiterleitungselementen ausgeführt werden, die Netzwerkbedingungen überwachen, spezifiziert werden. Der Steuerebenenprozessor oder eine andere Schaltung der Steuerebene kommuniziert mit der Datenebene (z. B. um die Datenebene zu konfigurieren oder Statistiken von der Datenebene zu empfangen) durch eine Steuer-/Datenebenenschnittstelle.
-
Die Datenebenenschaltung 620 beinhaltet Anschlüsse 615, die Datennachrichten zur Verarbeitung empfangen und Datennachrichten übertragen, nachdem sie verarbeitet wurden. Einige Anschlüsse 615 der Datenebene 620 sind mit den physischen Anschlüssen 612 des Weiterleitungselements 600 assoziiert, während andere Anschlüsse 615 mit anderen Modulen der Datenebene 620 assoziiert sind. Die Datenebene 620 beinhaltet außerdem Nachrichtengeneratoren 635, mehrere Eingangspipelinestufen 640, mehrere Ausgangspipelinestufen 642 und einen Verkehrsmanager 644. In einigen Ausführungsformen ist die Datenebene auf einer anwendungsspezifischen integrierten Schaltung (ASIC) implementiert und ihre Komponenten sind auf dieser integrierten Schaltung implementiert.
-
Die Nachrichtengeneratoren erzeugen Nachrichten in der Datenebene. In einigen Ausführungsformen können diese Nachrichten Schaltungen in der Datenebene anleiten, bestimmte Vorgänge (z. B. die Speicher zurückzusetzen, die die akkumulierten probabilistischen Statistiken speichern) durchzuführen oder Daten (z. B. akkumulierte probabilistische Statistiken) in den Nachrichten zum Export an die Steuerebene oder an eine andere Vorrichtung durch ein Netzwerk zu speichern. Die Eingangs- und Ausgangspipelines verarbeiten die Datennachrichten, die von dem Weiterleitungselement empfangen werden, um diese Nachrichten an ihre Ziele in dem Netzwerk weiterzuleiten. Der Verkehrsmanager 644 beinhaltet in einigen Ausführungsformen einen Crossbar-Switch, der Nachrichten von den Eingangspipelines zu Ausgangspipelines leitet.
-
Jede Eingangs- oder Ausgangspipeline beinhaltet mehrere konfigurierbare (d. h. programmierbare) Nachrichtenverarbeitungsstufen 632, die dazu konfiguriert sein können, die Datenebenenweiterleitungsvorgänge des Weiterleitungselements 600 durchzuführen, um Datennachrichten zu verarbeiten und an ihre Ziele weiterzuleiten. Diese Nachrichtenverarbeitungsstufen führen diese Weiterleitungsvorgänge durch Verarbeiten von Datentupeln (z. B. Nachrichtenköpfen), die mit Datennachrichten assoziiert sind, die von der Datenebene 620 empfangen werden, durch, um zu bestimmen, wie die Nachrichten weiterzuleiten sind.
-
Die Nachrichtenverarbeitungsstufen in diesem Beispiel sind Aktionsabgleichseinheiten (MAU) 632. Wie unten durch Bezugnahme auf 7 weiter beschrieben, ist eine MAU in einigen Ausführungsformen eine Schaltung, die Abgleichstabellen beinhaltet, die mehrere Datensätze zum Abgleichen mit Datentupeln (z. B. Kopfvektoren) der verarbeiteten Datennachrichten speichern. Wenn eine Datennachricht mit einem Abgleichsdatensatz übereinstimmt, führt die MAU eine Aktion durch, die von einem Aktionsdatensatz spezifiziert wird, der mit dem identifizierten Abgleichsdatensatz assoziiert ist (z. B. ein Aktionsdatensatz, der von dem identifizierten Abgleichsdatensatz identifiziert wird).
-
In einigen Ausführungsformen beinhaltet eine MAU außerdem einen Satz von ALU (z. B. vier ALU), die Rechenvorgänge auf der Basis von Parametern, die von den Kopfvektoren und/oder den Abgleichstabellen spezifiziert werden, durchführen. Die ALU können das Ergebnis ihrer Vorgänge in zustandsbehafteten Tabellen speichern, auf die sie zugreifen können, und/oder können diese Ergebnisse in die Kopfvektoren schreiben (z. B. direkt oder durch Anleiten einer anderen Aktions-ALU, diese Ergebnisse in die Kopfvektoren zu schreiben), für andere MAU-Stufen zur Verarbeitung.
-
Neben den MAU-Stufen beinhaltet jede Eingangs- oder Ausgangspipeline einen Parser 630 und einen Deparser 634. Ein Parser 630 einer Pipeline extrahiert einen Nachrichtenkopf aus einer Datennachricht, die die Pipeline zur Verarbeitung empfängt. In einigen Ausführungsformen ist der extrahierte Kopf in einem Format eines Kopfvektors (HV), der verarbeitet wird, und in einigen Fällen durch aufeinanderfolgende Nachrichtenverarbeitungsstufen 632 als Teil ihrer Nachrichtenverarbeitungsvorgänge modifiziert. Der Parser 630 einer Pipeline leitet die Nutzlast der Nachricht an den Deparser 634, während die Nachrichtenverarbeitungsstufen 632 der Pipeline an den Kopfvektoren arbeiten. In einigen Ausführungsformen leitet der Parser außerdem den Nachrichtenkopf an den Deparser 634 zusammen mit der Nutzlast (d. h. der Parser leitet die gesamte Nachricht an den Deparser).
-
Wenn eine Pipeline eine Verarbeitung einer Datennachricht abschließt und die Nachricht an den Verkehrsmanager (im Fall einer Eingangspipeline) oder an einen Anschluss 615 (im Fall einer Ausgangspipeline) bereitgestellt werden muss, um an den nächsten Hop der Nachricht (z. B. an ihren Zielberechnungsknoten oder das nächste Weiterleitungselement) weitergeleitet zu werden, produziert ein Deparser 634 der Pipeline in einigen Ausführungsformen den Datennachrichtenkopf aus dem Kopfvektor der Nachricht, der von der Stufe zur Verarbeitung der letzten Nachricht der Pipeline verarbeitet wurde, und kombiniert diesen Kopf mit der Nutzlast der Datennachricht. In einigen Ausführungsformen verwendet der Deparser 634 einen Teil des Kopfs, der von dem Parser 630 empfangen wurde, um die Nachricht aus ihrem assoziierten Kopfvektor wiederherzustellen.
-
Wie in 6 gezeigt, sind eine oder mehrere Datenebenenkomponenten dazu konfiguriert, den Heavy-Hitter-Detektor 650 zu implementieren. Der HH-Detektor 650 untersucht den Kopfvektor für jede Datennachricht, die von der Datenebene verarbeitet wurde, um zu bestimmen, ob die Datennachricht Teil eines HH-Flusses ist. Falls dies der Fall ist, markiert er den Kopfvektor der Datennachricht, so dass eine oder mehrere anschließende Nachrichtenverarbeitungsstufen einen Vorgang an der Datennachricht durchführen können. Wie oben erwähnt, beinhalten Beispiele derartiger Vorgänge (1) ein Senden einer gespiegelten Kopie der Datennachricht an einen Server-Cluster oder einen Anwendungs-Cluster in dem Netzwerk, (2) ein Durchführen eines ECMP-Vorgangs an der Datennachricht, der große HH-Flüsse in mehrere kleinere Flüsse aufbricht, die unterschiedliche Wege mit gleichen Kosten zu dem Ziel des großen Flusses nehmen, und (3) ein Durchführen von Vorgängen, um die nachteilige Auswirkung der großen Flüsse auf die Beendigungszeit von anderen Flüssen (z. B. durch Verwenden von Techniken wie faires Fallenlassen von Paketen, Vorrangwarteschlangenbildung usw.) abzuschwächen. Sie beinhalten außerdem ein Einbetten dieser Kennzeichnung in den Kopf der Datennachricht vor dem Weiterleiten der Datennachricht an ein anderes Weiterleitungselement, einen Endberechnungsknoten (z. B. Server) oder eine Anwendung, das, der bzw. die einen Vorgang an der Datennachricht auf der Basis der Kennzeichnung in ihrem Kopf durchführt.
-
Diese Figur veranschaulicht konzeptionell, dass die Komponente des HH-Detektors 650 einen Statistikakkumulator 652, einen Statistikspeicher 654, einen Statistikanalysator 656, eine Rücksetzschaltung 658 und einen Nachrichtenkennzeichner 660 aufweist. Der Statistikakkumulator 652 inkrementiert in einigen Ausführungsformen die probabilistischen statistischen Werte, die in dem Statistikspeicher 654 gepflegt werden, für jeden Datennachrichtenfluss, den die Datenebene verarbeitet. Andererseits vergleicht der Statistikanalysator 656 die akkumulierten Statistiken mit einem oder mehreren Schwellenwerten, um zu bestimmen, ob die verarbeiteten Datennachrichten als Teil von HH-Flüssen gekennzeichnet werden sollten. Wenn der Analysator 656 bestimmt, dass die akkumulierten Statistiken für eine Datennachricht einen Schwellenwert übersteigen, markiert der Nachrichtenkennzeichner 660 den Kopfvektor der Datennachricht, um anzugeben, dass sie zu einem HH-Fluss gehört.
-
In einigen Ausführungsformen akkumulieren und analysieren die zustandsbehafteten ALU von mindestens zwei MAU-Stufen die probabilistischen statistischen Werte für die Datennachrichtenflüsse in zwei Sätzen von vier zustandsbehafteten ALU-Tabellen, die analog zu dem ersten und dem zweiten Tabellensatz 205 und 210 sind, mit Ausnahme davon, dass jeder Satz vier zustandsbehaftete Tabellen beinhaltet, die von vier zustandsbehafteten ALU einer MAU-Stufe gepflegt werden. Anders ausgedrückt, der Statistikakkumulator 652 und der Statistikspeicher 654 sind in einigen Ausführungsformen durch die zustandsbehafteten ALU und die zustandsbehafteten ALU-Tabellen von zwei MAU-Stufen 632 implementiert, während der Statistikanalysator 656 durch die Aktions-ALU dieser zwei MAU-Stufen implementiert ist.
-
Spezifisch akkumuliert jeder der vier zustandsbehafteten ALU von jedem einen von diesen zwei MAU-Stufen in einigen Ausführungsformen probabilistische statistische Werte in ihrer jeweiligen zustandsbehafteten Tabelle und gibt die akkumulierten probabilistischen statistischen Werte an eine Aktions-ALU in ihrer MAU-Stufe aus. Für eine Datennachricht bestimmt die Aktions-ALU der MAU-Stufe, ob ein Schwellenwert durch jeden akkumulierten probabilistischen statistischen Wert, den jede der vier zustandsbehafteten ALU für die Datennachricht ausgibt, überstiegen wird. Falls dies der Fall ist, zeichnet die Aktions-ALU der MAU-Stufe ein HH-Bit in dem Kopfvektor der Datennachricht auf, so dass anschließende MAU-Stufen einen Vorgang an der Datennachricht auf der Basis dieser Einstellung durchführen können. Dieser Schwellenwertvorgang ist eine alternative Methode zum Durchführen der Count-Min-Sketch-Bestimmung als der in 5 veranschaulichte Ansatz. Anstelle eines Identifizierens des niedrigsten statistischen Werts und eines Vergleichens dieses Werts mit dem Schwellenwert stellt die Aktions-ALU von einigen Ausführungsformen spezifisch sicher, dass alle ausgegebenen statistischen Werte den Schwellenwert übersteigen. Falls dies der Fall ist, übersteigt der niedrigste Wert zwangsläufig den Schwellenwert.
-
In einigen Ausführungsformen führt die Aktions-ALU diesen Schwellenwertvorgang durch, wenn ihr Statistikspeicher der MAU in seinem Lese-/Schreibzyklus arbeitet. Wenn der Statistikspeicher der MAU in seinem Nur-Schreibzyklus arbeitet oder zurückgesetzt wird, führt die Aktions-ALU in einigen Ausführungsformen ihren Schwellenwertvorgang nicht durch. Zudem betten einige Ausführungsformen den Schwellenwert für eine Datennachricht in dem Kopfvektor der Datennachricht ein. Beispielsweise verwenden einige Ausführungsformen nicht einen statistischen Schwellenwert für alle Datennachrichten (z. B. alle Datennachrichten in einem Fluss), sondern justieren (z. B. erhöhen) den Schwellenwert mit dem Lauf der Zeit während eines Lese-Schreibzyklus einer MAU-Stufe. Wie unten durch Bezugnahme auf 8 weiter beschrieben, berechnet eine frühere MAU-Stufe in einigen dieser Ausführungsformen den Schwellenwert für eine Datennachricht und bettet diesen Schwellenwert in dem Kopfvektor der Datennachricht zur anschließenden Verarbeitung durch eine MAU-Stufe ein, die den Statistikanalysator 656 für jene Datennachricht implementiert.
-
Ein Durchschnittsfachmann wird erkennen, dass andere Ausführungsformen den Statistikakkumulator 652, den Statistikspeicher 654 und den Statistikanalysator 656 in der Datenebene anders implementieren. Beispielsweise implementieren andere Ausführungsformen diese Komponenten mit einer anderen Anzahl von Stufen und/oder mit anderen Anzahlen von zustandsbehafteten ALU und zustandsbehafteten Tabellen. Zudem implementieren andere Ausführungsformen den Schwellenwertvorgang anders, z. B. lassen die zustandsbehaftete ALU einer Stufe sowohl den Statistikakkumulator als auch den Statistikanalysator implementieren oder lassen eine zustandsbehaftete ALU oder Aktions-ALU einer anderen MAU den Statistikanalysator implementieren.
-
Die Rücksetzschaltung 658 setzt jeden Satz von Statistiken sammelnden zustandsbehafteten ALU-Tabellen periodisch zurück, um sicherzustellen, dass der Datenstatistiken sammelnde Speicher 654 nicht abgestanden wird. Wie oben erwähnt, sind die gespeicherten probabilistischen statistischen Werte nur in dem Count-Min-Sketch-Modell für eine kurze Zeitdauer (z. B. für 2 ms) gültig. Der Nachrichtengenerator 635 wird in einigen Ausführungsformen dazu verwendet, die Rücksetzschaltung zu implementieren. Spezifisch konfiguriert die Steuerebene 625 in einigen Ausführungsformen den Nachrichtengenerator 635 oder leitet diesen an, um periodisch Nachrichten zu erzeugen, die eine HHD implementierende MAU dazu anleiten, die Werte zurückzusetzen, die in ihren zustandsbehafteten Tabellen gespeichert sind, die die erzeugten probabilistischen statistischen Werte speicherten. Wenn mehrere MAU mehrere unterschiedliche Sätze von Statistiktabellen implementieren, erzeugt der Nachrichtengenerator in einigen Ausführungsformen unterschiedliche Nachrichten für unterschiedliche MAU zu unterschiedlichen Momenten, um sicherzustellen, dass keine zwei MAU, die zwei unterschiedliche Sätze von Tabellen implementieren, ihre Statistiktabellen zur selben Zeit zurücksetzen. In einigen Ausführungsformen werden die Nachrichten, die von dem Nachrichtengenerator 635 erzeugt werden, von den Eingangs- und Ausgangspipelines auf dieselbe Weise verarbeitet wie die Nachrichten, die das Weiterleitungselement durch seine Anschlüsse 612 empfängt.
-
7 veranschaulicht Beispiele von zustandsbehafteten Speichern und Verarbeitungseinheiten, die einige Ausführungsformen in einer Aktionsabgleichseinheit 632 verwenden, um die verschiedenen Komponenten des HH-Detektors 650 zu implementieren. Wie oben erwähnt, weist eine Eingangspipeline 640 oder eine Ausgangspipeline 642 in einigen Ausführungsformen mehrere MAU-Stufen 632 auf, die jeweils Nachrichtenverarbeitungsschaltkreise zum Weiterleiten von empfangenen Datennachrichten und/oder Durchführen von zustandsbehafteten Vorgängen auf der Basis von Kopfvektoren, die mit der Datennachricht assoziiert sind, beinhalten. In einigen Ausführungsformen konfiguriert die Steuerebene 625 des Weiterleitungselements 600 oder eine entfernte Steuerebene die MAU-Stufen 632 der Datenebene 620, um nicht nur die Weiterleitungsvorgänge dieser MAU-Stufen, sondern auch die HH-Erkennungsvorgänge, die einige der MAU-Stufen 632 durchführen, durchzuführen. Diese Vorgänge werden durch Verarbeiten von Werten durchgeführt, die in den Kopfvektoren gespeichert sind, die für die Datennachrichten erzeugt werden.
-
Die zustandsbehafteten Vorgänge der Datenebene werden durch die Fähigkeit der Datenebene ermöglicht, Daten, die sie aus dem Verarbeiten von früheren Datennachrichten erzeugt, zur Verarbeitung von anschließenden Datennachrichten zu speichern. Um zustandsbehaftete HH-Erkennungsvorgänge durchzuführen, verwenden die HHD implementierenden MAU-Stufen 632 in einigen Ausführungsformen ihre zustandsbehafteten ALU 710 und ihre assoziierten zustandsbehafteten Tabellen 715, wie in 7 gezeigt.
-
Neben den zustandsbehafteten ALU 710 und den zustandsbehafteten Tabellen 715 weist die MAU-Stufe 632 in einigen Ausführungsformen einen Satz von einer oder mehreren Abgleichstabellen 705, einen Aktions-Crossbar 730, einen Aktionsparameterspeicher 720, einen Aktionsanweisungsspeicher 725 und eine Aktions-ALU 735 auf. Der Abgleichstabellensatz 705 kann ein oder mehrere Felder in einem Kopfvektor einer empfangenen Nachricht vergleichen, um ein oder mehrere übereinstimmende Fluss-Einträge (d. h. Einträge, die mit dem HV der Nachricht übereinstimmen) zu identifizieren. Der Abgleichstabellensatz 705 kann in einigen Ausführungsformen TCAM-Tabellen oder Tabellen von exakten Abgleichen beinhalten. In einigen Ausführungsformen kann auf den Abgleichstabellensatz an einer Adresse zugegriffen werden, die ein Wert ist, der aus einem oder mehreren Feldern des Kopfvektors der Nachricht extrahiert wird, oder sie kann ein Hash dieses extrahierten Werts sein. In einigen Ausführungsformen führt die lokale Steuerebene oder eine entfernte Steuerebene Fluss-Einträge (z. B. die Flussabgleichskennungen und/oder Aktionskennungen) zu, um sie in einem oder mehreren Abgleichstabellen und assoziierten Aktionstabellen zu speichern.
-
In einigen Ausführungsformen stellt der Wert, der in einem Abgleichstabellendatensatz gespeichert ist, der mit Flussattributen einer Nachricht übereinstimmt, oder auf den an einer Hash-erzeugten Adresse von einem oder mehreren Nachrichtenflussattributen zugegriffen wird, Adressen von Datensätzen bereit, um auf sie in dem Aktionsparameterspeicher 720 und dem Aktionsanweisungsspeicher 725 zuzugreifen. Die von der MAU-Stufe 632 durchgeführten Aktionen können Aktionen beinhalten, die das Weiterleitungselement an einer empfangenen Datennachricht durchführen muss, um die Datennachricht zu verarbeiten (z. B. die Nachricht fallen zu lassen oder die Nachricht an ihren Zielrechner oder andere eingreifende Weiterleitungselemente weiterzuleiten).
-
Außerdem kann der Wert, der in einem Abgleichstabellendatensatz gespeichert ist, der mit Flussattributen einer Nachricht übereinstimmt, oder auf den an einer Hash-erzeugten Adresse zugegriffen wird, in einigen Ausführungsformen eine Adresse und/oder Parameter für einen oder mehrere Datensätze in dem zustandsbehafteten Tabellensatz 715 bereitstellen und kann eine Anweisung und/oder einen Parameter für den Satz von zustandsbehafteten ALU 710 bereitstellen. Wie gezeigt, empfangen die zustandsbehafteten ALU 710 und die zustandsbehafteten Tabellen 715 außerdem einen Kopfvektor einer verarbeiteten Nachricht. Die Kopfvektoren können Anweisungen und/oder Parameter für die zustandsbehafteten ALU beinhalten, während sie Adressen und/oder Parameter für die zustandsbehafteten Tabellen 715 enthalten.
-
Die zustandsbehafteten ALU 710 führen in einigen Ausführungsformen einen oder mehrere zustandsbehaftete Vorgänge durch, während zustandsbehaftete Tabellen 715 Zustandsdaten speichern, die von den zustandsbehafteten ALU 710 verwendet und erzeugt werden. In einigen Ausführungsformen führen die zustandsbehafteten ALU Vorgänge synchron mit dem Datenfluss der Nachrichtenverarbeitungspipeline durch (d. h. synchron mit der Datenleitungsrate der Datenebene 620). Somit können die zustandsbehafteten ALU einen anderen Kopfvektor bei jedem Taktzyklus verarbeiten, wodurch sichergestellt wird, dass die zustandsbehafteten ALU dazu in der Lage wären, synchron mit dem Datenfluss der Nachrichtenverarbeitungspipeline zu arbeiten.
-
In einigen Ausführungsformen stellt die lokale oder entfernte Steuerebene Konfigurationsdaten bereit, um die zustandsbehafteten ALU 710 der MAU 632 der Datenebene 620 zu programmieren. Die zustandsbehaftete ALU 710 gibt einen Aktionsparameter an den Aktions-Crossbar 730 aus. Der Aktionsparameterspeicher 720 gibt ebenfalls einen Aktionsparameter an diesen Crossbar 730 aus. Der Aktionsparameterspeicher 720 ruft den Aktionsparameter, den er ausgibt, von seinem Datensatz ab, der durch die Adresse identifiziert wird, die von dem Abgleichstabellendatensatz 705 bereitgestellt wird. Der Aktions-Crossbar 730 bildet in einigen Ausführungsformen die Aktionsparameter, die von den zustandsbehafteten ALU 710 und dem Aktionsparameterspeicher 720 empfangen werden, auf einen Aktionsparameterbus 740 der Aktions-ALU 735 ab. Dieser Bus stellt den Aktionsparameter an diese ALU 735 bereit. Für unterschiedliche Datennachrichten kann der Aktions-Crossbar 730 die Aktionsparameter von zustandsbehafteten ALU 710 und dem Speicher 720 anders auf diesen Bus 740 abbilden. Der Crossbar kann die Aktionsparameter von einer dieser Quellen in ihrer Gesamtheit diesem Bus 740 zuführen oder kann gleichzeitig unterschiedliche Teile dieser Parameter für diesen Bus auswählen.
-
Die Aktions-ALU 735 empfängt außerdem eine auszuführende Anweisung aus dem Aktionsanweisungsspeicher 725. Dieser Speicher 725 ruft die Anweisung von seinem Datensatz ab, der durch die Adresse identifiziert wird, die von dem Abgleichstabellendatensatz 705 bereitgestellt wird. Die Aktions-ALU 735 empfängt außerdem den Kopfvektor für jede Nachricht, die die MAU verarbeitet. Ein derartiger Kopfvektor kann außerdem einen Teil oder die Gesamtheit einer zu verarbeitenden Anweisung und/oder einen Parameter zur Verarbeitung der Anweisung enthalten.
-
Die Aktions-ALU 735 ist in einigen Ausführungsformen ein sehr großes Anweisungstextverarbeitungsprogramm (VLIW-Verarbeitungsprogramm). Die Aktions-ALU 735 führt Anweisungen (aus dem Anweisungsspeicher 725 oder dem Kopfvektor) auf der Basis von Parametern aus, die auf dem Aktionsparameterbus 740 empfangen werden oder in dem Kopfvektor enthalten sind. Die Aktions-ALU speichert die Ausgabe ihres Vorgangs in dem Kopfvektor, um einen Nachrichtenweiterleitungsvorgang und/oder einen zustandsbehafteten Vorgang seiner MAU-Stufe 632 zu bewirken. Die Ausgabe der Aktions-ALU bildet einen modifizierten Kopfvektor (HV') für die nächste MAU-Stufe oder den Deparser. In einigen Ausführungsformen beinhalten Beispiele derartiger Aktionen ein Kennzeichnen einer verarbeiteten Datennachricht als Teil eines HH-Flusses.
-
In anderen Ausführungsformen kann auf die Abgleichstabellen 705 und die Aktionstabellen 715, 720 und 725 der MAU-Stufe 632 auch durch andere Verfahren zugegriffen werden. Beispielsweise kann in einigen Ausführungsformen jede Aktionstabelle 715, 720 oder 725 durch ein direktes Adressierschema, ein indirektes Adressierschema und ein unabhängiges Adressierschema adressiert werden. Das Adressierschema, das verwendet wird, hängt von der Konfiguration der MAU-Stufe ab, die in einigen Ausführungsformen für alle verarbeiteten Datennachrichten festgelegt ist, während sie in anderen Ausführungsformen für unterschiedliche verarbeitete Datennachrichten unterschiedlich sein kann.
-
Im direkten Adressierschema verwendet die Aktionstabelle dieselbe Adresse, die dazu verwendet wird, den übereinstimmenden Fluss-Eintrag in dem Abgleichstabellendatensatz 705 zu adressieren. Wie im Fall einer Abgleichstabelle 705 kann diese Adresse ein Hash-erzeugter Adresswert oder ein Wert aus dem Kopfvektor sein. Spezifisch kann die direkte Adresse für eine Aktionstabelle eine Hash-Adresse sein, die ein Hash-Generator (nicht gezeigt) der MAU durch Hashen eines Werts aus einem oder mehreren Feldern des Kopfvektors der Nachricht erzeugt. Alternativ dazu kann diese direkte Adresse ein Wert sein, der aus einem oder mehreren Feldern des Kopfvektors extrahiert wird.
-
Andererseits greift das indirekte Adressierschema auf eine Aktionstabelle durch Verwendung eines Adresswerts zu, der aus einem oder mehreren Datensätzen extrahiert wird, die in dem Abgleichstabellensatz 705 für einen Kopfvektor einer Nachricht identifiziert werden. Wie oben erwähnt, werden die Abgleichstabellendatensätze in einigen Ausführungsformen durch direktes Adressieren oder Datensatzabgleichsvorgänge identifiziert.
-
Das unabhängige Adressschema ist dem direkten Adressierschema ähnlich, mit Ausnahme davon, dass es nicht dieselbe Adresse verwendet, die dazu verwendet wird, auf den Abgleichstabellensatz 705 zuzugreifen. Wie beim direkten Adressierschema kann die Tabellenadresse in dem unabhängigen Adressierschema entweder der Wert sein, der aus einem oder mehreren Feldern des Kopfvektors der Nachricht extrahiert wird, oder sie kann ein Hash dieses extrahierten Werts sein. In einigen Ausführungsformen kann nicht auf alle der Aktionstabellen 715, 720 und 725 durch diese drei Adressierschemata zugegriffen werden, z. B. wird auf den Aktionsanweisungsspeicher 725 in einigen Ausführungsformen durch nur das direkte und das indirekte Adressierschema zugegriffen. Außerdem werden andere Adressierschemata dazu verwendet, einige der Tabellen (z. B. Aktionstabellen) zu adressieren.
-
Wie oben erwähnt, akkumulieren und analysieren die zustandsbehafteten ALU 710 von mindestens zwei MAU-Stufen 632 die probabilistischen statistischen Werte für die Datennachrichtenflüsse in ihren jeweiligen zustandsbehafteten ALU-Tabellen 715. Auf der Basis eines Hash-Adresswerts, der von einem Hash-Generator (nicht gezeigt) ihrer MAU erzeugt wird, akkumuliert jede zustandsbehaftete ALU 710 jeder HHD implementierenden MAU-Stufe probabilistische statistische Werte in ihrer jeweiligen zustandsbehafteten Tabelle 715 und gibt die akkumulierten probabilistischen statistischen Werte an ihre Aktions-ALU 735 in ihrer MAU-Stufe aus. Für eine Datennachricht bestimmt die Aktions-ALU 735, ob ein Schwellenwert durch jeden akkumulierten probabilistischen statistischen Wert, den jede der vier zustandsbehafteten ALU 710 für die Datennachricht ausgibt, überstiegen wird. Falls dies der Fall ist, zeichnet die Aktions-ALU ein HH-Bit in dem Kopfvektor der Datennachricht auf, so dass anschließende MAU-Stufen einen Vorgang an der Datennachricht auf der Basis dieser Einstellung durchführen können. Wie oben erwähnt, führt die Aktions-ALU diesen Schwellenwertvorgang in einigen Ausführungsformen nur durch, wenn die zustandsbehafteten Tabellen 715 ihrer MAU in ihrem Lese-/Schreibzyklus arbeiten (d. h. führt ihren Schwellenwertvorgang nicht durch, wenn die zustandsbehaften Tabellen 715 in ihren Nur-Schreibzyklen arbeiten oder sie zurückgesetzt werden).
-
8 veranschaulicht konzeptionell einen Prozess 800, den der HH-Detektor 650 in einigen Ausführungsformen durchführt. In einigen Ausführungsformen wird der Prozess 800 für jede empfangene Datennachricht durchgeführt, die von der Datenebene 620 verarbeitet wird. Wie gezeigt, erzeugt (bei 805) die Datenebene 620 zunächst einen Eingangszeitstempel, um die Zeit zu spezifizieren, zu der die Datennachricht von dem Weiterleitungselement oder von einer Eingangspipeline empfangen wurde. In einigen Ausführungsformen könnte dieser Zeitstempel gekürzt sein, um die verarbeiteten Zeitstempelwerte zu quantisieren (d. h. die Auflösung dieser zu senken).
-
Als Nächstes berechnet bei 810 ein Modul in der Datenebene (z. B. einer MAU-Stufe) einen Alterswert für die empfangene Datennachricht. In einigen Ausführungsformen hängt der Alterswert von dem Alter des zustandsbehafteten Tabellensatzes ab, der aktuell in seinem Lese-/Schreibmodus arbeitet (d. h. die Zeitdauer, die seit dem letzten Mal verstrichen ist, zu dem dieser zustandsbehaftete Tabellensatz zurückgesetzt wurde). Beispielsweise wird dieses Alter als der Unterschied zwischen dem Zeitstempel und der Zeit des letzten Zurücksetzens des zustandsbehafteten Tabellensatzes, der aktuell in seinem Lese-/Schreibmodus arbeitet, berechnet.
-
Bei 815 spezifiziert der Prozess 800 dynamisch einen Schwellenwert für die empfangene Datennachricht. Um dies vorzunehmen, verwendet die MAU, die das Nachrichtenalter berechnet, in einigen Ausführungsformen das berechnete Alter dazu, einen Schwellenwert in einer Nachschlagetabelle nachzuschlagen (d. h. abzurufen), die unterschiedliche Schwellenwerte für unterschiedliche Altersbereiche spezifiziert. Die Steuerebene konfiguriert in einigen Ausführungsformen die MAU-Stufe mit dieser Nachschlagetabelle. Diese MAU-Stufe schreibt (bei 815) dann den identifizierten Schwellenwert in den Kopfvektor der Nachricht.
-
Jede HHD implementierende MAU weist einen oder mehrere Hash-Generatoren auf, die vier Hash-Werte erzeugen (bei 820), die vier Adressstellen in den vier zustandsbehafteten Tabellen 715 jener MAU spezifizieren.
-
Bei 825 inkrementieren die vier zustandsbehafteten ALU 710 jeder HHD implementierenden MAU die Bytezahl, die an den vier Stellen gespeichert ist, die in den vier zustandsbehafteten Tabellen 715 identifiziert werden, und lesen die inkrementierten Bytezahlwerte zurück. Jede derartige MAU führt die Vorgänge 820 und 825 durch, wenn der Kopfvektor der empfangenen Datennachricht jene MAU erreicht. Anders ausgedrückt, wenn auch 8 beide Vorgänge der HHD implementierenden MAU zusammen veranschaulicht, wird ein Durchschnittsfachmann erkennen, dass dies nur eine konzeptionelle Darstellung ist, die die Veranschaulichung der Vorgänge des Prozesses 800 vereinfachen soll.
-
Die Bytezahlwerte, die aus dem zustandsbehafteten Tabellensatz 715, der in seinem Lese-/Schreibmodus arbeitet, zurück gelesen werden, werden ihrer entsprechenden Aktions-ALU 735 zugeführt (bei 830), die dann jeden dieser Werte mit dem Schwellenwert der Nachricht, der von ihrem Kopfvektor erhalten wird, vergleicht (bei 835). Wenn all diese Werte den Schwellenwert übersteigen, speichert (bei 835) die Aktions-ALU ein Bit in dem Kopfvektor, um anzugeben, dass die Datennachricht zu einem HH-Fluss gehört. Nach 835 endet der Prozess.
-
Wie oben erwähnt, wird eine HH-Kennzeichnung in einem Kopfvektor einer Datennachricht von einer oder mehreren anschließenden Nachrichtenverarbeitungsstufen der Datenebene 620 dazu verwendet, einen oder mehrere Vorgänge an der Datennachricht durchzuführen. Diese Vorgänge beinhalten (1) ein Senden einer gespiegelten Kopie der Datennachricht an einen Server-Cluster oder einen Anwendungs-Cluster in dem Netzwerk, (2) ein Durchführen eines ECMP-Vorgangs an der Datennachricht, der große HH-Flüsse in mehrere kleinere Flüsse aufbricht, die unterschiedliche Wege mit gleichen Kosten zu dem Ziel des großen Flusses nehmen, und (3) ein Durchführen von Vorgängen, um die nachteilige Auswirkung der großen Flüsse auf die Beendigungszeit von anderen Flüssen abzuschwächen. Beispiele von Vorgängen, die durchgeführt werden können, um eine nachteilige Auswirkung von HH-Flüssen abzuschwächen, beinhalten, dass der Verkehrsmanager 644 Nachrichten aus HH-Flüssen fallen lässt, um die Wahrscheinlichkeit zu verringern, dass kleinere Flüsse von dem Verkehrsmanager fallen gelassen werden. Umgekehrt kann die HH-Kennzeichnung verwendet werden, um sicherzustellen, dass bestimmten HH-Flüssen Prioritätsweiterleitung gegenüber anderen Flüssen bereitgestellt wird.
-
Die HH-Kennzeichnung in dem Kopfvektor der Datennachricht kann auch aus dem Einfügen einer HH-Kennzeichnung in den Kopf der Datennachricht vor dem Weiterleiten der Datennachricht an ein anderes Weiterleitungselement, einen Endberechnungsknoten (z. B. Server) oder eine Anwendung, das, der bzw. die einen Vorgang an der Datennachricht auf der Basis der Kennzeichnung in ihrem Kopf durchführt, resultieren. Beispielsweise kann das Weiterleitungselement oder die Anwendung (in dem eingreifenden Netzwerk-Fabric 610 nach dem Weiterleitungselement 600), das bzw. die die Datennachricht mit der HH-Kennzeichnung empfängt, faires Fallenlassen von Nachrichten oder Vorrangwarteschlangenbildung auf der Basis der HH-Kennzeichnung der Datennachricht verwenden, um sicherzustellen, dass die HH-Datennachrichten nicht zu übermäßigem Fallenlassen von Datennachrichten von kleineren Flüssen führen. Alternativ dazu kann das Weiterleitungselement oder die Anwendung, das bzw. die die Datennachricht mit der HH-Kennzeichnung empfängt, diese Kennzeichnung verwenden, um sicherzustellen, dass bestimmten HH-Flüssen Prioritätsweiterleitung gegenüber anderen Flüssen bereitgestellt wird.
-
Ein derartiger Weiterleitungsvorgang, den ein derartiges Weiterleitungselement oder eine derartige Anwendung in einigen Ausführungsformen auf der Basis der HH-Kennzeichnung in dem Kopf der Datennachricht durchführt, besteht darin, einen Weg zu dem Ziel der Nachricht als Teil eines ECMP-Vorgangs auszuwählen, den das Weiterleitungselement oder die Anwendung durchführt, um einen HH-Fluss in kleinere Flüsse aufzubrechen, die unterschiedliche Wege zu dem Ziel der HH-Flüsse nehmen. Heutzutage sind zahlreiche Techniken zum Aufbrechen eines größeren Flusses in kleinere Flüsse, die unterschiedliche Wege zu dem Ziel des größeren Flusses nehmen, definiert. Einige dieser Techniken produzieren geringfügig andere Kopfwerte (z. B. Quellanschlüsse) für die kleineren Flüsse aus dem Kopf des größeren Flusses, um sicherzustellen, dass die kleineren Flüsse von eingreifenden Netzwerk-Weiterleitungselementen entlang unterschiedlichen Wegen zu dem Ziel des größeren Flusses weitergeleitet werden.
-
Zusätzlich zu oder anstelle eines Implementierens einer HH-Erkennungsschaltung in der Datenebene implementiert das Netzwerk-Weiterleitungselement von einigen Ausführungsformen eine Flussgrößenerkennungsschaltung (FS-Erkennungsschaltung), die eine Flussgrößendichtenverteilung für einige oder alle der Datennachrichtenflüsse erzeugt, die sie zur Weiterleitung in einem Netzwerk verarbeitet. 9 veranschaulicht ein Beispiel einer Datenebene 920, die dazu konfiguriert werden kann, eine FS-Erkennungsschaltung 950 von einigen Ausführungsformen der Erfindung zu implementieren. Die Datenebene 920 von 9 ist mit der Datenebene 620 von 6 identisch, mit Ausnahme davon, dass ihre programmierbaren Stufen dazu konfiguriert sind, eine FS-Erkennungsschaltung 950 zusätzlich zu oder anstelle einer HHD-Schaltung 650 zu implementieren. Somit ist die Datenebene 920 als Teil desselben Weiterleitungselements 600 von 6 gezeigt, die, wie oben erwähnt, Datennachrichten zwischen Datennachrichtenquell- und -zielvorrichtungen (wie die Vorrichtungen 605 und 607) weiterleitet.
-
Wie gezeigt, weist das Weiterleitungselement 600 (1) eine Datenebene 920, die die Weiterleitungsvorgänge des Weiterleitungselements 600 durchführt, um Datennachrichten, die von dem Weiterleitungselement empfangen werden, an andere Vorrichtungen weiterzuleiten, und (2) eine Steuerebene 625 auf, die die programmierbaren Stufen (z. B. MAU-Stufen 632) der Datenebene konfiguriert, um ihre Vorgänge (z. B. ihre Weiterleitungsvorgänge, ihre FS-Erkennungsvorgänge, ihre HHD-Vorgänge usw.) durchzuführen. In einigen Ausführungsformen wird die Datenebene 920 durch eine ASIC implementiert, auf der die Nachrichtenverarbeitungspipeline 640/642 und der Verkehrsmanager 644 definiert sind, während die Steuerebene 625 durch einen oder mehrere Speicher, die Steuerebenenanweisungen speichern, und einen oder mehrere Universalprozessoren, die die Steuerebenenanweisungen ausführen, implementiert wird.
-
Wie die Datenebene 620 weist die Datenebene 920 mehrere Eingangs- und Ausgangspipelines 640 und 642 mit mehreren Datennachrichtenverarbeitungsstufen 632 auf, die dazu konfiguriert sind, die Datentupel (z. B. Kopfvektoren), die mit den Datennachrichten assoziiert sind, die von der Datenebene empfangen werden, zu verarbeiten, um die Datennachrichten weiterzuleiten. Der Verkehrsmanager 644 dient als ein Crossbar-Switch, der Nachrichten von den Eingangspipelines zu Ausgangspipelines leitet. Jede Eingangs- oder Ausgangspipeline weist (1) einen Parser 630, der einen Nachrichtenkopf aus einer Datennachricht extrahiert, die die Pipeline zur Verarbeitung empfängt, und (2) einen Deparser 634 auf, der die Datennachricht aus dem zuletzt verarbeiteten Kopfvektor der Nachricht (d. h. dem Kopfvektor, der von der letzten Nachrichtenverarbeitungsstufe der Pipeline verarbeitet wird) und der Nutzlast der Datennachricht wiederherstellt.
-
In einigen Ausführungsformen verwendet der Deparser 634 einen Teil des Kopfs, der von dem Parser 630 empfangen wurde, um die Nachricht aus ihrem assoziierten Kopfvektor wiederherzustellen. 9 veranschaulicht die Verbindung zwischen den Deparsern 634 der Ausgangspipelines 642 und einer Steuer-/Datenebenenschnittstelle 930 der Datenebene 920. Durch diese Schnittstelle 930 kann die Steuerebene 625 auf Ressourcen (z. B. Register, Speicher usw.) in der Datenebene 920 zugreifen und die Datenebene 920 kann Daten an die Steuerebene bereitstellen, wie unten weiter beschrieben.
-
9 veranschaulicht, dass einige der Datenebenennachrichtenverarbeitungsstufen dazu konfiguriert sind, in einigen Ausführungsformen eine Flussgrößenerkennungsschaltung 950 zu implementieren. In anderen Ausführungsformen weist die Datenebene eine dedizierte Flussgrößenerkennungsschaltung auf, die keine umfunktionierten Nachrichtenverarbeitungsstufen für Flussgrößenerkennungsvorgänge verwendet. Die FS-Erkennungsschaltung 950 sammelt in einigen Ausführungsformen Statistiken in Bezug auf die Datennachrichtenflüsse, die von der Datenebene 920 verarbeitet werden, und erzeugt auf der Basis der gesammelten Statistiken eine FS-Dichtenverteilung (FSDD), die eine Anzahl von Flüssen in unterschiedlichen Flussgrößenunterbereichen in einem Bereich von Flussgrößen ausdrückt.
-
Wie gezeigt, beinhaltet die FS-Erkennungsschaltung 950 einen Flussgrößenzähler 952, Flussgrößenregister 953, einen Flussgrößen-Min-Selektor 954, einen Aktuelle-FS-Verteilung-Tracker 956, ein Aktuelle-FSDD-Register 962, einen Vorherige-FS-Verteilung-Tracker 958, ein Vorherige-FSDD-Register 964 und einen FS-Verteilung-Publisher 960. Der Flussgrößenzähler 952 erzeugt in einigen Ausführungsformen statistische Werte in Bezug auf die Datennachrichtenflüsse, die von der Datenebene 920 verarbeitet werden. Auf der Basis dieser statistischen Werte erzeugen die Aktuelle- und die Vorherige-FS-Verteilung-Schaltung 956 und 958 FSDD und speichern diese FSDD in den FSDD-Registern 962 und 964. Jedes dieser Register 962 und 964 weist mehrere Zellen auf, wobei jede Zelle einem anderen Unterbereich von FS-Werten entspricht.
-
Die Dichtenverteilungen, die in diesen Registern gespeichert sind, sind probabilistische Dichtenverteilungen, da sie auf probabilistischen statistischen Werten basieren, die der Flussgrößenzähler 952 für die Datennachrichtenflüsse erzeugt, die von der Datenebene 920 verarbeitet werden, und in FS-Registern 953 speichert. In einigen Ausführungsformen ist der FS-Zähler 952 dem Stat-Akkumulator 652 von 6 ähnlich. Wie durch Bezugnahme auf die 1-8 beschrieben, erzeugt der Stat-Akkumulator (z. B. der FS-Zähler 952) probabilistische statistische Werte für die verarbeiteten Datennachrichtenflüsse durch Erzeugen von Hash-Werten aus Kopfwerten der Datennachrichtenflüsse und Akkumulieren von Flussgrößenwerten an Speicherstellen (z. B. Zellen des FS-Registers 953), die von den erzeugten Hash-Werten identifiziert werden. In einigen Ausführungsformen können die erzeugten Hashs für zwei unterschiedliche Datennachrichtenflüsse kollidieren und dies würde dazu führen, dass die Flussgrößenzahlen für die zwei Flüsse sich in derselben Zelle des FS-Zahl-Registers 953 akkumulieren würden. Folglich können nicht wünschenswerte Hash-Kollisionen Fehler in die gesammelten Statistiken einbringen, was der Grund dafür ist, dass die gesammelten Flussgrößenzahlen probabilistische Werte sind, die einen gewissen Grad an Ungenauigkeit aufweisen können.
-
Die Dichtenverteilung, die die FS-Erkennungsschaltung 950 produziert, ist eine FSDD, die über einen programmierbaren Zeitraum definiert ist. Beispielsweise produziert die Flussgrößenerkennungsschaltung 950 eine erste FSDD, die eine Anzahl von verarbeiteten Flüssen in den unterschiedlichen Flussgrößenunterbereichen während eines ersten Zeitraums ausdrückt, und produziert dann eine zweite FSDD, die eine Anzahl von verarbeiteten Flüssen in den unterschiedlichen Flussgrößenunterbereichen während eines zweiten Zeitraums ausdrückt.
-
Um die FSDD für einen bestimmten Zeitraum zu produzieren, verwendet die FS-Erkennungsschaltung den Aktuelle- und den Vorherige-FS-Verteilung-Tracker 956 und 958. Für jede aktuell verarbeitete Nachricht jedes bestimmten Nachrichtenflusses aktualisiert der Aktuelle-Verteilung-Tracker 956 das Aktuelle-FSDD-Register 962 auf der Basis einer Flussgröße (einschließlich der Nutzlastgröße der aktuellen Nachricht), die die FS-Erkennungsschaltung 950 für den bestimmten Nachrichtenfluss in dem bestimmten Zeitraum berechnet hat. Für jede aktuell verarbeitete Nachricht pflegt andererseits der Vorherige-FS-Verteilung-Tracker 958 eine FSDD für vorher verarbeitete Nachrichten. Dieser Tracker 958 aktualisiert für jede Nachricht, die während des bestimmten Zeitraums verarbeitet wird, das zweite FSDD-Register 964, um redundante Aktualisierungen des FSDD-Registers 962 für mehrere Nachrichten für jeden verarbeiteten Nachrichtenfluss während des bestimmten Zeitraums zu negieren.
-
Spezifischer, um das erste FSDD-Register 962 für einen bestimmten Zeitraum für eine aktuelle Nachricht, die Teil eines bestimmten Datennachrichtenflusses ist, zu aktualisieren, inkrementiert der erste Verteilung-Tracker 956 den Wert, der in der ersten FSDD-Registerzelle gespeichert ist und der einer ersten Flussgröße entspricht, die die FS-Erkennungsschaltung 950 aktuell für den bestimmten Nachrichtenfluss in dem bestimmten Zeitraum pflegt, um eins. Die erste Flussgröße beinhaltet die Nutzlastgröße der aktuellen Nachricht. Wie oben erwähnt, berechnet und speichert der FS-Zähler 952 mehrere probabilistische Flussgrößenwerte in mehreren Zellen der FS-Register 953 für jede aktuelle Nachricht, die er verarbeitet. Der FS-Zähler gibt diese mehreren FS-Werte an den Min-Selektor 954 aus, der dann den kleinsten FS-Wert, den er empfängt, als die aktuelle probabilistische Flussgröße, die die FS-Erkennungsschaltung 950 aktuell für den bestimmten Nachrichtenfluss in dem bestimmen Zeitraum nach Verarbeitung der aktuellen Nachricht aufweist, auswählt und ausgibt.
-
Während des bestimmten Zeitraums könnte die FS-Erkennungsschaltung 950 mehr als eine Nachricht eines bestimmten Nachrichtenflusses verarbeiten. Für jede dieser Nachrichten aktualisiert der Aktuelle-Verteilung-Tracker 956 die aktuelle FSDD in dem Aktuelle-FSDD-Register 962. Jede Aktualisierung nach der ersten für einen bestimmten Nachrichtenfluss in einem bestimmten Zeitraum ist redundant, mit Ausnahme davon, wenn eine anschließende Aktualisierung eine anschließende Registerzelle inkrementiert, die mit einem anschließenden FS-Bereich assoziiert ist, um anzugeben, dass die Flussgröße des bestimmten Datennachrichtenflusses von einem FS-Unterbereich zu einem anderen FS-Unterbereich übergegangen ist.
-
Um mehrere redundante Aktualisierungen des Aktuelle-FSDD-Registers 962 für einen bestimmten Datennachrichtenfluss während eines bestimmten Zeitraums zu berücksichtigen, verwendet die FS-Erkennungsschaltung 950 daher den Vorherige-Verteilung-Tracker 958. Um das Vorherige-FSDD-Register für die aktuelle Nachricht zu aktualisieren, inkrementiert der Vorherige-Verteilung-Tracker 958 den Wert, der in der Vorherige-FSDD-Registerzelle gespeichert ist und der einer Flussgröße entspricht, die durch Subtrahieren der Nutzlastgröße der aktuellen Nachricht von der Flussgröße, die der Min-FS-Selektor 954 für die aktuelle Nachricht ausgibt, berechnet wird (d. h. die der Flussgröße entspricht, die die FS-Erkennungsschaltung 950 für den bestimmten Nachrichtenfluss vor der Verarbeitung der aktuellen Nachricht pflegte), um eins.
-
Wie unten durch Bezugnahme auf die 11-13 weiter beschrieben, ist die FSDD für den bestimmten Zeitraum die aktuelle FSDD des Aktuelle-FSDD-Registers 962 minus der vorherigen FSDD des Vorherige-FSDD-Registers 964. Die Aktualisierung der vorherigen FSDD auf der Basis der aktuellen Nachricht ist daher dazu entworfen, jeglichen vorherigen Beitrag von jeglicher früherer Nachricht des bestimmten Datennachrichtenflusses zu der aktuellen FSDD aus der aktuellen FSDD für den bestimmten Zeitraum zu löschen.
-
Der FS-Verteilung-Publisher 960 stellt konzeptionell die Datenebenenschaltkreise dar, die die FSDD für einen bestimmten Zeitraum an die lokale Steuerebene 625, an eine entfernte Steuerebene oder an einen externen Server bereitstellen. Dieser Publisher wird in unterschiedlichen Ausführungsformen unterschiedlich implementiert. In einigen Ausführungsformen ruft die Steuerebene 625 des Weiterleitungselements 900 die FSDD für einen bestimmten Zeitraum durch die Steuerebenenschnittstelle 930 ab. In Verbindung damit oder alternativ dazu erzeugen die Nachrichtengeneratoren 635 der Datenebene in einigen Ausführungsformen Datennachrichten, die die Datenebene 920 verarbeitet, so dass die FS-Erkennungsschaltung 950 sie dann mit der FSDD populieren kann, die sie für einen bestimmten Zeitraum erzeugt hat.
-
Die Deparser 634 der Ausgangspipelines 642 der Datenebene können dann diese FSDD-populierten Datennachrichten in einigen Ausführungsformen an die Steuerebene 625 des Weiterleitungselements durch Leiten dieser Nachrichten an einen Datenebenenanschluss 615 weiterleiten, der die Datennachrichten an die Steuerebenenschnittstelle 930 weiterleitet. Alternativ dazu oder in Verbindung damit können die Ausgangspipeline-Deparser 634 eine FSDD-populierte Datennachricht an einen Datenebenenausgangsanschluss 615, der dem Weiterleitungselement-Anschluss 612 entspricht, leiten, der mit einem externen Rechner (z. B. einem externen Server) assoziiert ist, so dass die FSDD-populierten Datennachrichten durch eine direkte Verbindung zwischen dem Rechner und dem Weiterleitungselement-Anschluss oder durch ein eingreifendes Netzwerk an den externen Rechner gesendet werden können.
-
9 veranschaulicht ein Aktuelle-FSDD-Register 962 und ein Vorherige-FSDD-Register 964. In einigen Ausführungsformen weist die FS-Erkennungsschaltung 950 jedoch mehrere Aktuelle-FSDD-Register (z. B. 16 Register) und mehrere Vorherige-FSDD-Register (z. B. 16 Register) auf. Der Aktuelle- und der Vorherige-Verteilung-Tracker 956 und 958 dieser FS-Erkennungsschaltung 950 verwenden jedes Paar von Aktuelle/Vorherige-FSDD-Registern, um die aktuellen/vorherigen FSDD für einen anderen bestimmten Zeitraum zu speichern. Jeder dieser Zeiträume wird in der folgenden Erörterung als eine Epoche bezeichnet. In diesen Ausführungsformen arbeitet jeder Satz von Aktuelle- und Vorherige-FSDD-Registern als ein kreisförmiger Satz von Registern, wodurch nach der Speicherung einer berechneten FSDD in dem letzten Register in dem Satz die nächste berechnete FSDD in dem ersten Register in dem Satz gespeichert wird. Wenn beispielsweise 16 Paare von Registern verwendet werden, speichern die Verteilung-Tracker 956 und 958 in einigen Ausführungsformen bis zu 16 Paare von aktuellen/vorherigen FSDD für 16 aufeinanderfolgende Epochen (d. h. Zeiträume). Nach dem Speichern der sechzehnten FSDD in seinem sechzehnten Register speichert der Verteilung-Tracker 956 oder 958 die nächste FSDD in dem ersten Register.
-
In einigen Ausführungsformen erzeugt und pflegt die FS-Erkennungsschaltung 950 Datensätze für mehrere FSDD. Die lokale Steuerebene 625 ruft in einigen Ausführungsformen mehrere dieser FSDD durch die Steuerebenenschnittstelle 930 ab und/oder empfängt mehrere FSDD durch FSDD-populierte Datennachrichten, die die Datenebene erzeugt und an die Steuerebenenschnittstelle 930 weiterleitet. Auf ähnliche Weise können in einigen Ausführungsformen eine oder mehrere FSDD-populierte Datennachrichten mehrere FSDD, die von der Datenebene gepflegt werden, zu einer beliebigen gegebenen Zeit an einen externen Rechner senden.
-
10 veranschaulicht einen Prozess 1000, den die FS-Erkennungsschaltung 950 in einigen Ausführungsformen durchführt, um eine Datennachricht zu verarbeiten, die die Datenebene 920 empfängt. Dieser Prozess 1000 wird durch Bezugnahme auf die 11-13 erläutert, die die Vorgänge zeigen, die die FS-Erkennungsschaltung 950 für die ersten drei Datennachrichten, die in einer Epoche verarbeitet werden, durchführt. Wie gezeigt, erzeugt (bei 1005) der FS-Zähler 952 zunächst vier Hash-Werte aus einem Satz von Kopfwerten (z. B. L2-, L3- und/oder L4-Kopfwerte) der empfangenen Datennachricht. In einigen Ausführungsformen werden die vier Hash-Werte von vier unterschiedlichen Hash-Generatoren erzeugt, während in anderen Ausführungsformen die vier Hash-Werte vier Teile von einem oder zwei Hash-Werten sind, die von einem oder zwei Hash-Generatoren erzeugt werden.
-
Als Nächstes verwendet der FS-Zähler 952 bei 1010 die Nutzlastgröße der empfangenen Nachricht, um die Bytezahlwerte zu inkrementieren, die bei vier Zahlregisterzellen (in vier Bytezahlregistern) gespeichert sind, die von den vier Adressen identifiziert werden, die von den vier erzeugten Hash-Werten spezifiziert werden. 11 veranschaulicht ein Beispiel des FS-Zählers 952, der die Nutzlastgröße von 20 KB verwendet, um den Wert von vier Zellen in vier Registern 1102-1108 für ein erstes Paket, das der FS-Zähler in einer Epoche verarbeitet, zu aktualisieren. Dieses erste Paket ist Paket 1 von Fluss A in diesem Beispiel. In einigen Ausführungsformen verwendet der FS-Zähler 952 unterschiedliche Sätze von Registern (z. B. ungerade und gerade Sätze von Registern) für unterschiedliche Epochen (z. B. ungerade und gerade Epochen), so dass er ein Satz von Registern, die in der vorherigen Epoche verwendet wurden, zurücksetzen kann, während ein anderer Satz von Registern (der vorher zurückgesetzt wurde) für die aktuelle Epoche verwendet wird. Dies ist den oben durch Bezugnahme auf die 1-5 beschriebenen Ansätze ähnlich.
-
In anderen Ausführungsformen verwendet der FS-Zähler 952 nur einen Satz von Registern (z. B. einen Satz von vier Registern 1102-1108), um die Bytezahlen für alle Epochen zu pflegen. In Anbetracht dessen, dass der FS-Zähler die Bytezahlen einer früheren Epoche nicht für eine spätere Epoche verwenden sollte, pflegt der FS-Zähler einen Zeitstempel für jede Zelle von jedem Register, um das letzte Mal, zu dem er die Zelle aktualisiert hat, zu identifizieren. Jedes Mal, wenn der FS-Zähler 952 die Bytezahl einer Zelle mit der Nutzlastgröße der aktuellen Nachricht inkrementieren muss, prüft dieser Zähler zuerst den Zeitstempel für die Zelle. Wenn der Zeitstempel für die Zelle mit einer früheren Epoche assoziiert ist (d. h. nicht mit der aktuellen Epoche assoziiert ist), stellt der FS-Zähler den Wert der Zelle auf die Nutzlastgröße der aktuellen Nachricht ein (d. h. verwirft jeglichen Nicht-Null-Wert, der an dieser Stelle gespeichert war). Andererseits, wenn der Zeitstempel für die Zelle mit der aktuellen Epoche assoziiert ist, addiert der FS-Zähler die Nutzlastgröße der aktuellen Nachricht zu dem Wert, der aktuell in dieser Zelle gespeichert ist.
-
Bei 1015 gibt der FS-Zähler 952 die vier Werte der vier Zellen aus, die bei 1010 inkrementiert wurden. Als Nächstes wählt der FS-Min-Selektor 954 bei 1020 den kleinsten Bytezahlwert aus, der bei 1015 ausgegeben wurde. Die kleinste Bytezahl ist der Wert, der von Hash-Kollisionen am wenigsten beeinträchtigt werden sollte, da es bei ihm am wenigsten wahrscheinlich ist, dass alle vier Zellen, die durch Hashen der Flusskennung der empfangenen Nachricht (d. h. dem Satz von Kopfwerten der empfangenen Nachricht) identifiziert werden, auch durch Hashs von Kopfwerten von anderen Nachrichtenflüssen identifiziert worden wäre. In dem in 11 veranschaulichten Beispiel gibt der FS-Min-Selektor 954 20 KB aus, da alle der vier Zellen 20 KB speichern.
-
Bei 1025 inkrementiert der Aktuelle-FS-Verteilung-Tracker 956 die Zelle in dem Aktuelle-FSDD-Register 962, die dem FS-Wert entspricht, der von dem FS-Min-Selektor 954 ausgegeben wird, um 1. In dem Beispiel von 11 ist die Zelle die erste Zelle, da jede Zelle einem 50-KB-Inkrement entspricht. Daher zeigt 11 einen Wert 1, der in der ersten Zelle des Aktuelle-FSDD-Registers 962 gespeichert ist. Der Rest der Werte in diesem Register ist null, da das Paket 1 von Fluss A die erste Nachricht ist, die in der aktuellen Epoche verarbeitet wird.
-
Als Nächstes inkrementiert der Vorherige-FS-Verteilung-Tracker 956 bei 1030 die Zelle in dem Vorherige-FSDD-Register 964, die dem Flussgrößenwert entspricht, der durch Subtrahieren der Nutzlastgröße der aktuellen Nachricht von dem FS-Wert, der von dem FS-Min-Selektor 954 ausgegeben wird, abgeleitet wird, um 1. In 11 wird kein Wert in dem Vorherige-FSDD-Register 964 inkrementiert, da die Flussgröße minus der Paketgröße null ist (da die Flussgröße gleich der Paketgröße der aktuellen Nachricht ist, in Anbetracht dessen, dass Paket 1 von Fluss A das erste Paket ist, das für Fluss A in dieser Epoche verarbeitet wird). Nach 1030 endet der Prozess.
-
Wie oben erwähnt, ist die Differenz zwischen der aktuellen FSDD, die in dem Aktuelle-FSDD-Register 962 gespeichert ist, und der vorherigen FSDD, die in dem Vorherige-FSDD-Register 964 gespeichert ist, die FSDD, die die FS-Erkennungsschaltung 950 für eine aktuelle Epoche produziert. Um dies zu veranschaulichen, zeigen die 12 und 13 die Verarbeitung der nächsten zwei Pakete in derselben Epoche wie 11. 12 zeigt, dass das zweite Paket in dieser Epoche Paket 1 von Fluss B ist. Dieses Paket weist eine Nutzlastgröße von 10 KB auf.
-
Aus dem Satz von Kopfwerten des Pakets 1 von Fluss B erzeugt der FS-Zähler vier Hash-Werte, die vier Zellen in den vier Registern 1102-1108 identifizieren. Der zweite Hash-Wert, der für dieses Paket erzeugt wird, ist mit dem zweiten Hash-Wert identisch, der für Paket 1 von Fluss A erzeugt wird, und identifiziert somit dieselbe Zelle in dem zweiten Register 1104. Anders ausgedrückt, die Hashs für die Flüsse A und B kollidieren in einer der adressierten Zellen, d. h. der Zelle des zweiten Registers 1104.
-
Nach dem Identifizieren der vier Zellen inkrementiert der FS-Zähler die Bytezahlen in diesen Zellen um die Nutzlastgröße von Paket 1 von Fluss B. Wie gezeigt, werden die adressierten Zellen in dem ersten, dem dritten und dem vierten Register auf 10 KB eingestellt, da diese Zellen vorher 0 speicherten, während die adressierte Zelle in dem zweiten Register 1104 auf 30 KB eingestellt wird, da diese Zelle vorher 20 KB speicherte. Der FS-Zähler gibt die Werte dieser vier Zellen aus und der Min-Selektor wählt 10 KB als die aktuelle Flussgröße für die Flussgröße des aktuellen Pakets (Paket 1).
-
Der Aktuelle-FS-Verteilung-Tracker 956 inkrementiert dann den Wert, der in der Zelle des Aktuelle-FSDD-Registers 962 gespeichert ist, die der Flussgröße entspricht, die von dem Min-Selektor ausgegeben wird, um 1. Da dieser Wert 10 KB ist und die erste Zelle des Aktuelle-FSDD-Registers 962 diesem Wert entspricht, wird der Wert dieser Zelle von 1 auf 2 inkrementiert. Wie in 11 wird in 12 kein Wert in dem Vorherige-FSDD-Register 964 inkrementiert, da die Flussgröße für Fluss B minus der Paketgröße von Paket 1 von Fluss B null ist (da die Flussgröße gleich der Paketgröße der aktuellen Nachricht ist, in Anbetracht dessen, dass Paket 1 von Fluss B das erste Paket ist, das für Fluss B in dieser Epoche verarbeitet wird).
-
13 zeigt, dass das dritte Paket in der Epoche Paket 2 von Fluss A ist. Dieses Paket weist eine Nutzlastgröße von 40 KB auf. Aus dem Satz von Kopfwerten dieses Pakets erzeugt der FS-Zähler vier Hash-Werte, die dieselben vier Zellen identifizieren, die er in 11 für das erste Paket von Fluss A identifizierte. Wiederum liegt eine Hash-Kollision zwischen den Flüssen A und B in dem zweiten Register 1104 vor.
-
Nach dem Identifizieren dieser vier Zellen inkrementiert der FS-Zähler die Bytezahlen in diesen Zellen um die Nutzlastgröße von Paket 2 von Fluss A. Wie gezeigt, werden die adressierten Zellen in dem ersten, dem dritten und dem vierten Register nach diesem Vorgang auf 60 KB eingestellt, während die adressierte Zelle in dem zweiten Register 1104 auf 70 KB eingestellt wird. Der FS-Zähler gibt die Werte dieser vier Zellen aus und der Min-Selektor wählt 60 KB als die aktuelle Flussgröße für die Flussgröße des aktuellen Pakets.
-
Der Aktuelle-FS-Verteilung-Tracker 956 inkrementiert dann den Wert, der in der Zelle des Aktuelle-FSDD-Registers 962 gespeichert ist, die der Flussgröße entspricht, die von dem Min-Selektor ausgegeben wird, um 1. Da dieser Wert 60 KB ist und die zweite Zelle des Aktuelle-FSDD-Registers 962 dem Flussgrößenbereich von 50-100 KB entspricht, wird der Wert der zweiten Zelle von 0 auf 1 inkrementiert. Da die aktuelle Flussgröße 60 KB ist, während die Nutzlastgröße des aktuellen Pakets 40 KB ist, inkrementiert der zweite FS-Verteilung-Tracker 958 außerdem den Wert, der in der Zelle des Vorherige-FSDD-Verteilung-Registers 964 gespeichert ist, die 20 KB entspricht (d. h. die aktuelle Flussgröße minus der Nutzlastgröße des aktuellen Pakets), um 1.
-
13 zeigt, dass die aktuelle FSDD, die in dem Aktuelle-FSDD-Register 962 gespeichert ist, minus der vorherigen FSDD, die in dem Vorherige-FSDD-Register 964 gespeichert ist, zu einer Gesamt-FSDD 1305 führt, die zeigt, dass die FS-Erkennungsschaltung 950 aktuell zwei Flussgrößen für zwei Flüsse gesammelt hat, einen mit einer Flussgröße im Bereich von 0 bis 50 KB (d. h. Fluss B) und einen anderen mit einer Flussgröße im Bereich von 50 bis 100 KB (d. h. Fluss A). Diese Subtraktion ist mit Strichlinien dargestellt, da sie in der Datenebene, in der lokalen/entfernten Steuerebene oder in einem entfernten Rechner durchgeführt werden kann. In dieser Subtraktion wird jeder vorherige Dichtenwert (für jeden Dichtenunterbereich) in der vorherigen FSDD von dem entsprechenden aktuellen Dichtenwert (für den entsprechenden Dichtenunterbereich) in der aktuellen FSDD subtrahiert.
-
Diese Subtraktion entfernt den früheren Beitrag zu der ersten Zelle des Aktuelle-FSDD-Registers 962 durch das Paket 1 von Fluss A, um sicherzustellen, dass derselbe Fluss nicht mehrere unterschiedliche Unterbereiche (d. h. mehrere unterschiedliche FSDD-Registerzellen) in der FSDD inkrementiert, die von der FS-Erkennungsschaltung für die aktuelle Epoche erzeugt wird. Anders ausgedrückt, der Wert, der in der ersten Zelle des Vorherige-FSDD-Registers gespeichert ist, sobald er von der ersten Zelle das Aktuelle-FSDD-Registers subtrahiert wurde, entfernt den vorherigen Beitrag zu der ersten Zelle des Aktuelle-FSDD-Registers durch Paket 1 von Fluss A. Diese Entfernung ist erforderlich, da, sobald Paket 2 von Fluss A verarbeitet wurde, die Flussgröße, die für diesen Fluss gepflegt wird, von dem ersten Unterbereich, der mit der ersten Zelle des aktuellen Zellenregisters assoziiert ist, zu dem zweiten Unterbereich übergeht, der mit der zweiten Zelle assoziiert ist.
-
14 veranschaulicht einen Prozess 1400, der zeigt, wie die FS-Erkennungsschaltung 950 in einigen Ausführungsformen implementiert wird, wobei die MAU-Schaltung 700 von 7 als die Nachrichtenverarbeitungsstufen 632 der Nachrichtenverarbeitungspipelines 640 und 642 der Datenebene 920 dient. Dieser Prozess wird für jede Datennachricht durchgeführt, die die Datenebene 920 empfängt. Dieser Prozess wird durch Bezugnahme auf 15 erläutert, die zwei MAU-Stufen 1505 und 1510 zeigt, die die FS-Erkennungsschaltung 950 implementieren.
-
Der Prozess startet, wenn die MAU-Stufe 1505 einen Kopfvektor 1502 für eine Nachricht empfängt, die von der Datenebene 920 verarbeitet wird. Wie gezeigt, erzeugen (bei 1405) vier Hash-Generatoren 1515 der MAU-Stufe 1505 zunächst vier Hash-Werte aus einem Satz von Kopfwerten (z. B. L2-, L3- und/oder L4-Kopfwerte) der empfangenen Datennachricht. Diese Hash-Generatoren sind Teil der Abgleichseinheit der MAU-Stufe 1505. Diese MAU-Stufe ist in einigen Ausführungsformen der MAU 700 von 7 ähnlich. Anstelle des Verwendens von vier Hash-Generatoren erzeugen andere Ausführungsformen die vier Hash-Werte durch Auswählen von unterschiedlichen Teilen von einem oder zwei Hash-Werten, die von einem oder zwei Hash-Generatoren erzeugt werden.
-
Als Nächstes verwenden vier zustandsbehaftete ALU 1520 der ersten MAU-Stufe bei 1410 die Nutzlastgröße der empfangenen Nachricht, um die Bytezahlwerte zu inkrementieren, die bei vier zustandsbehafteten ALU-Zellen (in vier zustandsbehafteten ALU-Tabellen 1525) gespeichert sind, die von den vier Adressen identifiziert werden, die von den vier erzeugten Hash-Werten spezifiziert werden. Die vier zustandsbehafteten ALU-Zellen gehören zu den vier Bytezahlregistern, die mit der aktuellen Epoche assoziiert sind. In einigen Ausführungsformen werden sechzehn unterschiedliche Sätze von Zellen in jeder zustandsbehafteten ALU dazu verwendet, sechzehn unterschiedliche Register für sechzehn unterschiedliche Epochen zu definieren. Um die Bytezahl einer Zelle mit der Nutzlastgröße der aktuellen Nachricht zu inkrementieren, prüft eine einen Zähler implementierende ALU 1520 zuerst den Zeitstempel für die Zelle. Wenn der Zeitstempel für die Zelle mit einer früheren Epoche assoziiert ist (d. h. nicht mit der aktuellen Epoche assoziiert ist), stellt die zustandsbehaftete ALU 1520 den Wert der Zelle auf die Nutzlastgröße der aktuellen Nachricht ein (d. h. verwirft jeglichen Nicht-Null-Wert, der an dieser Stelle gespeichert war). Andererseits, wenn der Zeitstempel für die Zelle mit der aktuellen Epoche assoziiert ist, addiert die zustandsbehaftete ALU die Nutzlastgröße der aktuellen Nachricht zu dem Wert, der aktuell in dieser Zelle gespeichert ist.
-
Bei
1415 geben die zustandsbehafteten ALU
1520 die vier Bytezahlwerte der vier Zellen, die bei 1410 inkrementiert wurden, an die Aktions-ALU
1535 von ihrer MAU
1505 aus, die dann den kleinsten Bytezahlwert auswählt (bei 1415) und diese ausgewählte Bytezahl in einem revidierten Kopfvektor
1550 für die Nachricht für eine anschließende MAU
1510 zur Verarbeitung speichert (bei 1415). Bei
1420 ruft die Abgleichsstufe
1530 der anschließenden MAU
1510 diese Bytezahl ab, verwendet diese Bytezahl dazu, ein erstes Nachschlagen in einem ersten TCAM (ternärer inhaltadressierbarer Speicher) 1532 durchzuführen, der den aktuellen Registerzellenindex für unterschiedliche Unterbereiche von Bytezahlwerten speichert, und verwendet diese Bytezahl minus der Nutzlastgröße der aktuellen Nachricht dazu, ein zweites Nachschlagen in einem zweiten TCAM
1532 durchzuführen, der den vorherigen Registerzellenindex für unterschiedliche Unterbereiche von Bytezahlwerten minus aktuellen Nutzlastgrößen speichert. Die
US-Patentanmeldung 15/382,711 beschreibt TCAM, die ein Bereichsnachschlagen durchführen können, und ist durch Bezugnahme hierin aufgenommen.
-
Für die in den 11 und 12 veranschaulichten Beispiele würden die TCAM-Nachschlagevorgänge die Indizes von 1 und 0 in dem ersten und dem zweiten FSDD-Register 962 und 964 ergeben. Die Bytezahlen in diesen Beispielen sind 20 und 10, während die Bytezahlen minus der Nutzlastgrößen in diesen Beispielen 0 sind. Für die Bytezahlen 20 und 10 speichert der Aktuelle-FSDD-TCAM einen Indexwert von 1 für das Aktuelle-FSDD-Register, da die Unterbereiche in diesen Beispielen 50-KB-Inkremente sind. Wenn auch die zwei TCAM dieselben Unterbereiche speichern, verwenden einige Ausführungsformen zwei TCAM, so das zwei gleichzeitige Nachschlagevorgänge für das Aktuelle- und das Vorherige-FSDD-Register durchgeführt werden können. Andere Ausführungsformen verwenden nur einen TCAM, wenn identische Unterbereiche für das Aktuelle- und das Vorherige-FSDD-Register verwendet werden.
-
Bei 1425 bestimmen die zustandsbehafteten ALU 1522 der anschließenden MAU 1510, ob die bei 1420 identifizierten zwei Indizes identisch sind. Falls dies der Fall ist, endet der Prozess, da es nicht erforderlich ist, die Aktuelle- und die Vorherige-FSDD-Registerzelle, die von diesen Indizes identifiziert werden, zu inkrementieren, da die inkrementierten Werte einander aufheben würden, wenn die vorherige FSDD von der aktuellen FSDD subtrahiert wird. Andererseits, wenn die bei 1420 identifizierten zwei Indizes nicht identisch sind, inkrementiert (bei 1430) eine zustandsbehaftete ALU 1522 (die den Aktuelle-FS-Verteilung-Tracker 956 implementiert) die Zelle in ihrer zustandsbehafteten ALU-Tabelle 1527 (die das Aktuelle-FSDD-Register 962 implementiert), die von dem Index identifiziert wird, der für das Aktuelle-FSDD-Register der aktuellen Epoche identifiziert wird, um 1.
-
Als Nächstes inkrementiert eine andere zustandsbehaftete ALU 1522 (die den Vorherige-FS-Verteilung-Tracker 958 implementiert) bei 1435 die Zelle in ihrer zustandsbehafteten ALU-Tabelle 1527 (die das Vorherige-FSDD-Register 964 implementiert), die von dem Index identifiziert wird, der für das Vorherige-FSDD-Register der aktuellen Epoche identifiziert wird, um 1. 13 veranschaulicht ein Beispiel der Vorgänge 1430 und 1435 durch Zeigen, dass der Wert der zweiten Zelle des Aktuelle-FSDD-Registers 962 auf 1 eingestellt wird, und Zeigen, dass der Wert der ersten Zelle des Vorherige-FSDD-Registers 964 auf 1 eingestellt wird. Beide diese Zellen speicherten vor diesen Inkrementiervorgängen einen Wert von 0.
-
Wie oben erwähnt, empfängt oder sammelt die lokale Steuerebene 625, eine entfernte Steuerebene oder ein entfernter Rechner (z. B. ein entfernter Server) periodisch oder auf Anforderung die FSDD, die in dem Aktuelle- und dem Vorherige-FSDD-Register 962 oder 964 für eine oder mehrere Epochen gespeichert sind (z. B. für 16 Epochen, die in 16 Paaren von Aktuelle/Vorherige-FSDD-Registern gespeichert sind) . Aus jedem Paar von FSDD kann die lokale/entfernte Steuerebene oder der entfernte Rechner die FSDD für die Periode, die mit dem Paar assoziiert ist, durch Subtrahieren der vorherigen FSDD des Paars von der aktuellen FSDD des Paars berechnen. In einigen Ausführungsformen werden die aktuelle und die vorherige FSDD (die in den Registern 962 und 964 gespeichert sind) Komponenten in der Datenebene (z. B. ALU in der Datenebene) zugeführt (z. B. in Kopfvektoren), die jede vorherige FSDD von ihrer entsprechenden aktuellen FSDD subtrahieren, um eine Gesamt-FSDD für eine Epoche zu erzeugen, die dann der lokalen/entfernten Steuerebene oder einem entfernten Rechner zugeführt wird.
-
Durch die Steuer-/Datenebenenschnittstelle 930 kann die lokale Steuerebene 625 die FSDD von den Registern 962 oder 964 abrufen oder durch von der Datenebene erzeugte Datennachrichten, die die FSDD beinhalten, empfangen. Eine entfernte Steuerebene oder ein entfernter Rechner kann ebenfalls die FSDD durch von der Datenebene erzeugte Datennachrichten, die die FSDD beinhalten, empfangen. Wie oben beschrieben, werden die von der Datenebene erzeugten Datennachrichten in einigen Ausführungsformen von einem oder mehreren Nachrichtengeneratoren 635 der Datenebene erzeugt.
-
In einigen Ausführungsformen kann die Datenebene auch dazu konfiguriert sein, interessante FSDD (d. h. FSDD, die ein Schwellenwertkriterium erfüllen) außerhalb der FSDD-Register zu speichern. Um dies vorzunehmen, erzeugen die Nachrichtengeneratoren 635 beispielsweise Datennachrichten, deren Kopfvektoren mit aktuellen und vorherigen FSDD populiert sind, die in Aktuelle- und Vorherige-FSDD-Registern gespeichert sind. Diese Kopfvektoren werden so von den MAU populiert, die die FS-Erkennungsschaltung 950 implementieren. Diese Kopfvektoren werden dann von anschließenden MAU verarbeitet, die bestimmen, ob die FSDD, die sie enthalten, ein oder mehrere interessante Kriterien erfüllen (z. B. eine spezifische Anzahl von großen Flüssen identifizieren). Falls dies der Fall ist, speichern diese anschließenden MAU die FSDD; andernfalls verwerfen sie diese. In einigen Ausführungsformen subtrahieren die anschließenden MAU jede vorherige FSDD von ihrer entsprechenden aktuellen FSDD, um eine Gesamt-FSDD für einen Zeitraum zu erhalten, die sie dann analysieren, um zu bestimmen, ob diese resultierende FSDD interessant ist. Unterschiedliche Ausführungsformen verwenden unterschiedliche Schwellenwertkriterien, um zu bestimmen, ob eine FSDD interessant ist. Beispielsweise zählen einige Ausführungsformen die Anzahl von HHD und/oder die Anzahl von Flüssen, die von der FSDD spezifiziert werden, als einen Satz von einem oder mehreren Kriterien, um auszudrücken, ob eine FSDD interessant ist.
-
Anstelle darauf zu bauen, dass die Nachrichtengeneratoren 635 Datennachrichten zum Lesen der FSDD-Register erzeugen, lassen andere Ausführungsformen die MAU, die die FSDD-Register implementieren, ihre FSDD-Registerwerte in die Kopfvektoren schreiben, während die extern empfangenen Datennachrichten zur Weiterleitung und zum Populieren der FSDD-Register verarbeitet werden. In diesen Ausführungsformen bestimmen anschließende MAU dann, ob die FSDD, die in diesen Kopfvektoren enthalten sind, ein oder mehrere interessante Kriterien erfüllen (z. B. eine spezifische Anzahl von großen Flüssen identifizieren). Falls dies der Fall ist, speichern diese anschließenden MAU die FSDD; andernfalls verwerfen sie diese. Wiederum subtrahieren die anschließenden MAU in einigen Ausführungsformen jede vorherige FSDD von ihrer entsprechenden aktuellen FSDD, um eine Gesamt-FSDD für einen Zeitraum zu erhalten, die sie dann analysieren, um zu bestimmen, ob diese resultierende FSDD interessant ist.
-
Außerdem schreiben die MAU, die die FSDD-Register implementieren, in einigen Ausführungsformen nur ihre FSDD-Registerwerte für eine vorher abgeschlossene Epoche (z. B. Epoche 1) in die Kopfvektoren einer Datennachricht, die von außerhalb des Weiterleitungselements in einer anschließenden Epoche (z. B. Epoche 2) empfangen wird. Dies ermöglicht den anschließenden MAU, ihre Analyse an Daten einer abgeschlossenen Epoche durchzuführen, anstelle diese Analyse wiederholt für eine aktuelle Epoche durchzuführen.
-
Die lokale/entfernte Steuerebene oder der entfernte Rechner, die bzw. der die FSDD empfängt, analysiert in einigen Ausführungsformen die FSDD, um eine Stauungsbeurteilung in dem Netzwerk durchzuführen. Eine derartige Analyse würde einem Netzwerk-Administrator ermöglichen, gestaute Netzwerk-Weiterleitungselemente und einen Nachrichtendurchsatz dieser Weiterleitungselemente zu identifizieren. Sie ermöglicht dem Administrator außerdem, aggregierte und Burst-Verhalten in dem Netzwerk zu identifizieren und Paket-/Flussgrößenverteilungen in dem Netzwerk zu identifizieren. Sie ermöglicht außerdem, dass diese Beurteilungen in Perioden von weniger als einer Millisekunde durchgeführt werden. Diese Beurteilung ermöglicht Netzwerk-Administratoren, Quellen und Zeiträume einer Stauung zu identifizieren. Die Beurteilung ermöglicht außerdem den Administratoren, eine Netzwerk- und Kapazitätsplanung durchzuführen.
-
Obwohl die Erfindung unter Bezugnahme auf zahlreiche spezifische Einzelheiten beschrieben wurde, wird ein Durchschnittsfachmann erkennen, dass die Erfindung in anderen spezifischen Formen verkörpert werden kann, ohne vom Sinn der Erfindung abzuweichen. Obwohl mehrere Ausführungsformen der Erfindung durch Bezugnahme auf Hardware-Weiterleitungselemente beschrieben wurden, wird ein Durchschnittsfachmann beispielsweise erkennen, dass andere Ausführungsformen an Software-Weiterleitungselementen (die auf Computern ausgeführt werden), Netzwerkschnittstellenkarten und/oder Netzwerkgeräten (z. B. Middlebox-Geräten) implementiert werden. Außerdem werden einige Ausführungsformen durch ein Gerät implementiert, das kein Weiterleitungselement ist, sondern ein dediziertes Gerät zum Erkennen von Heavy Hitters und/oder zum Berechnen von FSDD ist.
-
Außerdem können andere Ausführungsformen anders als die oben beschriebenen Ausführungsformen implementiert werden (z. B. anstelle die aktuelle und die vorherige Verteilung 962 und 964 um 1 zu inkrementieren, inkrementieren andere Ausführungsformen diese Register um andere konstante Werte). Dementsprechend würde ein Durchschnittsfachmann erkennen, dass die Erfindung nicht auf die vorstehenden veranschaulichenden Einzelheiten beschränkt ist, sondern vielmehr durch die angefügten Ansprüche definiert werden soll.
-
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
-