-
Hintergrund
-
In symmetrischen Multiprocessing-Systemen (SMP) sind mehrere Prozessoren so konfiguriert, dass sie sich ein gemeinsames Betriebssystem und Speicherressourcen teilen. Ein einziges Exemplar des Betriebssystems verwaltet alle Prozessoren im System. SMP wird auch als „tightly coupled multiprocessing“ bezeichnet, da alle Prozessoren über einen gemeinsamen Bus oder ein Netzwerk verbunden sind und auf dieselbe gemeinsame Speicherressource zugreifen. Der Durchsatz eines SMP-Systems ist höher als bei -Einzelprozessorsystemen, da alle Prozessoren parallel arbeiten. Außerdem wird die Zuverlässigkeit erhöht. Wenn ein Prozessorsockel ausfällt (z. B. ein Kurzschluss auf der Platine dieses Prozessors), kann die Arbeitslast dieses -Prozessors auf die anderen Sockel verteilt werden, während bei einem Ausfall eines Prozessors in einem Einzelprozessorsystem das System ausfällt.
US 6 330 643 B1 beschreibt ein Verfahren zum Vermeiden von Deadlocks in einem Cache-Kohärenzprotokoll für ein Mehrprozessor-Computersystem durch Laden eines Speicherwerts in eine Vielzahl von Cache-Blöcken, Zuweisen eines ersten Kohärenzzustands mit einer höheren Kollisionspriorität zu nur einem der Cache-Blöcke und Zuweisen von einem oder mehr zusätzliche Kohärenzzustände mit niedrigeren Kollisionsprioritäten für alle verbleibenden Cache-Blöcke. Es können verschiedene Systembuscodes verwendet werden, um die Priorität widersprüchlicher Anforderungen (z. B. DC-Anforderungsoperationen) zum Modifizieren des Speicherwerts anzuzeigen.
US 6 330 643 B1 ermöglicht auch das Falten oder Eliminieren von redundanten DClaim-Operationen und kann in einer globalen gegenüber einer lokalen Weise innerhalb eines Mehrprozessor-Computersystems angewendet werden, das Verarbeitungseinheiten aufweist, die in mindestens zwei Cluster gruppiert sind. Gemäß
US 2015 / 0 039 823 A1 weist eine Tabellennachschlagevorrichtung eine auf einem inhaltsadressierbaren Speicher (CAM) basierende Vorrichtung und einen ersten Cache auf. Das CAM-basierte Gerät wird verwendet, um mindestens eine Tabelle zu speichern. Der erste Cache ist mit der CAM-basierten Vorrichtung gekoppelt und wird verwendet, um mindestens einen eingegebenen Suchschlüssel der CAM-basierten Vorrichtung und mindestens ein entsprechendes Suchergebnis zwischenzuspeichern. Außerdem kann die Tabellensuchvorrichtung ferner mehrere zweite Caches und einen Arbiter enthalten. Jeder zweite Cache wird verwendet, um mindestens einen eingegebenen Suchschlüssel der CAM-basierten Vorrichtung und mindestens ein entsprechendes Suchergebnis zwischenzuspeichern. Der Arbiter ist zwischen den ersten Cache und jeden der zweiten Caches gekoppelt und wird verwendet, um den Zugriff auf den ersten Cache zwischen den zweiten Caches zu arbitrieren.
-
Kurzbeschreibung der Zeichnungen
-
Die vorliegende Offenbarung wird gemäß einer oder mehrerer verschiedener Ausführungsformen unter Bezugnahme auf die folgenden Figuren detailliert beschrieben. Die Figuren dienen nur der Veranschaulichung und stellen lediglich typische oder beispielhafte Ausführungsformen dar.
- ist eine Beispielarchitektur in Übereinstimmung mit Ausführungsformen der hier offengelegten Technologie
- ist ein Beispielknoten in Übereinstimmung mit Ausführungsformen der hier offengelegten Technologie.
- ist eine schematische Darstellung eines Beispiel-Layouts einer Kohärenzverzeichnis-Cache-Implementierungsvorrichtung in Übereinstimmung mit einer Ausführungsform der hierin offenbarten Technologie.
- ist eine schematische Darstellung eines Beispiel-TCAMs in Übereinstimmung mit einer Ausführungsform der hier offengelegten Technologie.
- ist eine schematische Darstellung eines Beispiel-SRAMs in Übereinstimmung mit einer Ausführungsform der hierin offenbarten Technologie.
- ist eine schematische Darstellung von beispielhaften separaten TCAM-Bereichen in Übereinstimmung mit einer Ausführungsform der hier offengelegten Technologie.
- zeigt einen ersten Teil eines Beispiels eines Kohärenzverzeichnis-Cache-Verwaltungsablaufs in Übereinstimmung mit einer Ausführungsform der hier offengelegten Technologie.
- zeigt einen zweiten Teil des beispielhaften Kohärenzverzeichnis-Cache-Verwaltungsablaufs von .
- ist ein Beispiel für ein Computergerät zur Durchführung von TCAM-Fehlererkennung und -Korrektur in Übereinstimmung mit einer Ausführungsform der hierin offenbarten Technologie.
- ist ein Beispiel für ein Computersystem, in dem die in der vorliegenden Offenbarung beschriebenen Ausführungsformen implementiert werden können.
-
Die Abbildungen erheben keinen Anspruch auf Vollständigkeit und beschränken die vorliegende Offenbarung nicht auf die genaue dargestellte Form.
-
Detaillierte Beschreibung
-
Non-Uniform Memory Access (NUMA) ist ein Speicherdesign für SMP-Systeme. Im Allgemeinen umfasst eine NUMA-Architektur eine Vielzahl von Knoten, die über einen SMP-Bus oder ein Netzwerk miteinander verbunden sind. Jeder Knoten selbst ist ein kleiner SMP, der mehrere Prozessorsockel und zugehörigen Speicher umfasst, die untereinander verbunden sind, wobei der Speicher innerhalb des Knotens von allen Prozessorsockeln gemeinsam genutzt wird. Der Speicher innerhalb eines Knotens kann als lokaler Speicher für die Prozessoren des Knotens betrachtet werden, während der Speicher anderer Knoten als entfernter Speicher betrachtet werden kann. Knoten-Controller innerhalb jedes Knotens ermöglichen den Prozessorsockeln den Zugriff auf entfernten Speicher innerhalb des Systems. Ein Knoten-Controller kann als erweiterter Speicher-Controller betrachtet werden, der den Zugriff auf einen Teil oder den gesamten lokalen Speicher und den Zugriff der Prozessorsockel des Knotens auf den entfernten Speicher verwaltet.
-
Aufgrund der Art und Weise, wie der Speicher implementiert ist, nimmt jeder der Knoten-Controller am Cache-Kohärenzprotokoll für das System teil. Die Cache-Kohärenz kann die Sicherstellung der Einheitlichkeit von Datenblöcken beinhalten, was bedeutet, dass jede Variable, die verwendet werden soll, einen konsistenten Wert über alle lokalen Caches hat. In dieser Hinsicht kann ein Kohärenzverzeichnis Eintragsinformationen enthalten, um den Zustand und die Eigentümerschaft jedes Speicherblocks zu verfolgen, der von den Prozessoren in einem Multiprozessor-Shared-Memory-System gemeinsam genutzt werden kann. Da ein Kohärenzverzeichnis möglicherweise zu groß ist, um auf einem Knoten-Controller gespeichert zu werden, kann das Kohärenzverzeichnis im Host-Speicher gespeichert werden, und ein Knoten-Controller kann einen Kohärenzverzeichnis-Cache für schnellen Zugriff/verringerte Bandbreitenauswirkungen auf einen Prozessor verwenden.
-
Ein Kohärenzverzeichnis-Cache kann als eine Komponente beschrieben werden, die eine Teilmenge der Kohärenzverzeichniseinträge speichert und so einen schnelleren Zugriff und eine höhere Datenbandbreite ermöglicht. Für verzeichnisbasierte Kohärenz kann der Kohärenzverzeichnis-Cache von einem Knoten-Controller verwendet werden, um die Kommunikation zwischen verschiedenen Knoten eines Computersystems oder verschiedenen Computersystemen zu verwalten. In diesem Zusammenhang kann der Kohärenzverzeichnis-Cache den Status jedes Cache-Blocks (oder jeder Cache-Zeile) für das Computersystem oder die verschiedenen Computersysteme verfolgen. Beispielsweise kann der Kohärenzverzeichnis-Cache verfolgen, welche der Knoten des Computersystems oder der verschiedenen Computersysteme sich einen Cache-Block teilen.
-
Ein Kohärenzverzeichnis-Cache kann Informationen enthalten, die sich auf eine Vielzahl von Speicherblöcken beziehen. Die Größe dieser Speicherblöcke kann zur Vereinfachung der Implementierung so definiert werden, dass sie der Größe von System-Cache-Zeilen für ein Computersystem entspricht. Diese Speicherblöcke in Cache-Zeilen-Größe können zur Verdeutlichung der Diskussion als Cache-Zeilen bezeichnet werden. Die Cache-Zeilen-Information kann einen Prozessor (oder ein anderes Gerät) identifizieren, bei dem die Cache-Zeile in dem Computersystem (oder in verschiedenen Computersystemen) gespeichert ist. Das Kohärenzverzeichnis und der Kohärenzverzeichnis-Cache können einen Kohärenzstatus und Eigentumsinformationen enthalten, die mit jeder der Systemspeicher-Cachezeilen verbunden sind. Wenn die Anzahl der Cache-Zeilen zunimmt, kann die Größe des Kohärenzverzeichnisses und auch des Kohärenzverzeichnis-Caches in ähnlicher Weise zunehmen. Aus Leistungsgründen kann die Zunahme der Größe des Kohärenzverzeichnis-Caches zu einer entsprechenden Zunahme der Nutzung eines dem Kohärenzverzeichnis-Cache zugeordneten Die-Bereichs führen. In einigen Systemen wird ein ternärer inhaltsadressierbarer Speicher (TCAM) verwendet, um einen Kohärenzverzeichnis-Cache zu implementieren, wobei TCAMs zu durchsuchende Tags enthalten und TCAMs durch statischen Direktzugriffsspeicher (SRAM) unterlagert sind. Infolgedessen wird die Fehlererkennung und -korrektur verwendet, um die Verfügbarkeit aufrechtzuerhalten, was derzeit durch Duplizierung erreicht wird, d. h. zwei TCAMS, die doppelte/redundante TCAM-Tag-Einträge speichern. Die Verwendung von zwei TCAMs für die Fehlererkennung und -korrektur ist außerdem flächenineffizient.
-
Dementsprechend sind verschiedene Ausführungsformen darauf ausgerichtet, TCAM-Duplizierung nur dann bereitzustellen, wenn dies zum Schutz der modifizierten Kohärenzverzeichnis-Cache-Einträge erforderlich ist. Insbesondere wird eine gewisse Anzahl von TCAM-Einträgen für die Verwendung als redundante TCAM-Konfiguration reserviert.
-
In einer Ausführungsform kann die Anzahl der redundanten TCAM-Einträge programmierbar sein und die gleiche Zeile in beiden TCAMs verwenden. Die Verwendung der gleichen/entsprechenden Zeilen zwischen redundanten Eintragsbereichen der TCAMs ermöglicht eine einfachere Abfrage des zweiten TCAMs, um festzustellen, welches des ersten oder zweiten TCAMs fehlerhaft ist, wenn nur ein Treffer/eine Übereinstimmung auftritt, obwohl es zwei hätte geben sollen (unten ausführlicher beschrieben). Außerdem kann bei einer Übereinstimmung in zwei TCAMs die Zeilennummer/Adresse als direkter Zeiger auf den darunterliegenden SRAM-Speicherplatz dienen. Gemäß einer anderen Ausführungsform ist es nicht erforderlich, redundante/geänderte Einträge in dieselbe Zeile in jedem TCAM zu schreiben. So kann z. B. eine Schaltung aufgebaut werden, die z. B. ein einziges TCAM verwendet und die eine Übereinstimmung sowohl in einer oberen Hälfte/einem Teil als auch in einer unteren Hälfte/einem Teil des TCAM erwartet, um Redundanz für modifizierte Einträge zu schaffen. Obwohl mehr Schreiboperationen (vier Schreibvorgänge) in ein einzelnes TCAM im Vergleich zu zwei Schreibvorgängen in jedes von zwei TCAMs parallel erforderlich sind, kann die gleiche Effizienz bei der Die-Größe erzielt werden. Die verbleibende TCAM-Kapazität kann nicht modifizierte Einträge aufnehmen. Um die auf diese Weise konfigurierten TCAMs zu verwalten, wird jedes TCAM als zwei separate Cache-Bereiche behandelt/verwaltet (einer für modifizierte Einträge, einer für nicht modifizierte Einträge). Jeder Cache-Bereich unterhält separate, verknüpfte LRU-Listen (Least-Recently-Used), um die zu löschenden Einträge zu identifizieren.
-
In einer anderen Ausführungsform kann die Zuweisung von Einträgen frei fließend sein, wobei zwei TCAM-Einträge bei Bedarf zur redundanten Speicherung von geänderten Einträgen verdrängt werden. In dieser Ausführungsform ist eine dynamische Zuweisung von Einträgen zu einem TCAM vorgesehen, wobei es keine „harten“ Unterteilungen geben muss, die den TCAM-Speicherplatz in redundante Eintragsbereiche und nicht redundante Eintragsbereiche aufteilen. Dementsprechend werden, wenn redundante Einträge gespeichert werden sollen, zwei freie Eintragsplätze freigegeben (da redundante Einträge in zwei TCAMs gespeichert werden). Wenn ein LRU-Eintrag ein redundanter Eintrag ist, führt das Auslagern zu den zwei Eintragsplätzen. Wenn ein LRU-Eintrag ein nicht-redundanter Eintrag ist, kann ein zusätzlicher Eintrag verdrängt werden, um den zusätzlichen Eintragsplatz zu erhalten. In einer anderen Ausführungsform kann ein modifizierter Eintrag einen nicht redundanten/nicht modifizierten LRU-Eintrag ersetzen, indem die modifizierten Informationen in den Host-/Systemspeicher zurückgeschrieben werden. Wenn ein unmodifizierter Eintrag verdrängt wird, kann er stillschweigend wieder eingefügt werden.
-
zeigt eine Beispielarchitektur 100 in Übereinstimmung mit Ausführungsformen der vorliegenden Offenbarung. Die Beispielarchitektur 100 dient nur zur Veranschaulichung und ist nicht als Einschränkung des Umfangs des hierin offenbarten Gegenstands auf die Architektur 100 auszulegen. Einem Fachmann ist bekannt, dass Ausführungsformen der hier offengelegten Technologie auf jedes Multiprozessorsystem mit gemeinsam genutzten Speicherressourcen anwendbar sind. Wie in dargestellt, umfasst die Architektur 100 16 Knoten. In verschiedenen Ausführungsformen können mehr als 16 Knoten in der Architektur 100 enthalten sein. Jeder Knoten (-015) ist mit jedem anderen Knoten innerhalb der Architektur 100 verbunden. In verschiedenen Ausführungsformen kann ein Knoten direkt mit einem oder mehreren Knoten verbunden sein, wie in der Architektur 100 dargestellt, während in anderen Ausführungsformen ein Knoten über andere Geräte, einschließlich, aber nicht beschränkt auf Router und Schalter, mit einem oder mehreren Knoten verbunden sein kann. In verschiedenen Ausführungsformen kann jeder Knoten (-015) einen oder mehrere Prozessoren und einen oder mehrere Knoten-Controller (in nicht dargestellt) enthalten, bei dem es sich um einen erweiterten Speicher-Controller handelt, der so konfiguriert ist, dass Prozessoren innerhalb jedes Knotens auf den Speicher aller anderen Knoten zugreifen können.
-
zeigt einen Beispielknoten 200 in Übereinstimmung mit Ausführungsformen der vorliegenden Offenbarung. In verschiedenen Ausführungsformen kann der Knoten 200 einen oder mehrere der Knoten (-015) darstellen-, die in Bezug auf diskutiert wurden. Der Knoten 200 dient nur zur Veranschaulichung und ist nicht so zu verstehen, dass der Umfang der hier erörterten Technologie nur auf den Knoten 200 beschränkt ist. Knoten 200 zeigt nur die Komponenten, die für die Erläuterung der Technologie der vorliegenden Offenbarung relevant sind, und eine Person mit gewöhnlichen Kenntnissen auf dem Gebiet der Technik würde wissen, wie gängige Komponenten von Verarbeitungssystemen implementiert werden können, die in Knoten 200 weggelassen wurden.
-
In verschiedenen Ausführungsformen kann der Knoten 200 als einzelne integrierte Schaltung implementiert sein, einschließlich, aber nicht beschränkt auf eine anwendungsspezifische integrierte Schaltung (ASIC), ein Field Programmable Gate Array (FPGA), ein Programmable Logic Array (PLA), ein Complex Programmable Logic Device (CPLD) oder eine andere integrierte Schaltungskomponente. In einigen Ausführungsformen kann der Knoten 200 eine Leiterplatte (PCB) oder ein Multi-Chip-Modul mit einer Vielzahl von Chipsätzen umfassen, die darin angeordnet sind. Wie dargestellt, enthält Knoten 200 vier Prozessoren CPU0, CPU1, CPU2, CPU3. Jeder Prozessor kann einen oder mehrere Prozessorkerne enthalten. Knoten 200 kann eine ähnliche Struktur wie ein SMP-System haben, wobei jeder Prozessor CPU0, CPU1, CPU2, CPU3 kommunikativ miteinander verbunden ist und Zugriff auf jeden Speicher 201, 202, 203, 204 hat. In verschiedenen Ausführungsformen kann der Speicher 201, 202, 203, 204 einen oder mehrere Typen von nicht transitorischen, maschinenlesbaren -Speichermedien umfassen-, einschließlich, aber nicht beschränkt auf: Solid-State-Speichergeräte (SSDs), Single-In-Line-Speichermodule (SIMMs), Dual-In-Line-Speichermodule (DIMMs), dynamischer -Direktzugriffsspeicher (DRAM), statischer Direktzugriffsspeicher (SRAM) und andere gängige Typen von Computerspeichern.
-
Jeder Prozessor CPU0, CPU1, CPU2, CPU3 verwaltet seine jeweilige Speicherkomponente. Anfragen nach Daten, die im Speicher 201, 202, 203, 204 gespeichert sind, werden an den jeweiligen Prozessor CPU0, CPU1, CPU2, CPU3 gerichtet. Ein nicht einschränkendes Beispiel: Wenn CPU2 einen Datenblock an einer Adresse im lokalen Speicher 204 benötigt, kann CPU2 eine Anforderung an CPU3 senden, um den angeforderten Datenblock abzurufen und den Datenblock für CPU2 bereitzustellen. In verschiedenen Ausführungsformen kann jeder Speicher 201, 202, 203, 204 einen zugehörigen Speicher-Controller haben, der so konfiguriert ist, dass er den Zugriff auf die Datenblöcke seiner jeweiligen Speicherkomponente steuert. Jeder Speicher-Controller kann in einigen Ausführungsformen als spezialisierte Logikschaltung implementiert sein.
-
Obwohl in der Abbildung jeder Speicher 201, 202, 203, 204 direkt mit einem Prozessor CPU0, CPU1, CPU2, CPU3 verbunden ist, weiß ein Fachmann, dass in einigen Ausführungsformen jeder Prozessorsockel CPU0, CPU1, CPU2, CPU3 mit einer oder mehreren Speicherkomponenten verbunden sein kann. Als nicht einschränkendes Beispiel können CPU0 und CPU3 mit dem Speicher 201 verbunden sein, so dass beide Prozessoren CPU0, CPU3 direkt auf den Speicher 201 zugreifen können.
-
Die Speicher 201, 202, 203, 204 werden mit den lokalen Speichern anderer Knoten innerhalb des Systems kombiniert, um einen gemeinsamen Hauptspeicher mit einem globalen Adressraum zu bilden. In verschiedenen Ausführungsformen können die Speicher 201, 202, 203, 204 zu einem lokalen Knotenspeicher kombiniert werden, und die Speicher anderer Knoten im System können als entfernte Speicher betrachtet werden. Jeder Speicher 201, 202, 203, 204 kann ein logischer Teil des gemeinsamen Hauptspeichers sein, ähnlich wie ein Level-3-Cache. In verschiedenen Ausführungsformen kann jeder Prozessor CPU0, CPU1, CPU2, CPU3 einen dedizierten CPU-Cache (d. h. Level-1-Cache, Level-2-Cache) enthalten (in nicht dargestellt), um Kopien häufig verwendeter Daten aus dem lokalen Speicher (d. h. der Kombination der Speicher 201, 202, 203, 204) oder dem entfernten Speicher (d. h. den mit entfernten Knoten verbundenen Speichern) zu speichern.
-
In verschiedenen Ausführungsformen kann jeder Prozessorsockel einen dedizierten Cache 205, 206, 207, 208 haben, der einen kleineren, schnelleren Hardwarespeicher umfasst, der jeweils einem der Prozessoren CPU0, CPU1, CPU2, CPU3 zugeordnet ist. Die Caches 205, 206, 207, 208 können in einer Vielzahl von Cache-Architekturen implementiert sein, einschließlich, aber nicht beschränkt auf einen Set-Associated-Cache, einen vollständig assoziativen Cache, ein Direct-Mapped-Cache-Schema und andere in der Technik übliche Cache-Architekturen. In einigen Ausführungsformen können die Caches 205, 206, 207, 208 innerhalb der Prozessoren CPU0, CPU1, CPU2, CPU3 als eine einzige Komponente implementiert sein. Die Caches 205, 206, 207, 208 können einen oder mehrere Typen gängiger Cache-Speicherkomponenten umfassen, einschließlich, aber nicht beschränkt auf SRAM, synchrones DRAM (SDRAM), Flash-Speicher, eingebettetes DRAM (eDRAM), nichtflüchtiges RAM (NVRAM), neben anderen Typen von Cache-Speicherkomponenten. Jeder jeweilige Cache 205, 206, 207, 208 ist jedem Prozessor CPU0, CPU1, CPU2, CPU3 zugeordnet und hält Kopien von Datenblockwerten aus dem gemeinsam genutzten Hauptspeicher, um die Verarbeitungsgeschwindigkeit zu erhöhen, indem die Notwendigkeit reduziert wird, Daten aus dem langsameren gemeinsam genutzten Hauptspeicher innerhalb des Systems abzurufen.
-
Wie oben beschrieben, ist ein CPU-Cache (in nicht dargestellt) so konfiguriert, dass er Datenblöcke enthält, die aus dem lokalen Speicher des Knotens (d. h. aus den Speichern 201, 202, 203, 204) oder aus entfernten Speichern (d. h. aus Speichern, die mit entfernten Knoten verbunden sind) gezogen werden. Die Caches 205, 206, 207, 208 können so konfiguriert sein, dass sie Kopien von Datenblöcken speichern, die von Adressen im entfernten Speicher eines anderen Knotens abgerufen wurden. In einigen Ausführungsformen können CPU-Caches und Caches 205, 206, 207, 208 in einer einzigen Komponente kombiniert werden.
-
Der Knoten 200 umfasst zwei Knoten-Controller, Knoten-Controller 1 und Knoten-Controller 2. Wie oben beschrieben, sind Knoten-Controller 1 und Knoten-Controller 2 mit der Verwaltung des Zugriffs der jeweiligen Prozessoren CPU0, CPU1, CPU2, CPU3 auf den entfernten Speicher und von den entfernten Prozessoren auf den lokalen Speicher beauftragt. In verschiedenen Ausführungsformen kann es wenige oder mehrere Knoten-Controller pro Knoten geben. Jeder Knoten-Controller dient als Systemverbindung und ermöglicht jedem Prozessor CPU0, CPU1, CPU2, CPU3 den Zugriff auf Speicheradressen innerhalb des gemeinsamen Speichers, einschließlich der Adressen, die in Speicherkomponenten anderer Knoten im System vorhanden sind. In verschiedenen Ausführungsformen können die Knoten-Controller 1 und 2 als separate Prozessorkomponente implementiert werden, während in anderen Ausführungsformen die Knoten-Controller 1 und 2 als eine oder mehrere spezialisierte Logikkomponenten implementiert werden können, einschließlich, aber nicht beschränkt auf Zustandsmaschinen, die zur Ausführung bestimmter Zustandsoperationen konfiguriert sind. Jeder Knoten-Controller 1 und 2 kann eine Vielzahl von Fabric-Verbindern (in nicht dargestellt) umfassen, um die Knoten-Controller 1 und 2 mit den anderen Knoten innerhalb des Systems zu verbinden, wie im dargestellten Beispiel in .
-
In verschiedenen Ausführungsformen kann jeder Knoten-Controller 1 und 2 eine Teilmenge der Prozessoren CPU0, CPU1, CPU2, CPU3 steuern. Im dargestellten Beispiel ist der Knoten-Controller 1 kommunikativ mit den Prozessoren CPU0 und CPU1 gekoppelt, während der Knoten-Controller 2 kommunikativ mit den Prozessoren CPU2, CPU3 gekoppelt ist. Darüber hinaus kann jeder Knoten-Controller 1 und 2 stellvertretend für alle Prozessoren auf entfernten Knoten stehen. Die Knoten-Controller 1 und 2 erscheinen für jeden der Prozessoren CPU0, CPU1, CPU2, CPU3 als ein einziger entfernter Prozessor. Dadurch kann der Prozessor ein kompakteres Kohärenzverzeichnis und eine kompaktere Geräteadressierung beibehalten. Als nicht einschränkendes Beispiel kann das Kohärenzverzeichnis eines Prozessors nur den Zustand der Eigentumsinformationen von 4 bis 8 anderen Prozessoren oder Geräten verfolgen.
-
Wie in dargestellt, enthält jeder Knoten-Controller 1 und 2 einen oder mehrere ternäre inhaltsadressierbare Speicher (TCAMs) 210a, 210b, 210c, 210d. Ein TCAM ist ein spezieller Typ von Hochgeschwindigkeitsspeicher, der seinen gesamten Inhalt in einem einzigen Taktzyklus durchsucht, ähnlich wie ein gewöhnlicher inhaltsadressierbarer Speicher (CAM). Während CAM ein binäres Suchmuster (entweder 0 oder 1) für jedes durchsuchte Bit liefert, ermöglicht TCAM die Speicherung und Abfrage von Daten unter Verwendung von mindestens drei Datensuchbedingungen: 0, 1 und X. Das X wird als „don't care“- oder „Wildcard“-Zustand bezeichnet, der ein oder mehrere Bits angibt, die bei der Suche nicht exakt übereinstimmen müssen, um eine Übereinstimmung (auch als Treffer bezeichnet) anzuzeigen. Durch die Verwendung von drei Suchbedingungen ist TCAM in der Lage, umfassendere Suchvorgänge auf der Basis von Mustervergleichen durchzuführen als die binäre Suche mit exakter Übereinstimmung im herkömmlichen CAM. TCAM kann mit Einträgen arbeiten, die Speicherblöcke unterschiedlicher Größe repräsentieren, was eine dynamische Größenbestimmung der zu durchsuchenden Adress-Tags ermöglicht. Diese dynamisch dimensionierten Tags sind mit dynamisch dimensionierten entfernten oder lokalen Speicherdatenblöcken verknüpft. TCAM ermöglicht es, mit einem einzigen Eintrag einen Bereich abzudecken, der entweder größer oder kleiner als die Größe der jeweiligen Cache-Zeile ist, wodurch die Notwendigkeit einzelner, spezifischer Einträge für jede betreffende Adresse, die für ein CAM erforderlich sind, reduziert wird. Es sollte jedoch beachtet werden, dass verschiedene Ausführungsformen nicht notwendigerweise auf TCAMs beschränkt sind und in CAMs angewendet/implementiert werden können. Fachleute werden verstehen, dass bei Anwendung auf CAMs (und nicht auf TCAMs) die Tag-Größe die gleiche ist, im Gegensatz zu TCAMs, wo die Tag-Größe variieren kann, je nachdem, wie groß ein Speicherblock vom Kohärenzverzeichnis-Cache verfolgt wird.
-
Jedes TCAM 210a, 210b, 210c, 210d kann so konfiguriert sein, dass es den Besitz aller Datenblöcke verfolgt, auf die einer der Prozessoren CPU0, CPU1, CPU2, CPU3 oder ein anderer Prozessorsockel im System zugreifen kann. Wie oben beschrieben, gibt es verschiedene Cache-Kohärenzprotokolle, die in SMPs implementiert werden können, um das Kohärenzproblem zu lösen. Im Allgemeinen verwenden diese Cache-Kohärenzprotokolle Zustandsmarkierungen, um sicherzustellen, dass die Kohärenz aufrechterhalten wird, wobei zu den üblichen Zuständen Modified (M), Exclusive (E), Shared (S) und Invalid (I) gehören. Modifiziert zeigt an, dass die Cache-Zeile „schmutzig“ ist, d. h. der Wert wurde geändert und unterscheidet sich von dem Wert im gemeinsamen Speicher. Exklusiv zeigt an, dass der Wert einer Cache-Zeile mit dem Wert im gemeinsamen Speicher übereinstimmt und dass dieser Cache die einzige zwischengespeicherte Kopie dieses Datenblocks verwaltet. Shared zeigt an, dass der Wert mit dem Wert in einem Speicherdatenblock des Shared Memory übereinstimmt, dass aber mehrere Kopien des Hauptspeicherdatenblocks in anderen Caches innerhalb des Systems vorhanden sind. Ungültig zeigt an, dass die Daten der Cache-Zeile nicht gültig sind und wieder verwendet werden können. Jede Cache-Zeile beginnt im ungültigen Zustand, was darauf hinweist, dass der jeweilige Datenblock nicht in Besitz ist.
-
Um ein Beispiel für den Betrieb des Cache-Kohärenzprotokolls zu veranschaulichen, kann CPU0 die Adresse X im Speicher 202 lesen. Das heißt, CPU0 sendet eine Lesenachricht an CPU1. CPU1 stellt sicher, dass die Daten für Adresse X von keinem Prozessor gehalten werden, z. B. von einer der CPUs CPU0, CPU1, CPU2 oder CPU3. Um sicherzustellen, dass die Daten von keinem Prozessor gehalten werden, sendet CPU1 eine Snoop-Request-Nachricht an den Node Controller 1. Es ist zu beachten, dass eine Snoop-Anforderung nicht an CPU0 gesendet wird, da CPU0 der Prozessor ist, der die Leseanforderung gesendet hat . Knoten-Controller 1 hat möglicherweise einen Fehler in seinem Kohärenzverzeichnis-Cache (d. h., er wurde nicht in einem TCAM gefunden (weiter unten ausführlicher beschrieben). Knoten-Controller 1 holt den Status des Kohärenzverzeichnisses aus dem Speicher von CPU1, und Knoten-Controller 1 antwortet auf die Snoop-Anforderung mit einer „Unowned“-Meldung. Knotensteuerung 1 speichert einen Kohärenzverzeichnisstatus im Kohärenzverzeichnis-Cache. Da CPU1 nun weiß, dass kein anderer Prozessor die angeforderten Daten hat, kann er die Adresse X für den Speicher 202 lesen und die Daten an CPU0 senden.
-
Als nächstes kann CPU2 die Adresse X im Speicher 202 lesen, wobei CPU2 eine Lesenachricht an Knoten-Controller 2 sendet und Knoten-Controller 2 eine Lesenachricht an Knoten-Controller 1 weiterleitet. Knoten-Controller 1 hat einen Treffer in seinem TCAM (da er gespeichert wurde, wie oben beschrieben), und der Kohärenzverzeichnis-Cache zeigt an, dass die Daten „unowned“ sind. Daher leitet Knoten-Controller 1 den Lesevorgang an CPU1 weiter. CPU1 stellt sicher, dass die Daten für Adresse X von keinem Prozessor gehalten werden. Zu diesem Zweck sendet CPU1 eine Snoop-Meldung an CPU0 (ähnlich wie oben, CPU1 sendet keine Snoop-Meldung an Knoten-Controller 2, da von dort der Lesevorgang kam. CPU0 sendet eine Nachricht zurück an CPU 1, die anzeigt, dass sie den Besitz an den Daten abgegeben hat, und CPU1 sendet die Daten an Knoten-Controller 1. Knoten-Controller 1 leitet die Daten an Knoten-Controller 2 weiter, und Knoten-Controller 1 aktualisiert den Cache-Status des Kohärenzverzeichnisses, um anzuzeigen, dass CPU2 die Daten für Adresse X besitzt.
-
Bezug nehmend auf kann eine beispielhafte Kohärenzverzeichnis-Cache-Verwaltungsvorrichtung oder -Schaltung 300 in einem Knoten-Controller implementiert sein, z. B. in den Knoten-Controllern 1 und 2 ( ), und kann einen Multiplexer 302 enthalten, um Anforderungen wie eine Prozessor-Snoop-Anforderung (auf die im oben beschriebenen Cache-Kohärenzbeispiel Bezug genommen wird) oder eine Knoten-Controller-Anforderung zu empfangen. Eine Prozessor-Snoop-Anforderung kann als eine Operation beschrieben werden, die von einem lokalen Prozessor initiiert wird, um den Zustand und die Eigentümerschaft eines Speicherblocks oder einer Cache-Zeile zu erfragen. Eine Knoten-Controller-Anforderung kann als eine von einem entfernten Prozessor oder entfernten Knoten-Controller initiierte Operation beschrieben werden, die an einen lokalen Knoten-Controller einschließlich der Vorrichtung 300 gesendet wurde. Die Anforderungen können an ein Kohärenzverzeichnis-Tag 304 gerichtet sein, um festzustellen, ob Zustandsinformationen in Bezug auf einen bestimmten Speicherblock (d. h. eine Cache-Zeile) vorhanden sind. Das Kohärenzverzeichnis-Tag 304 kann Informationen enthalten, die sich auf eine Vielzahl von Speicherblöcken beziehen. Das heißt, und unter Bezugnahme auf , das Kohärenzverzeichnis-Tag 304 kann eine Sammlung von oberen Adressen enthalten, die den Systemspeicherblöcken oder Cache-Zeilen entsprechen, in denen die Zustands- und Eigentümerinformationen im Kohärenzverzeichnis-Cache gecacht werden (z. B. in TCAMS 306A und 306B). Die oberen Adressen können zum Beispiel obere Adresse-A, obere Adresse-B, ... , obere Adresse-N, usw. Jede obere Adresse kann eine entsprechende Zeilennummer haben (z. B. Zeilennummer 1, 2, ..., N), die mit jedem Eintrag verbunden ist. Jede obere Adresse kann aus 0-N „don't care“-Bits bestehen, abhängig von der Position. Wie hier offengelegt, kann die Größe dieser Speicherblöcke zur Vereinfachung der Implementierung so definiert werden, dass sie den System-Cache-Zeilen für ein Computersystem (oder für verschiedene Computersysteme) entspricht. Diese Speicherblöcke in Cache-Zeilen-Größe können zur Verdeutlichung der Diskussion als Cache-Zeilen bezeichnet werden.
-
Die Eigentümerschaft kann als eine Identifikation beschrieben werden, welcher Knoten oder Prozessor Eigentümer des verfolgten Systemspeicherblocks oder der Cache-Zeile ist. In einem gemeinsam genutzten Zustand kann die Eigentümerschaft die Knoten oder Prozessoren umfassen, die den Systemspeicherblock oder die Cache-Zeile gemeinsam nutzen.
-
Die Anforderungen können von einem oder mehreren TCAMs 306A und 306B verarbeitet werden (von denen jedes eine Ausführungsform eines der TCAMs 306A-210d sein kann). Für das TCAM 306A kann jeder Cache-Eintrag einen TCAM-Eintrag enthalten, um eine obere Adresse für Vergleichszwecke mit den Anforderungen zu halten. Diese obere Adresse kann als Tag bezeichnet werden. In Bezug auf die obere Adresse kann ein Prozessorsystem eine Byte- oder Wortadresse enthalten, die die Definition der Bits der Daten ermöglicht, auf die zugegriffen wird. Wenn mehrere Bytes oder Wörter zu größeren Blöcken, wie z. B. Cache-Zeilen, gruppiert werden, können die oberen Adressbits verwendet werden, um jeden Block oder jede Cache-Zeile des Systemspeichers eindeutig zu lokalisieren, und die unteren Adressbits können verwendet werden, um jedes Byte oder Wort innerhalb des Systemspeicherblocks oder der Cache-Zeile eindeutig zu lokalisieren.
-
Ein Tag kann als ein verknüpfter Deskriptor beschrieben werden, der zur Identifizierung der oberen Adresse verwendet wird. Ein Verzeichnis-Tag kann als ein verknüpfter Deskriptor beschrieben werden, der in einem Verzeichnisteil eines Cache-Speichers verwendet wird. Das Kohärenz-Verzeichnis-Tag 304 kann alle Tags für den Kohärenz-Verzeichnis-Cache enthalten und kann als ein verknüpfter Deskriptor beschrieben werden, der in einem Verzeichnisteil eines Kohärenz-Verzeichnis-Cache-Speichers verwendet wird. Das Kohärenzverzeichnis-Tag 304 kann die oberen Adressbits enthalten, die den Block des verfolgten Systemspeichers definieren.
-
Die Verzeichnis-Tags können den Teil der Kohärenzverzeichnis-Cache-Adresse darstellen, der die Verzeichniseinträge eindeutig identifiziert. Die Verzeichnis-Tags können verwendet werden, um das Vorhandensein einer Verzeichnis-Cache-Zeile innerhalb des Kohärenz-Verzeichnis-Tags 304 zu erkennen, und wenn dies der Fall ist, kann der übereinstimmende Eintrag identifizieren, wo im Verzeichnis-Zustandsspeicher die gecachten Informationen liegen. Ein Kohärenz-Verzeichnis-Cache-Eintrag kann den Kohärenzzustand und die Eigentümerschaft einer einzelnen System-Cache-Zeile des Speichers darstellen.
-
Im Übereinstimmungscodierer 308 kann eine vom TCAM 306A verarbeitete Anfrage verarbeitet werden, um eine binäre Darstellung der zugehörigen Zeile (z. B. Adresse) des Kohärenzverzeichnis-Tags 304 zu ermitteln. Für das TCAM 306A kann jede Zeile oder jeder Eintrag des TCAM 306A eine Übereinstimmungszeile enthalten, die aktiviert wird, wenn dieser Eintrag mit dem eingegebenen Suchwert übereinstimmt. Wenn das TCAM 306A z. B. 1024 Einträge hat, gibt es 1024 Übereinstimmungszeilen aus. Diese 1024 Übereinstimmungszeilen können in einen Binärwert kodiert werden, der z. B. für die Adressierung des Speichers verwendet werden kann, in dem die Zustands- und Eigentumsinformationen gespeichert sind. Wenn z. B. die Abgleichsleitung 255 aktiv ist, wäre die kodierte Ausgabe von Match-Encoder 308 OxFF (da das Encoder-Ausgangsfeld 10 Bit breit ist).
-
Siehe auch , ein Zustandsinformationsblock 310 kann die aktuelle Darstellung des Zustands und der Eigentümerschaft des Speicherblocks (d. h. der Cache-Zeile) für die vom TCAM 306A verarbeitete Anforderung enthalten. Beispielsweise kann die Zustandsinformation 310 eine Spalte „valids“ (gültig) enthalten, die einen Satz gültiger Bits (z. B. 1111, 0000, 0011, 0010) enthält, eine Spalte „state info“ (Zustandsinformation), die Informationen wie „shared“ (gemeinsam genutzt), „invalid“ (ungültig) oder „exclusive“ (exklusiv) enthält, und eine Spalte „sharing vector/ownership“ (gemeinsam genutzter Vektor/Eigentum), die Informationen zur gemeinsamen Nutzung für einen gemeinsam genutzten Zustand und zum Eigentum für den exklusiven Zustand enthält. Gemäß einem Beispiel können die Zeilen der Zustandsinformationen 310 den Zeilen des Kohärenzverzeichnis-Tags 304 entsprechen. Alternativ kann eine einzelne Zeile des Kohärenzverzeichnis-Tags 304 mehreren Zeilen der Zustandsinformationen 310 entsprechen. In Bezug auf das Kohärenzverzeichnis-Tag 304 und die Zustandsinformationen 310 kann angenommen werden, dass die obere Adresse-A vier Cache-Zeilen abdeckt, die alle gültig sind, und dass diese vier Cache-Zeilen dieselben Zustandsinformationen und denselben Freigabevektor/Eigentümerschaft enthalten. Die Länge der gültigen Bits kann einer Anzahl von Dekodierungen der Don't Care-Bits entsprechen. Die Kohärenzverzeichnis-Cache-Ausgabeinformationen, die sich auf den Speicherblockzustand und die Eigentumsinformationen beziehen, können auch einen Verzeichnis-Cache-Treffer-Indikatorstatus (z. B. ein Kohärenzverzeichnis-Tag 304-Treffer) oder einen Verzeichnis-Cache-Fehlanzeige-Status als Reaktion auf die vom Multiplexer 302 empfangenen Anforderungen enthalten. Die Eigentümerschaft kann eine Angabe eines Knotens (oder mehrerer Knoten) eines Computersystems oder verschiedener Computersysteme enthalten, die sich den Speicherblock teilen. In diesem Zusammenhang können die tatsächlich gespeicherten Informationen von der Implementierung und dem verwendeten Kohärenzprotokoll abhängig sein. Wenn das verwendete Protokoll z. B. einen gemeinsamen Zustand beinhaltet, können die Eigentumsinformationen eine Liste der Knoten oder Prozessoren enthalten, die sich einen Block teilen. Der Zustand und die Eigentümerschaft können aus dem Speicher für Zustandsinformationen 310 abgerufen werden, basierend auf der zugehörigen übereinstimmenden Zeile aus dem TCAM 306, wie sie vom Übereinstimmungscodierer 308 in eine Speicheradresse codiert wurde.
-
Die Directory Hit- oder Directory Miss-Informationen können für eine Ersetzungsrichtlinie für kohärente Directory Cache-Einträge verwendet werden. Die Ersetzungsrichtlinie kann zum Beispiel die LRU-Verfolgungsschaltung 312 (Least Recently Used) verwenden. Die Least Recently Used Tracking-Schaltung 312 kann einen am wenigsten genutzten Cache-Eintrag verdrängen, wenn der zugehörige Cache voll ist und ein neuer Eintrag hinzugefügt werden soll. In diesem Zusammenhang kann das TCAM 306A entsprechend aktualisiert werden, wenn ein Eintrag verdrängt wird. Wenn das TCAM 306A voll ist, kann der gesamte Kohärenzverzeichnis-Cache als voll angesehen werden. Die LRU-Verfolgungsschaltung 312 kann Hit/Miss-Informationen direkt vom Match-Encoder 308 erhalten. Die Hit/Miss-Informationen können jedoch auch von der Prozessstatusmaschine 314 empfangen werden. Wenn ein Cache-Treffer erkannt wird, kann die LRU-Verfolgungsschaltung 312 eine zugehörige Liste aktualisieren, um den übereinstimmenden Eintrag an die zuletzt verwendete Position in der Liste zu verschieben.
-
Tag-Daten, die einem Eintrag im TCAM 306A zugeordnet sind, können die möglichen Speicherzustände „0“, „1“ oder „X“ umfassen, wobei der Speicherzustand „X“ für „0“ oder „1“ stehen kann und als „don't care“-Speicherzustand bezeichnet werden kann. Die niedrigstwertige Ziffer im TCAM 306A einer Cache-Zeilenadresse kann die Adresse der Cache-Zeile innerhalb einer Gruppe von Cache-Zeilen definieren. Die niedrigstwertigen Ziffern können durch den Speicherzustand „X“ dargestellt werden. Somit kann ein Kohärenzverzeichnis-Cache-Eintrag den Zustand mehrerer (z. B. 2, 4, 8, 16 usw.) System-Cache-Zeilen des Speichers darstellen. Diese Speicherblöcke oder System-Cache-Zeilen können sowohl nach 2er-Potenzen als auch nach Nicht-2er-Potenzen gruppiert werden. Für Nicht-2er-Potenzen kann ein Vergleich der Adresse in Bezug auf einen Bereich durchgeführt werden. Wenn die Adresse z. B. zwischen A und C liegt, können die Speicherblöcke oder System-Cache-Zeilen gruppiert werden. Somit kann jeder TCAM-Eintrag eine beliebige Anzahl von System-Cache-Zeilen des Speichers darstellen. Diese mehreren Cache-Zeilen können auf der Grundlage einer Bestimmung gruppiert werden, dass die mehreren Cache-Zeilen benachbart sind, und ferner auf der Grundlage einer Bestimmung, dass die mehreren Cache-Zeilen denselben Zustand und dieselbe Eigentümerschaft aufweisen, um sich einen TCAM-Eintrag zu teilen. In diesem Zusammenhang können die benachbarten Cache-Zeilen Cache-Zeilen enthalten, die innerhalb der Grenzen einer definierten Gruppe liegen. Somit können benachbarte Cache-Zeilen Cache-Zeilen umfassen, die in der Nähe sind, in unmittelbarer Nähe liegen oder einer Gruppenadressierungsspezifikation entsprechen.
-
Eine Prozesszustandsmaschine 314 kann, basierend auf den Anforderungen wie der Prozessor-Snoop-Anforderung und/oder der Knotensteuerungsanforderung, Zustands- und Eigentümerinformationen für zugehörige Cache-Zeilen analysieren, um Cache-Zeilen zu identifizieren, die in Bezug auf das TCAM 306A konsolidiert werden können.
-
Eine Hintergrund-Scrubbing-Zustandsmaschine 316 kann auch Status- und Eigentümerinformationen analysieren, die mit benachbarten Cache-Zeilen verbunden sind, um Cache-Zeilen zu identifizieren, die in Bezug auf das TCAM 306A konsolidiert werden können. In Bezug auf die Konsolidierung von Cache-Zeilen kann die Prozess-Zustandsmaschine 314 die Konsolidierungsfunktion ausführen, wenn ein neuer Eintrag hinzugefügt wird, und die Hintergrund-Scrubbing-Zustandsmaschine 316 kann die Konsolidierungsfunktion als Hintergrundoperation ausführen, wenn der Kohärenzverzeichnis-Cache nicht mit der Verarbeitung anderer Anforderungen beschäftigt ist. In Bezug auf die von der Hintergrund-Scrubbing-Zustandsmaschine 316 durchgeführte Hintergrundoperation können sich die Zustands- und Eigentümerinformationen im Laufe der Zeit ändern. Wenn Informationen bezüglich eines bestimmten Blocks ursprünglich geschrieben wurden und nicht gruppiert werden konnten, weil die Zustands- oder Eigentumsinformationen nicht mit den Informationen anderer Blöcke übereinstimmten, die in der kombinierten Gruppe sein würden, können diese Informationen für den bestimmten Block einem separaten Kohärenzverzeichnis-Cache-Eintrag entsprechen. Wenn sich zu einem späteren Zeitpunkt einige der Informationen bezüglich des Zustands oder der Eigentümerschaft ändern, kann die Gruppierung nun möglicherweise erfolgen. Somit kann die Hintergrund-Scrubbing-Zustandsmaschine 316 arbeiten, wenn die Anforderungen wie die Prozessor-Snoop-Anforderung und/oder die Knotensteuerungsanforderung nicht verarbeitet werden. In dieser Hinsicht kann die Hintergrund-Scrubbing-Zustandsmaschine 316 übereinstimmende Einträge finden und die TCAM-Einträge umschreiben, um die Gruppierung von Speicherblöcken durchzuführen, die durch einen einzigen Eintrag dargestellt werden sollen, wie hier offenbart.
-
Die Statusinformationen können ein 4-Bit-Gültigkeitsfeld enthalten. Die Implementierung mit dem 4-Bit-Gültigkeitsfeld kann eine Implementierung darstellen, bei der die beiden niederwertigsten oberen Adressbits „don't care“ sein dürfen. "In dieser Hinsicht würde sich in Bezug auf andere Implementierungen eine Anzahl von Bits im Gültigkeitsfeld ändern. Zum Beispiel wäre bei einer Implementierung mit bis zu 3 „don't care“-Bits das Gültigkeitsfeld 8 Bits lang, da es 23=8 (oder allgemein 2^n, wobei n die Anzahl der „don't care“-Bits darstellt) eindeutige Dekodierungen der drei unteren Adressbits gibt. In Bezug auf die Zustandsinformationen, die ein 4-Bit-Gültigkeitsfeld enthalten, kann jedes dieser 4 Bits einer Dekodierung der unteren zwei Bits der oberen Adresse entsprechen, was eine Zuordnung jedes Bits zu einer der vier Cache-Zeilen innerhalb der vier Cache-Zeilen-Gruppe ermöglicht. Diese 4 Bits können als gültige Bits für jede der vier Systemspeicher-Cache-Zeilen betrachtet werden. Jeder TCAM-Eintrag kann nun die Zustands- und Besitzinformationen für einen Bereich von null, also einem ungültigen Eintrag, bis zu vier Cache-Zeilen des Systemspeichers darstellen. Die Verfolgung des Kohärenzverzeichnis-Cache kann so beschrieben werden, dass der Kohärenzverzeichnis-Cache den Status überwacht, ob das Bit aktiv oder inaktiv ist.
-
Es kann eine Suche im TCAM 306A durchgeführt werden, um festzustellen, ob ein neuer Eintrag hinzugefügt werden soll. Die Suche im TCAM 306A kann anhand der oberen Adressbits der Cache-Zeile durchgeführt werden, die der empfangenen Anforderung entspricht. Wenn ein TCAM-Miss vorliegt, kann das Tag in einen unbenutzten Eintrag geschrieben werden. Wenn alle Cache-Einträge verwendet werden, kann der am wenigsten verwendete Eintrag entfernt werden und das neue Tag kann in diesen TCAM-Eintrag geschrieben werden.
-
Wenn während der TCAM-Suche eine Übereinstimmung zwischen den neuen oberen Adressbits und einem Tag-Eintrag innerhalb des TCAMs besteht, kann das oben besprochene 4-Bit-Feld untersucht werden. Wenn das entsprechende Bit im 4-Bit-Feld, das durch eine Dekodierung der unteren beiden Bits der oberen Adresse ausgewählt wurde, gesetzt ist, kann ein Cache-Treffer angezeigt werden und die Verarbeitung kann fortgesetzt werden. Wenn das entsprechende Bit im oben beschriebenen 4-Bit-Feld nicht gesetzt ist, kann ein Vergleich der Zustands- und Eigentümerinformationen durchgeführt werden. Wenn die Zustands- und Eigentümerinformationen für die neue Systemspeicher-Cache-Zeile und den im Cache gespeicherten Wert der Zustands- und Eigentümerinformationen gleich sind, kann das entsprechende Bit im 4-Bit-Feld gesetzt werden, um diese neue Systemspeicher-Cache-Zeile zum Kohärenzverzeichnis-Tag 304 hinzuzufügen. Das Status- und Eigentümerfeld kann für alle Cache-Zeilen gelten, die mit dem Adressfeld übereinstimmen und die ein entsprechendes gültiges Bit im 4-Bit-Gültigkeitsfeld haben. Wenn also der Zustand und die Eigentümerschaft der ausgewerteten Cache-Zeile mit dem Zustands- und Eigentümerschaftsfeld übereinstimmen, kann das entsprechende Bit des Gültigkeitsfeldes gesetzt werden. In Bezug auf die Zustands- und Besitzinformationen kann der Hardware-Sequenzer 318, basierend auf einer Feststellung, dass das spezifizierte Bit nicht gesetzt ist, weiterhin Hardware (oder prozessorimplementierte Anweisungen) enthalten, um festzustellen, ob ein Zustand und ein Besitz, die mit dem neuen Eintrag verbunden sind, jeweils identisch mit dem Zustand und dem Besitz sind, die mit dem vorherigen Eintrag verbunden sind. Basierend auf der Feststellung, dass der Zustand und die Eigentümerschaft, die dem neuen Eintrag zugeordnet sind, mit dem Zustand und der Eigentümerschaft, die dem vorherigen Eintrag zugeordnet sind, identisch sind, kann der Hardware-Sequenzer 318 ferner Hardware (oder prozessorimplementierte Anweisungen) enthalten, um das angegebene Bit zu setzen, um den neuen Eintrag zu der Vorrichtung 300 hinzuzufügen. In diesem Zusammenhang kann sich das Setzen des spezifizierten Bits auf das gültige Bit beziehen, das mit dem spezifischen Systemspeicherblock oder der Cache-Zeile verbunden ist.
-
Wenn das entsprechende Bit in dem oben besprochenen 4-Bit-Feld nicht gesetzt ist, kann ein Vergleich der Status- und Eigentümerinformationen durchgeführt werden. Wenn die aus den Zustandsinformationen 310 ausgelesenen Zustands- und Eigentümerinformationen nicht mit den Zustands- und Eigentümerinformationen übereinstimmen, die mit dem neuen Tag verbunden sind, kann dieses neue Tag dem TCAM 306A hinzugefügt werden.
-
Angenommen, das Kohärenzverzeichnis-Tag 304 enthält einen Eintrag für 10X, ein Gültigkeitsfeld 0011 und einen Zustand/Eigentümer SO, und es wird eine Snoop-Anforderung für die Cache-Zeilenadresse 310 empfangen, die den Zustand/Eigentümer SO hat, dann kann der Eintrag für 10X auf die Adresse 1XX aktualisiert werden, das Gültigkeitsfeld kann auf 0111 gesetzt werden, und SO kann als Antwort auf den Snoop zurückgegeben werden.
-
Ein Teil der Informationen in der Prozessor-Snoop-Anforderung und der Knotensteuerungsanforderung kann verwendet werden, um zu bestimmen, wie die Auswahl am Multiplexer 302 gesteuert werden soll. Wenn es eine Prozessor-Snoop-Anforderung und keine Knotensteuerungsanforderung gibt, kann die Prozessstatusmaschine 314 die Auswahlleitung zum Multiplexer 302 ansteuern, um die Prozessor-Snoop-Anforderung auszuwählen.
-
Die Prozesszustandsmaschine 314 kann den Multiplexer 302 in der Beispielimplementierung von steuern. Die Prozess-Zustandsmaschine 314 kann einen Teil der Verstärkungsinformationen empfangen, die sich auf eine andere Anforderung beziehen, die ausgewählt wird.
-
In Bezug auf Informationen, die vom Übereinstimmungs-Encoder 308 an die Prozess-Zustandsmaschine 314 und die LRU-Verfolgungsschaltung 312 gesendet werden, können die Prozess-Zustandsmaschine 314 und die LRU-Verfolgungsschaltung 312 sowohl den Übereinstimmungs/Nicht-Übereinstimmungs-Indikator als auch die TCAM-Zeilenadresse des übereinstimmenden Eintrags vom Übereinstimmungs-Encoder 308 erhalten.
-
Die in gezeigte Verzeichnisstatusausgabe kann den Status und die Eigentumsinformationen für eine passende Anfrage enthalten. Die Verzeichnisstatusausgabe kann an andere Schaltungen innerhalb des Knoten-Controllers oder des anwendungsspezifischen integrierten Schaltkreises (ASIC) des Prozessors, in dem sich das Gerät 300 befindet, gesendet werden. Zu den anderen Schaltkreisen kann der Schaltkreis gehören, der die ursprüngliche Anforderung an den Kohärenz-Verzeichnis-Cache gesendet hat.
-
Der in gezeigte Cache-Treffer/Fehlstatus-Ausgang kann einen Hinweis darauf geben, ob die Anforderung mit einem Eintrag im Kohärenzverzeichnis-Cache übereinstimmt oder nicht. Der Cache-Treffer/Fehlstand-Ausgang kann an andere Schaltungen innerhalb des Knoten-Controllers oder des Prozessor-ASICs, in dem sich die Vorrichtung 300 befindet, gesendet werden. Zu den anderen Schaltkreisen kann der Schaltkreis gehören, der die ursprüngliche Anforderung an den Kohärenzverzeichnis-Cache gesendet hat.
-
Wie oben angedeutet, werden im Allgemeinen mehrere TCAMS, z. B. zwei TCAMs, verwendet, um eine Fehlererkennung/-korrektur durch Speicherung redundanter Kopien von Kohärenzverzeichnis-Cache-Einträgen in separaten TCAMs zu erreichen. Das heißt, Kohärenzverzeichnis-Caches können geändert werden, und so befindet sich die aktuellste Version eines Kohärenzverzeichnis-Cache-Eintrags in einem Node-Controller-Kohärenzverzeichnis-Cache. Daher können der Kohärenzstatus, die Eigentümerschaft und die Systemcache-Kohärenz bei einem TCAM-Ausfall verloren gehen, und daher wird ein redundantes TCAM verwendet, um eine weitere Kopie der Kohärenzverzeichnis-Cache-Einträge zu erhalten. TCAMs sind jedoch in der Regel groß, und die Verwendung mehrerer TCAMs ist flächenineffizient.
-
Dementsprechend ist die Verwendung von redundantem TCAM-Speicher für Dirty Coherence Directory Cache-Einträge reserviert. Das heißt, dass nur ein Teil des TCAM für redundante Einträge reserviert ist und die verbleibenden Teile des TCAM für nicht-redundante Einträge verwendet werden können. Bezug nehmend auf kann ein erstes TCAM, z. B. TCAM 306A, einen Bereich für nicht redundante Kohärenz-Cache-Einträge 306A-1 und einen weiteren Bereich umfassen, der für redundante Kohärenz-Verzeichnis-Cache-Einträge 306A-2 reserviert ist. Ein weiteres TCAM, z. B. TCAM 306B, kann ebenfalls einen Bereich für nicht redundante Kohärenz-Cache-Einträge 306B-1 und einen weiteren Bereich, der für redundante Kohärenz-Verzeichnis-Cache-Einträge 306B-2 reserviert ist, umfassen. Die Bereiche 306A-2 und 306B-2 werden verwendet, um redundante Kopien von verschmutzten/geänderten Kohärenzverzeichnis-Cache-Einträgen zu speichern. Wie oben angedeutet, kann in anderen Ausführungsformen ein einzelnes TCAM (oder CAM) mehrere redundante Eintragsbereiche umfassen (im Gegensatz zur Aufteilung redundanter Eintragsbereiche auf zwei separate TCAMs/CAMs). Zum Beispiel kann der redundante Eintragsbereich 306A-2 in anderen Ausführungsformen in verschiedene redundante Eintragsbereiche aufgeteilt werden, um geänderte Einträge in einem einzigen TCAM, d. h. TCAM 306A, zu speichern.
-
Beispielsweise kann CPU2 eine Adresse X im Speicher 202 lesen, wobei CPU2 eine Lesenachricht an den Knoten-Controller 2 sendet und der Knoten-Controller 2 eine Lesenachricht an den Knoten-Controller 1 weiterleitet (siehe ). Knoten-Controller 1 hat einen Treffer in TCAM 210a, und der Kohärenzverzeichnis-Cache zeigt an, dass die Daten „unowned“ sind. "Daher leitet Knoten-Controller 1 den Lesevorgang an CPU1 weiter. CPU1 stellt sicher, dass die Daten für Adresse X von keinem Prozessor gehalten werden, indem sie eine Snoop-Meldung an CPU0 sendet. CPU0 sendet eine Nachricht zurück an CPU1, die anzeigt, dass sie den Besitz der Daten aufgegeben hat, und CPU1 sendet die Daten an Knoten-Controller 1. Knoten-Controller 1 leitet die Daten an Knoten-Controller 2 weiter, und Knoten-Controller 1 aktualisiert den Kohärenzverzeichnis-Cache-Status, um anzuzeigen, dass CPU2 die Daten für Adresse X besitzt. Da der Kohärenzverzeichnis-Cache-Zustand geändert wurde, wird der Eintrag als schmutzig betrachtet, und der Kohärenzverzeichnis-Cache-Eintrag wird sowohl im redundanten Eintragsbereich 306A-2 als auch im redundanten Eintragsbereich 306B-2 gespeichert.
-
Redundanter Speicher wird verwendet, da sich die neueste, aktuellste Version des Kohärenzverzeichnis-Cache-Eintrags nur im Kohärenzverzeichnis-Cache des Knoten-Controllers befindet (nicht im Haupt-/Host-Speicher). Wenn z. B. TCAM-Tag-Einträge mit einem Fehlerkorrekturcode angehängt sind, könnte eine Suche mit sowohl dem Tag als auch dem entsprechenden Fehlerkorrekturcode zu einem Fehlschlag führen, wenn ein TCAM-Bitfehler auftritt. Dieser angehängte Fehlerkorrekturcode bietet jedoch nur so lange Fehlerschutz, bis dieser Eintrag geändert wird. Sollte das TCAM, das den Kohärenz-Verzeichnis-Cache implementiert, ausfallen, könnte die Kohärenz des System-Caches verloren gehen, es sei denn, es wird ein redundantes Caching durchgeführt. Durch die Verwendung redundanter TCAMs kann die Funktionalität der Fehlererkennung und -korrektur in einem SMP-System beibehalten werden. Wiederum Bezug nehmend auf , umfasst TCAM 306A einen redundanten Eintragsbereich 306A-2, und alle darin gespeicherten Einträge werden auch im redundanten Eintragsbereich 306B-2 von TCAM 306B gespeichert und vice versa. Es ist zu beachten, dass für die redundanten Eintragsbereiche 306A-2 und 306B-2 jeweils dieselben Zeilen in beiden TCAMs 306A und 306B verwendet werden.
-
Allerdings werden alle Kohärenzverzeichnis-Cache-Einträge, bei denen es sich um nicht verschmutzte/nicht geänderte Einträge handelt, nicht redundant gespeichert. Das heißt, ein sauberer Eintrag, der lokal, z. B. an einem Knoten-Controller, nicht geändert wurde, ist ein Eintrag, der den Inhalt des Haupt-/Host-Speichers in einem Kohärenzverzeichnis-Cache des Knoten-Controllers genau wiedergibt. Da ein solcher Eintrag bereits den Haupt-/Host-Speicher genau widerspiegelt, geht die Kohärenz nicht verloren, selbst wenn das TCAM, in dem der Eintrag gespeichert ist, ausfällt, da ein Fehler im Kohärenzverzeichnis-Cache ein Lesen aus dem vollständigen Verzeichnis im Haupt-/Host-Speicher bewirkt. Zurück zu , saubere Einträge können in nicht-redundanten Eintragsbereichen der TCAMs 306A und 306B gespeichert werden, z. B. in einem der redundanten Eintragsbereiche 306A-1 oder 306B-1. So können z. B. die Clean-Einträge 0 bis n im nichtredundanten Eingabebereich 306A-1 des TCAM 306A gespeichert werden, während die nachfolgenden Clean-Einträge n+1 bis n+m im nichtredundanten Eingabebereich 306B-1 des TCAM 306B gespeichert werden können.
-
Beispielsweise kann CPU0, wie in gezeigt, die Adresse X im Speicher 202 lesen. Das heißt, CPU0 sendet eine Lesenachricht an CPU1. CPU1 stellt sicher, dass die Daten für Adresse X von keinem Prozessor gehalten werden, z. B. von einem der Prozessoren CPU0, CPU1, CPU2 oder CPU3, indem sie eine Snoop-Anforderungsnachricht an Knoten-Controller 1 sendet. Der Knoten-Controller 1 hat möglicherweise einen Fehler in seinem Kohärenzverzeichnis-Cache (d. h., es wurde nicht in einem TCAM gefunden (weiter unten ausführlicher beschrieben). Knoten-Controller 1 holt den Status des Kohärenzverzeichnisses aus dem Speicher von CPU1, und Knoten-Controller 1 antwortet auf die Snoop-Anforderung mit einer „Unowned“-Nachricht. Knotensteuerung 1 speichert einen Kohärenzverzeichnisstatus im Kohärenzverzeichnis-Cache. Da CPU 1 nun weiß, dass kein anderer Prozessor die angeforderten Daten hat, kann er die Adresse X für den Speicher 202 lesen und die Daten an CPU0 senden. Da sich der Zustand des Kohärenzverzeichnis-Caches nicht geändert hat, ist der entsprechende Tag-Eintrag ein sauberer Tag-Eintrag und kann entweder im nicht-redundanten Eintragsbereich 306A-1 oder 306B-1 ( ) der TCAMs 306A bzw. 306B gespeichert werden.
-
Da nicht das gesamte TCAM für die Speicherung redundanter Kohärenzverzeichnis-Cache-Einträge verwendet wird, wird die Flächeneffizienz erhöht. Wenn beispielsweise 25 % der Einträge in einem TCAM als redundante Einträge in einer Ausführungsform verwendet werden, können 75 % mehr nicht-redundante TCAM-Einträge im Vergleich zum herkömmlichen „voll-redundanten“ TCAM-Schema bereitgestellt werden. Das heißt, wenn man von 1024 vollständig redundanten Einträgen ausgeht, sind 25 % 256, so dass 768 Einträge in jedem TCAM verbleiben, was eine Gesamtzahl von 256 + 768*2 = 1792 Einträgen ergibt, und (1792 - 1024)/1024 = 75 %. In Übereinstimmung mit einigen Ausführungsformen kann eine gewisse Anzahl von TCAM-Einträgen als redundante Einträge beiseite gelegt werden, und diese Anzahl von TCAM-Einträgen, die als redundante Einträge beiseite gelegt werden, kann bestimmt/programmiert werden. In Übereinstimmung mit anderen Ausführungsformen kann die Anzahl der TCAM-Einträge, die für redundante Einträge beiseite gelegt werden, basierend auf der Anzahl der Dirty-Einträge adaptiv sein. In einer Ausführungsform können alle redundanten und nicht redundanten Einträge mit dem LRU-Algorithmus verfolgt werden, und die ältesten Einträge können ersetzt werden. Alternativ kann in einer anderen Ausführungsform ein programmierbarer Schwellenwert für z. B. eine maximale Anzahl geänderter Einträge festgelegt werden, der mit einem Zähler implementiert werden kann, so dass bei Erreichen des programmierbaren Schwellenwerts die Verdrängung von Einträgen eingeleitet wird. Gemäß einer weiteren Ausführungsform ist es auch möglich, den programmierbaren Schwellenwert auf der Grundlage eines Algorithmus einzustellen, der die vergangene Ersetzung von Einträgen betrachtet. Wenn beispielsweise eine Schaltung zwei separate LRU-verknüpfte Listen unterhält und über einen bestimmten Zeitraum mehr redundante Einträge ersetzt wurden, kann der programmierbare Schwellenwert angepasst werden, um die Anzahl der zulässigen redundanten Einträge zu erhöhen oder umgekehrt.
-
Unter Bezugnahme auf wird ein Flussdiagramm von Beispieloperationen beschrieben, die zur Verwaltung eines Kohärenzverzeichnis-Caches gemäß einigen Ausführungsformen durchgeführt werden können. Ein Knoten-Controller kann eine Nachricht oder Anforderung empfangen, und bei Vorgang 400 wird eine Prüfung durchgeführt, um festzustellen, ob die Nachricht/Anforderung eine Cache-Suchoperation, wie z. B. eine Snoop-Anforderung, umfasst. Wie oben erwähnt, kann eine solche Nachricht/Anforderung an einem Multiplexer (z. B. MUX 302) des Knoten-Controllers empfangen werden.
-
Basierend auf der Feststellung, dass die empfangene Nachricht/Anforderung eine Kohärenzverzeichnis-Cache-Suche beinhaltet, kann die Prozess-Zustandsmaschine 314 in Operation 402 eine TCAM-Suche auslösen, z. B. die TCAMS 210A und 210B veranlassen, ihre jeweiligen Kohärenzverzeichnis-Tags zu durchsuchen (ein Beispiel dafür ist das Kohärenzverzeichnis-Tag 304). Das heißt, die Adresse, die der Cache-Zeile zugeordnet ist, die in der empfangenen Nachricht/Anforderung enthalten ist, kann verwendet werden, um nach einem übereinstimmenden Tag-Wert in einem oder mehreren TCAMS zu suchen (in diesem Beispiel in einem oder mehreren von TCAMS 306A und 306B) . Wie hier offengelegt, kann für das TCAM-implementierte Kohärenz-Verzeichnis-Tag jeder Cache-Eintrag einen TCAM-Eintrag enthalten, um die obere Adresse oder das Tag zu halten, mit dem verglichen wird. Wie oben erörtert, können Verzeichnis-Tags den Teil der Verzeichnisadresse darstellen, der das Verzeichnis-Tag eindeutig identifiziert, wobei die Tags verwendet werden können, um das Vorhandensein einer Verzeichnis-Cache-Zeile innerhalb des Knoten-Controllers zu erkennen, und, falls dies der Fall ist, kann der übereinstimmende Eintrag identifizieren, wo im Verzeichnis-Zustandsinformationsspeicher (z. B. 310) sich die gecachte Information befindet. Bei Vorgang 404 wird festgestellt, ob mindestens eine TCAM-Übereinstimmung gefunden wird/vorhanden ist. Wenn es keine Übereinstimmungen gibt, kann in Operation 406 eine konventionelle Cache-Miss-Verarbeitung durchgeführt werden (wie oben beschrieben). Wiederum und zum Beispiel unter der Annahme, dass eine Anforderung für die Adresse 1110 empfangen wird, können in Bezug auf TCAM-Einträge für Adresse 1111, Adresse 111X und Adresse 11XX (z. B. mit bis zu zwei niederwertigen „don't care“-Bits) Übereinstimmungen wie folgt bestimmt werden. Das 0-Bit der empfangenen Adresse stimmt nicht mit dem entsprechenden 1-Bit der TCAM-Adresse 1111 überein, und somit würde ein Fehlschlag resultieren. Umgekehrt wird das 0-Bit der empfangenen Adresse nicht mit den entsprechenden X-Bits der TCAM-Adressen 111X und 11XX verglichen, was zu einer Übereinstimmung führt.
-
Wenn mindestens eine TCAM-Übereinstimmung besteht, liest die Prozess-Zustandsmaschine 314 bei Operation 408 ein Redundanzeintrags-Flag für den gefundenen übereinstimmenden Eintrag. Es sollte klar sein, dass die Verwendung des Flags für redundante Einträge von der Implementierung abhängen kann. In einer Ausführungsform, wenn TCAMs z. B. hart in redundante und nicht redundante Eintragsbereiche unterteilt sind, wird jede Übereinstimmung in einem redundanten Eintragsbereich eine entsprechende Übereinstimmung zwischen den beiden TCAMs haben. Wenn ein anpassbares/dynamisches Zuordnungsschema gemäß einer anderen Ausführungsform verwendet wird, könnte eine Tabellenstruktur, die z. B. in SRAM oder Zufallslogik implementiert ist, verwendet werden, um ein solches Flag für einen redundanten Eintrag aufzuzeichnen, wenn die beiden Einträge in die beiden TCAMs geschrieben werden. Auf diese Weise kann ein schnelles Nachschlagen durchgeführt werden, wenn eine Übereinstimmung erkannt wird. Wenn ein Flag für einen redundanten Eintrag gesetzt ist (ermittelt in Operation 410), wird eine Prüfung (in Operation 412) durch die Prozess-Zustandsmaschine 314 durchgeführt, um festzustellen, ob eine Übereinstimmung in beiden TCAMs 306A und 306B (d. h. im primären und redundanten TCAM) erkannt wurde. Wenn dies der Fall ist, kann eine konventionelle Kohärenzverzeichnis-Cache-Übereinstimmungs-Verarbeitung in Operation 416 (wie oben beschrieben) durchgeführt werden. Zum Beispiel kann die Prozess-Zustandsmaschine 314 die TCAM-Zeilenadresse erhalten, die mit dem übereinstimmenden Eintrag verbunden ist. In diesem Szenario ist eine Übereinstimmung zwischen redundanten TCAMs zu erwarten, wenn das Flag für einen redundanten Eintrag gesetzt ist. Wenn ein Redundanzeintragsflag nicht gesetzt ist (festgestellt bei Operation 410), wird eine Prüfung (bei Operation 414) durch die Prozesszustandsmaschine 314 durchgeführt, um festzustellen, ob eine Übereinstimmung in beiden TCAMs 306A und 306B erkannt wurde. In diesem Szenario, in dem ein Flag für redundante Einträge nicht gesetzt wurde, deutet eine Übereinstimmung in beiden TCAMs 306A und 306B auf einen Fehler hin (oder wenn eine Übereinstimmung in beiden TCAMS 306A und 306B nicht erkannt wurde, obwohl eine Übereinstimmung in beiden TCAMS 306A und 306B hätte gefunden werden müssen). Daher wird in Operation 418 eine Fehlerverarbeitung durchgeführt, z. B. kann als Reaktion auf die empfangene Nachricht/Anfrage ein Fehler ausgelöst werden. Wenn nicht in beiden TCAMs 306A und 306B eine Übereinstimmung erkannt wurde (was zu erwarten ist, wenn das Flag für redundante Einträge nicht gesetzt ist), erfolgt in Vorgang 416 eine normale Verarbeitung der Cache-Übereinstimmung.
-
Wenn auf der Grundlage einer Bestimmung, die sich aus der Prüfung (bei Vorgang 400) ergibt, um festzustellen, ob die empfangene Anforderung/Nachricht ein Cache-Suchvorgang war, festgestellt wird, dass es sich nicht um einen Cache-Suchvorgang handelte, nimmt die Prozess-Zustandsmaschine 314 eine Bestimmung vor, ob die empfangene Nachricht/Anforderung einen TCAM-Aktualisierungsvorgang umfasst oder nicht (bei Vorgang 420). Wenn nicht, kann die Verarbeitung zu Vorgang 400 zurückkehren. Ist dies der Fall (bei Operation 422), kann eine Prüfung durch die Prozess-Zustandsmaschine 314 durchgeführt werden, um festzustellen, ob der zu schreibende Eintrag geändert wird. Eine TCAM-Aktualisierungsoperation kann eine Änderung des Cache-Zustands des Kohärenzverzeichnisses widerspiegeln. Basierend auf einer Bestimmung bei (Operation 420), dass die Nachricht/Anforderung eine Zustandsänderungsanforderung ist, kann die Prozesszustandsmaschine 314 beispielsweise gespeicherte Zustandsinformationen untersuchen, um zu bestimmen, ob mehrere gültige Bits gesetzt sind. Basierend auf einer Feststellung, dass mehrere gültige Bits nicht gesetzt sind, können die Zustandsinformationen aktualisiert werden. Basierend auf der Feststellung, dass mehrere gültige Bits gesetzt sind, kann die Prozessstatusmaschine 314 neue „Don't Care“-Bits für den aktuellen TCAM-Eintrag berechnen und aktualisieren. Zum Beispiel kann für einen einzelnen TCAM-Eintrag, der vier Speicherblöcke repräsentiert, das höchstwertige „Don't Care“-Bit gelöscht und von „Don't Care“ auf eine Übereinstimmung auf Eins (oder Null) geändert werden. Dann kann die Prozess-Statusmaschine 314 die Statusinformationen aktualisieren und die gültigen Bits anpassen. Zum Beispiel können für die Übereinstimmung bei Eins, wie oben beschrieben, für die zugehörigen gültigen Bits der Zustandsinformationen, die alle 1111 sind, die gültigen Bits auf 1100 geändert werden.
-
In Operation 426 wird ein Flag für redundante Einträge von der Prozess-Zustandsmaschine 314 gesetzt. Wenn wir uns daran erinnern, dass geänderte oder verschmutzte Kohärenzverzeichnis-Cache-Einträge redundant in zwei TCAMs gespeichert werden sollen, kann das Flag für einen redundanten Eintrag gesetzt werden, damit (bei einer nachfolgenden Suche nach diesem bestimmten TCAM-Eintrag) angegeben werden kann, dass eine Übereinstimmung zwischen zwei TCAMs zu erwarten ist (wie oben in Bezug auf die Operationen 410-416 beschrieben). Bei Operation 428 kann die Prozess-Zustandsmaschine 314 einen neuen TCAM-Eintrag hinzufügen, der mit der Zustandsänderungsanforderung verbunden ist. Da es sich hier um einen Dirty-Eintrag handelt, kann die Prozess-Zustandsmaschine 314 den Eintrag in beide TCAMs 306A und 306B (in ihre jeweiligen redundanten Eintragsbereiche 306A-2 und 306B-2) schreiben und die zugehörigen Zustandsinformationen schreiben, die mit der Adresse übereinstimmen, die der Zustandsänderungsanforderung zugeordnet ist. Das Schreiben des geänderten Eintrags kann von einer LRU-Verknüpfungsliste abhängig sein, die von der LRU-Schaltung 312 erstellt wird (z. B. abhängig davon, ob ein LRU-Eintrag verdrängt werden muss).
-
Es ist zu beachten, dass geänderte Einträge in einem verfügbaren Eintrag gespeichert werden können und nicht gemäß einer LRU-Verknüpfungsliste gespeichert werden müssen. Fachleute wissen, dass auch andere Methoden zur Bestimmung der Platzierung von modifizierten Einträgen verwendet werden können. Beispielsweise kann in einer anderen Ausführungsform die Zuweisung von Einträgen frei fließend sein, wobei zwei TCAM-Einträge bei Bedarf zur redundanten Speicherung von modifizierten Einträgen verdrängt werden. Zum Beispiel kann in einer anderen Ausführungsform ein modifizierter Eintrag einen nicht redundanten/nicht modifizierten LRU-Eintrag ersetzen, indem ein Rückschreiben der modifizierten Informationen durchgeführt wird.
-
Zurück zu Operation 422, basierend auf der Feststellung, dass der zu schreibende Kohärenzverzeichnis-Cache-Eintrag nicht geändert wird, kann die Prozess-Zustandsmaschine 314 den neuen Kohärenzverzeichnis-Cache-Eintrag in einen der TCAMs 306A oder 306B in einen ihrer jeweiligen nicht-redundanten Eintragsbereiche 306A-1 oder 306A-2 schreiben.
-
ist ein Beispiel für ein Computergerät 500 in Übereinstimmung mit Ausführungsformen der vorliegenden Offenbarung. Wo die Operationen und die Funktionalität des Computergeräts 500 gleich oder ähnlich zu denen sind, die in Bezug auf die besprochen wurden, sollte die Beschreibung als zutreffend interpretiert werden. Beispielsweise kann die Rechenvorrichtung 500 eine Ausführungsform des Knotens 200, ein Knoten-Controller, z. B. einer der Knoten-Controller 1 oder 2, ein Gerät 300, eine Prozesszustandsmaschine 314 usw. sein. Die Rechenvorrichtung 500 enthält einen oder mehrere Hardwareprozessoren 502, die eine oder mehrere Zentraleinheiten (CPUs), halbleiterbasierte Mikroprozessoren und/oder andere Hardwarevorrichtungen sein können, die zum Abrufen und Ausführen von Anweisungen geeignet sind, die in einem maschinenlesbaren Speichermedium 504 gespeichert sind. Der eine oder die mehreren Hardwareprozessoren 502 können Befehle, wie z. B. die Befehle 506-510, abrufen, dekodieren und ausführen, um Prozesse oder Operationen zum Bewirken von Fehlererkennung und -steuerung im Kontext von Kohärenzverzeichnis-Caches gemäß einer Ausführungsform zu steuern. Alternativ oder zusätzlich zum Abrufen und Ausführen von Befehlen können der eine oder die mehreren Hardware-Prozessoren 502 eine oder mehrere elektronische Schaltungen enthalten, die elektronische Komponenten zum Ausführen der Funktionalität eines oder mehrerer Befehle enthalten, wie z. B. ein Field Programmable Gate Array (FPGA), eine anwendungsspezifische integrierte Schaltung (ASIC) oder andere elektronische Schaltungen.
-
Der eine oder die mehreren Hardware-Prozessoren 502 sind so konfiguriert, dass sie Anweisungen ausführen, die auf einem maschinenlesbaren Medium 504 gespeichert sind. Bei dem maschinenlesbaren Medium 504 kann es sich um einen oder mehrere Typen von nicht-transitorischen Computerspeichermedien handeln. Nicht einschränkende Beispiele sind: Flash-Speicher, Solid-State-Speichergeräte (SSDs), ein Storage Area Network (SAN), Wechselspeicher (z. B. Memory-Stick, CD, SD-Karten usw.) oder interner Computer-RAM oder -ROM, neben anderen Arten von Computer-Speichermedien. Die auf dem maschinenlesbaren Medium 504 gespeicherten Anweisungen können verschiedene Unteranweisungen zur Ausführung der durch die identifizierten Funktionen verkörperten Funktion enthalten. Beispielsweise kann die Anweisung „receive coherency directory cache operation request“ (Kohärenzverzeichnis-Cache-Operationsanforderung empfangen) verschiedene Unteranweisungen zum Empfangen einer oder mehrerer Kohärenzverzeichnis-Cache-Operationsanforderungen von einer Vielzahl lokaler Prozessoren und Knotensteuerungen von anderen Knoten innerhalb eines Multiprozessorsystems durch einen Knotencontroller in einer Weise enthalten, die oben in Bezug auf die beschrieben wurde.
-
Der eine oder die mehreren Hardware-Prozessoren 502 können den Befehl 506 ausführen, um eine Kohärenzverzeichnis-Cache-Operationsanforderung zu empfangen. Wie oben beschrieben, kann ein Knoten-Controller verschiedene Nachrichten oder Anfragen bezüglich eines Kohärenzverzeichnis-Caches empfangen, der im Knoten-Controller gespeichert ist. Bei den Operationen kann es sich um Speicheroperationen, Anfragen bezüglich des Zustands und/oder der Eigentümerschaft von Daten, Betriebsanforderungen, die von entfernten Knoten stammen, usw. handeln. Beispielsweise kann eine Anforderung an ein Kohärenzverzeichnis-Cache-Tag innerhalb eines TCAM gerichtet sein.
-
Der eine oder die mehreren Hardware-Prozessoren 502 können den Befehl 508 ausführen, um den Typ der Kohärenzverzeichnis-Cache-Operationsanforderung zu bestimmen, die empfangen wurde. Die Anweisung 508 kann beispielsweise eine Unteranweisung enthalten, um zu bestimmen, ob die Anforderung der Kohärenzverzeichnis-Cache-Operation eine Cache-Suchoperation ist. Wenn es sich bei der angeforderten Kohärenzverzeichnis-Cache-Operation um eine Cache-Suchoperation handelt, können TCAM-Einträge durchsucht werden, und es kann eine Hit/Miss-Verarbeitung oder eine Fehlerverarbeitung ausgeführt werden. Wenn die angeforderte Kohärenzverzeichnis-Cache-Operation keine Cache-Suchoperation ist, kann der Befehl 508 eine weitere Unteranweisung enthalten, um zu bestimmen, ob die angeforderte Kohärenzverzeichnis-Cache-Operation stattdessen eine TCAM-Aktualisierungsoperation ist. Ist dies nicht der Fall, kann der eine oder die mehreren Hardware-Prozessoren 502 zum Warten auf eine weitere Nachricht/Anforderung zurückkehren. Die Anweisung 508 kann eine weitere Unteranweisung enthalten, um zu bestimmen, ob ein in den Kohärenzverzeichnis-Cache zu schreibender Eintrag geändert wird, wenn die angeforderte Kohärenzverzeichnis-Cache-Operation tatsächlich eine TCAM-Aktualisierungsoperation ist.
-
Wie oben beschrieben, wird bei geänderten oder verschmutzten Einträgen, bei denen ein Knoten-/Kohärenzverzeichnis-Cache die letzte/aktuellste Version eines Eintrags enthält (und daher mit dem Status/Eigentümerschaft/Wert eines im Host-Speicher gepflegten Eintrags in Konflikt geraten kann), redundantes TCAM-Caching verwendet, um die Kohärenz zu wahren. Wenn der Eintrag nicht geändert wird, ist die Kohärenz kein Problem, da der Host-/Hauptspeicher den Eintrag in einem lokalen Kohärenz-Verzeichnis-Cache an einem Knoten genau wiedergibt. Daher ist eine redundante TCAM-Zwischenspeicherung für nicht geänderte Einträge unnötig. Dementsprechend können TCAMs so konfiguriert werden (entweder programmierbar oder adaptiv), dass sie nicht-redundante Eintragsbereiche und redundante Eintragsbereiche enthalten/umfassen. Indem nicht ganze TCAMs für redundante Einträge reserviert werden, kann die Ineffizienz des Die-Bereichs verbessert oder abgeschwächt werden. Daher kann der eine oder mehrere Hardware-Prozessor(en) 502 den Befehl 510 ausführen, um, basierend auf einer Bestimmung, dass ein Eintrag in ein TCAM geschrieben werden soll, das einen Kohärenz-Verzeichnis-Cache speichert, der ein Ziel der Kohärenz-Verzeichnis-Cache-Operation ist, den Eintrag entweder in einen nicht-redundanten Eintragsbereich des TCAM oder in einen redundanten Eintragsbereich des TCAM zu schreiben.
-
zeigt ein Blockdiagramm eines beispielhaften Computersystems 600, in dem Variationen der hier beschriebenen Ausführungsformen implementiert werden können. Das Computersystem 600 umfasst einen Bus 602, ein Netzwerk, eine Kreuzschiene oder einen anderen Kommunikationsverbindungsmechanismus zur Übermittlung von Informationen, einen oder mehrere mit dem Bus 602 gekoppelte Hardwareprozessoren 604 zur Verarbeitung von Informationen. Der/die Hardware-Prozessor(en) 604 kann/können z. B. ein oder mehrere Allzweck-Mikroprozessoren sein. In verschiedenen Ausführungsformen können der eine oder die mehreren Hardware-Prozessoren 604 nicht-transitorische, maschinenlesbare Befehle ausführen, um die verschiedenen Funktionen der Ausführungsformen auszuführen, die in Bezug auf die A4C diskutiert werden-.
-
Das Computersystem 600 umfasst auch einen Hauptspeicher 606, wie z. B. einen Speicher mit wahlfreiem Zugriff (RAM), einen Cache und/oder andere dynamische Speichergeräte, die mit dem Bus 602 oder einem anderen Kommunikationsverbindungsmechanismus verbunden sind, um Informationen und Anweisungen zu speichern, die vom Prozessor 604 ausgeführt werden sollen. Der Hauptspeicher 606 kann auch zum Speichern von temporären Variablen oder anderen Zwischeninformationen während der Ausführung von Anweisungen, die vom Prozessor 604 ausgeführt werden sollen, verwendet werden. Solche Anweisungen, wenn sie in Speichermedien gespeichert sind, auf die der Prozessor 604 zugreifen kann, machen das Computersystem 600 zu einer Spezialmaschine, die so angepasst ist, dass sie die in den Anweisungen angegebenen Operationen ausführt.
-
Das Computersystem 600 umfasst außerdem einen Festwertspeicher (ROM) 608 oder ein anderes statisches Speichergerät, das mit dem Bus 602 oder einem anderen Kommunikationsverbindungsmechanismus verbunden ist, um statische Informationen und Anweisungen für den Prozessor 604 zu speichern. Ein Speichergerät 610, wie z. B. eine Magnetplatte, eine optische Platte oder ein USB-Stick (Flash-Laufwerk) usw., ist vorgesehen und mit dem Bus 602 gekoppelt, um Informationen und Anweisungen zu speichern.
-
Das Computersystem 600 kann außerdem eine Anzeige 612, ein Eingabegerät 614 und/oder eine Cursorsteuerung 616 umfassen, die mit dem Bus 602 oder einem anderen Kommunikationsverbindungsmechanismus zur Anzeige, Kommunikation und Eingabe von Informationen und/oder Befehlen verbunden sind. In einigen Ausführungsformen können die gleichen Richtungsinformationen und Befehlsauswahlen wie bei der Cursorsteuerung über den Empfang von Berührungen auf einem Touchscreen ohne Cursor implementiert werden. Das Computersystem 600 kann ein Benutzerschnittstellenmodul enthalten, um eine grafische Benutzeroberfläche zu implementieren, die in einem Massenspeichergerät als ausführbare Softwarecodes gespeichert sein kann, die von der (den) Rechenvorrichtung(en) ausgeführt werden. Dieses und andere Module können beispielhaft Komponenten wie Software-Komponenten, objektorientierte Software-Komponenten, Klassenkomponenten und Task-Komponenten, Prozesse, Funktionen, Attribute, Prozeduren, Unterprogramme, Segmente von Programmcode, Treiber, Firmware, Mikrocode, Schaltungen, Daten, Datenbanken, Datenstrukturen, Tabellen, Arrays und Variablen umfassen.
-
Im Allgemeinen kann sich das hier verwendete Wort „Komponente“, „Engine“, „System“, „Datenbank“, „Datenspeicher“ und dergleichen auf eine in Hardware oder Firmware verkörperte Logik oder auf eine Sammlung von Softwareanweisungen beziehen, die möglicherweise Ein- und Ausstiegspunkte haben und in einer Programmiersprache wie z. B. Java, C oder C++ geschrieben sind. Eine Softwarekomponente kann kompiliert und zu einem ausführbaren Programm verknüpft werden, in einer dynamischen Link-Bibliothek installiert werden oder in einer interpretierten Programmiersprache wie z. B. BASIC, Perl oder Python geschrieben sein. Softwarekomponenten können von anderen Komponenten oder von sich selbst aus aufrufbar sein und/oder als Reaktion auf erkannte Ereignisse oder Interrupts aufgerufen werden. Softwarekomponenten, die für die Ausführung auf Computergeräten konfiguriert sind, können auf einem computerlesbaren Medium, wie z. B. einer Compact Disc, einer digitalen Videodisc, einem Flash-Laufwerk, einer Magnetplatte oder einem anderen greifbaren Medium, oder als digitaler Download bereitgestellt werden (und können ursprünglich in einem komprimierten oder installierbaren Format gespeichert sein, das vor der Ausführung eine Installation, Dekomprimierung oder Entschlüsselung erfordert). Ein solcher Softwarecode kann teilweise oder vollständig auf einer Speichervorrichtung des ausführenden Computergeräts gespeichert werden, um von dem Computergerät ausgeführt zu werden. Softwareanweisungen können in Firmware, wie z. B. einem EPROM, eingebettet sein. Es versteht sich von selbst, dass Hardware-Komponenten aus angeschlossenen Logikeinheiten, wie Gattern und Flipflops, bestehen können und/oder aus programmierbaren Einheiten, wie programmierbaren Gate-Arrays oder Prozessoren, zusammengesetzt sein können.
-
Das Computersystem 600 kann die hierin beschriebenen Techniken unter Verwendung von kundenspezifischer festverdrahteter Logik, einem oder mehreren ASICs oder FPGAs, Firmware und/oder Programmlogik implementieren, die in Kombination mit dem Computersystem bewirkt oder programmiert, dass das Computersystem 600 eine Spezialmaschine ist. Gemäß einer Ausführungsform werden die hierin beschriebenen Techniken vom Computersystem 600 als Reaktion auf den/die Prozessor(en) 604 ausgeführt, der/die eine oder mehrere Sequenzen von einer oder mehreren Anweisungen ausführt/ausführen, die im Hauptspeicher 606 enthalten sind. In verschiedenen Ausführungsformen können solche Anweisungen denen ähnlich sein, die in Bezug auf diskutiert werden. In alternativen Ausführungsformen können fest verdrahtete Schaltungen anstelle von oder in Kombination mit Softwareanweisungen verwendet werden.
-
Der Begriff „nicht-transitorische Medien“ und ähnliche Begriffe, wie sie hier verwendet werden, beziehen sich auf alle Medien, die Daten und/oder Befehle speichern, die eine Maschine dazu veranlassen, auf eine bestimmte Weise zu arbeiten. Solche nicht-transitorischen Medien können nichtflüchtige Medien und/oder flüchtige Medien umfassen. Zu den nichtflüchtigen Medien gehören z. B. optische oder magnetische Festplatten, wie das Speichergerät 610. Zu den flüchtigen Medien gehören dynamische Speicher, wie z. B. der Hauptspeicher 606. Gängige Formen von nichtflüchtigen Medien sind z. B. eine Diskette, eine flexible Platte, eine Festplatte, ein Solid-State-Laufwerk, ein Magnetband oder ein anderes magnetisches Datenspeichermedium, eine CD-ROM, ein anderes optisches Datenspeichermedium, ein beliebiges physikalisches Medium mit Lochmustern, ein RAM, ein PROM und EPROM, ein FLASH-EPROM, NVRAM, ein beliebiger anderer Speicherchip oder eine Kassette sowie vernetzte Versionen derselben.
-
Nicht-transitorische Medien unterscheiden sich von Übertragungsmedien, können aber in Verbindung mit diesen verwendet werden. Übertragungsmedien sind an der Übertragung von Informationen zwischen nichttransitiven Medien beteiligt. Zu den Übertragungsmedien gehören z. B. Koaxialkabel, Kupferdraht und Lichtwellenleiter, einschließlich der Drähte, aus denen der Bus 602 besteht. Übertragungsmedien können auch in Form von akustischen oder Lichtwellen auftreten, wie sie bei der Funkwellen- und Infrarot-Datenkommunikation erzeugt werden.
-
Das Computersystem 600 enthält auch eine Kommunikationsschnittstelle 618, die mit dem Bus 602 oder einem anderen Kommunikationsverbindungsmechanismus gekoppelt ist, um eine Zweiwegekommunikation mit einem oder mehreren Netzwerken über eine oder mehrere Netzwerkverbindungen zu ermöglichen. Die Kommunikationsschnittstelle 618 kann beispielsweise eine ISDN-Karte (Integrated Services Digital Network), ein Kabelmodem, ein Satellitenmodem, ein Modem zur Bereitstellung einer Datenkommunikationsverbindung zu einer entsprechenden Art von Telefonleitung, ein lokales Netzwerk (LAN), ein Weitverkehrsnetz oder eine oder mehrere Arten von drahtlosen Kommunikationsverbindungen sein.
-
Das Computersystem 600 kann Nachrichten senden und Daten, einschließlich Programmcode, über das/die Netzwerk(e), die Netzwerkverbindung und die Kommunikationsschnittstelle 618 empfangen. Im Internet-Beispiel könnte ein Server einen angeforderten Code für ein Anwendungsprogramm über das Internet, den ISP, das lokale Netzwerk und die Kommunikationsschnittstelle 618 übertragen.
-
Der empfangene Code kann vom Prozessor 604 ausgeführt werden, wenn er empfangen wird, und/oder im Speichergerät 610 oder einem anderen nichtflüchtigen Speicher zur späteren Ausführung gespeichert werden.
-
Jede der zu dieser Offenbarung gehörenden und in den vorangehenden Abschnitten beschriebenen Figuren dient nur der Veranschaulichung und ist nicht als Einschränkung des Umfangs der vorliegenden Offenbarung zu verstehen. Der Umfang dieser Offenbarung richtet sich nach den beigefügten Ansprüchen und ähnlichen Ausführungsformen, wie sie nach dem gewöhnlichen Stand der Technik unter Verwendung derselben oder gleichwertiger Elemente möglich sind. Das Weglassen üblicher Komponenten, Schaltungen, Geräte, Maschinen oder anderer Elemente, von denen in der Technik bekannt ist, dass sie in Apparaten und Vorrichtungen gemäß der vorliegenden Offenbarung vorhanden sind, bedeutet nicht, dass solche Komponenten außerhalb des Anwendungsbereichs dieser Offenbarung liegen. Eine Person mit gewöhnlichem Fachwissen weiß, wie solche gemeinsamen Komponenten verwendet werden, und kann den Gegenstand ohne spezifische Erwähnung dieser gemeinsamen Komponenten verstehen.
-
Jeder der in den vorangegangenen Abschnitten beschriebenen Prozesse, Methoden und Algorithmen kann in Codekomponenten verkörpert und vollständig oder teilweise automatisiert sein, die von einem oder mehreren Computersystemen oder Computerprozessoren ausgeführt werden, die Computerhardware umfassen. Das eine oder die mehreren Computersysteme oder Computerprozessoren können auch so betrieben werden, dass sie die Ausführung der relevanten Vorgänge in einer „Cloud Computing“-Umgebung oder als „Software as a Service“ (SaaS) unterstützen. Die Prozesse und Algorithmen können teilweise oder vollständig in anwendungsspezifischen Schaltkreisen implementiert sein. Die verschiedenen oben beschriebenen Funktionen und Prozesse können unabhängig voneinander verwendet oder auf verschiedene Weise kombiniert werden. Verschiedene Kombinationen und Unterkombinationen sollen in den Anwendungsbereich dieser Offenlegung fallen, und bestimmte Verfahrens- oder Prozessblöcke können in einigen Implementierungen weggelassen werden. Die hier beschriebenen Methoden und Prozesse sind auch nicht auf eine bestimmte Reihenfolge beschränkt, und die damit verbundenen Blöcke oder Zustände können in anderen geeigneten Reihenfolgen oder parallel oder auf andere Weise ausgeführt werden. Blöcke oder Zustände können zu den offengelegten Ausführungsbeispielen hinzugefügt oder aus ihnen entfernt werden. Die Ausführung bestimmter Operationen oder Prozesse kann auf Computersysteme oder Computerprozessoren verteilt sein, die sich nicht nur innerhalb einer einzigen Maschine befinden, sondern über eine Reihe von Maschinen verteilt sind.
-
Wie hierin verwendet, kann eine Schaltung mit jeder Form von Hardware, Software oder einer Kombination davon implementiert werden. Beispielsweise können ein oder mehrere Prozessoren, Controller, ASICs, PLAs, PALs, CPLDs, FPGAs, logische Komponenten, Software-Routinen oder andere Mechanismen implementiert werden, um eine Schaltung zu bilden. Bei der Implementierung können die verschiedenen hier beschriebenen Schaltungen als diskrete Schaltungen implementiert werden, oder die beschriebenen Funktionen und Merkmale können teilweise oder insgesamt auf eine oder mehrere Schaltungen aufgeteilt werden. Auch wenn verschiedene Merkmale oder Elemente der Funktionalität einzeln als separate Schaltkreise beschrieben oder beansprucht werden, können diese Merkmale und Funktionen von einem oder mehreren gemeinsamen Schaltkreisen gemeinsam genutzt werden, und eine solche Beschreibung soll nicht voraussetzen oder implizieren, dass separate Schaltkreise erforderlich sind, um diese Merkmale oder Funktionen zu implementieren. Wenn eine Schaltung ganz oder teilweise mit Software implementiert ist, kann diese Software so implementiert werden, dass sie mit einem Computer- oder Verarbeitungssystem arbeitet, das in der Lage ist, die in Bezug darauf beschriebene Funktionalität auszuführen, wie z. B. das Computersystem 600.