DE102019111219A1 - Bereitstellen von Toter-Block-Vorhersage zur Bestimmung, ob Daten in Cache-Vorrichtungen zwischenzuspeichern sind. - Google Patents

Bereitstellen von Toter-Block-Vorhersage zur Bestimmung, ob Daten in Cache-Vorrichtungen zwischenzuspeichern sind. Download PDF

Info

Publication number
DE102019111219A1
DE102019111219A1 DE102019111219.2A DE102019111219A DE102019111219A1 DE 102019111219 A1 DE102019111219 A1 DE 102019111219A1 DE 102019111219 A DE102019111219 A DE 102019111219A DE 102019111219 A1 DE102019111219 A1 DE 102019111219A1
Authority
DE
Germany
Prior art keywords
cache
block
address
data
requested
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102019111219.2A
Other languages
English (en)
Inventor
Alaa Alameldeen
Gino CHACON
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tahoe Research Ltd
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102019111219A1 publication Critical patent/DE102019111219A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0808Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0824Distributed directories, e.g. linked lists of caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/507Control mechanisms for virtual memory, cache or TLB using speculative control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/608Details relating to cache mapping

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

Es werden eine Vorrichtung und ein System zum Zwischenspeichern von Daten in einem ersten Cache und einem zweiten Cache, die Daten aus einem geteilten Speicher in einem lokalen Prozessorknoten zwischenspeichern, bereitgestellt, wobei der geteilte Speicher mindestens einem entfernten Prozessorknoten zugänglich ist. Ein Cache-Controller schreibt einen Block in den zweiten Cache, wenn bestimmt wird, dass wahrscheinlicher durch den lokalen Prozessorknoten als durch den entfernten Prozessorknoten auf den Block zugegriffen wird. Der erste Cache-Controller schreibt den Block in den geteilten Speicher, wenn bestimmt wird, dass wahrscheinlicher durch den einen des mindestens einen entfernten Prozessorknotens als durch den lokalen Prozessorknoten auf den Block zugegriffen wird, ohne in den zweiten Cache zu schreiben.

