-
HINTERGRUND
-
In Computerdatencentern werden viele verschiedene Hosts verwendet, um große Datenmengen zu verarbeiten, zu speichern und zu transferieren. Jeder Host kann einen oder mehrere Prozessoren, Speicher und Schnittstellen enthalten. Die Hosts, wie zum Beispiel Server, sind oft in Gestellen (Racks) angeordnet, wobei mehrere Server in einem Gestell untergebracht sind. Jedes Gestell kann einen Top-of-Rack(„TOR“)-Switch für die Kommunikation mit einer nächsten Switching-Schicht haben. Diese Switching-Schicht kann ein Cluster von Switches („Mittelblöcke“) enthalten, das einen bisektionalen volumenstarken lokalisierten Datenverkehr erlaubt. Mehrere Mittelblöcke wiederum können logisch zu größeren Clustern („Fabric-Blöcken“) gruppiert werden. Dadurch entsteht eine Switching-Anordnung mit mehreren Ebenen.
-
Fabric-Blöcke können im gesamten Datencenter verteilt werden, wobei ihre höchste Stufe von Switches unter Verwendung teurer Fasern und Optiken mit langer Reichweite miteinander verbunden werden. Für die Verbindungen zwischen Fabric-Blöcken kommt oft eine Direktverbindung anstelle der Verwendung einer CLOS-Topologie als Kompromiss zwischen bisektionaler Bandbreite und geringeren Kosten zum Einsatz. Es ist jedoch problematisch, ein System mit fairer Bandbreitenzuteilung zu erhalten, das obendrein verschiedene Klassen von Diensten respektiert und das effizient in der gesamten aus mehreren Ebenen bestehenden Switching-Umgebung arbeitet. Das kann besonders dann problematisch sein, wenn die Anzahl der Hosts und die Gesamtgröße des Datencenters zunehmen.
-
KURZE ZUSAMMENFASSUNG
-
Ein Aspekt der vorliegende Offenbarung bestimmt die Bandbreitenzuteilung von Interblock-Datenverkehr in einem Datencenter-Netz über einen Satz von End-to-End-Pfaden hinweg auf der Basis einer Vielzahl verschiedener Informationen. Sie verwendet eine Anzahl von Optimierungszielen und eine heuristische Wasserfüllungsstrategie zum Vermeiden des Erzeugens unnötiger Pfade und zum Vermeiden des Bestimmens von Pfaden, die nicht verfügbar wären, wenn sie tatsächlich gebraucht werden.
-
Gemäß einem Aspekt der Offenbarung wird ein Verfahren zur Datenverkehrsgestaltung in einem Computernetz bereitgestellt. Das Computernetz hat mehrere Fabric-Blöcke, die miteinander kommunizieren, und einen oder mehrere Mittelblöcke in jedem Fabric-Block. Das Verfahren umfasst Folgendes: Identifizieren, durch einen oder mehrere Prozessoren, eines Quellen-Fabric-Blocks FBS unter den mehreren Fabric-Blöcken; Beurteilen, der Reihe nach im Kreis, jedes Zielort-Fabric-Blocks der mehreren Fabric-Blöcke; Auswählen, der Reihe nach im Kreis, durch den einen oder die mehreren Prozessoren, eines einzelnen Zielort-Mittelblocks MBd in einem ausgewählten Zielort-Fabric-Block FBd; Auswählen, der Reihe nach im Kreis, durch den einen oder die mehreren Prozessoren, eines Quellen-Fabric-Blocks FBS; Identifizieren, durch den einen oder die mehreren Prozessoren, einer Teilmenge Μ von Quellen-Mittelblöcken unter allen Mittelblöcken in dem Quellen-Fabric-Block FBS, wobei die Teilmenge von Mittelblöcken als diejenige identifiziert wird, die eine kürzeste verfügbare Pfadlänge zu dem Zielort-Mittelblock MBd hat; und Auswählen zur Verwendung in einem Netzwerkpfad, durch den einen oder die mehreren Prozessoren, eines der Quellen-Mittelblöcke MBS in der Teilmenge Μ, der die folgende Bedingung maximiert:
min (demand (MBS, FBd), spf_capacity (MBS, MBd)),
wobei spf_capacity(MBS, MBd) eine kürzeste Pfadkapazität zwischen dem Quellen-Mittelblock MBS und dem Zielort-Mittelblock MBd darstellt, und demand(MBS, FBd) einen Bedarf zwischen dem Quellen-Mittelblock MBS und dem Zielort-Fabric-Block FBd darstellt.
-
In einer Alternative umfasst das Verfahren des Weiteren das Generieren eines Routenberechnungsgraphs, das eine Bandbreitenzuteilung durch iterative Auswahl von Quellen- und Zielort-Mittelblöcken, welche die Bedingung maximieren, erlaubt. In einer anderen Alternative umfasst das Verfahren des Weiteren, für jeden Quellen-Fabric-Block, das Aufteilen des Bedarfs zu einem Zielort-Fabric-Block gleichmäßig auf jeden nicht-fehlerhaften Mittelblock in dem Zielort-Fabric-Block.
-
Das Verfahren kann des Weiteren Folgendes umfassen: Herausskalieren jedes Mittelblocks als einen einzelnen Knoten; Bestimmen aller Mittelblockebenen-Pfade für jeden Mittelblock; und Erstellen einer Tunneltabelle für jeden Mittelblockebenen-Pfad. In einem weiteren Beispiel, wenn nicht der gesamte Bedarf gedeckt ist, umfasst das Verfahren des Weiteren das Identifizieren einer eventuellen restlichen Interblock-Bandbreite.
-
In einer anderen Alternative wird das Verfahren iterativ für mehrere Prioritätsgruppen ausgeführt. Dies kann enthalten, das Verfahren für jede Klasse von Diensten innerhalb jeder der mehreren Prioritätsgruppen iterativ auszuführen. In diesem Fall kann das Verfahren des Weiteren das Anwenden einer Gewichtung auf jede Klasse von Diensten innerhalb der mehreren Prioritätsgruppen umfassen.
-
In einer anderen Alternative umfasst das Verfahren des Weiteren das Aktualisieren der Auswahl des Quellen-Mittelblocks MBS auf der Basis eines Uplink-Ereignisses und/oder eines Downlink-Ereignisses.
-
Die oben angesprochene Verfahren kann durch einen oder mehrere Prozessoren ausgeführt werden, wie unten dargelegt wird. Ein Aufzeichnungsmedium, das Anweisungen zum Ausführen des Verfahrens speichert, wird ebenfalls bereitgestellt.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1 veranschaulicht ein beispielhaftes mehrstufiges Datencenter-Netz zur Verwendung mit Aspekten der Offenbarung.
-
2 veranschaulicht eine beispielhafte Hostcomputervorrichtung zur Verwendung mit Aspekten der Offenbarung.
-
3 veranschaulicht ein Beispiel eines Datenstaus an einer Intra-Mittelblockkante.
-
4 veranschaulicht ein Beispiel eines Datenstaus auf einem Top-of-Rack-Uplink.
-
4A veranschaulicht ein Flussdiagramm eines Datenverkehrsgestaltungsprozesses gemäß Aspekten der Offenbarung.
-
5 veranschaulicht einen beispielhaften Routenberechnungsgraph gemäß Aspekten der Offenbarung.
-
6 veranschaulicht einen beispielhaften Mittelblockpfad zwischen Quellen- und Zielort-Mittelblöcken gemäß Aspekten der Offenbarung.
-
7A veranschaulicht einen anderen beispielhaften Routenberechnungsgraph gemäß Aspekten der Offenbarung.
-
7B veranschaulicht einen beispielhaften Interblockpfad mit einem gemischten Abstraktionsgrad gemäß Aspekten der Offenbarung.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Der Leser weiß Aspekte, Merkmale und Vorteile der Offenbarung zu würdigen, wenn er die folgende Beschreibung von Ausführungsformen und die beiliegenden Figuren studiert. Die gleichen Bezugszahlen in verschiedenen Zeichnungen können die gleichen oder ähnliche Elemente bezeichnen. Die gleichen Bezugszeichen in verschiedenen Zeichnungen können die gleichen oder ähnliche Elemente identifizieren. Ferner ist die folgende Beschreibung nicht einschränkend; der Umfang der vorliegenden Technologie wird durch die beigefügten Ansprüche und Äquivalente definiert. Während bestimmte Prozesse in Übereinstimmung mit Ausführungsbeispielen in den Figuren als in linearer Weise vorkommend dargestellt sind, ist dies nicht erforderlich, sofern nicht ausdrücklich hierin angegeben. Verschiedene Prozesse können in einer anderen Reihenfolge oder gleichzeitig durchgeführt werden. Schritte können auch hinzugefügt oder weggelassen werden, sofern nicht anders angegeben.
-
Die im vorliegenden Text beschriebene Technologie stellt eine Datenverkehrsgestaltungslösung für Datencenter-Netze bereit, einschließlich Netzwerken, die mit Direktverbindungstopologien arbeiten. Wie oben angemerkt, können groß angelegte Datencenter-Netze mehrere Stufen von Switches enthalten, die Kompromisse zwischen Kosten und Bandbreite darstellen. Ein Aspekt der Technologie verwendet eine Fairnessfunktion, die mehrere Optimierungsziele hat und verschiedene Zuteilungsstrategien verwendet, um bereitzustellen eine effiziente Datenroutung.
-
Viele Netzwerkzuteilungsalgorithmen berücksichtigen Fairness und Dienstklassen. Jedoch ist es in einem Netzwerk von Superswitches möglich, die Switching-Abstraktion synergistisch zu nutzen, anstatt einen Graph zu verwenden, der aus physischen Switching-Elementen auf niedriger Ebene zusammengesetzt ist. Diese Herangehensweise erzeugt einen viel kleineren Graph, was eine Beschleunigung der Zuteilung zur Folge hat. Außerdem können Bandbreitenzuteilungslösungen zwar einfache Vorstellungen von Fairness haben, wie zum Beispiel Max-Min-Fairness in Bezug auf verschiedene Datenströme in dem Netzwerk, wie im vorliegenden Text besprochen, doch die Gruppierung von Switches schafft neue Fairness-Anforderungen, wie zum Beispiel Fairness in Bezug auf Datenverkehr, der durch die verschiedenen Mittelblöcke eines Superblocks fließt. Zusätzliche Einschränkungen ergeben sich aus der begrenzten Anzahl von Tunneleingängen in Switches.
-
Nach bestimmten Aspekten, die unten noch ausführlich besprochen werden, umfasst eine Fairnessfunktion mehrere Optimierungsziele. Solche Ziele können in absteigender Bedeutung betrachtet werden und enthalten:
- 1. Aufrechterhaltung von Dienstklassen,
- 2. Max-Min-Fairness,
- 3. Intra-Superblock-Max-Min-Fairness,
- 4. Minimierung der Pfaddistanz,
- 5. Minimierung der Gesamtzahl von Pfaden, und
- 6. Minimierung der Anzahl von Pfaden, die zur Deckung eines gegebenen Bedarfs benötigt werden.
-
Mit Bezug auf das erste Ziel können Dienstklassen zu Prioritätsgruppen gruppiert werden. Über die verschiedenen Prioritätsgruppen hinweg, und bei der gewichteten Fairness innerhalb jeder Prioritätsgruppe, werden strenge Prioritäten gewahrt. Die Unterteilung von Dienstklassen in Prioritätsgruppen und die Gewichte verschiedener Dienstklassen werden als Eingabe in den Gesamtprozess vorgegeben.
-
Aspekte der Technologie beinhalten die Erstellung eines Graphen aus Mittelblöcken, und nur, wenn kein Bedarf mehr gedeckt werden kann, das Zerlegen ausgewählter Mittelblöcke zu Switching-Chips, wodurch ein Graph von Switches verschiedener Abstraktionsgrade entsteht. Im Gegensatz zu Lösungen, die immer k-disjunkte kürzeste Pfade zwischen einer Quelle und einem Zielort erzeugen, werden Pfade nach Bedarf bestimmt. Eine solche Herangehensweise hat zwei wesentliche Vorteile. Erstens werden keine unnötigen Pfade erzeugt. Zweitens werden Pfade, die nicht verfügbar sind, wenn sie tatsächlich gebraucht werden, nicht berechnet. Wenn zum Beispiel der Prozess 10 Pfade im Voraus von einer ersten Quelle (src1) zu einem ersten Zielort (dst1) berechnet, so können diese Pfade Links mit denen von einer zweiten Quelle (src2) zu einem zweiten Zielort (dst2) gemeinsam nutzen. Wollte man also darauf bestehen, sie in vollem Umfang zu nutzen, um Bedarf von src1 zu dst1 zuzuteilen, so könnte dies die Fairness verletzen. Stattdessen wird nach einem Aspekt eine iterative Herangehensweise verwendet.
-
Beispielsweise werden zunächst alle (nicht unbedingt disjunkten) Pfade von minimaler Länge zwischen jedem Paar Knoten berechnet, wo ein gewisser Bedarf zuzuteilen ist (im Gegensatz zu den oben beschriebenen k-kürzesten Pfaden werden nur Pfade von minimaler Länge berechnet, so dass alle Pfade, die bei diesem Schritt erzeugt werden, die gleiche Länge haben). Der Prozess verwendet dann ein mehrstufiges Wasserfüllungsverfahren, das die Optimierungsziele erfüllt. Erst wenn alle Pfade von minimaler Länge von einer Quelle zu einem Zielort erschöpft sind, werden die nächst-minimalen Pfade zwischen ihnen mit verfügbarer Kapazität berechnet.
-
Der Prozess ist dafür konfiguriert, die Zuteilung bei einem Knoten- und Linkausfall inkrementell zu justieren, wobei nur die benötigten Mindestzuteilungsänderungen vorgenommen werden. Wenn der Bedarf zwischen Quelle und Zielort nicht gedeckt werden kann, so wird eine Zerlegungstechnik verwendet, um einen Mittelblock durch Switching-Chips in dem Netzwerk-Graph zu ersetzen, und dann versucht der Prozess, den restlichen Bedarf zuzuteilen.
-
Dies ist dahingehend vorteilhaft, als es eine zuverlässige Optimierungsfunktion bereitstellt, die reale Produktionserfordernisse erfasst, wie zum Beispiel Datenverkehrslastausgleich, Minimieren von Chip-Tabelleneinträgen und so weiter. Die iterative Zerlegung des Graphen nutzt vorteilhaft die Abstraktion von Switching-Elementen, die in Superclusters verwendet werden. Die verwendeten Techniken passen sich an Bedarfsänderungen und Ausfälle an und berücksichtigen Dienstqualitätsparameter.
-
1 veranschaulicht ein beispielhaftes mehrstufiges Datencenter-Netz 100. Das Netzwerk 100 enthält mehrere Fabric-Blöcke 102, die so gezeigt sind, dass sie direkt über Links 104 verbunden sind, die durch Punkt- und Strichlinien dargestellt werden. In der Praxis können die Links 104 Lichtwellenleiter-Links sein. In diesem Beispiel enthält jeder Fabric-Block 102 ein 2-stufiges Netzwerk, das mehrere Mittelblöcke 1061 bis 106N umfasst, die mehrere Top-of-Rack-Switches 1081 bis 108M miteinander verbinden.
-
Jeder Mittelblock 106 kann zwei Stufen von Switches enthalten, und zwar eine erste Stufe 110 (S2) und eine zweite Stufe 112 (S3). Das 2-stufige Netzwerk von S2- und S3-Switches jedes Mittelblocks kann in einer Clos-Anordnung miteinander verbunden sein. Ähnlich den Verbindungen zwischen Fabric-Blöcken 102 sind die Mittelblöcke 106 und die TOR-Switches 108 direkt über Links 114 verbunden, die ebenfalls Lichtwellenleiter-Links sein können.
-
Wie in 2 gezeigt, kann jeder Switch 200 einen oder mehrere Prozessoren 202 enthalten, zum Beispiel eine CPU und/oder einen ASIC. Die Switches 200 enthalten außerdem Speicher 204, der Anweisungen 206 und Daten 208 speichert. Mehrere Verbindungen über Ports 210 bilden Kommunikationslinks zwischen anderen Switches in dem Datencenter-Netz.
-
Die Datenverkehrsgestaltung für solche mehrstufigen Datencenter-Netze muss sich verschiedenen Problemen stellen, die man in herkömmlichen ISP-Netzen nicht findet. Zum Beispiel muss die Datenverkehrsgestaltung gut skalierbar sein, um effizient Routen für Datencenter-Netze berechnen zu können, die mehrere Größenordnungen größer sind als ein herkömmliches ISP-Netz, und muss außerdem die Routenkonvergenzzeit bei einem Ausfall minimieren. Sie muss sich auch der Topologieheterogenität in den Datencenter-Netzen widmen und Datenstaus von Datenverkehrsströmen von Ende zu Ende sowohl auf Intra- als auch auf Interblock-Links reduzieren. Des Weiteren muss die Datenverkehrsgestaltung auch begrenzte Weiterleitungstabelleneinträge in Netzwerk-Switches berücksichtigen.
-
Um solche Probleme zu lösen, nutzen Aspekte der Datenverkehrsgestaltungslösung eine Vielzahl verschiedener Informationen als Eingabe, um die Bandbreitenzuteilung von Interblock-Datenverkehr in einem Satz End-to-End-Pfade zu bestimmen. Die Eingabeinformationen berücksichtigen einige oder alle von Folgendem: Interblocktopologie, einen Satz Datenverkehrserfordernisse, die einen gewünschten Gesamtdurchsatz zwischen einem Paar Quellen- und Zielort-Fabric-Blöcken für eine gegebene Klasse von Diensten (Class of Service, CoS) beschreiben, Disponierungsrichtlinien (zum Beispiel Prioritätsgruppierungen) zwischen verschiedenen CoS, und die Kapazität von Mittelblöcken zum Bedienen von Interblock-Transitdatenverkehr.
-
Um dies zu erreichen, werden eine Anzahl von Optimierungszielen berücksichtigt. Ein Ziel ist die Fairness zwischen den Datenverkehrserfordernissen zwischen verschiedenen Quelle- und Zielort-Fabric-Blöcken. Ein anderes ist die Minimierung der Sprungzahl von Interblock-Datenverkehr zum Reduzieren der Latenz. Ein weiteres Ziel ist die Minimierung der Pfadanzahl von Interblock-Datenverkehr zum Reduzieren der Anzahl von Weiterleitungstabelleneinträgen. Ein weiteres Ziel ist die Minimierung von Datenstaus auf Inter- und Intrablock-Links. Ein weiteres Ziel ist die Minimierung der Laufzeitgeschwindigkeit des Datenverkehrsgestaltungsprozesses. Ein weiteres Ziel ist die Minimierung der Routenkonvergenzzeit, sollte es zu einem Ausfall kommen. Und ein weiteres Ziel ist die Berücksichtigung der Dienstqualität. Diese Ziele werden in der Weise erreicht, die unten ausführlich besprochen wird.
-
Ein Aspekt der im vorliegenden Text besprochenen Bandbreitenzuteilung beinhaltet eine „Wasserfüllungs“-Technik zum Erhöhen der Bandbreitenzuteilung für die Datenverkehrserfordernisse von verschiedenen Quellen- und Zielort-Fabric-Blockpaaren mit gleichem Tempo. Die Bandbreitenzuteilungen stoppen für Datenverkehrserfordernisse, die in vollem Umfang erfüllt sind, und nehmen weiter zu für jene, die unerfüllt bleiben. Dies geschieht in einem Fall, indem zunächst der kürzeste Pfad favorisiert wird, um die Sprungzahl und somit die Latenz von Interblock-Datenverkehr zu reduzieren.
-
Wie mit Bezug auf die 3 und 4 gezeigt, kann es immer noch zu Datenstaus kommen, obwohl Switches innerhalb jedes Fabric-Blocks in einer Clos-Topologie miteinander verbunden sind. 3 veranschaulicht ein beispielhaftes Netzwerk 300 mit drei Fabric-Blöcken 302, die zum Beispiel durch (nicht gezeigte) optische Verbindungen verbunden sind. Die Mittelblöcke 306 und TOR-Switches 308 von Fabric-Block Β sind miteinander verbunden, und die S2-Switches 310 und S3-Switches von jedem Mittelblock 306 sind ebenfalls miteinander verbunden, wie oben mit Bezug auf 1 besprochen.
-
In diesem Beispiel ist jeder Mittelblock 306 ein Clos-Netzwerk, das zum Zweck der Kostensenkung nur zwei Stufen zu umfassen braucht. Intrablock-Datenverkehr 314 und Interblock-Datenverkehr 316 sind mittels durchgezogener bzw. gepunkteter Linien gezeigt. Datenstaus 318 können eintreten, wenn ein solcher Mittelblock in Fabric-Block Β sowohl Intrablock-Datenverkehr als auch Interblock-Transitdatenverkehr von Fabric-Block A, der für Fabric-Block C bestimmt ist, bedient.
-
4 veranschaulicht ein beispielhaftes Szenario 400 mit einem nativen Bandbreitenzuteilungsregime zum Maximieren der Nutzung eines kürzesten Pfades zwischen Fabric-Blöcken A und D. Hier findet eine Interblock-Kommunikation zwischen den Fabric-Blöcken 402 mit 40 Gigabit/s (40G) statt, während eine Intrablock-Kommunikation mit einer Rate von 10 Gigabit/s (10G) stattfindet. Wenn Interblock-Datenverkehr vom TOR-Switch 408 durch den Mittelblock 406 zum Fabric-Block D eine maximale Rate von 20 Gigabit/s (20G) hat, so hat diese einen Datenstau 418 auf dem Uplink beim Bursting mit Nennrate zur Folge.
-
Zur Minimierung von Datenstaus an den Inter-Mittelblockkanten bestimmt ein Aspekt des Datenverkehrsgestaltungsprozesses die Kapazität eines Pfades als das Minimum zwischen (a) der Kapazität eines Engpass-Interblock-Links und (b) der Kapazität des Engpass-Mittelblocks zum Bedienen von Interblock-Transitdatenverkehr ohne Datenstaus. Jede Mittelblockkantenverbindung kann einen oder mehrere physische Kommunikationslinks umfassen.
-
Zur Minimierung von Datenstaus auf TOR-Uplinks verwendet der Datenverkehrsgestaltungsprozess die unten besprochenen Strategien, um Inter- und Intrablock-„Max/Min“-Fairness sicherzustellen. Ein Flussdiagramm 450, das diesen Prozess veranschaulicht, ist in 4A gezeigt.
-
Zuerst teilt der Prozess für jeden Fabric-Block einen Bandbreitenbedarf zu einem Zielort-Fabric-Block gleichmäßig zwischen den Mittelblöcken dieses Fabric-Blocks, wie in Block 452 gezeigt. Als Zweites verwendet der Prozess die folgende heuristische Wasserfüllungsstrategie zum Erhöhen der Bandbreitenzuteilungen zu verschiedenen Quellen-/Zielort-Fabric-Blöcken mit gleichem Tempo und zusätzlich zum gleichmäßigen Zuteilen von Interblockpfadbandbreite zu verschiedenen Mittelblöcken in einem Quellen- oder Zielort-Fabric-Block der Reihe nach im Kreis, wie folgt.
-
Betrachten wir die Zielort-Fabric-Blöcke FBd der Reihe nach im Kreis, wie in Block 454 gezeigt. Jedes Mal, wenn ein Fabric-Block FBd betrachtet wird, konzentrieren wir uns auf einen einzelnen Zielort-Mittelblock, MBd, im FBd, der Reihe nach im Kreis ausgewählt, wie in Block 456 gezeigt. Dann wird ein Quellen-Fabric-Block FBS der Reihe nach im Kreis ausgewählt, wie in Block 458 gezeigt.
-
Unter den Mittelblöcken im Quellen-Fabric-Block FBS wird eine Teilmenge Μ mit der kürzesten verfügbaren Pfadlänge zum Zielort-Mittelblock MBd gesucht, wie in Block 460 gezeigt. Hier wird, zwischen den Mittelblöcken in der Teilmenge M, wie in Block 462 gezeigt, ein Mittelblock ausgewählt, der maximiert:
min (demand (MBS, FBd), spf_capacity(MBS, MBd)),
wobei spf_capacity(MBS, MBd) die kürzeste Pfadkapazität zwischen Quellen-Mittelblock MBS und Zielort-Mittelblock MBd darstellt, und demand(MBS, FBd) den Bedarf zwischen Quellen-Mittelblock MBS zu Zielort-Fabric-Block FBd darstellt. In diesem Szenario skaliert der Datenverkehrsgestaltungsprozess – zum Zweck der Skalierbarkeit und Minimierung der Pfadanzahl – zuerst jeden Mittelblock als einen einzelnen Knoten heraus und berechnet alle Mittelblockebenen-Pfade. Der Prozess endet, wenn der gesamte Bedarf durch solche Pfade gedeckt werden kann, und richtet einen „Tunnel“ für jeden in den 5 und 6 veranschaulichten Mittelblockebenen-Pfad ein.
-
5 veranschaulicht eine Anordnung 500 mit einem Quellen-Mittelblock 502, einem Zielort-Mittelblock 504 und einem Transitmittelblock 506. Die Mittelblöcke können jeweils ein 2-Stufen-Netzwerk aus S2- und S3-Switches haben, die in einer Clos-Anordnung miteinander verbunden sind, wie oben besprochen. Und das Beispiel 600 von 6 veranschaulicht einen beispielhaften Mittelblockebenen-Pfad zwischen Quellen-Mittelblock 602 und Zielort-Mittelblock 604 über das 2-stufige Switch-Netz von Transitmittelblock 606. Hier bezeichnen die Strichlinien Kanten zwischen verschiedenen Switches. Diese Anordnung führt zu minimaler Ausführungszeit des Datenverkehrsgestaltungsprozesses und hilft bei der Minimierung der Tunneltabelleneinträge, die in Switches in der Regel mit nur Hunderten von Tunneln programmiert werden.
-
Wenn nicht der gesamte Bedarf gedeckt ist, so wird der TE-Prozess fortgesetzt, um die restliche Interblock-Bandbreite zu identifizieren, die kein Bouncing innerhalb der Mittelblöcke erfordert. Nach einem Aspekt der Offenbarung generiert eine Herangehensweise Graphen mit abnehmenden Abstraktionsgraden, was iterativ in den 7A–B gezeigt ist. 7A veranschaulicht einen Routenberechnungsgraphen 700 mit einem Quellen-Mittelblock 702, einem Zielort-Mittelblock 704 und zwei Transitmittelblöcken 706 und 708. Wie hier gezeigt, ist der Transitmittelblock 706 (MB1) bereits in S3-Chips zerlegt. Illustration 750 von 7B zeigt einen Graphen der Zerlegung des Transitmittelblocks MB2 in S3-Switches, wobei entsprechende Kanten zwischen den verschiedenen Mittelblöcken durch die Strichlinien kenntlich gemacht sind.
-
In solchen Graphen werden Mittelblöcke mit 0 Restkapazität in einen Satz getrennter s3-Switches zerlegt. Der Datenverkehrsgestaltungsprozess bestimmt neue Interblockpfade, die einen Satz Mittelblöcke mit einer Restkapazität ungleich null und s3-Switches in Mittelblöcken ohne Restkapazität durchqueren. Dies wiederholt sich, bis der Graph nur s3-Switches in Mittelblöcken enthält oder kein Bedarf gedeckt werden kann.
-
Ein Nutzeffekt des Beginnens mit einem Graphen, der von Mittelblöcken abgeleitet ist, und des Zerlegens in Switches nur dann, wenn kein Bedarf mehr gedeckt werden kann, ergibt sich aus der Beobachtung, dass es viel mehr Switchebenen-Pfade als Mittelblock-Ebenen-Pfade mit wahrscheinlich viel höherer Gesamtkapazität gibt. Dies wird unten ausführlich veranschaulicht.
-
Nehmen wir beispielsweise an, dass jeder Mittelblock (MB) eines Fabric-Blocks (FB) acht S2- und acht S3-Switches umfasst. Ein Ein-Sprung-Mittelblockebenen-Pfad zwischen einem ersten Mittelblock MB1 und einem zweiten Mittelblock MB2 würde 3-Sprung-Switchebenen-Pfade ergeben: MB1.s2–MB1.s3–MB2.s3–MB2.s2.
-
In diesem Fall kann, weil jeder Mittelblock acht S2-Ebenen-Switches hat, jeder dieser s2-Switches verwendet werden, um diesen Pfad in sowohl den Quellen- als auch den Zielort-Mittelblöcken zu durchqueren. Folglich gibt es insgesamt 64 verschiedene Switchebenen-Pfade, die jeweils durch eine eindeutige Kombination von MB1.s2 und MB2.s2 gekennzeichnet sind. Zum Beispiel könnten zwei verschiedene Switchebenen-Pfade sein:
MBl.s2 [0]—MB1.s3 [2]–MB2.s3 [4]–MB2.s2 [0]
MB1.s2 [0]–MB1.s3 [1]–MB2.s3 [3]–MB2.s2 [1]
-
Hier bezeichnen die Zahlen in Klammern, welche speziellen s2- und s3-Chips der Pfad durchquert.
-
Es ist möglich, dass zwei Mittelblöcke durch mehrere S3-Links verbunden werden. In einem solchen Fall ist die Gesamtzahl von Pfaden in dem einen Sprung-Fall die Anzahl von Links zwischen den S3-Switches des ersten Mittelblocks MB1 und den S3-Switches des zweiten Mittelblocks MB2, multipliziert mit 64. Für einen Pfad der Länge k ist selbst dann, wenn es nur einen einzigen S3-Link gibt, der jedes MB-Paar auf dem Pfad verbindet, die Anzahl von Switchebenen-Pfaden gleich 8(k+1). Somit reduzieren das Wegabstrahieren von Switches und der anfängliche Blick auf Mittelblockebenen-Pfade den Graph beträchtlich und beschleunigen folglich den Routenberechnungsprozess.
-
Zur Minimierung der Routenkonvergenz bei Topologie-Ereignissen identifiziert ein Aspekt des Datenverkehrsgestaltungsprozesses den von den Ausfall-Ereignissen betroffenen Bedarf oder den restlichen Bedarf, der nicht vor Link/Switch-up-Ereignissen gedeckt wurde, und bestimmt einen Mindestsatz neuer Pfade, die für solche Erfordernisse zugeteilt werden sollen. Diese inkrementelle Aktualisierung wird anstelle einer erneuten Ausführung des Pfadbandbreitenzuteilungsalgorithmus, komplett von Anbeginn, ausgeführt.
-
Durch den Datenverkehrsgestaltungsprozess werden verschiedene Dienstklassen (Classes of Service, CoS) unterstützt. Der Prozess handhabt einen Satz Erfordernisse, die jeweils als ein Tripel dargestellt werden können (CoS, Quellen-MB, Zielort-Fabric-Block). Die Dienstklassen werden in Prioritätsgruppen gruppiert. Wenn es zum Beispiel vier Dienstklassen gibt (CoS1, CoS2, CoS3 und CoS4), so kann eine mögliche Konfiguration das Gruppieren von CoS1 und CoS2 miteinander in einer ersten Prioritätsgruppe 1 und von CoS3 und CoS4 miteinander in einer zweiten Prioritätsgruppe 2 anweisen. Die Anordnung verschiedener Dienstklassen in Prioritätsgruppen dient als eine Eingabe in den Prozess.
-
Der Prozess wendet zweckmäßigerweise eine strikte Priorität zwischen verschiedenen Prioritätsgruppen mit gewichteter fairer Zuteilung innerhalb einer Prioritätsgruppe an. So versucht der Prozess zuerst, alle Erfordernisse in der Prioritätsgruppe 1 zu erfüllen, und schreitet erst dann zu Prioritätsgruppe 2 voran. Bei der Zuteilung von Bandbreite für Gruppe 1 wird eine „gewichtete Wasserfüllung“ ausgeführt, wobei die Gewichte als eine Eingabe in den Prozess gegeben werden. Anstatt jedes Mal zu versuchen, den Bedarf um einen gewissen Betrag (delta) zu senken, wird er im Wesentlichen um diesen Betrag gesenkt, während eine Gewichtung der Dienstklasse gemäß delta*Gewicht (CoS) berücksichtigt wird. Somit kann der oben mit Bezug auf 4A beschriebene Prozessfluss für mehrere Prioritätsgruppen und auch für jede CoS innerhalb einer Prioritätsgruppe wiederholt werden.
-
Ein Beispiel für einen Pseudocode auf hoher Ebene eines Datenverkehrsgestaltungsprozesses („GraphConstruction“) nach Aspekten der Technologie ist unten dargestellt. Die GraphConstruction ()-Funktion erstellt einen Graph für eine Routenberechnung auf der Basis einer Interblocktopologie. Zunächst beginnt der Graph mit einem höchsten Abstraktionsgrad, wobei jeder Knoten einen Mittelblock darstellt, und reduziert allmählich den Abstraktionsgrad, um Pfade mit einem gemischten Abstraktionsgrad zu identifizieren, um den zusätzlichen Bedarf zu decken. Der Rest des Pseudocode implementiert die oben beschriebenen Zuteilungsstrategien. Repeat GraphConstruction ( ):
-
Der Datenverkehrsgestaltungsprozess verwendet zweckmäßigerweise einige oder alle der unten beschriebenen Bausteine für Pfadbestimmung und Bandbreitenzuteilungen.
-
(I) Berechnung der kürzesten Pfade
-
Es ist möglich, eine Variation des Dijkstra-Algorithmus der kürzesten Pfade von einer einzelnen Quelle zum Berechnen der kürzesten Pfade zu implementieren. In der Variation zur Verwendung mit Aspekten der im vorliegenden Text besprochenen Technologie ist die Eingabe ein Quellen-MB (src) und der restliche Mittelblock-Graph. Der Algorithmus findet alle kürzesten Pfade von src zu jedem der anderen Knoten. Für jeden Knoten in dem Graph generiert er eine Liste von Vorgängern, die allen kürzesten Pfaden von src zu diesem Knoten entsprechen.
-
Eine Kante wird als funktionsfähig betrachtet, solange ihre Restkapazität größer als 0 ist und die Restkapazität ihrer Endpunktknoten größer als 0 ist. Der Algorithmus wird parallel aus einer gegebenen Liste von Quellenknoten abgearbeitet. Zunächst enthält diese Liste alle Knoten in dem Graph. Wenn alle kürzesten Pfade zwischen einigen Quellen- und Zielort-Knoten erschöpft sind, so wird die Kürzeste-Pfade-Suche aktiviert, wobei die Liste nur den relevanten Quellenknoten enthält (siehe unten).
-
(II) Finden des kürzesten Pfades mit der maximalen Kapazität
-
Eine rekursive Funktion kann verwendet werden, um den kürzesten Pfad mit der maximalen Kapazität von einem gegebenen Quellenknoten (src) zu einem gegebenen Zielort-Knoten (dst) zu finden. Zusätzlich zu src und dst nimmt die rekursive Funktion als Eingabe die Liste der Vorgänger von dst, die kürzesten Pfaden von src zu dst entsprechen. Die Funktion arbeitet die Vorgänger einen nach dem anderen ab und berechnet die Kapazität des letzten Sprungs gemäß einer Minimierungsfunktion:
last_hop_capacity = min (predecessor mb capacity, dst mb capacity, edge capacity between predecessor and dst).
-
Wenn last_hop_capacity kleiner ist als die bisher gesehene maximale Pfadkapazität, so gibt es keinen Grund, diesen Vorgänger weiter zu betrachten. Anderenfalls wird die Funktion rekursiv mit diesem Vorgänger aufgerufen, und die Gesamtpfadkapazität, die diesen Vorgänger verwendet, ist min (last_hop_capacity, max capacity path from src to predecessor). Wenn diese Pfadkapazität größer ist als das bisher gefundene Maximum, so wird das Maximum aktualisiert. Die Rekursion verwendet einen Cache, um zu vermeiden, Pfade mit maximaler Kapazität, die bereits gefunden wurden, neu berechnen zu müssen.
-
(III) Erhalten des nächsten nutzbaren kürzesten Pfades zwischen zwei Mittelblöcken
-
Dieses Verfahren („get_path“) erhält einen Quellenknoten (MBS) und einen Zielort-Knoten (MBd) als Parameter und findet einen kürzesten Pfad mit nicht-leerer Kapazität zwischen diesen Knoten. Es eskaliert seine Suche nach dem Pfad gemäß den folgenden drei Schritten. Erstens: Wenn der letzte Pfad, der dafür verwendet wurde, Bandbreite zwischen dem Quellen- und dem Zielort zuzuteilen, immer noch etwas Kapazität hat, so wird dieser Pfad verwendet. Zu diesem Zweck erinnert sich das System immer an den letzten Pfad (speichert ihn zum Beispiel im Cache), der für die Zuteilung zwischen jedem Paar Knoten verwendet wurde. Zweitens: Der Prozess findet den kürzesten Pfad mit maximaler Kapazität unter den kürzesten Pfaden, die durch den jüngsten Aufruf des Algorithmus zur Berechnung der kürzesten Pfade gefunden wurden. Wenn der zurückgemeldete Pfad eine nicht-leere Kapazität hat, so wird dieser Pfad verwendet. Und drittens: Aufrufen des Algorithmus zur Berechnung der kürzesten Pfade, um nach neuen kürzesten Pfaden zu schauen, aber dieses Mal nur von der Quelle zu allen anderen Knoten in dem Graph. Dann wird der kürzeste Pfad mit maximaler Kapazität unter den kürzesten Pfaden gefunden. Hier wird, wenn der zurückgemeldete Pfad eine nicht-leere Kapazität hat, dieser Pfad verwendet.
-
(IV) Zuteilen von Bandbreite auf einem Pfad
-
Dieses Verfahren („allocate_path“) erhält einen Pfad und den Bedarf als einen Parameter und teilt min(path capacity, demand) auf diesem Pfad zu. Die Restkapazität wird für jeden Link sowie jeden Knoten (Mittelblock) beibehalten.
-
(V) Invertierter Index von Pfaden
-
Dieses Verfahren („index_path“) erhält einen Pfad als Parameter. Für jeden Knoten und Link in dem gegebenen Pfad wird der Pfadidentifikator zu der Liste von Pfaden hinzugefügt, die den Knoten/Link durchqueren, wodurch ein umgekehrter Index entsteht. Dies erlaubt es dem System, effizient auf Link- und Knotenausfälle zu reagieren, indem nur die relevanten Pfade für eine Neuzuteilung in Betracht gezogen werden. Wenn es zum Beispiel zwei Pfade p1 = (a, b, c) und p2 = (d, b, c, e) gibt, so hätte das System den folgenden Index für die Links (und in ähnlicher Weise einen Index für die Knoten):
(a, b): p1
(b, c): p1/p2
(d, b): p2
(c, e): p2
-
Nach einem Aspekt der Technologie wird ein Pfad durch eine eindeutige Pfad-ID dargestellt. Die eindeutige Pfad-ID kann durch Hashing der Abfolge von Knoten-IDs in dem Pfad erzeugt werden.
-
(VI) Bandbreitenzuteilung: Breitester Pfad
-
Für diesen Prozess („widest_path“) gibt es Eingaben von einem Quellen-Fabric-Block FBS, eines Zielort-Mittelblocks MB und einem konstanten DELTA, das die Kapazität angibt. Das Ziel ist es, den „besten“ Mittelblock in dem Quellen-Fabric-Block FBS zu finden, DELTA auf dem nächsten nutzbaren Pfad zwischen diesem Quellen-Mittelblock und einem gegebenen Mittelblock MB zuzuteilen und den verwendeten Pfad zu indexieren. Dieser Prozess erbringt den „besten“ Quellen-Mittelblock oder null, wenn kein geeigneter Quellen-Mittelblock gefunden wird.
-
Eine Annahme ist, dass die Kantenkapazität ein Mehrfaches von DELTA ist. Diese Annahme bedeutet, dass ein Pfad, der weniger als DELTA Kapazität hat, notwendigerweise keine Restkapazität hat. Wenn also get_path aufgerufen wird, so sucht der Prozess nach dem kürzesten Pfad zwischen den zwei Knoten, der mindestens DELTA Restkapazität hat. Wenn er keinen solchen Pfad findet, so wird bestimmt, dass es keine nutzbaren Pfade von irgendeiner Länge zwischen dem Quellen- und Zielort mehr gibt.
-
In diesem Prozess ist der „beste“ Quellen-Mittelblock im FBS einer, der (in dieser Reihenfolge):
- a) mindestens DELTA Kapazität auf dem nächsten nutzbaren Pfad zu MB hat und mindestens DELTA ungedeckten Bedarf zu dem Superblock hat, der MB umschließt;
- b) eine minimale Distanz zu MB hat; und
- c) einen maximalen ungedeckten Bedarf zu dem Fabric-Block hat, der MB umschließt.
-
Der Prozess wählt einen solcher „besten“ Mittelblöcke nach Belieben und teilt DELTA auf dem nächsten kürzesten nutzbaren Pfad zwischen dem Mittelblock und dem gegebenen Mittelblock MB zu. Die Zuteilung selbst ist eine Abbildung von Quellen- und Zielort-Mittelblockpaaren auf eine Liste, wobei jedes Element einen anderen Pfad darstellt, und umfasst die eindeutige Pfad-ID und den zugeteilten Betrag auf diesem Pfad.
-
(VII) Bandbreitenzuteilung: Beurteilen möglicher Zielorte
-
In diesem Prozess („allocate_bandwidth“) ist die Eingabe ein Bedarf von einem Mittelblock zu einem Fabric-Block, und die Ausgabe ist eine Zuteilung zwischen den Knoten in dem Graph, der mit ungedecktem Bedarf verknüpft ist. Der Prozess rotiert durch mögliche Zielort-Fabric-Blöcke. Für jeden Zielort-Fabric-Block behält der Prozess den momentanen Zielort-Mittelblock bei und rotiert jedes Mal durch die Mittelblöcke in diesem Zielort-Fabric-Block, wenn der Fabric-Block für eine Zuteilung in Betracht gezogen wird. Das System speichert auch eine Liste „verbrannter Ziel-Mittelblöcke“. Dies sind Zielort-Mittelblöcke, für die der Prozess keine Quelle finden konnte, so dass es keinen Grund gibt, sie in Zukunft noch einmal in Betracht zu ziehen. Der Prozess endet, wenn alle Mittelblöcke in dem Graph „verbrannter“ sind.
-
Bei einem gegebenen Zielort-Mittelblock wählt der Prozess einen Quellen-Fabric-Block der Reihe nach im Kreis. Er aktiviert dann den widest_path-Bandbreitenzuteilungsprozess mit diesem Quellen-Fabric-Block und dem Zielort-Mittelblock als Parameter. Wenn der widest_path-Bandbreitenzuteilungsprozess erfolgreich eine Zuteilung von DELTA vornimmt, so kehrt der allocate_bandwidth-Prozess zum Anfang zurück, wobei er dieses Mal einen anderen Zielort-Mittelblock (der Reihe nach im Kreis) betrachtet. Anderenfalls wählt der allocate_bandwidth-Prozess einen anderen Quellen-Fabric-Block der Reihe nach im Kreis und aktiviert den widest_path-Bandbreitenzuteilungsprozess ab diesem Fabric-Block, und so weiter, bis entweder der widest_path-Bandbreitenzuteilungsprozess erfolgreich eine Zuteilung vornimmt oder der allocate_bandwidth-Prozess durch alle möglichen Quellen-Superblöcke rotiert ist. Im letzteren Fall „verbrennt“ der Prozess den Zielort-Mittelblock.
-
Wie oben angesprochen, ist jede „Zuteilung“ eine Liste von Pfaden zwischen einigen Quellen- und Zielort-Mittelblöcken, wobei jeder Pfad irgendeinen zugeteilten Betrag hat. Der letzte Schritt des allocate_bandwidth-Prozesses ist die Normalisierung dieser Beträge, um sie zu relativen „Gewichten“ zu machen, beispielsweise unter Verwendung des folgenden Prozesses.
-
Eine Eingabe in den Prozess ist eine Liste von Zuteilungsbeträgen. Jeder Betrag entspricht einer Zuteilung auf einem anderen Pfad zwischen derselben Quelle und demselben Zielort. Die Ausgabe ist eine Liste relativer Gewichte, eines je Zuteilungsbetrag. Der Prozess führt die folgende Ermittlung durch. Finden des maximalen Zuteilungsbetrages in der Liste, als „max_allocation“ bezeichnet. Für jeden Zuteilungsbetrag, Generieren eines Gewichts (auf der Skala von 1 bis 10), als ceil(10 * allocation / max_allocation) berechnet. „ceil“ bedeutet hier „ceiling“, d. h. das Aufrunden auf die nächstgrößere ganze Zahl. Und dann Normalisieren der Gewichte unter Verwendung ihres größten gemeinsamen Nenners (Greatest Common Denominator, GCD). Zum Beispiel wird 9:6:3 zu 3:2:1.
-
(VIII) Zuteilungsaufhebungsprozess
-
Nach einem Aspekt der Offenbarung kann das System, wenn ein physischer Link ausfällt, die Zuteilung aller Pfade aufheben, die ihn durchqueren. In einem Graph ist ein physischer Link Teil einer Kante zwischen zwei Mittelblöcken, so dass ein Ausfall eines physischen Links eine Reduzierung der Kantenkapazität bedeutet. Darum muss die Zuteilung des richtigen Betrages aufgehoben werden, um diese neue Kapazität zu erfüllen. Die Zuteilungsaufhebung („deallocate_paths_through_link“) verwendet den umgekehrten Index von Pfaden, um die Pfade zu finden, die betroffen sein können.
-
Die Eingabe in diesen Prozess ist eine Kante zwischen zwei Mittelblöcken und seine neue Kapazität. Wenn die neue Kapazität ausreicht, um die momentane Zuteilung durch den Link zu erfüllen, so wird der Prozess ausgeführt. Anderenfalls berechnet der Prozess den Betrag an Bandbreite, dessen Zuteilung aufzuheben ist. In einem Szenario hebt der Prozess die Zuteilung von gerade genug Bandbreite auf, um die neue Kapazität zu erfüllen, so dass die restliche Kantenkapazität nach der Zuteilungsaufhebung 0 ist. Alternativ ist es möglich, etwas mehr Zuteilung aufheben als notwendig, so dass die Restkapazität größer als 0 ist. Dies würde es dem System erlauben, ein paar weitere Ausfälle zu tolerieren, ohne jedem Mal die Zuteilung aufheben zu müssen (Überreagieren beim ersten Mal, aber dafür Einsparen von etwas Zeit später).
-
Alle Pfade, welche die betroffenen Kommunikationslink durchqueren, können – nach absteigendem Zuteilungsbetrag sortiert – betrachtet werden. Der Grund dafür ist, dass der Zuteilungsaufhebungsprozess so wenige Pfade wie möglich berühren sollte. Für jeden Pfad wird der zugeteilte Betrag aktualisiert, oder der Pfad wird vollständig aus der Zuteilung herausgenommen, wenn er gänzlich geleert wurde. Die restlichen Link- und Knotenkapazitäten entlang des Pfades werden aktualisiert, zusammen mit dem ungedeckten Bedarf zwischen Quellen- und Zielort-Knoten auf dem Pfad und dem umgekehrten Pfadindex. Der Prozess ist vollendet, wenn die Zuteilungsaufhebung die neue Kapazität des betroffenen Kommunikationslinks erfüllt.
-
(IX) Kantenkapazitätenaktualisierungsprozess
-
Der Kantenkapazitätenaktualisierungsprozess („capacities_update_delta“) verwendet eine Liste von Paaren der Form (edge, capacity delta) als seine Eingabe. Der Prozess wertet die Liste aus. Für jede Kante in der Liste aktiviert der Prozess, wenn die Kapazität abnimmt, eine Zuteilungsaufhebung (deallocate_paths_through_link) und aktualisiert dann die Link-Kapazität. Nachdem die Liste verarbeitet wurde, überprüft das System, ob es ungedeckten Bedarf gibt. Wenn ja, so wird der allocate_bandwidth-Prozess aufgerufen, um eine inkrementelle Bandbreitenzuteilung zu versuchen. Es ist zu beachten, dass, wenn eine Link-Kapazität gleich bleibt oder zunimmt, der Prozess keine Zuteilung aufheben muss; jedoch kann das System möglicherweise einen gewissen früheren ungedeckten Bedarf decken, wenn eine Zuteilungsaufhebung ausgeführt wird.
-
(X) Handhabung von Knoten und Link-Up/Down-Ereignissen
-
Hier wird die per Benachrichtigung empfangene Liste von Ereignissen als eine Eingabe in den Prozess behandelt. Die Ausgabe kann als wahr/falsch behandelt werden. Die Ausgabe ist wahr, wenn es Zuteilungsänderungen gibt, anderenfalls ist sie falsch. Hier ist die Annahme, dass die Liste der Änderungen nie dieselbe Entität (Link/Knoten) zweimal enthält. Die Reihenfolge der Verarbeitung von Ereignissen dürfte gleichgültig sein. Das System verwaltet eine Karte von einer Kante zur delta-Kapazität dieser Kante. Das System verwaltet außerdem einen Satz (P) von Links, für die es ein „Link up“-Ereignis oder ein Knoten up-Ereignis für einen seiner Endpunkt-Switches empfangen hat.
-
Im Fall eines „Link down“-Ereignisses markiert das System den Link-Zustand als „down“ und merkt sich, dass die Kante, die den Link enthält, nun eine verringerte Kapazität haben sollte. In dieser Situation hat delta einen negativen Betrag der Einzellink-Kapazität.
-
Im Fall eines „Knoten down“(Switch down)-Ereignisses wird es für jeden Eintritts- oder Austrittslink, der den Knoten berührt, wenn der Link immer noch nutzbar, als ein Link down-Ereignis verarbeitet, wie oben besprochen.
-
Im Fall eines „Link up“-Ereignisses fügt das System den Link zu dem Satz P hinzu.
-
Und im Fall eines „Knoten up“-Ereignisses fügt der Prozess für jeden Eintritts- oder Austrittslink, der den Knoten berührt, den Link zu dem Satz P hinzu. Nachdem alle Ereignisse verarbeitet wurden, wertet der Prozess den Satz P aus. Für jeden Link in P merkt sich der Prozess, wenn der Link nutzbar ist, dass die Kante, die den Link enthält, nun eine erhöhte Kapazität haben sollte, wobei delta einen positiven Betrag der Einzellink-Kapazität hat.
-
Der Grund für das Vorhandensein des Satzes Ρ ist, dass zum Beispiel ein „Knoten up“-Ereignis nicht unbedingt bedeutet, dass das System die Links, die diesen Knoten berühren, nutzen kann, weil der Link oder sein Switch am anderen End „down“ sein können. Mit dem oben beschriebenen Prozess erhöht das erste Ereignis, das den Link „nutzbar“ macht, die Kapazität der Kante. Mittels einer Liste von Kanten und ihren delta-Kapazitäten aktiviert das System den oben beschriebenen Kantenkapazitätenaktualisierungsprozess (capacities_update_delta). Wenn irgendeine Zuteilung geändert wurde, so gibt der Prozess die neue Zuteilungskarte aus.
-
Die oben beschriebenen Prozesse und Operationen können durch eine Verarbeitungsvorrichtung, wie zum Beispiel eine Vorrichtung 200 von 2, zum Beispiel einen Switch oder eine sonstige Computervorrichtung, implementiert werden, die dafür konfiguriert ist, Netzwerkflusssteuerung zu verwalten. Wie oben besprochen, kann die Vorrichtung 200 einen oder mehrere Prozessoren 202 und Speicher 204, der Anweisungen 206 und Daten 208 speichert, enthalten. Der Speicher kann von jedem nicht-flüchtigen Typ sein, der in der Lage ist, Informationen zu speichern, auf die der eine oder die mehreren Prozessoren zugreifen können, wie zum Beispiel eine Festplatte, Cache, eine Speicherkarte, ROM, RAM, DVD, CD-ROM, beschreibbare und schreibgeschützte Speicher.
-
Die Anweisungen 206 können ein beliebiger Satz Anweisungen sein, die direkt, wie zum Beispiel Maschinencode, oder indirekt, wie zum Beispiel Scripts, durch den Prozessor auszuführen sind. Diesbezüglich können die Begriffe „Anweisungen“, „Anwendung, „Schritte“ und „Programme“ hierin austauschbar verwendet sein. Die Anweisungen können in Objektcodeformat zur direkten Verarbeitung durch den Prozessor oder in jeder anderen Computergerätsprache, die Skripte oder Sammlungen von unabhängigen Quellcode-Modulen beinhaltet, die auf Anforderung interpretiert oder vorab kompiliert werden.
-
Daten 208 können gemäß den Anweisungen 206 durch Prozessor 202 abgerufen, gespeichert oder modifiziert werden. So können beispielsweise, obwohl der hierin beschriebene Gegenstand nicht durch eine beliebige bestimmte Datenstruktur beschränkt ist, die Daten in Computerregistern, als Tabelle, die viele verschiedene Felder und Datensätze aufweist, oder XML-Dokumenten gespeichert werden. Die Daten können außerdem in einem beliebigen computergerätlesbaren Format wie, aber nicht beschränkt auf Binärwerte, ASCII oder Unicode formatiert sein. Des Weiteren können die Daten beliebige Informationen umfassen, die ausreichend sind, um die relevanten Informationen zu identifizieren, wie Zahlen, beschreibenden Text, proprietäre Codes, Zeiger, Referenzen auf Daten, die in anderen Speichern wie anderen Netzwerkstandorten gespeichert sind, oder Informationen, die von einer Funktion verwendet werden, um die relevanten Daten zu berechnen, umfassen.
-
Der eine oder die mehreren Prozessoren 202 können jeden herkömmlichen Prozessor, wie eine im Handel erhältliche CPU, beinhalten. Alternativ kann der Prozessor eine dedizierte Komponente wie ein ASIC oder ein anderer hardwarebasierter Prozessor sein. Obwohl 2 den Prozessor, den Speicher und andere Elemente des Computergeräts 200 als funktional innerhalb des gleichen Blocks befindlich illustriert, können der Prozessor, Computer, das Computergerät oder der Speicher tatsächlich mehrere Prozessoren, Computer, Computergeräte oder Speicher umfassen, die innerhalb des gleichen physischen Gehäuses aufbewahrt sein können oder auch nicht. Zum Beispiel kann der Speicher eine Festplatte oder ein sonstiges Speichermedium sein, das sich in einem anderen Gehäuse als der Switch 200 befindet. Dementsprechend werden Referenzen auf einen Prozessor, Computer, Computergerät oder Speicher so verstanden, als sie Referenzen auf eine Sammlung von Prozessoren, Computern, Computergeräten oder Speichern beinhalten, die parallel arbeiten können oder nicht. Zum Beispiel kann der Switch 200 eine oder mehrere Servercomputervorrichtungen enthalten, die als eine Serverfarm mit Lastausgleich arbeiten. Des Weiteren können einige im vorliegenden Text beschriebene Funktionen zwar so dargestellt sein, dass sie in einer einzelnen Computervorrichtung ablaufen, die einen einzelnen Prozessor hat, doch können verschiedene Aspekte des beschriebenen Gegenstandes auch durch mehrere Computervorrichtungen implementiert werden, die zum Beispiel Informationen über ein leitungsgebundenes oder drahtloses Netzwerk übermitteln. Und obgleich die Operationen oder Prozesse in einer bestimmten Reihenfolge gezeigt oder beschrieben sein können, können solche Operationen oder Prozesse, sofern im vorliegenden Text nicht ausdrücklich anders ausgesagt, auch in einer anderen Reihenfolge oder parallel ausgeführt werden.
-
Die obige Beschreibung der Ausführungsformen ist in einem veranschaulichenden Sinn zu verstehen, der die Offenbarung, die allein durch die Ansprüche definiert wird, nicht einschränkt. Es versteht sich des Weiteren, dass die Darstellung von Beispielen der Offenbarung (sowie Sätze, die Wendungen wie „wie zum Beispiel“, „beispielsweise“, „einschließlich“ und dergleichen enthalten) nicht in einem Sinne verstanden werden dürfen, der die Offenbarung auf die konkreten Beispiele beschränkt; vielmehr dienen die Beispiele lediglich zur Veranschaulichung einiger von vielen möglichen Ausführungsformen.