Description

  • TECHNISCHES GEBIET
  • Hier beschriebene Ausführungsformen betreffen allgemein die Bereitstellung von Toter-Block-Vorhersage zur Bestimmung, ob Daten in Cache-Vorrichtungen zwischenzuspeichern sind.
  • STAND DER TECHNIK
  • In einem System mit ungleichförmigem Speicherzugriff (NUMA - Non-Uniform Memory Access) umfassen verschiedene Verarbeitungs-Sockets im System jeweils Verarbeitungskerne und private Caches zum Zwischenspeichern von Daten, die durch den lokalen Verarbeitungskern verwendet werden, und geteilten Speicher, der unter allen Verarbeitungs-Sockets geteilt wird. In einem NUMA-System kann ein Prozessor schneller als nichtlokaler Speicher (Speicher lokal bei einem anderen Prozessor oder Speicher, der zwischen Prozessoren geteilt wird) auf seinen eigenen lokalen Speicher zugreifen. Ein NUMA-System verwendet Kommunikation zwischen Prozessoren zum Aufrechterhalten von Cache-Kohärenz unter den Sockets. Das Aufrechterhalten von Cache-Kohärenz durch Koordinieren von Zugriff kann zu Latenzverzögerungen für ein Socket zum Erhalten von exklusivem Zugang zu oder Eigentümerschaft einer Blockadresse, die in den privaten Cache eines anderen Socket gespeichert ist, führen.
  • Mit zunehmender Größe des DRAM-Cache (Direct Random Access Memory) nimmt, wenn größere private Caches erlaubt werden, das Cache-Kohärenzoverhead aufgrund der Verfolgung einer großen Menge an Blöcken, die potentiell in einem Socket zwischengespeichert werden, zu. Großer Auf-Socket-Speicher vergrößert auch die Anzahl von Invalidierungs- und Leseanforderungen an das Socket, hauptsächlich an den DRAM-Cache. Da diese Caches oft Zugriffslatenzen ähnlich wie beim Zugreifen auf Hauptspeicher aufweisen, geht der Nutzen des Entfernens des geteilten Speicherzugriffs auch verloren, da Verbesserungen der Speicherlatenz durch die Verzögerung beim Warten auf eine Fern-Invalidierung zunichte gemacht werden.
  • In der Technik besteht eine Notwendigkeit, eine Cache-Kohärenzrichtlinie zu implementieren, die Latenz für Anforderungen von entfernten Sockets in einem System, auf eine in einem privaten Cache eines anderen Socket gespeicherte Blockadresse zuzugreifen, verringert.
  • Figurenliste
  • Ausführungsformen werden beispielhaft unter Bezugnahme auf die beigefügten Zeichnungen beschrieben, die nicht maßstabsgetreu gezeichnet sind und in denen sich gleiche Bezugszahlen auf ähnliche Elemente beziehen.
    • 1 zeigt ein Mehrfach-Socket-System, in dem Ausführungsformen implementiert werden.
    • 2 zeigt eine Ausführungsform eines Eintrags in einem für Cache-Kohärenz verwendeten globalen Verzeichnis.
    • 3 zeigt eine Ausführungsform von Operationen zum Verwenden von Toter-Block-Vorhersage zum Bestimmen, ob aus einem Cache der letzten Ebene in einen intermediären Cache in einem der Sockets ausgeräumte Daten zwischenzuspeichern sind.
    • 4 zeigt eine zusätzliche Ausführungsform eines Mehrfach-Socket-Systems, in dem Ausführungsformen implementiert werden.
    • 5 zeigt eine Ausführungsform von Operationen zum Verarbeiten einer Invalidierungsanforderung für eine Blockadresse in einem Cache der letzten Ebene.
    • 6 zeigt eine Ausführungsform von Operationen zum Verarbeiten einer Füllanforderung in einem intermediären Cache von einem Cache der letzten Ebene.
    • 7 zeigt eine Ausführungsform von Operationen zum Ausräumen einer Blockadresse aus dem Cache der letzten Ebene.
    • 8 zeigt eine Ausführungsform von Operationen zum Verarbeiten einer Rückschreiboperation an dem Cache der letzten Ebene.
    • 9 zeigt eine Ausführungsform von Operationen zum Verarbeiten einer Invalidierungsanforderung an dem intermediären Cache.
    • 10 zeigt eine Ausführungsform von Operationen zum Verarbeiten einer Füllanforderung aus dem Cache der letzten Ebene an den intermediären Cache.
    • 11 zeigt eine Ausführungsform von Operationen für den Cache der letzten Ebene zum Verarbeiten einer Füllanforderung von einem Prozessor-Cache unter Verwendung einer Programmzählertabelle für Toter-Block-Vorhersage.
    • 12 zeigt ein System, in dem die Komponenten von 1 und 4 eingesetzt werden können.
  • BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Um Latenzverzögerungen zu verringern, die ein entferntes Socket erfährt, das exklusiven Zugriff auf eine Blockadresse wünscht, die in einem Cache eines anderen Sockets in einem Mehrfach-Socket-System gespeichert ist, können vorbekannte NUMA-Lösungen verhindern, dass die privaten DRAM-Caches eines Socket schmutzige Daten speichern, um der Notwendigkeit zuvor zu kommen, schmutzige Daten im globalen Verzeichnis zu verfolgen. Indem sich im DRAM-Cache keine schmutzigen Daten befinden, werden Lesevorgänge und Invalidierungen verringert, aber Treffer werden verringert, weil Sockets nicht lokalen privaten Cache zum Speichern schmutziger Daten verwenden können.
  • Beschriebene Ausführungsformen verbessern die Computertechnologie zum Zwischenspeichern von schmutzigen Daten in einem Mehrfach-Socket-Verarbeitungssystem durch Verringern von Latenz für lokale Zugriffe sowie für Lesen-für-Eigentümerschafts-Anforderungen von entfernten Sockets durch Einsatz eines Toter-Block-Prädiktors in jedem Socket zum Bestimmen, ob schmutzige Daten in den privaten Caches zwischenzuspeichern sind, von denen vorhergesagt wird, dass sie ein toter Block sind, d. h. Daten, die wahrscheinlich eher durch ein entferntes Socket angefordert statt im lokalen Socket verwendet werden. Beschriebene Ausführungsformen verwenden Toter-Block-Vorhersage zur Bestimmung, ob ein schmutziger Block bei Ausräumung aus dem Cache der letzten Ebene in einen intermediären Cache, wie etwa einen DRAM-Cache, geschrieben werden sollte oder in geteilten Speicher durchgeschrieben werden sollte. Auf diese Weise wird Latenz, um einem entfernten Socket exklusiven Zugriff auf eine Blockadresse zu gewähren, verringert, weil diejenigen Blockadressen, die sich wahrscheinlich in einer Produzent-Konsument-Beziehung befinden, d. h. wahrscheinlich durch ein anderes Socket angefordert werden, sobald sie geschrieben sind, nicht in einem privaten Cache eines Socket gespeichert werden und somit in den lokalen privaten Caches nicht invalidiert werden müssen, wodurch die Latenz für Fern-Eigentümerschaftsanforderungen verringert wird. Daten, von denen bestimmt wird, dass sie sich nicht in einer Produzent-Konsument-Beziehung befinden und wahrscheinlich häufig in dem lokalen Socket angefordert werden, werden jedoch in einem lokalen privaten Cache gespeichert, um die Latenz von Lesefehltreffern in dem lokalen Socket zu verringern, wo angeforderte Daten aus einem lokalen privaten Cache zurückgeführt werden können.
  • In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten dargelegt, wie etwa Logikimplementierungen, Opcodes, Mittel zum Spezifizieren von Operanden, Implementierungen zum Partitionieren/Teilen/Duplizieren von Ressourcen, Typen und Beziehungen von Systemkomponenten und Wahlmöglichkeiten der logischen Partitionierung/Integration, um ein umfassenderes Verständnis der vorliegenden Erfindung zu gewährleisten. Für Fachleute ist jedoch erkennbar, dass die Erfindung ohne solche spezifischen Einzelheiten praktiziert werden kann. In anderen Fällen wurden Steuerstrukturen, Schaltungen auf Gatterniveau und volle Softwareanweisungssequenzen nicht im Detail gezeigt, um die Erfindung nicht zu verschleiern. Durchschnittsfachleute werden anhand der vorliegenden Beschreibungen in der Lage sein, ohne übermäßiges Experimentieren geeignete Funktionalität zu implementieren.
  • Erwähnungen von „einer Ausführungsform“, „eine Ausführungsform“, „eine beispielhafte Ausführungsform“ usw. in der Patentschrift geben an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Charakteristikum umfassen kann, aber nicht jede Ausführungsform unbedingt das bestimmte Merkmal, die bestimmte Struktur oder das bestimmte Charakteristikum umfasst. Außerdem beziehen sich solche Ausdrücke nicht unbedingt auf dieselbe Ausführungsform. Bestimmte Ausführungsformen betreffen elektronische Speicherungsvorrichtungsbaugruppen. Ausführungsformen umfassen sowohl Vorrichtungen als auch Verfahren zur Bildung von elektronischen Baugruppen.
  • 1 zeigt eine Ausführungsform eines Systems 100, das mehrere Sockets 1021 , 1022 , 102i ...102n von Zentralverarbeitungseinheit (CPU) umfasst, die über einen Bus 104 kommunizieren. Socket 102i zeigt die Komponenten, die in allen Sockets 1021 ...102n enthalten sind, und umfasst ein System auf einem Chip 106 mit mehreren Verarbeitungskernen 1081 , 1082 ...108m , die jeweils eine Speicherverwaltungseinheit (MMU) 1101 , 1102 ... 110m , einen L1-Cache auf dem Chip 1121 , 1122 ...112m und L2-Cache auf dem Chip 1141 , 1142 ...114m aufweisen, die für die Verarbeitungskerne 1061 , 1062 ...106m privat sind und anderen Sockets 1021 ...102n nicht zugänglich sind. Jedes Socket 102i umfasst ferner zusätzliche Caches, die für das Socket 102i privat sind, darunter einen Cache der letzten Ebene (LLC) 116, der einen größeren Speicherungsplatz zum Zwischenspeichern von Daten für die L1- und L2-Caches bereitstellt, und ein intermediärer Cache 118 zum Zwischenspeichern von Daten für den Cache der letzten Ebene 116. Das Socket 102i unterhält ferner einen geteilten Speicher 120, der Daten in einem geteilten Zustand speichert, die allen Sockets 1021 , 1022 ...102n zugänglich sind. Der Cache der letzten Ebene 116 und der intermediäre Cache 118 können ferner als Cache der dritten Ebene (L3) bzw. Cache der vierten Ebene (L4) bezeichnet werden. Weiterhin kann der Cache der letzten Ebene 116 als ein erster Cache bezeichnet werden, d. h. erster Cache aus den L1- und L2-Caches des Kerns, und der intermediäre Cache 118 wird als zweiter Cache bezeichnet, der eine niedrigere Ebene in der Hierarchie von dem (ersten) Cache der letzten Ebene 116 aus umfasst.
  • Der intermediäre Cache 118 stellt einen größeren Speicherungsplatz als der LLC 116 zum Zwischenspeichern von Daten für den LLC 116 aus dem geteilten Speicher 120 bereit, wobei der geteilte Speicher 120 einen größeren Speicherungsplatz als der intermediäre Cache 118 umfassen kann. Bei einer Ausführungsform kann der geteilte Speicher 120 über alle Sockets 1021 , ...102n hinweg in Slices aufgeteilt werden. Bei einer anderen Ausführungsform kann der geteilte Speicher 120 eine vereinigte Struktur sein, die unter allen Sockets 1021 ...102n geteilt wird. Der intermediäre Cache 118 und der geteilte Speicher 120 können DRAM-Vorrichtungen (Dynamic Random Access Memory) umfassen. Jedes Socket 102i umfasst einen Controller 122 des Cache der letzten Ebene (LLC) zum Verwalten von Lese- und Schreibanforderungen an den Cache der letzten Ebene 116, einen intermediären Cachecontroller 124 zum Verwalten von Lese- und Schreibanforderungen an den intermediären Cache 118 und einen Controller 126 des geteilten Speichers zum Verwalten von Lese- und Schreibanforderungen an den geteilten Speicher 120. Eine Chipschnittstelle 128 ermöglicht Kommunikation mit anderen der Sockets 1021 ...102n auf dem Bus 104 oder der Socketschnittstelle.
  • Die Verarbeitungskerne 1081 , 1082 ...108m können modifizierte Cache-Linien aus dem L2-Cache 1141 , 1142 ...114m in den geteilten Cache der letzten Ebene (LLC) 116, der unter den Kernen 1081 , 1082 ...108m geteilt wird, zurückschreiben, um Platz für eine aus dem L1-Cache 1121 , 1122 ...112m ausgeräumte Cache-Linie zu schaffen. Wenn modifizierte Daten aus dem L2-Cache 1141 , 1142 ...114m entfernt werden müssen, um Platz für modifizierte Daten aus dem L1-Cache 1121 , 1122 ...112m zu schaffen, wird eine Rückschreiboperation ausgeführt, um die Daten in den Cache der letzten Ebene 116 zu schreiben. Wenn modifizierte Daten aus dem Cache der letzten Ebene 116 entfernt werden müssen, um Platz für neue modifizierte Daten aus dem L2-Cache 1141 , 1142 ...114m zu schaffen, schreibt ein Rückschreiben die aus dem Cache 116 der letzten Ebene ausgeräumten Daten in den intermediären Cache 118, und wenn Daten aus dem intermediären Cache 118 ausgeräumt werden müssen, um Platz für neue modifizierte Daten aus dem Cache der letzten Ebene 116 zu schaffen, werden sie in dem geteilten Speicher 120 geschrieben. Dieser intermediäre Cache 118 kann einen privaten DRAM-Cache für Ausräumungen des LLC 116 umfassen, um Außer-Socket-Verkehr zu verringern. Auf diese Weise stellen der L1-Cache 1121 , 1122 ...112m , der L2-Cache 1141 , 1142 ...114m , der Cache der letzten Ebene 116, der intermediäre Cache 118 und der geteilte Speicher 120 eine Speicherhierarchie bereit.
  • Der L1-Cache 1121 , 1122 ...112m , der L2-Cache 1141 , 1142 ...114m , der Cache der letzten Ebene 116 und der intermediäre Cache 118 können private Caches umfassen, die Daten speichern, die von den Verarbeitungskernen 1101 , 1102 ...110n verwendet werden, so dass das Socket 102i keine Daten aus einem entfernten Socket 102j abrufen muss, die zum Zugriff oder für einen Außer-Socket-Zugriff mehr Latenz aufweisen würden. Daten im geteilten Speicher 120 sind allen Sockets 1021 ...102n zugänglich. Ferner kann der intermediäre Cache 118 als ein speichernaher Cache für den Cache der letzten Ebene 116 betrachtet werden, und der geteilte Speicher 120 kann als ein Fernspeicher-Cache für den Cache der letzten Ebene 116 betrachtet werden.
  • Die Verarbeitungskerne 1081 , 1082 ...108m können jeweils zusätzliche Komponenten umfassen, wie etwa einen Systemagenten, Busschnittstellensteuerungen, Grafik, TLB (Translation Lookaside Buffer) usw. Ferner kann es nur einen Cache auf einem Verarbeitungskern 108i geben, wobei ein Verarbeitungskern 108i einen beliebigen der Verarbeitungskerne 108i , 1082 ...108m umfasst.
  • Bei bestimmten Ausführungsformen können das System 100 und Sockets einen NUMA-Entwurf (ungleichförmiger Speicherzugriff) implementieren. Bei alternativen Ausführungsformen kann das System mit anderen Entwürfen implementiert werden.
  • In 1 ist der Cache der letzten Ebene 116 in dem System auf einem Chip 102 gezeigt. Bei alternativen Ausführungsformen kann sich der Cache der letzten Ebene 116 außerhalb des Systems auf einem Chip 106 auf dem Motherboard des Systems 100 befinden.
  • Bei einer Ausführungsform werden der L1-Cache 1121 , 1122 ...112m und der L2-Cache 1141 , 1142 ...114m auf den Verarbeitungskernen 1081 , 1082 ...108m implementiert. Der Cache der letzten Ebene (LLC) 116 kann eine nichtflüchtige Speichervorrichtung umfassen, wie etwa einen STT-RAM (Spin-Transfer Torque Magnetic Random-Access Memory), der die Eigenschaft von hoher Leseleistungsfähigkeit und niedrigen Leseenergieverbrauch aufweist, aber eine höhere Schreibenergie und längere Schreiblatenz aufweist. Der intermediäre Cache 118 und der geteilte Speicher 120 können DRAM (Dynamic Random Access Memory) usw. umfassen. Es können andere nichtflüchtige und flüchtige Speichervorrichtungen für die Speicher 116, 118 und 120 verwendet werden, darunter eine dreidimensionale Kreuzpunkt- bzw. 3D-Kreuzpunkt-Speichervorrichtung, Speichervorrichtungen, die Chalcogenidglas verwenden, Mehrfach-Schwellenpegel-NAND-Flash-Speicher, NOR-Flash-Speicher, Einzel- oder Mehrpegel-Phasenänderungsspeicher (PCM), ein resistiver Speicher, Nanodrahtspeicher, ferroelektrischer Transistor-Direktzugriffsspeicher (FeTRAM), antiferroelektrischer Speicher, magnetoresistiver Direktzugriffsspeicher (MRAM), der Memristor-Technologie beinhaltet, resistiver Speicher mit der Metalloxidbasis, der Sauerstofffreistellenbasis und der Direktzugriffsspeicher mit leitfähiger Brücke (CB-RAM) oder STT-MRAM (Spin Transfer Torque), eine auf magnetischem Spintronik-Sperrschichtspeicher basierende Vorrichtung, eine Vorrichtung auf der Basis der Magnettunnelungssperrschicht (MTJ), eine Vorrichtung auf der Basis von DW (Domänenwand) und SOT (Spin Orbit Transfer), eine Speichervorrichtung auf Thiristorbasis oder eine Kombination beliebiger der obigen, oder anderer Speicher oder andere Speicherung, wie etwa ein magnetisches Speicherungsmedium usw., Festplattenlaufwerke, Band usw. Die Speichervorrichtung kann sich auf den Chips selbst und/oder ein gekapseltes Speicherprodukt beziehen.
  • 1 zeigt eine Mehrkernimplementierung. Bei einer alternativen Ausführungsform kann der Cache der letzten Ebene 116 nur für einen Einzelkernprozessor mit einem L1- und L2-Cache bereitgestellt werden. Die Anzahl der Kerne kann eine beliebige Anzahl von einem oder mehreren Kernen, implementiert auf dem System auf einem Chip 102, umfassen. Das System auf einem Chip 102 kann eine Intel -Core -Mikroarchitektur oder Mehrkernprozessor-Mikroarchitektur von anderen Vertreibern und Herstellern umfassen. (Intel und Core sind auf der ganzen Welt Warenzeichen der Intel Corporation).
  • Jedes Socket 102i weist einen Kohärenzmanager 130 auf, um Zugang zu einem globalen Verzeichnis 200 zu verwalten, das über Informationen über jede Blockadresse verfügt, die durch Sockets 1021 ...102n verwaltet wird. Jedes Socket kann einen Slice oder Teil des globalen Verzeichnisses 200 für die durch das Socket 102i verwalteten Blockadressen aufweisen. Die Vergabe von Blöcken an Sockets 1021 ...102n ist statisch, so dass der Kohärenzmanager 130 in jedem Socket 102i weiß, welches Socket 1021 ...102n über Informationen für eine Blockadresse in seinem globalen Verzeichnis 200 verfügt. Wenn ein Socket 102i auf eine Blockadresse zugreifen muss, deren Informationen auf einem anderen Socket 102j gehalten werden, muss dann somit der Kohärenzmanager 130 von Socket 102i eine Anforderung zu dem globalen Verzeichnis 200 über ein anderes Socket senden, um Zugriff zu koordinieren, wie etwa zum Bestimmen, ob die Blockadresse verfügbar ist oder ein anderes Socket auf sie zugreift.
  • 2 ist eine Ausführungsform eines Eintrags 200i des globalen Verzeichnisses in einem globalen Verzeichnis 200 des Socket 1021 , das eine Blockadresse 202 umfasst, die unter den Sockets 1021 ...102n geteilt wird; eines Halters 204, der ein Socket 1021 , das aktuell exklusiven Zugang zu dem Block 202 hat, oder mehrere Sockets mit geteiltem Zugang zu dem Block 202 umfasst; eines Geteilt/Exklusiv-Flags 206, das angibt, ob Zugang zu der Blockadresse geteilt oder exklusiv gehalten wird; und von Caches, die den Block 208 speichern, wodurch Caches angegeben werden, in denen eine Kopie des Blocks in einem oder mehreren Haltern 204 gespeichert wird, wie etwa LLC 116, intermediärem 118, geteiltem Speicher 120.
  • Wenn ein entferntes Socket 102R exklusiven Zugang zu einer Blockadresse wünscht, die aktuell in einem privaten Cache des Socket 102i gespeichert ist, muss es Anforderungen zum Invalidieren von Kopien dieses Blocks in privaten Caches im Socket 102i senden, so dass die einzige Kopie eine Kopie umfasst, die in L1-Cache 1121 ...112n , L2-Cache 1141 ...114n , Cache der letzten Ebene 116 und/oder intermediärem Cache 118 des entfernten Socket 102R , das exklusiven Zugang angefordert hat, unterhalten wird. Auf diese Weise bedeutet die Invalidierungsanforderung, dass die einzige (und letzte) Kopie des Blocks im System sich in einem der Caches (L1/L2/L3/L4) des Socket 102R befindet, das exklusiven Zugang zu dem Block angefordert hat.
  • Bei beschriebenen Ausführungsformen wird ein Socket 102i versuchen, Speicherung von Blockadressen, auf die wahrscheinlich andere der Sockets zugreifen werden, in privaten Caches zu vermeiden, um Latenz zu verringern, die ein entferntes Socket 102R dabei erfährt, dass es die Blockadresse in privaten Caches invalidieren muss. Jedes Socket kann eine Toter-Block-Prädiktortechnik unterhalten, die vorhersagt, ob ein schmutziger Block in einem Cache, wie etwa dem Cache der letzten Ebene 116, im Cache der nächsten Ebene, z. B. dem intermediären Cache 118, gespeichert werden sollte oder den privaten Cache der nächsten Ebene umgehen soll, um die Daten direkt in den geteilten Speicher 120 zu schreiben. Wenn ein Block wahrscheinlich in der Zukunft durch ein Socket 102i geschrieben wird oder unwahrscheinlich durch ein anderes Socket angefordert wird, verringert das Halten dieser Blockadresse in einem privaten Cache die Latenz bei Cache-Fehltreffern am lokalen Socket. Wenn wahrscheinlich ein entferntes Socket auf einen Block zugreifen wird, wie etwa in einer Produzent-Konsument-Beziehung, oder wenig oft beschrieben wird, während er sich im privaten Cache befindet, können die Daten die privaten Caches umgehen, so dass ein entferntes Socket beim Invalidieren der Blockadresse in den privaten Caches und Schreiben der Daten in den geteilten Speicher 120 keine Latenz erfährt.
  • Bei einer Ausführungsform umfasst das System 100 einen Toter-Block-Prädiktor 132 zum Bestimmen, ob Daten, die aus dem Cache der letzten Ebene 116 ausgeräumt werden, in dem intermediären Cache 118 zwischengespeichert werden sollten, um für On-Chip-Anforderungen im Socket 102i verfügbar zu sein, oder der intermediäre Cache 118 umgangen und die Daten direkt in den geteilten Speicher 120 geschrieben werden sollten, wenn die Daten wahrscheinlich bald durch ein entferntes Socket 102R angefordert werden, wie etwa Daten in einer Produzent-Konsument-Beziehung.
  • Der Toter-Block-Prädiktor 132 kann eine Komponente oder integrierte Schaltungsvorrichtung außerhalb des Controllers 122 des Cache der letzten Ebene umfassen oder kann innerhalb der Logik des Controllers 122 des Cache der letzten Ebene implementiert sein. Der Toter-Block-Prädiktor 132 betrachtet Attribute und Merkmale in Bezug auf die Blockadresse, die aus dem Cache der letzten Ebene 116 ausgeräumt wird, um Entscheidungen darüber zu treffen, welche Art von Schreibrichtlinie zu verwenden ist, den intermediären Cache 118 zu umgehen und direkt in den geteilten Speicher 120 zu schreiben oder in den intermediären Cache 118 zu schreiben. Der Toter-Block-Prädiktor 132 umfasst eine Attribut-Konfidenzniveau-Nachschlagetabelle 134, die Attribute der Blockadresse umfasst, die aus dem Cache der letzten Ebene 116 ausgeräumt wird, wie etwa die teilweise physische Adresse des Blocks, den Zyklus, in dem der Block ausgeräumt wurde, oder beliebige andere Informationen in Bezug auf den Block, und ordnet das Attribut einem Konfidenzniveau zu - das Attribut gibt an, dass bald ein entferntes Socket 102R auf die Blockadresse zugreifen wird, wie etwa Daten in einer Produzent-Konsument-Beziehung. Bei einer Ausführungsform wird es, wenn das Konfidenzniveau eine hohe Schwelle erfüllt, als wahrscheinlich angesehen, dass bald durch ein entferntes Socket 102R zugegriffen wird, d. h. in einer Produzent-Konsument-Beziehung, während ein Konfidenzniveau von weniger als der Schwelle angibt, dass auf die Daten wahrscheinlicher exklusiv auf dem Chip in dem Socket 1021 , worin sie gespeichert sind, zugegriffen wird.
  • 3 zeigt eine Ausführungsform von Operationen, die durch den Toter-Block-Prädiktor 132 ausgeführt werden, um zu bestimmen, ob ein Block, der aus dem Cache der letzten Ebene 116 ausgeräumt wird, in dem intermediären Cache 118 gespeichert oder der intermediäre Cache 118 umgangen und in dem geteilten Speicher 120 gespeichert werden soll. Bei Empfang (in Block 300) eines aus dem Cache der letzten Ebene 116 ausgeräumten Blocks verarbeitet der Toter-Block-Prädiktor 132 (in Block 302) mehrere Attribute in Bezug auf den Block, um Attributwerte zu bestimmen. Der Toter-Block-Prädiktor 132 verarbeitet (in Block 304) die Nachschlagetabelle 134, um für jeden der bestimmten Attributwerte ein Konfidenzniveau zu bestimmen, das angibt, ob wahrscheinlicher durch einen der entfernten Verarbeitungsknoten 102R oder den lokalen Verarbeitungsknoten auf den Block zugegriffen wird. Es wird ein Gesamt-Konfidenzniveau (in Block 306) bestimmt durch Kombinieren der Konfidenzniveaus der Attributwerte. Wenn (in Block 308) das Gesamt-Konfidenzniveau eine Konfidenzschwelle überschreitet (d. h. wahrscheinlicher durch einen der entfernten Verarbeitungsknoten als den lokalen Verarbeitungsknoten auf den Block zugegriffen wird), führt der Toter-Block-Prädiktor 132 (in Block 310) ein Durchschreiben des ausgeräumten Blocks in dem geteilten Speicher 120 durch, wobei der intermediäre Cache (oder DRAM-Cache) umgangen wird. Wenn (in Block 308) das Gesamt-Konfidenzniveau angibt, dass es wahrscheinlich ist, dass häufiger in dem lokalen Socket auf den Block zugegriffen wird, wird der ausgeräumte Block (in Block 312) in den intermediären Cache 118 geschrieben, um für lokalen Zugriff verfügbar zu sein.
  • Bei der Ausführungsform von 1-3 verwendet der Toter-Block-Prädiktor 132 vergangene Verhaltensweisen ähnlicher Daten mit Bezug auf Zugriff durch entfernte Sockets, um Entscheidungen über die Beziehung der aus dem Cache der letzten Ebene 116 ausgeräumten Daten zu anderen Sockets 1021 ...102n und dem lokalen Socket zu treffen. Wenn sich zeigt, dass ein Block sich in einer Produzent-Konsument-Beziehung befindet, ist es nützlicher, die Daten durchzuschreiben und zu gestatten, sie zu teilen, wodurch die Latenz beim Warten darauf, dass die Daten in dem intermediären Cache 118 invalidiert werden, in den geteilten Speicher 120 überführt werden und der Eintrag des globalen Verzeichnisses 200i für den Block aktualisiert wird, um den geteilten Zustand und neue Cache-Orte für den Block anzugeben, verringert wird. Dadurch kann ein entferntes Socket 102R agressivere Entscheidungen darüber treffen, ob auf das produzierende Socket oder geteilten Speicher zuzugreifen ist, abhängig von der verfügbaren lokalen Bandbreite im Socket. Wenn die Daten wahrscheinlicher sofort von einem anderen Socket angefordert werden, wie etwa in einer Produzent-Konsument-Beziehung, wird ein Durchschreibprotokoll durchgesetzt, um es anderen Sockets zu gestatten, die Daten aus dem geteilten Speicher 120 oder dem Eigentümer-Socket zu lesen. Das Durchführen des Durchschreibens lässt außerdem mehr verfügbaren Platz in dem intermediären Cache 118 für die Blockadressen, auf die das lokale Socket wahrscheinlich häufig zugreift, um somit die Latenz für diese lokalen Zugriffe auf die Daten zu verringern.
  • Mehrfach-Socket-Arbeitslasten zeigen außerdem oft Tendenz zum Schreiben oder Lesen in bestimmte Adressen, die durch entfernte Sockets zur Eigentümerschaft nicht angefordert werden. Diese Daten ziehen aus einer Durchschreibrichtlinie keinen Nutzen, da entfernte Sockets unwahrscheinlich die Daten anfordern. In diesem Fall verhindert das Halten von Daten in dem intermediären Cache 118 (z. B. DRAM-Cache), dass das Socket den Schritt durchläuft, eine Invalidierungsanforderung zu einem anderen Socket zu senden und die sauberen Daten entweder von einem entfernten Socket oder Hauptspeicher abzurufen. Die Daten bleiben lokal und ziehen aus jeglicher in der Arbeitslast anwesender ferner zeitlicher Lokalität Nutzen. Diese Beziehung wird repräsentiert, indem der Toter-Block-Prädiktor die Adresse und Orte, auf die ähnlich zugegriffen wird, als für das Eigentümer-Socket exklusiv ansieht.
  • 4 zeigt eine zusätzliche Ausführungsform eines Systems 400, das viele derselben Komponenten wie in dem System 100 in 1 umfasst. Die Komponenten 200, 4021 , 4022 , 402i ...402n , 404, 406, 4081 , 4082 ...408m , 4101 , 4102 ...410m , 4121 , 4122 ... 412m , 4141 , 4142 ...414m , 416, 418, 420, 422, 424, 426, 428 und 430 in 4 sind dieselben wie mit Bezug auf die Komponenten 200, 1021 , 1022 , 102i ...102n , 104, 106, 1081 , 1082 ... 108m , 1101 , 1102 ...110m , 1121 , 1122 ...112m , 1141 , 1142 ...114m , 116, 118, 120, 122, 121, 126, 128 bzw. 130 in 1 beschriebenen. Ein Unterschied besteht darin, dass der Controller 424 des intermediären Cache von 4 eine Verfolgungstabelle 432 des Cache der letzten Ebene (LLC), um modifizierte (schmutzige) Blockadressen zu verfolgen, die in dem Cache der letzten Ebene 416 invalidiert werden, und eine Verfolgungstabelle 434 des intermediären Cache zum Verfolgen von modifizierten (schmutzigen) Blockadressen, die in dem intermediären Cache 418 invalidiert werden, umfasst. Ein anderer Unterschied bezüglich des Systems 100 von 1 besteht darin, dass der Controller 422 des Cache der letzten Ebene eine Programmzählertabelle 436 zum Verfolgen von Programmzählern von Anweisungen, die eine Blockadresse anfordern, die in dem intermediären Cache 418 invalidiert wurde, umfassen kann.
  • Die Verfolgungstabellen 432, 434, 436 können als eine Liste einer festen oder begrenzten Anzahl invalidierter Adressen implementiert werden, wobei LRU-Ersetzung (Least Recently Used) verwendet wird, um eine Blockadresse aus der Tabelle 432, 434, 436 am LRU-Ende zu entfernen, um Platz dafür zu schaffen, eine invalidierte neue Blockadresse zu dem MRU-Ende (Most Recently Used) der Tabelle 432, 434, 436 hinzuzufügen. Bei bestimmten Ausführungsformen ist die Verfolgungstabelle 434 des intermediären Cache größer und verfolgt mehr invalidierte Adressen als die LLC-Verfolgungstabelle 432, weil die Verfolgungstabelle 434 des intermediären Cache Adressen verfolgt, die im intermediären Cache 418 invalidiert werden, der größer als der Cache der letzten Ebene 416 ist, und die LLC-Verfolgungstabelle 432 invalidierte schmutzige Adressen in dem kleineren Cache der letzten Ebene 416 verfolgt. Die Programmzählertabelle 436 kann ferner eine Tabelle 436 begrenzter Größe in dem Controller 422 des Cache der letzten Ebene umfassen und kann ferner begrenzte Größe aufweisen, die kleiner als die LLC-Verfolgungstabelle 432 ist. Die Tabellen 432, 434 können in dem Controller 424 des intermediären Cache oder in dem intermediären Cache 418 gespeichert werden. Bei alternativen Ausführungsformen können die Tabellen 432, 434, 436 an anderen Orten gespeichert werden.
  • Wie besprochen können bei einer Ausführungsform die Tabellen 432, 434 und 436 als Listen fester Größe implementiert werden. Bei einer alternativen Ausführungsform können die Tabellen 432, 434 und 436 als Bloom-Filter implementiert werden. Bei Bloom-Filterausführungsformen, die einige letzte wenige invalidierte Adressen und Programmzähler mit grober Granularität verfolgen, gibt ein Bloom-Filtertreffen an, dass die geprüfte Adresse oder der geprüfte Programmzähler vor Kurzem invalidiert wurde. Obwohl eine falsche Positivbestimmung zu falschen Toter-Block-Vorhersagen führt, wirkt sich dies wenig auf die Leistungsfähigkeit aus, da es zu wenigen zusätzlichen DRAM-Cache-Fehltreffern führen würde. Das Bloom-Filter kann periodisch rückgesetzt werden, um Akkumulation abgestandener Daten zu vermeiden, die falsche Positivbestimmungen signifikant vergrößern könnten.
  • Die Tabellen 432, 434 können als Toter-Block-Prädiktoren verwendet werden, weil Blockadressen in den Tabellen 432, 434 vor Kurzem invalidierte Adressen/Programmzähler angeben, die wahrscheinlich Blöcke umfassen, auf die oft entfernte Sockets 402R zugreifen, oder sich wahrscheinlich in einer Produzent-Konsument-Beziehung befinden. Solche Blöcke, die in den Tabellen 432, 434 angegeben sind, sollten nicht in dem Cache der letzten Ebene 416 oder intermediären Cache 418 zwischengespeichert werden, um Latenzverzögerungen dadurch zu vermeiden, dass das entfernte Socket 402R die Blockadressen in den Caches 416, 418 invalidieren muss. Die Programmzählertabelle 436 gibt Programmanweisungen an, die eine Blockadresse angefordert haben, die vor Kurzem in dem intermediären Cache 418 invalidiert wurden, indem ein entferntes Socket 402R auf die Daten zugreift, und von denen vorhergesagt würde, dass sie wahrscheinlich weitere Adressen anfordern, die bald durch ein entferntes Socket 402R invalidiert werden würden.
  • 5 zeigt eine Ausführungsform der Operationen, die in dem Controller 422 des Cache der letzten Ebene ausgeführt werden, um eine Anforderung, eine Blockadresse in dem Cache der letzten Ebene 416 zu invalidieren, von einem entfernten Socket 402R , das Zugriff auf die Blockadresse wünscht, zu verarbeiten. Als Reaktion (in Block 500) auf die Invalidierungsanforderung für die Blockadresse invalidiert der Controller 422 des Cache der letzten Ebene (in Block 502) den Block Daten in dem Cache der letzten Ebene 416. Wenn (in Block 504) der invalidierte Block modifizierte oder schmutzige Daten aufweist, schreibt der Controller 422 der letzten Ebene den modifizierten Block Daten in den intermediären Cache 418. Nach dem Schreiben des modifizierten Blocks (aus Block 506), oder wenn die invalidierte Blockadresse keine modifizierten Daten aufweist, benachrichtigt der Controller 422 des Cache der letzten Ebene (in Block 508) den Controller 424 des intermediären Cache, um die invalidierte Blockadresse in der LLC-Verfolgungstabelle 432 anzugeben. Das globale Verzeichnis 200 mit dem Eintrag 300i für den invalidierten Block kann dann (in Block 510) aktualisiert werden, um in Eintrag 208 des globalen Verzeichnisses 200 anzugeben, dass die Caches nun eine Kopie der Blockadresse aufweisen, die in dem privaten Cache 416 oder 418 invalidiert wurde.
  • Bei der Ausführungsform von 5 wird ein Track, der in dem Cache der letzten Ebene 416 invalidiert wird, nun in der Verfolgungstabelle 432 des Cache der letzten Ebene verfolgt, weil, da dieser Track gerade invalidiert wurde, er auch wahrscheinlich bald einer Lesen-für-Eigentümerschaft-Anforderung durch ein entferntes Socket 402R unterzogen und invalidiert wird. Dadurch kann diese Blockadresse nun als ein Toter-Block-Prädiktor für zukünftige Zugriffe auf den Track verfolgt werden, um nachfolgende Entscheidungen, den Track in dem intermediären Cache 418 zwischenzuspeichern, zu optimieren.
  • 6 zeigt eine Ausführungsform von Operationen, die durch den Controller 424 des intermediären Cache ausgeführt werden, um eine Füllanforderung von dem Controller 422 des Cache der letzten Ebene für einen Adressenblock zu verarbeiten, wie etwa wenn es einen Lesefehltreffer an dem Cache der letzten Ebene 416 für eine Blockadresse gibt, die durch die Speicherverwaltungseinheit (MMU) 410i durch einen Kern 408i angefordert wird. Bei Empfang einer Füllanforderung (in Block 600) bestimmt der Controller 424 des intermediären Cache (in Block 602), ob sich der angeforderte Block in dem intermediären Cache 418 befindet, z. B. ein Cache-Treffer. Wenn nicht, sendet der Controller 424 des intermediären Cache (in Block 604) eine Füllanforderung für den angeforderten Adressenblock zu dem Controller 426 des geteilten Speichers und gibt die empfangenen Daten für den Adressenblock an den Controller 422 des Cache der letzten Ebene zurück. Wenn (in Block 602) sich der angeforderte Block in dem intermediären Cache 418 befindet, wird der angeforderte Adressenblock (in Block 606) von dem intermediären Cache 418 an den Controller 422 des Cache der letzten Ebene zurückgegeben. Wenn von Block 604 oder 606 (in Block 608) aus die angeforderte Blockadresse in der LLC-Verfolgungstabelle 432 angegeben wird, ist die Blockadresse wahrscheinlich in dem intermediären Cache 418 tot, und wird wahrscheinlich als Teil einer Lesen-für-Eigentümerschaft-Anforderung durch ein entferntes Socket 402R , das exklusiven Zugang zu der Blockadresse wünscht, invalidiert. In einem solchen Fall wird der Block verworfen oder (in Block 610) nicht in dem intermediären Cache 418 gespeichert. Von der Nein-Verzweigung des Blocks 608 aus wird der Block für die angeforderte Adresse (in Block 612) in dem intermediären Cache 418 gespeichert, weil die Abwesenheit der angeforderten Adresse in der LLC-Verfolgungstabelle 432 angibt, dass die Blockadresse unwahrscheinlich einer unmittelbaren Invalidierungsanforderung von einem entfernten Socket 402R unterzogen wird und wahrscheinlich öfter lokal angefordert wird. Nach dem Verwerfen des Blocks (von Block 610) oder Speichern des Blocks (in Block 612) kann dann das globale Verzeichnis 200 mit dem Eintrag 200i für den ausgeräumten Block (in Block 614) aktualisiert werden, um anzugeben, dass die Caches 208 nun über eine Kopie der Blockadresse verfügen.
  • Bei der Ausführungsform von 6 wird die LLC-Verfolgungstabelle 432 verwendet, um Latenz für zukünftige Lesen-für-Eigentümerschaft-Anforderungen zu verringern, indem Zwischenspeicherung von Blöcken, die an den Cache der letzten Ebene 416 zurückgegeben werden, die wahrscheinlich tote Blöcke sind, und wahrscheinlich bald einer Invalidierungsanforderung unterzogen werden, um Eigentümerschaft für ein entferntes Socket 402R bereitzustellen, in dem intermediären Cache 418 vermieden wird. Auf diese Weise verringert die Ausführungsform von 6 Latenz für Cache-Kohärenzoperationen in dem System 400.
  • 7 zeigt eine Ausführungsform von Operationen, die durch den Controller 422 des Cache der letzten Ebene ausgeführt werden, um eine Operation zum Ausräumen eines Blocks aus dem Cache der letzten Ebene 416, bei dem es sich nicht um modifizierte (schmutzige) Daten handelt, zu verarbeiten, wie etwa um Platz für eine neue Blockadresse zur Zwischenspeicherung in dem Cache der letzten Ebene 416 zu schaffen. Bei der Verarbeitung (in Block 700) einer Anforderung zum Ausräumen einer Blockadresse aus dem Cache der letzten Ebene 416, bei dem es sich nicht um schmutzige Daten handelt, wird der Block Daten (in Block 712) in dem Cache der letzten Ebene 416 ausgeräumt. Wenn (in Block 714) die LLC-Verfolgungstabelle 432 die auszuräumende Blockadresse angibt, ist die Blockadresse wahrscheinlich ein toter Block, und der ausgeräumte Block wird nicht in einen Cache einer höheren Ebene, wie etwa dem intermediären Cache 418, kopiert. Wenn (in Block 714) die Blockadresse nicht in der LLC-Verfolgungstabelle 432 angegeben wird, wird sie in den intermediären Cache 418 kopiert. Nach dem Verwerfen des ausgeräumten Blocks (von Block 716) oder Zwischenspeichern des ausgeräumten Blocks (in Block 718), kann dann das globale Verzeichnis 200, das den Eintrag 200i für den ausgeräumten Block aufweist, (in Block 720) aktualisiert werden, um anzugeben, dass der Cache 208 nun eine Kopie des ausgeräumten Blocks aufweist. Bei bestimmten Ausführungsformen kann der Controller 422 des Cache der letzten Ebene bestimmen, ob sich eine Blockadresse in der LLC-Verfolgungstabelle 432 befindet, indem eine Anforderung zu dem Controller 424 des intermediären Caches gesendet wird, um zu bestimmen, ob sich die Adresse in der LLC-Verfolgungstabelle 432 befindet, und das Ergebnis dieser Anfrage an den Controller 422 des Cache der letzten Ebene zurückgegeben wird.
  • Bei der Ausführungsform von 7 wird die LLC-Verfolgungstabelle 432 verwendet, um Latenz für Lesen-für-Eigentümerschaft-Anforderungen durch entfernte Sockets zu verringern, indem ein aus dem Cache der letzten Ebene 416 ausgeräumter Block in einem Cache einer höheren Ebene 418, der wahrscheinlich durch ein entferntes Socket angefordert werden wird, wie durch seine Anwesenheit in der LLC-Verfolgungstabelle 432 angegeben, nicht zwischengespeichert wird. Das Entscheiden, einen ausgeräumten Block nicht zwischenzuspeichern, vermeidet Latenzverzögerungen für das entfernte Socket, den Block invalidieren zu müssen, der in dem Cache 416 zwischengespeichert ist, um Eigentümerschaft zu übernehmen. Da die Blockadresse wahrscheinlich ein toter Block ist, wird sie ferner wahrscheinlich nicht häufigen lokalen Anforderungen unterzogen, so dass Nicht-Zwischenspeicherung wahrscheinlich keine große Latenzauswirkung auf lokale Verarbeitungsanforderungen hat.
  • 8 zeigt eine Ausführungsform von Operationen für den Controller 422 des Cache der letzten Ebene zum Durchführen eines Rückschreibens einer modifizierten Blockadresse in dem Cache der letzten Ebene 416 als Reaktion auf eine andere Anforderung als eine Anforderung zum Invalidieren der Blockadresse für eine Lesen-für-Eigentümerschaft-Anforderung von einem entfernten Socket 402R , die mit Bezug auf 5 beschrieben wird. Ein Rückschreiben, das keine Invalidierung der Blockadresse erfordert, könnte durch eine Ausräumung einer modifizierten Blockadresse aus dem Cache der letzten Ebene 416, um Platz für neuere Daten in dem Cache der letzten Ebene 416 zu schaffen, oder durch eine Lesenanforderung von einem Kern eines anderen Socket 402R ausgelöst werden, wobei in diesem Fall die Blockadresse lokal zwischengespeichert sein kann und ihr Status in geteilt umgeändert wird. Bei Verarbeitung (in Block 800) eines Rückschreibens modifizierter Daten ist, wenn (in Block 802) die LLC-Verfolgungstabelle 432 die Blockadresse angibt, die Blockadresse ein toter Block, und die modifizierten Daten werden (in Block 804) in den geteilten Speicher 420 geschrieben, wobei der intermediäre Cache 418 umgangen wird, um so als geteilte Daten für andere Anforderungen verfügbar zu sein. Wenn sich (in Block 802) die Blockadresse nicht in der LLC-Verfolgungstabelle 432 befindet, werden die modifizierten Daten (in Block 806) in den intermediären Cache 418 geschrieben. Von Block 804 oder 806 aus kann dann (in Block 808) das globale Verzeichnis 200 mit dem Eintrag 200i für die dem Rückschreiben unterzogene Blockadresse aktualisiert werden, um anzugeben, dass die Caches 208 eine Kopie der Blockadressen 402i aufweisen.
  • 9 zeigt eine Ausführungsform von Operationen, die durch den Controller 424 des intermediären Cache ausgeführt werden, um eine Invalidierungsanforderung für eine Blockadresse in dem intermediären Cache 118 von einem entfernten Socket 402R , das exklusiven Zugang zu der Blockadresse wünscht, zu verarbeiten. Bei Empfang (in Block 900) der Invalidierungsanforderung invalidiert der Controller 424 des intermediären Cache (in Block 902) den Block Daten, d. h. die Cache-Linie, in dem intermediären Cache 418 und gibt (in Block 904) die Blockadresse in der Verfolgungstabelle 434 des intermediären Cache an, die für zukünftige Verarbeitung angibt, dass der Block ein toter Block ist und wahrscheinlich bald einer Lesen-für-Eigentümerschaft-Anforderung von einem entfernten Socket 402R unterzogen wird.
  • 10 zeigt eine Ausführungsform von Operationen, die durch den Controller 424 des intermediären Cache ausgeführt werden, um eine Füllanforderung von dem Controller 422 der letzten Ebene zu verarbeiten, die zum Beispiel angefordert wird, wenn es einen Lese-Fehltreffer auf den Cache der letzten Ebene 416 gibt. Bei Empfang (in Block 1000) der Füllanforderung sendet, wenn (in Block 1002) sich die angeforderte Blockadresse nicht in dem intermediären Cache 418 befindet, der Controller 424 des intermediären Cache (in Block 1004) dann eine Füllanforderung zu dem Controller 426 des geteilten Speichers für den angeforderten Block. Wenn (in Block 1002) sich die angeforderte Blockadresse in dem intermediären Cache 418 befindet, gibt der Controller 424 des intermediären Cache (in Block 1006) den Block für die angeforderte Adresse aus dem intermediären Cache 418 an den Controller 422 des Cache der letzten Ebene zurück. Wenn (in Block 1008) sich die Adresse des angeforderten Blocks in der Verfolgungstabelle 434 des intermediären Cache befindet, benachrichtigt der Controller 424 des intermediären Cache (in Block 1010) dann den Controller 422 des Cache der letzten Ebene, um den Programmzähler einer anfordernden Anweisung zu verfolgen, die die angeforderte Blockadresse angefordert hat, wodurch bewirkt wird, dass sie im intermediären Cache 118 gespeichert wird, da diese anfordernde Anweisung Teil eines Produzent-Konsument-Teil-Programms sein kann. Der Controller 424 des intermediären Cache verwirft (in Block 1012) den angeforderten Block, der nicht im intermediären Cache 418 zu speichern ist, so dass der intermediäre Cache 418 umgangen wird. Wenn (in Block 1008) die angeforderte Adresse nicht in der Verfolgungstabelle 434 des intermediären Cache angegeben ist, wird der angeforderte Block im intermediären Cache 418 gespeichert. Von Block 1012 oder 1014 aus kann dann (in Block 1016) das globale Verzeichnis 200 mit dem Eintrag 200i für die angeforderte Blockadresse, die zu invalidieren ist, aktualisiert werden, um anzugeben, dass die Caches 208 nun eine Kopie der Blockadressen aufweisen.
  • Bei den Ausführungsformen von Operationen von 9 und 10 verwendet der Controller 424 des intermediären Cache die Verfolgungstabelle 434 des intermediären Cache, um abhängig davon, ob der Block wahrscheinlich ein toter Block ist, der einer Lesen-für-Eigentümerschaft-Anforderung von einem entfernten Socket 402R unterzogen wird, Daten in dem intermediären Cache 418 zwischengespeichert gehalten werden sollen.
  • 11 zeigt eine Ausführungsform von Operationen, die durch den Controller 422 des Cache der letzten Ebene ausgeführt werden, um eine Füllanforderung für einen Prozessor-L2-Cache 414i von einer MMU 410i unter Verwendung der Programmzählertabelle 436 zum Umgehen mit wahrscheinlich toten Blöcken zu verarbeiten. Bei Empfang (in Block 1100) einer Füllanforderung von einer MMU 410i bestimmt (in Block 1102) der Controller 422 des Cache der letzten Ebene, ob sich die angeforderte Blockadresse in dem Cache der letzten Ebene 416 befindet. Wenn nicht wird (in Block 1104) eine Füllanforderung zu dem Controller 424 des intermediären Cache gesendet, um die angeforderten Daten abzurufen. Der Controller 424 des intermediären Cache kann dann die Operationen in 10 ausführen, um die Füllanforderung abzuwickeln. Wenn (in Block 1102) sich die angeforderte Blockadresse in dem Cache der letzten Ebene 416 befindet, wird der angeforderte Block (in Block 1106) von dem Cache der letzten Ebene 416 an den Prozessor-Cache 414i zurückgegeben. Von Block 1104 oder 1106 aus verwirft, wenn (in Block 1108) der Programmzähler der Anweisung, die den Block anfordert, mit einem Programmzähler in der Programmzähler-Verfolgungstabelle 436 übereinstimmt, der Controller 422 des Cache der letzten Ebene (in Block 1110) dann den angeforderten Block, um den Cache der letzten Ebene 416 zu umgehen, weil der Block wahrscheinlich ein toter Block ist, da der Programmzähler der Anweisung, die zuvor die Blockadresse angefordert hat, dazu geführt hat, dass die Blockadresse invalidiert wird, um Eigentümerschaft für ein entferntes Socket 402R bereitzustellen. Wenn (in Block 1108) der Programmzähler nicht in der Programmzähler-Verfolgungstabelle 436 aufgelistet ist, wird der Block für die angeforderte Blockadresse (in Block 1112) in dem Cache der letzten Ebene 416 gespeichert. Von Block 1110 oder 1112 aus kann dann (in Block 1114) das globale Verzeichnis 200 mit dem Eintrag 200i für die angeforderte Blockadresse aktualisiert werden, um anzugeben, dass die Caches 208 nun eine Kopie der Blockadressen aufweisen.
  • Bei den beschriebenen Ausführungsformen von 9-11 wird Latenz für Lesen-für-Eigentümerschaft-Anforderungen an den Cache der letzten Ebene 416 von den entfernten Sockets 402R verringert, weil die Programmzähler-Verfolgungstabelle 436 eine Toter-Block-Vorhersage bereitstellt, indem Informationen über die Anweisungen, die einen Track angefordert haben, der im intermediären Cache 418 invalidiert wurde, unterhalten werden. Anweisungen, deren Programmzähler sich in der Tabelle 44 befindet, weisen eine hohe Wahrscheinlichkeit auf, weitere Blockadressen anzufordern, die durch ein entferntes Socket 102R , das Eigentümerschaft dieser Blockadresse wünscht, invalidiert werden. Die Konsument-Produzent-Blockadresse nicht in dem Cache der letzten Ebene 416 zu halten, die durch Anweisungen mit einem in der Tabelle 446 angegebenen Programmzähler angefordert wird, vermeidet also Latenzverzögerungen für das entfernte Socket 102R beim Erhalten der Eigentümerschaft der Blockadresse, weil das entfernte Socket 102R nicht darauf warten muss, dass die Blockadressen in den Caches 416 und 418 invalidiert werden.
  • Bei einer Ausführungsform kann das System 400 nur eine LLC-Verfolgungstabelle 432 und die Verfolgungstabelle 434 des intermediären Cache und die Programmzählertabelle 436 nicht umfassen oder nur die LLC-Verfolgungstabelle 432 und die Verfolgungstabelle 434 des intermediären Cache und nicht die Programmzählertabelle 436 umfassen oder alle drei Verfolgungstabellen 432, 434, 436 umfassen.
  • Beschriebene Ausführungsformen werden mit Bezug auf die Bereitstellung hierarchischer Zwischenspeicherung für Verarbeitungsknoten, die Sockets 1021 ...102n umfassen, beschrieben. Bei alternativen Ausführungsformen kann das Zwischenspeicherungssystem für andere Verarbeitungsknoten als Sockets eingesetzt werden.
  • Bei beschriebenen Ausführungsformen wird Cache-Kohärenz unter den Sockets unter Verwendung einer Kohärenz auf Verzeichnisbasis aufrechterhalten, wobei die Sockets Zugang mit Bezug auf ein geteiltes globales Verzeichnis koordinieren. Bei einer alternativen Ausführungsform können die Sockets ein anderes Kohärenzprotokoll verwenden, wie etwa ein Snoopy-Kohärenzprotokoll, wobei die Sockets lokale DRAM-Cache-Fehltreffer an die anderen Sockets rundsenden, um Zugang zu Blöcken anzufordern, die in entfernten Sockets gehalten werden, und Kopien des angeforderten Blocks in den privaten Caches der entfernten Sockets zu invalidieren.
  • 12 zeigt eine Ausführungsform eines Systems 1200, in dem die Systeme 100 und 400 von 1 und 4 verwendet werden können, wobei der Prozessor 1204 die Sockets 1021 , 402i umfasst und der Systemspeicher 1208 den kombinierten geteilten Speicher 120, 420 auf allen Sockets umfasst. Das System 600 kann ferner eine Speicherungsvorrichtung 1210 zur langfristigen Speicherung umfassen. Die Sockets können auch mit Vorrichtungen 1212a, 1212b für Eingabe/Ausgabe (E/A) kommunizieren, die Eingabevorrichtungen, Anzeigevorrichtungen, Grafikkarten, Ports, Netzwerkschnittstellen usw. umfassen können.
  • Es versteht sich, dass Erwähnung von einer Struktur oder einem Charakteristikum, die bzw. das in Verbindung mit der Ausführungsform beschrieben wird, in mindestens einer Ausführungsform der vorliegenden Offenbarung enthalten ist. Deshalb wird betont und sollte beachtet werden, dass zwei oder mehr Erwähnungen von „einer Ausführungsform“ oder „eine Ausführungsform“ oder „einer alternativen Ausführungsform“ in verschiedenen Teilen der vorliegenden Patentschrift sich nicht unbedingt immer auf dieselbe Ausführungsform beziehen. Ferner können die konkreten Merkmale, Strukturen oder Eigenschaften so kombiniert werden, wie es in einer oder mehreren Ausführungsformen der Erfindung geeignet ist.
  • Ähnlich versteht sich, dass in der obigen Beschreibung von Ausführungsformen der Erfindung verschiedene Merkmale manchmal in einer einzigen Ausführungsform, Figur oder Beschreibung davon gruppiert sind, um die Offenbarung zu straffen, als Hilfe beim Verständnis eines oder mehrerer der verschiedenen erfindungsgemäßen Aspekte. Dieses Offenbarungsverfahren ist jedoch nicht als Absicht widerspiegelnd zu deuten, dass der beanspruchte Gegenstand mehr Merkmale erfordert, als ausdrücklich in jedem Anspruch angeführt sind. Wie die folgenden Ansprüche widerspiegeln, sind stattdessen erfindungsgemäße Aspekte in weniger als allen Merkmalen einer einzigen obigen offenbarten Ausführungsform begründet. Die der ausführlichen Beschreibung folgenden Ansprüche werden somit hierdurch ausdrücklich in die vorliegende ausführliche Beschreibung aufgenommen.
  • BEISPIELE
  • Beispiel 1 ist eine Vorrichtung zum Zwischenspeichern von Daten in einem ersten Cache und einem zweiten Cache, die Daten aus einem geteilten Speicher in einem lokalen Prozessorknoten zwischenspeichern, wobei der geteilte Speicher mindestens einem entfernten Prozessorknoten zugänglich ist. Ein Cache-Controller verwaltet den ersten Cache zum Bestimmen als Reaktion auf Ausräumung eines Blocks aus dem ersten Cache, ob wahrscheinlicher durch einen des mindestens einen entfernten Prozessorknotens als durch den lokalen Prozessorknoten auf den Block zugegriffen wird; Schreiben des Blocks in den zweiten Cache, wenn bestimmt wird, dass wahrscheinlicher durch den lokalen Prozessorknoten als durch einen des mindestens einen entfernten Prozessorknotens auf den Block zugegriffen wird; und Schreiben des Blocks in den geteilten Speicher, wenn bestimmt wird, dass wahrscheinlicher durch den einen des mindestens einen entfernten Prozessorknotens als durch den lokalen Prozessorknoten auf den Block zugegriffen wird, ohne in den zweiten Cache zu schreiben.
  • In Beispiel 2 kann der Gegenstand der Beispiele 1 und 3-7 gegebenenfalls umfassen, dass Bestimmen, ob wahrscheinlicher durch einen des mindestens einen entfernten Prozessorknotens auf den Block zugegriffen wird, Folgendes umfasst: Verarbeiten mehrerer Attribute in Bezug auf den Block, um Attributwerte für die Attribute zu bestimmen; Verarbeiten einer Tabelle, die für jeden der bestimmten Attributwerte ein Konfidenzniveau angibt, das angibt, ob wahrscheinlicher durch einen des mindestens einen entfernten Prozessorknotens als durch den lokalen Prozessorknoten auf den Block zugegriffen wird; und Bestimmen, ob ein Gesamt-Konfidenzniveau auf der Basis der bestimmten Konfidenzniveaus für die bestimmten Attributwerte eine Konfidenzschwelle überschreitet, wobei der Block in den zweiten Cache geschrieben wird, wenn bestimmt wird, dass das Konfidenzniveau die Konfidenzschwelle überschreitet, und wobei der Block in den geteilten Speicher geschrieben wird und nicht in den zweiten Cache geschrieben wird, wenn bestimmt wird, dass das Konfidenzniveau die Konfidenzschwelle nicht überschreitet.
  • In Beispiel 3 kann der Gegenstand der Beispiele 1, 2 und 4-7 gegebenenfalls umfassen, dass der Cache-Controller ferner zu Folgendem dient: als Reaktion auf eine Invalidierungsanforderung von einem des mindestens einen entfernten Prozessorknotens, einen modifizierten Block, der modifizierte Daten aufweist, zu invalidieren, Angeben einer Adresse des modifizierten Blocks in einer Verfolgungstabelle und Schreiben von Daten für den modifizierten Block in den geteilten Speicher, wobei Bestimmen, ob wahrscheinlicher durch einen des mindestens einen entfernten Prozessorknotens auf den Block zugegriffen wird, bestimmt, ob die Verfolgungstabelle die Adresse des modifizierten Blocks angibt.
  • In Beispiel 4 kann der Gegenstand der Beispiele 1-3 und 5-7 gegebenenfalls umfassen, dass der Cache-Controller einen ersten Cache-Controller umfasst. Der zweite Cache wird durch einen zweiten Cache-Controller gesteuert. Das Angeben der Adresse des modifizierten Blocks in der Verfolgungstabelle sendet die Adresse des modifizierten Blocks zur Angabe in der Verfolgungstabelle zu dem zweiten Cache-Controller.
  • In Beispiel 5 kann der Gegenstand der Beispiele 1-4 und 6-7 gegebenenfalls umfassen, dass der Cache-Controller einen ersten Cache-Controller umfasst. Der zweite Cache wird durch einen zweiten Cache-Controller gesteuert und der geteilte Speicher wird durch einen Controller des geteilten Speichers gesteuert. Der zweite Cache-Controller dient ferner zum Empfangen einer Füllanforderung, von dem ersten Cache-Controller als Reaktion auf einen Lese-Fehltreffer in dem ersten Cache für eine angeforderte Blockadresse; Senden einer Füllanforderung zu dem geteilten Speicher für die angeforderte Blockadresse, wenn die angeforderte Blockadresse nicht in dem zweiten Cache gespeichert ist; Zurückgeben von Daten für die angeforderte Blockadresse an den ersten Cache-Controller aus dem zweiten Cache oder aus der Füllanforderung an den geteilten Speicher; Bestimmen, ob sich die angeforderte Blockadresse in der Verfolgungstabelle befindet; und Speichern der Daten für die angeforderte Blockadresse in dem zweiten Cache, wenn bestimmt wird, dass sich die angeforderte Blockadresse nicht in der Verfolgungstabelle befindet. Die Daten für die angeforderte Blockadresse werden nicht in dem zweiten Cache gespeichert, wenn bestimmt wird, dass die angeforderte Blockadresse nicht in der Verfolgungstabelle angegeben ist.
  • In Beispiel 6 kann der Gegenstand der Beispiele 1-5 und 7 gegebenenfalls umfassen, dass der erste Cache-Controller ferner zu Folgendem dient: als Reaktion auf eine Ausräumanforderung, eine Blockadresse aus dem ersten Cache auszuräumen, Bestimmen, ob sich die Blockadresse in der Verfolgungstabelle befindet; und Schreiben von Daten für die Blockadresse in den zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse nicht in der Verfolgungstabelle befindet. Die Daten für die Blockadresse werden nicht in den zweiten Cache geschrieben, wenn bestimmt wird, dass sich die Blockadresse in der Verfolgungstabelle befindet.
  • In Beispiel 7 kann der Gegenstand der Beispiele 1-6 gegebenenfalls umfassen, dass der erste Cache-Controller ferner zu Folgendem dient: als Reaktion auf ein Rückschreiben für modifizierte Daten für eine Blockadresse aus dem ersten Cache Bestimmen, ob sich die Blockadresse in der Verfolgungstabelle befindet; Schreiben der modifizierten Daten in den zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse für die modifizierten Daten nicht in der Verfolgungstabelle befindet; und Schreiben der modifizierten Daten in den geteilten Speicher unter Umgehung des zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse für die modifizierten Daten in der Verfolgungstabelle befindet.
  • Beispiel 8 ist eine Vorrichtung zum Zwischenspeichern von Daten in einem ersten Cache und einem zweiten Cache, die Daten aus einem geteilten Speicher in einem lokalen Prozessorknoten zwischenspeichern. Der erste Cache zwischenspeichert Daten für einen Prozessor-Cache in dem lokalen Prozessorknoten, und der geteilte Speicher ist mindestens einem entfernten Prozessorknoten zugänglich. Ein erster Cache-Controller verwaltet den ersten Cache. Ein zweiter Cache-Controller verwaltet den zweiten Cache zum als Reaktion auf eine Invalidierungsanforderung von einem des mindestens einen entfernten Prozessorknotens, einen Block zu invalidieren, Angeben einer Adresse des zu invalidierenden Blocks in einer Verfolgungstabelle eines intermediären Cache; als Reaktion auf eine erste Cache-Füllanforderung für einen angeforderten Block von dem ersten Cache-Controller Bestimmen, ob sich eine Adresse des angeforderten Blocks in der Verfolgungstabelle des intermediären Cache befindet; und Benachrichtigen des ersten Cache-Controllers, einen Programmzähler einer anfordernden Anweisung, die den angeforderten Block anfordert, zu verfolgen. Der erste Cache-Controller gibt den Programmzähler der anfordernden Anweisung in einer Tabelle verfolgter Programmzähler an, der zu verwenden ist, um zu bestimmen, ob als Reaktion auf eine Füllanforderung für den Prozessor-Cache Daten in dem ersten Cache und dem zweiten Cache zu speichern sind.
  • In Beispiel 9 kann der Gegenstand der Beispiele 8 und 10 gegebenenfalls umfassen, dass der angeforderte Block einen ersten angeforderten Block umfasst, die Adresse eine erste Adresse umfasst und die anfordernde Anweisung eine erste anfordernde Anweisung umfasst. Der erste Cache-Controller dient ferner zu Folgendem: Empfangen einer Füllanforderung für einen zweiten angeforderten Block an einer zweiten Adresse für den Prozessor-Cache für eine zweite anfordernde Anweisung; Bestimmen, ob ein Programmzähler der zweiten anfordernden Anweisung in der Tabelle verfolgter Programmzähler angegeben ist; Zurückgeben von Daten für den zweiten angeforderten Block an den Prozessor-Cache als Reaktion auf die Füllanforderung für den zweiten angeforderten Block; und Verwenden der Tabelle verfolgter Programmzähler, um zu bestimmen, ob die Daten für den zweiten angeforderten Block in dem ersten Cache zwischenzuspeichern sind.
  • In Beispiel 10 kann der Gegenstand der Beispiele 8 und 9 gegebenenfalls umfassen, dass Verwenden der Tabelle verfolgter Programmzähler, um zu bestimmen, ob die Daten für den zweiten angeforderten Block in dem ersten Cache und dem zweiten Cache zwischenzuspeichern sind, Folgendes soll: Zwischenspeichern der Daten für den zweiten angeforderten Block in dem ersten Cache und dem zweiten Cache, wenn bestimmt wird, dass der Programmzähler der zweiten anfordernden Anweisung nicht in der Tabelle verfolgter Programmzähler angegeben ist. Die Daten für den zweiten angeforderten Block werden nicht in dem ersten und zweiten Cache zwischengespeichert, wenn bestimmt wird, dass der Programmzähler der zweiten anfordernden Anweisung in der Tabelle verfolgter Programmzähler angegeben ist.
  • Beispiel 11 ist ein System mit mehreren Sockets, die über eine Schnittstelle kommunizieren. Jedes Socket der Sockets umfasst mindestens einen lokalen Verarbeitungskern, einen den Sockets zugänglichen geteilten Speicher, einen ersten Cache, einen zweiten Cache und einen ersten Cache-Controller, der den ersten Cache verwaltet. Der erste Cache-Controller dient zum Bestimmen als Reaktion auf Ausräumung eines Blocks aus dem ersten Cache, ob wahrscheinlicher durch mindestens ein entferntes Socket, das ein anderes der Sockets als den mindestens einen lokalen Prozessorkern umfasst, auf den Block zugegriffen wird; Schreiben des Blocks in den zweiten Cache, wenn bestimmt wird, dass wahrscheinlicher durch den mindestens einen lokalen Prozessorkern als durch das mindestens eine entfernte Socket auf den Block zugegriffen wird; und Schreiben des Blocks in den geteilten Speicher, wenn bestimmt wird, dass wahrscheinlicher durch das mindestens eine entfernte Socket als durch den lokalen Prozessorkern auf den Block zugegriffen wird, ohne in den zweiten Cache zu schreiben.
  • In Beispiel 12 kann der Gegenstand der Beispiele 11 und 13-17 gegebenenfalls umfassen, dass Bestimmen, ob wahrscheinlicher durch eines des mindestens einen entfernten Socket auf den Block zugegriffen wird, Folgendes umfasst: Verarbeiten mehrerer Attribute in Bezug auf den Block, um Attributwerte für die Attribute zu bestimmen; Verarbeiten einer Tabelle, die für jeden der bestimmten Attributwerte ein Konfidenzniveau angibt, das angibt, ob wahrscheinlicher durch das mindestens eine entfernte Socket als durch den mindestens einen lokalen Prozessorkern auf den Block zugegriffen wird; und Bestimmen, ob ein Gesamt-Konfidenzniveau auf der Basis der bestimmten Konfidenzniveaus für die bestimmten Attributwerte eine Konfidenzschwelle überschreitet. Der Block wird in den zweiten Cache geschrieben, wenn bestimmt wird, dass das Konfidenzniveau die Konfidenzschwelle überschreitet, und wobei der Block in den geteilten Speicher geschrieben wird und nicht in den zweiten Cache geschrieben wird, wenn bestimmt wird, dass das Konfidenzniveau die Konfidenzschwelle nicht überschreitet.
  • In Beispiel 13 kann der Gegenstand der Beispiele 11, 12 und 14-17 gegebenenfalls umfassen, dass der erste Cache-Controller ferner zu Folgendem dient: als Reaktion auf eine Invalidierungsanforderung von einem des mindestens einen entfernten Socket, einen modifizierten Block, der modifizierte Daten aufweist, zu invalidieren, Angeben einer Adresse des modifizierten Blocks in einer Verfolgungstabelle und Schreiben von Daten für den modifizierten Block in den geteilten Speicher. Bestimmen, ob wahrscheinlicher durch das mindestens eine entfernte Socket auf den Block zugegriffen wird, bestimmt, ob die Verfolgungstabelle die Adresse des modifizierten Blocks angibt.
  • In Beispiel 14 kann der Gegenstand der Beispiele 11-13 und 15-17 gegebenenfalls umfassen, dass der zweite Cache durch einen zweiten Cache-Controller gesteuert wird. Das Angeben der Adresse des modifizierten Blocks in der Verfolgungstabelle sendet die Adresse des modifizierten Blocks zur Angabe in der Verfolgungstabelle zu dem zweiten Cache-Controller.
  • In Beispiel 15 kann der Gegenstand der Beispiele 11-14 und 16-17 gegebenenfalls umfassen, dass jedes Socket ferner einen zweiten Cache-Controller zum Steuern des zweiten Cache und einen Controller geteilten Speichers zum Steuern des geteilten Speichers umfasst. Der zweite Cache-Controller dient ferner zu Folgendem: Empfangen einer Füllanforderung, von dem ersten Cache-Controller als Reaktion auf einen Lese-Fehltreffer in dem ersten Cache für eine angeforderte Blockadresse; Senden einer Füllanforderung zu dem geteilten Speicher für die angeforderte Blockadresse, wenn die angeforderte Blockadresse nicht in dem zweiten Cache gespeichert ist; Zurückgeben von Daten für die angeforderte Blockadresse an den ersten Cache-Controller aus dem zweiten Cache oder aus der Füllanforderung an den geteilten Speicher; Bestimmen, ob sich die angeforderte Blockadresse in der Verfolgungstabelle befindet; und Speichern der Daten für die angeforderte Blockadresse in dem zweiten Cache, wenn bestimmt wird, dass sich die angeforderte Blockadresse nicht in der Verfolgungstabelle befindet. Die Daten für die angeforderte Blockadresse werden nicht in dem zweiten Cache gespeichert, wenn bestimmt wird, dass die angeforderte Blockadresse nicht in der Verfolgungstabelle angegeben ist.
  • In Beispiel 16 kann der Gegenstand der Beispiele 11-15 und 17 gegebenenfalls umfassen, dass der erste Cache-Controller ferner zu Folgendem dient: als Reaktion auf eine Ausräumanforderung, eine Blockadresse aus dem ersten Cache auszuräumen, Bestimmen, ob sich die Blockadresse in der Verfolgungstabelle befindet; und Schreiben von Daten für die Blockadresse in den zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse nicht in der Verfolgungstabelle befindet. Die Daten für die Blockadresse werden nicht in den zweiten Cache geschrieben, wenn bestimmt wird, dass sich die Blockadresse in der Verfolgungstabelle befindet.
  • In Beispiel 17 kann der Gegenstand der Beispiele 11-16 gegebenenfalls umfassen, dass der erste Cache-Controller ferner zu Folgendem dient: als Reaktion auf ein Rückschreiben für modifizierte Daten für eine Blockadresse aus dem ersten Cache Bestimmen, ob sich die Blockadresse in der Verfolgungstabelle befindet; Schreiben der modifizierten Daten in den zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse für die modifizierten Daten nicht in der Verfolgungstabelle befindet; und Schreiben der modifizierten Daten in den geteilten Speicher unter Umgehung des zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse für die modifizierten Daten in der Verfolgungstabelle befindet.
  • Beispiel 18 ist ein System, umfassend: mehrere Sockets, die über eine Schnittstelle kommunizieren. Jedes Socket der Sockets umfasst Folgendes: mindestens einen lokalen Verarbeitungskern; einen den Sockets zugänglichen geteilten Speicher; einen ersten Cache; einen zweiten Cache; einen ersten Cache-Controller, der den ersten Cache verwaltet; und einen zweiten Cache-Controller, der den zweiten Cache verwaltet. Der zweite Cache-Controller ist zum als Reaktion auf eine Invalidierungsanforderung von einem des mindestens einen entfernten Socket, einen Block zu invalidieren, Angeben einer Adresse des zu invalidierenden Blocks in einer Verfolgungstabelle eines intermediären Cache; als Reaktion auf eine erste Cache-Füllanforderung für einen angeforderten Block von dem ersten Cache-Controller Bestimmen, ob sich eine Adresse des angeforderten Blocks in der Verfolgungstabelle des intermediären Cache befindet; und Benachrichtigen des ersten Cache-Controllers, einen Programmzähler einer anfordernden Anweisung, die den angeforderten Block anfordert, zu verfolgen. Der erste Cache-Controller gibt den Programmzähler der anfordernden Anweisung in einer Tabelle verfolgter Programmzähler an, der zu verwenden ist, um zu bestimmen, ob als Reaktion auf eine Füllanforderung für den Prozessor-Cache Daten in dem ersten Cache und dem zweiten Cache zu speichern sind.
  • In Beispiel 19 kann der Gegenstand der Beispiele 18 und 20 gegebenenfalls umfassen, dass der angeforderte Block einen ersten angeforderten Block umfasst, die Adresse eine erste Adresse umfasst und wobei die anfordernde Anweisung eine erste anfordernde Anweisung umfasst. Der erste Cache-Controller dient ferner zu Folgendem: Empfangen einer Füllanforderung für einen zweiten angeforderten Block an einer zweiten Adresse für den Prozessor-Cache für eine zweite anfordernde Anweisung; Bestimmen, ob ein Programmzähler der zweiten anfordernden Anweisung in der Tabelle verfolgter Programmzähler angegeben ist; Zurückgeben von Daten für den zweiten angeforderten Block an den Prozessor-Cache als Reaktion auf die Füllanforderung für den zweiten angeforderten Block; und Verwenden der Tabelle verfolgter Programmzähler, um zu bestimmen, ob die Daten für den zweiten angeforderten Block in dem ersten Cache zwischenzuspeichern sind.
  • In Beispiel 20 kann der Gegenstand der Beispiele 18 und 19 gegebenenfalls umfassen, dass Verwenden der Tabelle verfolgter Programmzähler, um zu bestimmen, ob die Daten für den zweiten angeforderten Block in dem ersten Cache und dem zweiten Cache zwischenzuspeichern sind, Folgendes soll: Zwischenspeichern der Daten für den zweiten angeforderten Block in dem ersten Cache und dem zweiten Cache, wenn bestimmt wird, dass der Programmzähler der zweiten anfordernden Anweisung nicht in der Tabelle verfolgter Programmzähler angegeben ist. Die Daten für den zweiten angeforderten Block werden nicht in dem ersten und zweiten Cache zwischengespeichert, wenn bestimmt wird, dass der Programmzähler der zweiten anfordernden Anweisung in der Tabelle verfolgter Programmzähler angegeben ist.
  • Vorrichtung mit Mitteln zum Ausführen eines Verfahrens nach einem der vorhergehenden Ansprüche.
  • Maschinenlesbare Speicherung, die maschinenlesbare Anweisungen zur Implementierung eines Verfahrens oder Realisierung einer Vorrichtung nach einem der vorhergehenden Ansprüche, wenn sie ausgeführt werden, umfasst.

Claims (22)

  1. Vorrichtung zum Zwischenspeichern von Daten in einem ersten Cache und einem zweiten Cache, die Daten aus einem geteilten Speicher in einem lokalen Prozessorknoten zwischenspeichern, wobei der geteilte Speicher mindestens einem entfernten Prozessorknoten zugänglich ist, umfassend: einen Cache-Controller, der den ersten Cache verwaltet zum Bestimmen als Reaktion auf Ausräumung eines Blocks aus dem ersten Cache, ob wahrscheinlicher durch einen des mindestens einen entfernten Prozessorknotens als durch den lokalen Prozessorknoten auf den Block zugegriffen wird; Schreiben des Blocks in den zweiten Cache, wenn bestimmt wird, dass wahrscheinlicher durch den lokalen Prozessorknoten als durch einen des mindestens einen entfernten Prozessorknotens auf den Block zugegriffen wird; und Schreiben des Blocks in den geteilten Speicher, wenn bestimmt wird, dass wahrscheinlicher durch den einen des mindestens einen entfernten Prozessorknotens als durch den lokalen Prozessorknoten auf den Block zugegriffen wird, ohne in den zweiten Cache zu schreiben.
  2. Vorrichtung nach Anspruch 1, wobei Bestimmen, ob wahrscheinlicher durch einen des mindestens einen entfernten Prozessorknotens auf den Block zugegriffen wird, Folgendes umfasst: Verarbeiten mehrerer Attribute in Bezug auf den Block, um Attributwerte für die Attribute zu bestimmen; Verarbeiten einer Tabelle, die für jeden der bestimmten Attributwerte ein Konfidenzniveau angibt, das angibt, ob wahrscheinlicher durch einen des mindestens einen entfernten Prozessorknotens als durch den lokalen Prozessorknoten auf den Block zugegriffen wird; und Bestimmen, ob ein Gesamt-Konfidenzniveau auf der Basis der bestimmten Konfidenzniveaus für die bestimmten Attributwerte eine Konfidenzschwelle überschreitet, wobei der Block in den zweiten Cache geschrieben wird, wenn bestimmt wird, dass das Konfidenzniveau die Konfidenzschwelle überschreitet, und wobei der Block in den geteilten Speicher geschrieben wird und nicht in den zweiten Cache geschrieben wird, wenn bestimmt wird, dass das Konfidenzniveau die Konfidenzschwelle nicht überschreitet.
  3. Vorrichtung nach Anspruch 1 oder 2, wobei der Cache-Controller ferner zu Folgendem dient: als Reaktion auf eine Invalidierungsanforderung von einem des mindestens einen entfernten Prozessorknotens, einen modifizierten Block, der modifizierte Daten aufweist, zu invalidieren, Angeben einer Adresse des modifizierten Blocks in einer Verfolgungstabelle und Schreiben von Daten für den modifizierten Block in den geteilten Speicher, wobei Bestimmen, ob wahrscheinlicher durch einen des mindestens einen entfernten Prozessorknotens auf den Block zugegriffen wird, bestimmt, ob die Verfolgungstabelle die Adresse des modifizierten Blocks angibt.
  4. Vorrichtung nach Anspruch 3, wobei der Cache-Controller einen ersten Cache-Controller umfasst, wobei der zweite Cache durch einen zweiten Cache-Controller gesteuert wird, wobei Angeben der Adresse des modifizierten Blocks in der Verfolgungstabelle die Adresse des modifizierten Blocks zur Angabe in der Verfolgungstabelle zu dem zweiten Cache-Controller sendet.
  5. Vorrichtung nach Anspruch 3, wobei der Cache-Controller einen ersten Cache-Controller umfasst, wobei der zweite Cache durch einen zweiten Cache-Controller gesteuert wird und wobei der geteilte Speicher durch einen Controller des geteilten Speichers gesteuert wird, wobei der zweite Cache-Controller ferner zu Folgendem dient: Empfangen einer Füllanforderung, von dem ersten Cache-Controller als Reaktion auf einen Lese-Fehltreffer in dem ersten Cache für eine angeforderte Blockadresse; Senden einer Füllanforderung zu dem geteilten Speicher für die angeforderte Blockadresse, wenn die angeforderte Blockadresse nicht in dem zweiten Cache gespeichert ist; Zurückgeben von Daten für die angeforderte Blockadresse an den ersten Cache-Controller aus dem zweiten Cache oder aus der Füllanforderung an den geteilten Speicher; Bestimmen, ob sich die angeforderte Blockadresse in der Verfolgungstabelle befindet; und Speichern der Daten für die angeforderte Blockadresse in dem zweiten Cache, wenn bestimmt wird, dass sich die angeforderte Blockadresse nicht in der Verfolgungstabelle befindet, wobei die Daten für die angeforderte Blockadresse nicht in dem zweiten Cache gespeichert werden, wenn bestimmt wird, dass die angeforderte Blockadresse nicht in der Verfolgungstabelle angegeben ist.
  6. Vorrichtung nach Anspruch 3, wobei der erste Cache-Controller ferner zu Folgendem dient: als Reaktion auf eine Ausräumanforderung, eine Blockadresse aus dem ersten Cache auszuräumen, Bestimmen, ob sich die Blockadresse in der Verfolgungstabelle befindet; und Schreiben von Daten für die Blockadresse in den zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse nicht in der Verfolgungstabelle befindet, wobei die Daten für die Blockadresse nicht in den zweiten Cache geschrieben werden, wenn bestimmt wird, dass sich die Blockadresse in der Verfolgungstabelle befindet.
  7. Vorrichtung nach Anspruch 3, wobei der erste Cache-Controller ferner zu Folgendem dient: als Reaktion auf ein Rückschreiben für modifizierte Daten für eine Blockadresse aus dem ersten Cache Bestimmen, ob sich die Blockadresse in der Verfolgungstabelle befindet; Schreiben der modifizierten Daten in den zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse für die modifizierten Daten nicht in der Verfolgungstabelle befindet; und Schreiben der modifizierten Daten in den geteilten Speicher unter Umgehung des zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse für die modifizierten Daten in der Verfolgungstabelle befindet.
  8. Vorrichtung zum Zwischenspeichern von Daten in einem ersten Cache und einem zweiten Cache, die Daten aus einem geteilten Speicher in einem lokalen Prozessorknoten zwischenspeichern und wobei der erste Cache Daten für einen Prozessor-Cache in dem lokalen Prozessorknoten zwischenspeichert, wobei der geteilte Speicher mindestens einem entfernten Prozessorknoten zugänglich ist, umfassend: einen ersten Cache-Controller, der den ersten Cache verwaltet; und einen zweiten Cache-Controller, der den zweiten Cache verwaltet zum als Reaktion auf eine Invalidierungsanforderung von einem des mindestens einen entfernten Prozessorknotens, einen Block zu invalidieren, Angeben einer Adresse des zu invalidierenden Blocks in einer Verfolgungstabelle eines intermediären Cache; als Reaktion auf eine erste Cache-Füllanforderung für einen angeforderten Block von dem ersten Cache-Controller Bestimmen, ob sich eine Adresse des angeforderten Blocks in der Verfolgungstabelle des intermediären Cache befindet; und Benachrichtigen des ersten Cache-Controllers, einen Programmzähler einer anfordernden Anweisung, die den angeforderten Block anfordert, zu verfolgen, wobei der erste Cache-Controller den Programmzähler der anfordernden Anweisung in einer Tabelle verfolgter Programmzähler angibt, der zu verwenden ist, um zu bestimmen, ob als Reaktion auf eine Füllanforderung für den Prozessor-Cache Daten in dem ersten Cache und dem zweiten Cache zu speichern sind.
  9. Vorrichtung nach Anspruch 8, wobei der angeforderte Block einen ersten angeforderten Block umfasst, die Adresse eine erste Adresse umfasst und wobei die anfordernde Anweisung eine erste anfordernde Anweisung umfasst, wobei der erste Cache-Controller ferner zu Folgendem dient: Empfangen einer Füllanforderung für einen zweiten angeforderten Block an einer zweiten Adresse für den Prozessor-Cache für eine zweite anfordernde Anweisung; Bestimmen, ob ein Programmzähler der zweiten anfordernden Anweisung in der Tabelle verfolgter Programmzähler angegeben ist; Zurückgeben von Daten für den zweiten angeforderten Block an den Prozessor-Cache als Reaktion auf die Füllanforderung für den zweiten angeforderten Block; und Verwenden der Tabelle verfolgter Programmzähler, um zu bestimmen, ob die Daten für den zweiten angeforderten Block in dem ersten Cache zwischenzuspeichern sind.
  10. Vorrichtung nach Anspruch 8 oder 9, wobei Verwenden der Tabelle verfolgter Programmzähler, um zu bestimmen, ob die Daten für den zweiten angeforderten Block in dem ersten Cache und dem zweiten Cache zwischenzuspeichern sind, Folgendes soll: Zwischenspeichern der Daten für den zweiten angeforderten Block in dem ersten Cache und dem zweiten Cache, wenn bestimmt wird, dass der Programmzähler der zweiten anfordernden Anweisung nicht in der Tabelle verfolgter Programmzähler angegeben ist, wobei die Daten für den zweiten angeforderten Block nicht in dem ersten und zweiten Cache zwischengespeichert werden, wenn bestimmt wird, dass der Programmzähler der zweiten anfordernden Anweisung in der Tabelle verfolgter Programmzähler angegeben ist.
  11. System, umfassend: mehrere Sockets, die über eine Schnittstelle kommunizieren, wobei jedes Socket der Sockets Folgendes umfasst: mindestens einen lokalen Verarbeitungskern; einen den Sockets zugänglichen geteilten Speicher; einen ersten Cache; einen zweiten Cache; einen ersten Cache-Controller, der den ersten Cache verwaltet zum Bestimmen als Reaktion auf Ausräumung eines Blocks aus dem ersten Cache, ob wahrscheinlicher durch mindestens ein entferntes Socket, das ein anderes der Sockets als den mindestens einen lokalen Prozessorkern umfasst, auf den Block zugegriffen wird; Schreiben des Blocks in den zweiten Cache, wenn bestimmt wird, dass wahrscheinlicher durch den mindestens einen lokalen Prozessorkern als durch das mindestens eine entfernte Socket auf den Block zugegriffen wird; und Schreiben des Blocks in den geteilten Speicher, wenn bestimmt wird, dass wahrscheinlicher durch das mindestens eine entfernte Socket als durch den lokalen Prozessorkern auf den Block zugegriffen wird, ohne in den zweiten Cache zu schreiben.
  12. System nach Anspruch 11, wobei Bestimmen, ob wahrscheinlicher durch eines des mindestens einen entfernten Socket auf den Block zugegriffen wird, Folgendes umfasst: Verarbeiten mehrerer Attribute in Bezug auf den Block, um Attributwerte für die Attribute zu bestimmen; Verarbeiten einer Tabelle, die für jeden der bestimmten Attributwerte ein Konfidenzniveau angibt, das angibt, ob wahrscheinlicher durch das mindestens eine entfernte Socket als durch den mindestens einen lokalen Prozessorkern auf den Block zugegriffen wird; und Bestimmen, ob ein Gesamt-Konfidenzniveau auf der Basis der bestimmten Konfidenzniveaus für die bestimmten Attributwerte eine Konfidenzschwelle überschreitet, wobei der Block in den zweiten Cache geschrieben wird, wenn bestimmt wird, dass das Konfidenzniveau die Konfidenzschwelle überschreitet, und wobei der Block in den geteilten Speicher geschrieben wird und nicht in den zweiten Cache geschrieben wird, wenn bestimmt wird, dass das Konfidenzniveau die Konfidenzschwelle nicht überschreitet.
  13. System nach Anspruch 11, wobei der erste Cache-Controller ferner zu Folgendem dient: als Reaktion auf eine Invalidierungsanforderung von einem des mindestens einen entfernten Socket, einen modifizierten Block, der modifizierte Daten aufweist, zu invalidieren, Angeben einer Adresse des modifizierten Blocks in einer Verfolgungstabelle und Schreiben von Daten für den modifizierten Block in den geteilten Speicher, wobei Bestimmen, ob wahrscheinlicher durch das mindestens eine entfernte Socket auf den Block zugegriffen wird, bestimmt, ob die Verfolgungstabelle die Adresse des modifizierten Blocks angibt.
  14. System nach einem der Ansprüche 11, 12 oder 13, wobei der zweite Cache durch einen zweiten Cache-Controller gesteuert wird, wobei Angeben der Adresse des modifizierten Blocks in der Verfolgungstabelle die Adresse des modifizierten Blocks zur Angabe in der Verfolgungstabelle zu dem zweiten Cache-Controller sendet.
  15. System nach Anspruch 13, wobei jedes Socket ferner einen zweiten Cache-Controller zum Steuern des zweiten Cache und einen Controller geteilten Speichers zum Steuern des geteilten Speichers umfasst, wobei der zweite Cache-Controller ferner zu Folgendem dient: Empfangen einer Füllanforderung, von dem ersten Cache-Controller als Reaktion auf einen Lese-Fehltreffer in dem ersten Cache für eine angeforderte Blockadresse; Senden einer Füllanforderung zu dem geteilten Speicher für die angeforderte Blockadresse, wenn die angeforderte Blockadresse nicht in dem zweiten Cache gespeichert ist; Zurückgeben von Daten für die angeforderte Blockadresse an den ersten Cache-Controller aus dem zweiten Cache oder aus der Füllanforderung an den geteilten Speicher; Bestimmen, ob sich die angeforderte Blockadresse in der Verfolgungstabelle befindet; und Speichern der Daten für die angeforderte Blockadresse in dem zweiten Cache, wenn bestimmt wird, dass sich die angeforderte Blockadresse nicht in der Verfolgungstabelle befindet, wobei die Daten für die angeforderte Blockadresse nicht in dem zweiten Cache gespeichert werden, wenn bestimmt wird, dass die angeforderte Blockadresse nicht in der Verfolgungstabelle angegeben ist.
  16. System nach Anspruch 13, wobei der erste Cache-Controller ferner zu Folgendem dient: als Reaktion auf eine Ausräumanforderung, eine Blockadresse aus dem ersten Cache auszuräumen, Bestimmen, ob sich die Blockadresse in der Verfolgungstabelle befindet; und Schreiben von Daten für die Blockadresse in den zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse nicht in der Verfolgungstabelle befindet, wobei die Daten für die Blockadresse nicht in den zweiten Cache geschrieben werden, wenn bestimmt wird, dass sich die Blockadresse in der Verfolgungstabelle befindet.
  17. System nach Anspruch 13, wobei der erste Cache-Controller ferner zu Folgendem dient: als Reaktion auf ein Rückschreiben für modifizierte Daten für eine Blockadresse aus dem ersten Cache Bestimmen, ob sich die Blockadresse in der Verfolgungstabelle befindet; Schreiben der modifizierten Daten in den zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse für die modifizierten Daten nicht in der Verfolgungstabelle befindet; und Schreiben der modifizierten Daten in den geteilten Speicher unter Umgehung des zweiten Cache, wenn bestimmt wird, dass sich die Blockadresse für die modifizierten Daten in der Verfolgungstabelle befindet.
  18. System, umfassend: mehrere Sockets, die über eine Schnittstelle kommunizieren, wobei jedes Socket der Sockets Folgendes umfasst: mindestens einen lokalen Verarbeitungskern; einen den Sockets zugänglichen geteilten Speicher; einen ersten Cache; einen zweiten Cache; einen ersten Cache-Controller, der den ersten Cache verwaltet; und einen zweiten Cache-Controller, der den zweiten Cache verwaltet zum als Reaktion auf eine Invalidierungsanforderung von einem des mindestens einen entfernten Socket, einen Block zu invalidieren, Angeben einer Adresse des zu invalidierenden Blocks in einer Verfolgungstabelle eines intermediären Cache; als Reaktion auf eine erste Cache-Füllanforderung für einen angeforderten Block von dem ersten Cache-Controller Bestimmen, ob sich eine Adresse des angeforderten Blocks in der Verfolgungstabelle des intermediären Cache befindet; und Benachrichtigen des ersten Cache-Controllers, einen Programmzähler einer anfordernden Anweisung, die den angeforderten Block anfordert, zu verfolgen, wobei der erste Cache-Controller den Programmzähler der anfordernden Anweisung in einer Tabelle verfolgter Programmzähler angibt, der zu verwenden ist, um zu bestimmen, ob als Reaktion auf eine Füllanforderung für den Prozessor-Cache Daten in dem ersten Cache und dem zweiten Cache zu speichern sind.
  19. System nach Anspruch 18, wobei der angeforderte Block einen ersten angeforderten Block umfasst, die Adresse eine erste Adresse umfasst und wobei die anfordernde Anweisung eine erste anfordernde Anweisung umfasst, wobei der erste Cache-Controller ferner zu Folgendem dient: Empfangen einer Füllanforderung für einen zweiten angeforderten Block an einer zweiten Adresse für den Prozessor-Cache für eine zweite anfordernde Anweisung; Bestimmen, ob ein Programmzähler der zweiten anfordernden Anweisung in der Tabelle verfolgter Programmzähler angegeben ist; Zurückgeben von Daten für den zweiten angeforderten Block an den Prozessor-Cache als Reaktion auf die Füllanforderung für den zweiten angeforderten Block; und Verwenden der Tabelle verfolgter Programmzähler, um zu bestimmen, ob die Daten für den zweiten angeforderten Block in dem ersten Cache zwischenzuspeichern sind.
  20. System nach Anspruch 19, wobei Verwenden der Tabelle verfolgter Programmzähler, um zu bestimmen, ob die Daten für den zweiten angeforderten Block in dem ersten Cache und dem zweiten Cache zwischenzuspeichern sind, Folgendes soll: Zwischenspeichern der Daten für den zweiten angeforderten Block in dem ersten Cache und dem zweiten Cache, wenn bestimmt wird, dass der Programmzähler der zweiten anfordernden Anweisung nicht in der Tabelle verfolgter Programmzähler angegeben ist, wobei die Daten für den zweiten angeforderten Block nicht in dem ersten und zweiten Cache zwischengespeichert werden, wenn bestimmt wird, dass der Programmzähler der zweiten anfordernden Anweisung in der Tabelle verfolgter Programmzähler angegeben ist.
  21. Vorrichtung zum Zwischenspeichern von Daten in einem ersten Cache und einem zweiten Cache, die Daten aus einem geteilten Speicher in einem lokalen Prozessorknoten zwischenspeichern, umfassend: Mittel zum Bestimmen, ob wahrscheinlicher durch einen des mindestens einen entfernten Prozessorknotens als durch den lokalen Prozessorknoten auf den Block zugegriffen wird, als Reaktion auf Ausräumung eines Blocks aus dem ersten Cache; Mittel zum Schreiben des Blocks in den zweiten Cache, wenn bestimmt wird, dass wahrscheinlicher durch den lokalen Prozessorknoten als durch einen des mindestens einen entfernten Prozessorknotens auf den Block zugegriffen wird; und Mittel zum Schreiben des Blocks in den geteilten Speicher, wenn bestimmt wird, dass wahrscheinlicher durch den einen des mindestens einen entfernten Prozessorknotens als durch den lokalen Prozessorknoten auf den Block zugegriffen wird, ohne in den zweiten Cache zu schreiben.
  22. Vorrichtung nach Anspruch 1, wobei die Mittel zum Bestimmen, ob wahrscheinlicher durch einen des mindestens einen entfernten Prozessorknotens auf den Block zugegriffen wird, Folgendes umfassen: Mittel zum Verarbeiten mehrerer Attribute in Bezug auf den Block, um Attributwerte für die Attribute zu bestimmen; Mittel zum Verarbeiten einer Tabelle, die für jeden der bestimmten Attributwerte ein Konfidenzniveau angibt, das angibt, ob wahrscheinlicher durch einen des mindestens einen entfernten Prozessorknotens als durch den lokalen Prozessorknoten auf den Block zugegriffen wird; und Mittel zum Bestimmen, ob ein Gesamt-Konfidenzniveau auf der Basis der bestimmten Konfidenzniveaus für die bestimmten Attributwerte eine Konfidenzschwelle überschreitet, wobei der Block in den zweiten Cache geschrieben wird, wenn bestimmt wird, dass das Konfidenzniveau die Konfidenzschwelle überschreitet, und wobei der Block in den geteilten Speicher geschrieben wird und nicht in den zweiten Cache geschrieben wird, wenn bestimmt wird, dass das Konfidenzniveau die Konfidenzschwelle nicht überschreitet.
DE102019111219.2A 2018-06-01 2019-04-30 Bereitstellen von Toter-Block-Vorhersage zur Bestimmung, ob Daten in Cache-Vorrichtungen zwischenzuspeichern sind. Pending DE102019111219A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/996,392 2018-06-01
US15/996,392 US10877890B2 (en) 2018-06-01 2018-06-01 Providing dead-block prediction for determining whether to cache data in cache devices

Publications (1)

Publication Number Publication Date
DE102019111219A1 true DE102019111219A1 (de) 2019-12-05

Family

ID=65275298

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019111219.2A Pending DE102019111219A1 (de) 2018-06-01 2019-04-30 Bereitstellen von Toter-Block-Vorhersage zur Bestimmung, ob Daten in Cache-Vorrichtungen zwischenzuspeichern sind.

Country Status (3)

Country Link
US (1) US10877890B2 (de)
CN (1) CN110554975A (de)
DE (1) DE102019111219A1 (de)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11379592B2 (en) * 2018-12-20 2022-07-05 Intel Corporation Write-back invalidate by key identifier
US11488654B2 (en) * 2020-06-15 2022-11-01 Advanced Micro Devices, Inc. Memory row recording for mitigating crosstalk in dynamic random access memory
US11563665B2 (en) * 2021-03-05 2023-01-24 Zscaler, Inc. Detecting web probes versus regular traffic through a proxy including encrypted traffic
US11907132B2 (en) * 2022-03-23 2024-02-20 International Business Machines Corporation Final cache directory state indication

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7600080B1 (en) * 2006-09-22 2009-10-06 Intel Corporation Avoiding deadlocks in a multiprocessor system
US10127154B2 (en) * 2013-03-20 2018-11-13 Hewlett Packard Enterprise Development Lp Caching data in a memory system having memory nodes at different hierarchical levels
US9251081B2 (en) * 2013-08-01 2016-02-02 Advanced Micro Devices, Inc. Management of caches
US9501418B2 (en) * 2014-06-26 2016-11-22 HGST Netherlands B.V. Invalidation data area for cache
CN106201913A (zh) * 2015-04-23 2016-12-07 上海芯豪微电子有限公司 一种基于指令推送的处理器系统和方法
US10261901B2 (en) 2015-09-25 2019-04-16 Intel Corporation Method and apparatus for unneeded block prediction in a computing system having a last level cache and a multi-level system memory
US10831678B2 (en) * 2017-11-21 2020-11-10 Arm Limited Multi-tier cache placement mechanism

Also Published As

Publication number Publication date
US10877890B2 (en) 2020-12-29
US20190050332A1 (en) 2019-02-14
CN110554975A (zh) 2019-12-10

Similar Documents

Publication Publication Date Title
DE102009022151B4 (de) Verringern von Invalidierungstransaktionen aus einem Snoop-Filter
DE102019111219A1 (de) Bereitstellen von Toter-Block-Vorhersage zur Bestimmung, ob Daten in Cache-Vorrichtungen zwischenzuspeichern sind.
DE10262164B4 (de) Computersystem mit einer hierarchischen Cacheanordnung
DE112008002018B4 (de) Bereitstellen eines gemeinsam genutzten Inklusiv-Cache bei Mehrkern-Cache-Clustern
DE102007030116B4 (de) Snoop-Filter mit ausschließlicher Inhaberschaft
US6976131B2 (en) Method and apparatus for shared cache coherency for a chip multiprocessor or multiprocessor system
DE102019105879A1 (de) Verwaltung von kohärenten Verknüpfungen und Mehr-Ebenen-Speicher
DE19983793B4 (de) System mit einem Prozessor, auf dem mehrere, gleichzeitig aktive Ausführungsentitäten ausgeführt werden, und mit einem mehrere, den Ausführungsentitäten zugewiese Cache-Abschnitte aufweisenden Cache-Speicher
DE112011103433B4 (de) Verfahren, System und Programm zum Steuern von Cache-Kohärenz
DE60222402T2 (de) Verfahren und system zur spekulativen ungültigkeitserklärung von zeilen in einem cachespeicher
DE112005002180T5 (de) Lösen von Cachekonflikten
DE102008062044B4 (de) 1Speicherinterne, seiteninterne Verzeichnis-Chache-Kohärenz-Konfiguration
US7434007B2 (en) Management of cache memories in a data processing apparatus
DE102013204414B4 (de) Daten-Cachespeicherblock-Freigabeanforderungen in einer Cachespeicherhierarchie mit mehreren Ebenen
DE202017104840U1 (de) Hybriddatenspeichermanagement
DE112009000373T5 (de) Technik, um Information zwischen unterschiedlichen Kohärenz-Domains von Caches zu nutzen
DE102013201079A1 (de) Mechanismus des Weiterleitungsfortschritts für Speichervorgänge beim Vorhandensein einer Überlastung in einem System, das Belastungen durch Zustandsänderungen begünstigt
DE112013000889T5 (de) Weiterleitungsfortschritts-Mechanismus für Speichervorgänge bei Vorhandensein von Ladekonflikten in einem Ladevorgänge begünstigenden System
WO2002001366A2 (en) Cache line pre-load and pre-own based on cache coherence speculation
DE112010004971T5 (de) Ein System, Verfahren und eine Vorrichtung für einen Cache-Flush eines Seitenbereichs und TLB Invalidierung eines Bereichs von Einträgen
DE112005002268T5 (de) Verfahren und Vorrichtung für eine vorwärtslaufende Victim-Auswahl zum Verringern eines unerwünschten Ersatzverhaltens in inklusiven Caches
DE10219623A1 (de) System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen
DE10316725A1 (de) Datenverwaltungsverfahren für ein Distributed Shared Memory-System
DE10006430B4 (de) Verfahren zur Aufrechterhaltung einer Kohärenz für ein Multi-Prozessor-System
DE102006002444A1 (de) Verfahren und System für eine Cache-Nutzung durch ein Vorabrufen für mehrere DMA-Lesevorgänge

Legal Events

Date Code Title Description
R081 Change of applicant/patentee

Owner name: TAHOE RESEARCH, LTD., IE

Free format text: FORMER OWNER: INTEL CORPORATION, SANTA CLARA, CALIF., US

R082 Change of representative

Representative=s name: VOSSIUS & PARTNER PATENTANWAELTE RECHTSANWAELT, DE