-
TECHNISCHES GEBIET
-
Die vorliegende Offenbarung betrifft persistenten Speicher und insbesondere Flush-Verwaltung einer atomischen Gruppe von Schreibvorgängen in persistenten Speicher.
-
STAND DER TECHNIK
-
Eine Datenbank ist eine organisierte Sammlung von Daten. Eine relationale Datenbank ist eine Sammlung von Tabellen, Anfragen und anderen Elementen. Ein Datenbankverwaltungssystem (DBMS) ist eine Computer-Softwareanwendung, die mit anderen Computer-Softwareanwendungen und der Datenbank in Wechselwirkung tritt, um Daten zu erfassen und zu analysieren.
-
Ein Computersystem kann eine Zentralverarbeitungseinheit (CPU) umfassen, die typischerweise mehrere Ebenen von Cache-Speicher umfasst. Ein Cache ist ein flüchtiger Speicher, zum Beispiel statischer Direktzugriffsspeicher (SRAM), der eine Kopie von Daten speichert, die im Hauptspeicher gespeichert sind. Hauptspeicher umfasst typischerweise flüchtigen Speicher, zum Beispiel dynamischen Direktzugriffsspeicher (DRAM). Flüchtiger Speicher ist Speicher, dessen Zustand (und deshalb die darin gespeicherten Daten) unbestimmt ist, wenn die Stromversorgung der Vorrichtung unterbrochen wird. Eine nichtflüchtige Speicher- bzw. NVM-Vorrichtung ist ein Speicher, dessen Zustand selbst dann bestimmt ist, wenn die Stromversorgung der Vorrichtung unterbrochen wird.
-
Im Gegensatz zu einem traditionellen Datenbanksystem, das Daten auf einer Speicherungsvorrichtung speichert, wie zum Beispiel einer Festplatte (HDD) oder einem Halbleiterlaufwerk (SSD), ist ein In-Speicher-Datenbank- bzw. IMDB-System ein Datenbankverwaltungssystem, das Daten in Hauptspeicher speichert. Der Hauptspeicher kann nichtflüchtiger Speicher sein. Eine IMDB stellt extrem hohe Anfragen/Sekunde bereit, um schnelle Entscheidungsfindung auf der Basis von Echtzeitanalytik zu unterstützen.
-
Wenn die Stromversorgung des Systems unerwartet unterbrochen wird, können Daten, die dabei sind, in die In-Speicher-Datenbank im nichtflüchtigen Speicher geschrieben zu werden, die in einem flüchtigen Speicher, zum Beispiel im Cache in der CPU, gespeichert wird, verloren gehen.
-
Figurenliste
-
Merkmale von Ausführungsformen des beanspruchten Gegenstands werden im Verlauf der folgenden ausführlichen Beschreibung und bei Bezugnahme auf die Zeichnungen, in denen gleiche Bezugszahlen gleiche Teile abbilden, ersichtlich. Es zeigen:
- 1 eine Blockdarstellung einer Ausführungsform eines Computersystems, die einen Prozessorkern zum Übergeben einer Gruppe von Schreibvorgängen zusammen von dem Prozessor-Cache an den persistenten Speicher umfasst;
- 2 den Datenpfad, der eine Anweisung zum Speichern von Daten (zum Beispiel eine MOV-Anweisung) in persistenten Speicher durch die Speicherhierarchie in dem in 1 gezeigten System nimmt,
- 3 eine Blockdarstellung eines Cache-Eintrags in dem in 2 gezeigten L1-Datencache 132b; und
- 4 ein Flussdiagramm eines Verfahrens, das durch beliebige der in 2 gezeigten Kerne ausgeführt wird, um eine Gruppe von Schreibvorgängen im Cache an persistenten Speicher zu übergeben.
-
Obwohl die folgende ausführliche Beschreibung unter Bezugnahme auf beispielhafte Ausführungsformen des beanspruchten Gegenstands erfolgt, werden Fachleuten viele Alternativen, Modifikationen und Varianten davon ersichtlich sein. Es ist dementsprechend beabsichtigt, dass der beanspruchte Gegenstand allgemein betrachtet wird und nur so definiert wird, wie es in den beigefügten Ansprüchen dargelegt ist.
-
BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
-
Asynchrones DRAM-Selbstauffrischen (ADR) ist ein Merkmal auf Plattformebene, bei dem die Stromversorgung einem Plattform-Steuer-Hub (PCH) signalisiert, dass ein Stromausfall bevorsteht. Der PCH propagiert die Stromversorgungbenachrichtigung zur CPU. Interne Einheiten in der CPU signalisieren letztendlich dem internen Speichercontroller, um zu bewirken, dass er Anstehendes-Schreiben-Warteschlangen in dem Speichersubsystem in nichtflüchtigen Speicher ausräumt. Der nichtflüchtige Speicher kann persistenter Speicher sein, ein byteadressierbarer nichtflüchtiger Write-in-Place-Speicher.
-
Ein stromversorgunggeschütztes System mit ADR - Asynchronem DRAM-Selbstauffrischen (ADR) oder erweitertem Asynchronem DRAM-Selbstauffrischen (eADR) kann über ausreichend Reserveenergie verfügen, um alle in flüchtigem Speicher gespeicherte Daten (wozu Speichercontroller-Warteschlangen, Prozessor-Caches und Schreibdaten in Puffern im E/A-Controller gehören können) in persistenten Speicher in dem Computersystem zu schreiben, wenn die Stromversorgung des Systems unterbrochen wird. Zum Beispiel kann die CPU Anweisungen wie etwa CLWB (Cache Line Write Back), CLFLUSH (Cache Line Flush) und CLFLUSHOPT (Cache Line Flush Optimal) ausführen, um die Daten aus dem flüchtigen Cache in der CPU auszuräumen, wenn die Stromversorgung des Systems unterbrochen wird. Die Anweisung CLWB schreibt den im Cache gespeicherten Wert in persistenten Speicher und lässt den Wert auch im Cache, um den nächsten Zugriff auf Cache durchzuführen. Die Anweisung CLFLUSHOPT räumt die Cache-Linie aus und erlaubt Gleichzeitigkeit.
-
Es gibt jedoch Szenarien, bei denen es notwendig ist, eine Gruppe von Schreibvorgängen zusammen an persistenten Speicher zu übergeben, zum Beispiel „Alles-oder-Nichts-Übergaben“. Wenn zum Beispiel eine Anwendung dabei ist, einen Datensatz in einer In-Speicher-Datenbank zu aktualisieren, die in persistentem Speicher für einen „bevorzugten Kontakt“ gespeichert ist, der Felder für einen Namen, eine Telefonnummer und eine Emailadresse umfasst, müssen alle Felder zusammen im persistenten Speicher aktualisiert werden, wenn der Eintrag „bevorzugter Kontakt“ aktualisiert wird. Wenn nur ein Feld, zum Beispiel das Namenfeld, aktualisiert wird, wobei zur selben Zeit ein Stromausfall auftritt, führt dies zu einer nicht passenden Telefonnummer und Emailadresse in dem Datensatz für den „bevorzugten Kontakt“, der im persistenten Speicher gespeichert wird.
-
Bei einer Ausführungsform kann eine Gruppe von Cache-Linien im Cache als Cache-Linien identifiziert werden, die erst in persistenten Speicher auszuräumen sind, wenn alle Cache-Linien-Schreibvorgänge für die Gruppe von Cache-Linien abgeschlossen wurden. Eine Gruppe von Cache-Linien kann als atomische Gruppe von Schreibvorgängen bezeichnet werden. Eine Gruppe von Schreibvorgängen ist atomisch dergestalt, dass, wenn nicht alle Schreibvorgänge erfolgreich ausgeführt werden können, keine der Schreibvorgänge in der Gruppe ausgeführt werden.
-
Verschiede Ausführungsformen und Aspekte der Erfindungen werden mit Bezug auf nachfolgend besprochene Einzelheiten beschrieben, und die beigefügten Zeichnungen stellen die verschiedenen Ausführungsformen dar. Die folgende Beschreibung und die Zeichnungen veranschaulichen die Erfindung und sind nicht als Beschränkung der Erfindung aufzufassen. Es werden zahlreiche spezifische Einzelheiten beschrieben, um ein umfassendes Verständnis verschiedener Ausführungsformen der vorliegenden Erfindung zu gewährleisten. In bestimmten Fällen werden jedoch wohlbekannte oder herkömmliche Einzelheiten nicht beschrieben, um eine prägnante Besprechung von Ausführungsformen der vorliegenden Erfindung bereitzustellen.
-
Erwähnungen von „einer Ausführungsform“ in der Patentschrift bedeuten, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Charakteristikum, das bzw. die in Verbindung mit der Ausführungsform beschrieben wird, in mindestens einer Ausführungsform der Erfindung enthalten sein kann. Das Erscheinen der Phrase „bei einer Ausführungsform“ an verschiedenen Stellen in der Patentschrift bezieht sich nicht unbedingt immer auf dieselbe Ausführungsform.
-
Verschiede Ausführungsformen und Aspekte der Erfindungen werden mit Bezug auf nachfolgend besprochene Einzelheiten beschrieben, und die beigefügten Zeichnungen stellen die verschiedenen Ausführungsformen dar. Die folgende Beschreibung und die Zeichnungen veranschaulichen die Erfindung und sind nicht als Beschränkung der Erfindung aufzufassen. Es werden zahlreiche spezifische Einzelheiten beschrieben, um ein umfassendes Verständnis verschiedener Ausführungsformen der vorliegenden Erfindung zu gewährleisten. In bestimmten Fällen werden jedoch wohlbekannte oder herkömmliche Einzelheiten nicht beschrieben, um eine prägnante Besprechung von Ausführungsformen der vorliegenden Erfindung bereitzustellen.
-
Erwähnungen von „einer Ausführungsform“ in der Patentschrift bedeuten, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Charakteristikum, das bzw. die in Verbindung mit der Ausführungsform beschrieben wird, in mindestens einer Ausführungsform der Erfindung enthalten sein kann. Das Erscheinen der Phrase „bei einer Ausführungsform“ an verschiedenen Stellen in der Patentschrift bezieht sich nicht unbedingt immer auf dieselbe Ausführungsform.
-
1 ist eine Blockdarstellung einer Ausführungsform eines Computersystems 100 mit einem Prozessorkern zum Übergeben einer Gruppe von Schreibvorgängen zusammen aus Prozessor-Cache an persistenten Speicher. Das Computersystem 100 kann einer Datenverarbeitungsvorrichtung entsprechen, darunter, aber ohne Beschränkung darauf, einem Server, einem Workstation-Computer, einem Desktop-Computer, einem Laptop-Computer und/oder einem Tablet-Computer.
-
Das Computersystem 100 umfasst ein System auf einem Chip (SOC oder SoC) 104, das Prozessor, Graphik, Speicher und Steuerlogik für Eingabe/Ausgabe (E/A) zu einer SoC-Kapselung kombiniert. Das SoC 104 umfasst mindestens einen Zentralverarbeitungseinheits- bzw. CPU-Rechenkomplex 108, einen Speichercontroller 114 und eine Graphikprozessoreinheit (GPU) 110. Bei anderen Ausführungsformen kann sich der Speichercontroller 114 außerhalb des SoC 104 befinden.
-
Bei der in 1 gezeigten Ausführungsform umfasst der CPU-Rechenkomplex 108 zwei Prozessoren, die auch als Prozessorkerne („Kerne“) 102 bezeichnet werden, und einen Cache 106 der Ebene 2 (L2), der von den Prozessorkernen 102 in dem CPU-Rechenkomplex 108 geteilt wird. Jeder Kern 102 umfasst einen Cache 132 der Ebene 1 (L1). Bei anderen Ausführungsformen kann der CPU-Rechenkomplex 108 mehr als zwei Prozessorkerne 102 aufweisen, und jeder Prozessorkern 102 kann einen Cache 106 der Ebene 2 aufweisen. Der Cache 132 der Ebene 1 und der Cache 106 der Ebene 2 werden von den Prozessorkernen 102 verwendet, um die Zeit für den Zugriff auf Daten aus externem Speicher in dem Computersystem 100 zu verringern. Der Cache 132 der Ebene 1 und der Cache 106 der Ebene 2 speichern eine Kopie von Daten aus häufig verwendeten Speicherorten in flüchtigem Speicher 126 und persistentem Speicher 128. Der Cache 132 der Ebene 1 kann einen Daten-Cache zum Speichern von Daten und einen Anweisungs-Cache zum Speichern von Anweisungen umfassen.
-
Obwohl es nicht gezeigt ist, kann jeder der Prozessorkern(e) 102 intern Ausführungseinheiten, Vorabrufpuffer, Anweisungswarteschlangen, Verzweigungsadressen-Berechnungseinheiten, Anweisungsdecodierer, Gleitkommaeinheiten, Zurückzieheinheiten usw. umfassen. Der CPU-Rechenkomplex 108 kann gemäß einer Ausführungsform einem Einzelkern- oder einem Mehrkern-Vielzweckprozessor entsprechen, wie etwa den von der Intel® Corporation bereitgestellten.
-
Der Speichercontroller 114 kann über einen Speicherbus 130, zum Beispiel Gen-Z (genzconsortium.org), Open CAPI (opencapi.org), CCIX (ccixconsortium.com) oder andere Differenz-Schnittstellentechnologien, mit einem persistentem Speicher 128 und einem flüchtigen Speicher 126 gekoppelt sein. Ein persistenter Speicher 128 ist ein byteadressierbarer nichtflüchtiger Write-in-Place-Speicher. Der persistente Speicher 128 kann eine byteadressierbare dreidimensionale Write-in-Place-Kreuzpunkt-Speichervorrichtung oder andere byteadressierbare Write-in-Place-NVM-Vorrichtungen umfassen, wie etwa Einzel- oder Mehrebenen-Phasenänderungsspeicher (PCM) oder Phasenänderungsspeicher mit einem Schalter (PCMS), NVM-Vorrichtungen, die Chalcogenid-Phasenänderungsmaterial (zum Beispiel Chalcogenidglas) verwenden, resistiver Speicher, darunter Metalloxidbasis-, Sauerstoffleerstellenbasis- und CB-RAM-Speicher (Conductive Bridge Random Access Memory), Nanodrahtspeicher, FeRAM (ferroelektrischen Direktzugriffsspeicher), MRAM (magnetoresistiven Direktzugriffsspeicher) mit Memristor-Technologie, STT-MRAM (Spin Transfer Torque), eine auf Spintronic-Magnetsperrschichtspeicher basierende Vorrichtung, eine auf MTJ (Magnetic Tunneling Junction) basierende Vorrichtung, eine Vorrichtung auf der Basis von DW (Domänenwand) und SOT (Spin Orbit Transfer), eine Speichervorrichtung auf Thyristorbasis, oder eine Kombination beliebiger von Obigen oder einen anderen geeigneten Speicher.
-
Ein flüchtiger Speicher ist ein Speicher, dessen Zustand (und daher der der in ihm gespeicherten Daten) unbestimmt ist, wenn die Stromzufuhr zu der Vorrichtung unterbrochen wird. Ein dynamischer flüchtiger Speicher macht ein Aktualisieren der in der Vorrichtung gespeicherten Daten erforderlich, um den Zustand aufrechtzuerhalten. Ein Beispiel für einen dynamischen flüchtigen Speicher umfasst einen DRAM (Dynamic Random Access Memory, Dynamischen Direktzugriffsspeicher) oder eine Variante davon, wie z. B. einen synchronen DRAM (SDRAM). Ein Speicher-Teilsystem, wie hierin beschrieben, kann mit einer Anzahl von Speichertechnologien kompatibel sein, wie z. B. DDR3 (Double Data Rate Version 3, ursprüngliche Veröffentlichung durch JEDEC (Joint Electronic Device Engineering Council) am 27. Juni 2007), DDR4 (DDR Version 4, ursprüngliche Spezifikation veröffentlicht im September 2012 durch JEDEC), DDR4E (DDR Version 4), LPDDR3 (Low-Power-DDR Version 3, JESD209-3B, Aug 2013 durch JEDEC), LPDDR4 Version 4, JESD209-4, ursprünglich veröffentlicht durch JEDEC im August 2014), WIO2 (Wide Input/Output Version 2, JESD229-2, ursprünglich veröffentlicht durch JEDEC im August 2014), HBM (High Bandwidth Memory, JESD235, ursprünglich veröffentlicht durch JEDEC im Oktober 2013), DDR5 (DDR Version 5, aktuell erwogen durch JEDEC), LPDDR5 (aktuell erwogen durch JEDEC), HBM2 (HBM Version 2, aktuell erwogen durch JEDEC), oder anderen oder Kombinationen von Speichertechnologien und Technologien auf der Basis von Ableitungen oder Erweiterungen solcher Spezifikationen. Die JEDEC-Standards sind bei www.jedec.org verfügbar.
-
Die E/A-Adapter 116 können einen PCIe-Adapter (Peripheral Component Interconnect Express) umfassen, der kommunikativ unter Verwendung des Protokolls NVMe (NVM Express) über PCIe (Peripheral Component Interconnect Express) über den Bus 144 mit einer Hostschnittstelle in dem SSD 118 gekoppelt ist. NVMe-Standards (Non-Volatile Memory Express) definieren eine Schnittstelle auf Registerebene für Hostsoftware zur Kommunikation mit einem nichtflüchtigen Speichersubsystem (zum Beispiel einem SSD (Solid-State Drive)) über PCIe (Peripheral Component Interconnect Express), einem schnellen seriellen Computererweiterungsbus. Die NVM-Express-Standards sind bei www.nvmexpress.org verfügbar. Die PCIe-Standards sind bei www.pcisig.com verfügbar.
-
Die Graphikprozessoreinheit (GPU) 110 kann einen oder mehrere GPU-Kerne und einen GPU-Cache, der graphikbezogene Daten für den GPU-Kern speichern kann, umfassen. Der GPU-Kern kann intern eine oder mehrere Ausführungseinheiten und einen oder mehrere Anweisungs- und Daten-Caches umfassen. Außerdem kann die Graphikprozessoreinheit (GPU) 110 andere Graphiklogikeinheiten enthalten, die in 1 nicht gezeigt sind, wie etwa eine oder mehrere Vertex-Verarbeitungseinheiten, Rasterisierungseinheiten, Medienverarbeitungseinheiten und Codecs.
-
In dem E/A-Subsystem 112 sind ein oder mehrere E/A-Adapter 116 anwesend, um ein in dem Prozessorkern bzw. den Prozessorkernen 102 benutztes Host-Kommunikationsprotokoll in ein mit bestimmten E/A-Vorrichtungen kompatibles Protokoll zu übersetzen. Einige der Protokolle, die Adapter für Übersetzung benutzen können, wären PCIe (Peripheral Component Interconnect(PCI)-Express); USB (Univeral Serial Bus); SATA (Serial Advanced Technology Attachment) und „Firewire“ 1594 des IEEE (Institute of Electrical and Electronics Engineers).
-
Der E/A-Adapter bzw. die E/A-Adapter 116 können mit externen E/A-Vorrichtungen 124 kommunizieren, die zum Beispiel Benutzeroberflächen-Vorrichtungen) umfassen können, darunter eine Anzeige und/oder eine Touchscreen-Anzeige 140, Drucker, Tastenfeld, Tastatur, Kommunikationslogik, verdrahtete und/oder drahtlose Speicherungsvorrichtung(en), darunter „HDD“ (Festplatten), „SSD“ (Solid-State Drives) 118, wechselbare Speicherungsmedien, ein DVD-Laufwerk (Digital Video Disk), ein CD-Laufwerk (Compact Disk), ein RAID (Redundant Array of Independent Disks), ein Bandlaufwerk oder eine andere Speicherungsvorrichtung. Die Speicherungsvorrichtungen können durch einen oder mehrere Busse, die eines oder mehrere von vielfältigen Protokollen verwenden können, darunter, aber ohne Beschränkung darauf, SAS (Serial Attached SCSI (Small Computer System Interface)), PCIe (Peripheral Component Interconnect Express), NVMe (NVM Express) über PCIe (Peripheral Component Interconnect Express) und SATA (Serial ATA (Advanced Technology Attachment)) kommunikativ und/oder physisch miteinander gekoppelt sein.
-
Außerdem können ein oder mehrere Drahtlosprotokoll-E/A-Adapter vorliegen. Beispiele für drahtlose Protokolle werden unter anderem in persönlichen Netzwerken verwendet, wie etwa IEEE 802.15 und Bluetooth 4.0; drahtlose lokale Netzwerke wie drahtlose Protokolle auf der Basis von IEEE 802.11; und Mobilfunkprotokolle.
-
2 zeigt den Datenpfad, den eine Anweisung zum Speichern von Daten (zum Beispiel eine MOV-Anweisung) in persistenten Speicher 128 durch die Speicherhierarchie in dem in 1 gezeigten System nimmt. Wie in Verbindung mit 1 besprochen, umfasst jeder Kern 102 einen L1-Cache 132 mit einem L1-Anweisungscache 132a und einem L1-Datencache 132b. Bei der gezeigten Ausführungsform teilt sich jeder Kern 102 einen L2-Cache 106 mit anderen Kernen 102. Bei anderen Ausführungsformen kann jeder Kern 102 einen L2-Cache 106 umfassen und sich einen Cache der Ebene 3 (L3) teilen. Daten werden in Blöcken fester Größe, die als Cache-Linien oder Cache-Blöcke bezeichnet werden, zwischen Speicher (persistentem Speicher 128 und flüchtigem Speicher 126) und Cache (Cache 132 der Ebene 1 und Cache 106 der Ebene 2) transferiert.
-
Wenn eine Lade-/Speicherausführungseinheit 202 in dem Kern 102 eine Speicheranweisung (zum Beispiel eine MOV-Anweisung) zum Speichern von Daten (Schreiben von Daten) an einem Ort in persistentem Speicher 128 ausführt, prüft der Kern 102 zuerst auf einen entsprechenden Cache-Eintrag in dem L1-Datencache 132b. Wenn sich der Speicherort in einem Cache-Eintrag in dem L1-Datencache 132a befindet, ist ein Cache-Treffer aufgetreten. Im Fall eines Cache-Treffers schreibt der Kern 102 die Daten unmittelbar in die Cache-Linie im L1-Datencache 132a.
-
Wenn der Kern 102 keinen Cache-Eintrag in dem L1-Datencache 132b findet, der dem Speicherort im persistenten Speicher 128 entspricht, ist ein Cache-Fehltreffer aufgetreten. Bei einem Cache-Fehltreffer wird ein neuer Cache-Eintrag in dem L1-Datencache 132b zugeteilt, und an den Speicherort im persistenten Speicher 128 zu schreibende Daten werden in dem neuen Eintrag in dem L1-Datencache 132b gespeichert.
-
Der mit dem CPU-Modul gekoppelte Speichercontroller 114 schreibt in dem Datencache 132b der Ebene 1 und dem Cache 106 der Ebene 2 gespeicherte Daten in den persistenten Speicher 128. Wenn eine Speicheranweisung (zum Beispiel eine MOV-Anweisung) ausgeführt wird, um Daten im Speicher zu speichern, werden die zu speichernden Daten typischerweise in dem L1-Datencache 132b oder L2-Cache 106 in der CPU 108 gespeichert. Eine Schreibanweisung, zum Beispiel CLWB (Cache Line Write Back) kann ausgeführt werden, um die Daten aus dem L1-Datencache 132b und L2-Cache 106 in der CPU 108 auszuräumen. Nachdem die zu speichernden Daten aus dem L1-Datencache 132b und dem L2-Cache 106 ausgeräumt wurden, können die Daten in einer Anstehendes-Schreiben-Warteschlange (WPQ) 204 im Speichercontroller 114 gespeichert werden. Die in dem L1-Datencache 132b und dem L2-Cache 106 gespeicherten Daten können auch im Fall eines Stromausfalls unter Verwendung eines als Asynchrones DRAM-Auffrischen (ADR) bezeichneten Merkmals in persistenten Speicher ausgeräumt werden. Die WPQ 204 kann auch unter Verwendung eines Nur-Kernel-WPQ-Ausräumbefehls ausgeräumt werden, um sicherzustellen, dass Daten sofort in persistenten Speicher ausgeräumt werden.
-
3 ist eine Blockdarstellung eines Cache-Eintrags 300 in dem in 2 gezeigten L1-Datencache 132b. Der Cache-Eintrag 300 wird in dem L1-Datencache 132b zugeteilt, wenn eine Cache-Linie aus dem persistenten Speicher 128 in den L1-Datencache 132b kopiert wird. Der Cache-Eintrag 300 speichert eine Kopie der im persistenten Speicher 128 gespeicherten Daten (Cache-Linie) in einem Datenblockfeld 304. Der Cache-Eintrag 300 umfasst außerdem ein Tag-Feld 302 und ein Flag-Feld 306. Ein in dem Tag-Feld 302 gespeichertes Tag umfasst einen Teil der der Cache-Linie zugeordneten Adresse des persistenten Speichers. Das Flag-Feld 306 speichert Metadaten, die ein Gültig-Bit („V“) 308, ein Schmutzig-Bit („D“) 310 und ein Nicht-Ausräumen-Bit („DNF“) 312 umfassen. Wenn das Schmutzig-Bit 310 gesetzt ist, wurde die zugeordnete Cache-Linie im L1-Datencache 132b durch den Kern 102 geschrieben, seit die Cache-Linie aus persistentem Speicher 128 gelesen wurde.
-
4 ist ein Flussdiagramm eines durch einen beliebigen der in 2 gezeigten Kerne 102 ausgeführten Verfahrens zum Übergeben einer Gruppe von Schreibvorgängen im Cache an persistenten Speicher. Die Gruppe von Schreibvorgängen kann als eine atomische Gruppe von Schreibvorgängen, eine atomische Region, ein kritischer Abschnitt oder ein atomischer Abschnitt bezeichnet werden.
-
Bei einer Ausführungsform liegt die Größe der atomischen Region oder des atomischen Abschnitts („S“) innerhalb der Größe des L1-Cache (das heißt, ist kleiner oder gleich dieser). Ein L1-Cache kann etwa 20 KiloByte (KB) betragen und ist jedem Kern privat. Der atomische Abschnitt wird in jedem L1-Cache „prothread“-Weise implementiert.
-
Typischerweise ist eine atomische Region oder ein atomischer Abschnitt in einer Softwareanwendung kleiner als die Größe des L1-Cache. Eine Anweisung ANFANG_GRUPPE_ÜBERGABE kann verwendet werden, um einen Start der atomischen Region vorzugeben, und eine Anweisung ENDE_GRUPPE_ÜBERGABE, um das Ende der atomischen Region vorzugeben. Die Anweisung ANFANG_GRUPPE_ÜBERGABE kann einen Operanden annehmen, der ein relatives Offset auf eine Fallback-Anweisungsadresse bereitstellt, wenn die atomische Region nicht erfolgreich übergeben werden kann. Vor dem Ausführen der Anweisung ANFANG_GRUPPE_ÜBERGABE ist das Nicht-Ausräumen-Bit („DNF“) 312 in jeder Cachelinie im L1-Cache gelöscht (zum Beispiel auf logisch „0“ gesetzt).
-
In Block 400 wird eine Anweisung ANFANG_GRUPPE_ÜBERGABE, die angibt, dass eine Gruppe von Schreibvorgängen zusammen in einen persistenten Speicher zu schreiben ist, durch den Kern 102 ausgeführt. Die Verarbeitung wird mit Block 402 fortgesetzt.
-
In Block 402 wird als Reaktion auf die Anweisung ANFANG_GRUPPE_ÜBERGABE ein Master-Sperrbit gesetzt (zum Beispiel auf logisch „1“ gesetzt), wodurch angegeben wird, dass Cache-Linien im L1-Datencache 132b, die mit „nicht ausräumen“ markiert sind (zum Beispiel ist das Nicht-Ausräumen-Bit („DNF“) 312 auf logisch „1“ gesetzt), nicht in den persistenten Speicher 128 zu schreiben sind. Das Master-Sperrbit kann ein reserviertes Bit in einem Register im Kern sein und kann als eine „Nicht-Ausräumen“-Sperrung bezeichnet werden. Eine Cache-Linie im L1-Datencache 132b wird als „nicht ausräumen“ markiert, indem das „Nicht-Ausräumen“-Bit 312 gesetzt (zum Beispiel auf logisch „1“ gesetzt) wird. Wenn zu diesem Zeitpunkt ein Stromausfall auftritt, werden alle Cache-Linien in persistenten Speicher geschrieben, weil das „Nicht-Ausräumen“-Bit 312 in keiner der Cache-Linien im L1-Datencache 132b gesetzt ist. Die Verarbeitung wird mit Block 404 fortgesetzt.
-
In Block 404 werden für jede durch die Lade- und Speicherausführungseinheit 202 im Kern 102 ausgeführte Speicheranweisung die Daten anfänglich in einer Cache-Linie 300 im L1-Datencache 132b gespeichert. Zusätzlich zu Daten speichert jede Cache-Linie 300 im L1-Datencache 132b Metadaten (zum Beispiel die in 3 gezeigten Flag-Bit 306). Bei einer Ausführungsform ist ein Bit der Metadaten, das als ein „nicht-ausräumbar“-Bit oder ein „Nicht-Ausräumen“-Bit 312 bezeichnet werden kann, dafür reserviert, anzugeben, ob die Cache-Linie 300 in persistenten Speicher 128 ausgeräumt werden kann. Das „Nicht-Ausräumen“-Bit 312 wirkt als Verfolgungsmechanismus zum Markieren einer Cache-Linie, die Teil einer Gruppenübergabe an persistenten Speicher 128 ist, als eine Cache-Linie, die bei einem Stromausfall nicht auszuräumen ist.
-
Zusätzlich zu dem Markieren jeder Cache-Linie, die Teil einer Gruppenübergabe an persistenten Speicher ist, ist eine RFO-Operation (Read For Ownership) in der Mitte eines atomischen Abschnitts nicht gestattet. Ein RFO ist eine Operation in Cachekohärenzprotokollen. Die RFO-Operation ruft die letzte verfügbare Version von Daten entsprechend dieser Adresse in den Prozessor-Cache ab. Das Abrufen kann aus Hauptspeicher (DRAM) oder persistentem Speicher oder aus einem privaten Cache in einem anderen Kern erfolgen. Das Abrufen erfolgt typischerweise von dem Cache eines anderen Kerns aus, wenn durch den anderen Kern gerade in dieselbe Adresse geschrieben wurde und sie noch nicht aus dem Cache dieses Kerns ausgeräumt wurde, so dass die letzte Version von Daten sich in dem privaten Cache des anderen Kerns befindet.
-
Der Vorgabezustand für das „Nicht-Ausräumen“-Bit 312 ist gelöscht (zum Beispiel eine logische „0“), das heißt, Ausräumen der Cache-Linie bei einem Stromausfall. Das Master-Sperrbit dient als Sperrung für die „Nicht-Ausräumen“-Bit 312 in einem L1-Datencache im Kern. Während die Master-Sperrung gesetzt ist, ist das „Nicht-Ausräumen“-Bit in jeder Cache-Linie, in der Daten gespeichert sind, gesetzt (zum Beispiel auf logisch „1“ gesetzt). Wenn zu diesem Zeitpunkt ein Stromausfall auftritt, wurden keine der Speichervorgänge in L1-Cache seit die Prozessoranweisung ANFANG_GRUPPE_ÜBERGABE ausgeführt wurde, in persistenten Speicher 128 ausgeräumt. Die Verarbeitung wird mit Block 406 fortgesetzt.
-
In Block 406 wird als Reaktion auf eine durch den Kern 102 ausgeführte Anweisung ENDE_GRUPPE_ÜBERGABE das Master-Sperrbit gelöscht (zum Beispiel auf „0“ gesetzt), um anzugeben, dass die Daten für die Gruppe von Schreibvorgängen, die zusammen übergeben werden sollen, im L1-Datencache 132b gespeichert wurden. Wenn zu diesem Zeitpunkt ein Stromausfall auftritt, werden alle Cache-Linien 300 im L1-Datencache 132b in den persistenten Speicher 128 geschrieben, selbst die Cache-Linien 300 mit dem gesetzten „Nicht-Ausräumen“-Bit 312, weil das Master-Sperrbit gelöscht ist und der Zustand des „Nicht-Ausräumen“-Bit 312 für jede Cache-Linie im L1-Datencache 132b ignoriert wird. Das Master-Sperrbit wird verwendet, so dass das Löschen jedes „Nicht-Ausräumen“-Bit 312 am Ende einer Gruppenübergabe atomisch ist. Die Verarbeitung wird mit Block 408 fortgesetzt.
-
In Block 408 werden die „Nicht-Ausräumen“-Bit 312, die für die Cache-Linien 300 im L1-Datencache 132b gesetzt sind, gelöscht (zum Beispiel auf logisch „0“ gesetzt). Die Verarbeitung wird mit Block 410 fortgesetzt.
-
In Block 410 werden die in dem Datenblock 304 in den Cache-Linien 300 gespeicherten Daten in persistenten Speicher 128 geschrieben, und die Cache-Linien 300 im L1-Datencache 132b können zum Speichern anderer Daten verwendet werden. Die Verarbeitung ist abgeschlossen.
-
Es wurde eine Ausführungsform beschrieben, bei der die Größe der atomischen Region innerhalb der Größe des L1-Datencache 132b liegt. Wenn die Größe der atomischen Region größer als die Größe des L1-Datencache 132b ist, kann anstelle des Durchführens des wie in Verbindung mit 4 beschriebenen atomischen Ausräumens ein Undo-Log oder Redo-Log in einer anderen Region des persistenten Speichers 128 gespeichert werden, um die Schreibvorgänge in den persistenten Speicher 128 rückgängig zu machen oder wieder durchzuführen, wenn während einer Übergabe einer atomischen Gruppe ein Stromausfall auftritt. Um die Schreibvorgänge rückgängig zu machen, wird eine Schattenkopie der ursprünglichen Daten im persistenten Speicher 128 gespeichert, so dass, wenn während einer Übergabe einer atomischen Gruppe ein Stromausfall auftritt, die Schattenkopie abgerufen wird. Um die Schreibvorgänge wieder durchzuführen, werden die Gruppenübergabedaten an einen anderen Ort im persistenten Speicher 128 geschrieben (write-ahead), so dass, wenn während der Übergabe der atomischen Gruppe der Stromausfall auftritt, das Datenschreiben nach dem Wiederherstellen der Stromversorgung aus dem anderen persistenten Ort wieder aufgenommen werden und die Übergabe der atomischen Gruppe abgeschlossen werden kann.
-
Wenn die Größe der atomischen Region innerhalb der Größe des L1-Datencache 132b liegt und eine Cache-Linie aufgrund eines Konflikts geräumt wird, wird die Transaktion abgebrochen, und anstelle des Durchführens des atomischen Ausräumens wird wie zuvor beschrieben das Undo-Log oder Redo-Log verwendet.
-
Bei einer anderen Ausführungsform kann die Größe der atomischen Region innerhalb der Größe der Cache-Hierarchie liegen, statt nur innerhalb des Cache der ersten Ebene in der Cache-Hierarchie (L1-Datencache 132b). Bei einer Ausführungsform umfasst die Cache-Hierarchie den L1-Datencache 1132b und den L2-Cache 106 im Kern 102. Bei einer anderen Ausführungsform umfasst zusätzlich zu dem L1-Datencache 132b und dem L2-Cache 106 im Kern 102 die Cache-Hierarchie externen DRAM-Cache (zum Beispiel flüchtigen Speicher 126).
-
In einer Cache-Hierarchie mit Mehrebenen-Caches schließt, wenn alle Blöcke in dem Cache der höheren Ebene auch in dem Cache der niedrigeren Ebene anwesend sind, der Cache der niedrigeren Ebene den Cache der höheren Ebene ein. Wenn der Cache der niedrigeren Ebene Blöcke enthält, die in dem Cache der höheren Ebene nicht anwesend sind, ist der Cache der niedrigeren Ebene ausschließlich des Cache der höheren Ebene.
-
In einer exklusiven Cache-Hierarchie gibt es nur eine Kopie der Daten zwischen allen Ebenen, das heißt L1, L2 und L3 (dem Cache der letzten Ebene (LLC)). Die „Nicht-Ausräumen“-Bit werden vererbt, wenn eine Cache-Linie aus einer Cache-Ebene in der Cache-Hierarchie in eine andere Cache-Ebene geräumt wird.
-
In einer inklusiven Cache-Hierarchie besitzt jede Ebene unter jeder gegebenen Ebene dieselbe Kopie der Daten, das heißt, die letzte Ebene, (die die größte Kapazität aufweist), speichert eine Übermenge der in den L1- und L2-Caches gespeicherten Daten. Ähnlich ist L2 eine Übermenge von L1. Angesichts dieser Duplikation in einer inklusiven Cache-Hierarchie weist nur die „letzte Cache-Ebene“ (L2 oder L3) in der Cache-Hierarchie „Nicht-Ausräumen“-Bit auf.
-
Flussdiagramme wie hier dargestellt geben Beispiele für Sequenzen verschiedener Prozesshandlungen. Die Flussdiagramme können Operationen, die durch eine Software- oder Firmwareroutine auszuführen sind, sowie physische Operationen angeben. Bei einer Ausführungsform kann ein Flussdiagramm den Zustand eines Automaten (FSM) darstellen, der in Hardware und/oder Software implementiert werden kann. Obwohl sie in einer bestimmten Sequenz oder Reihenfolge gezeigt sind, kann die Reihenfolge der Handlungen, sofern es nicht anders angegeben wird, modifiziert werden. Die dargestellten Ausführungsformen sollten deshalb nur als Beispiel aufgefasst werden, und der Prozess kann in einer anderen Reihenfolge ausgeführt werden und manche Aktionen können parallel ausgeführt werden. Außerdem können eine oder mehrere Aktionen bei verschiedenen Ausführungsformen weggelassen werden; somit sind nicht alle Handlungen in jeder Ausführungsform erforderlich. Es sind andere Prozessflüsse möglich.
-
Soweit hier verschiedene Operationen oder Funktionen beschrieben werden, können sie als Softwarecode, Befehle, eine Konfiguration und/oder Daten beschrieben oder definiert werden. Der Inhalt kann direkt ausführbar („Objekt-“ oder „ausführbares-Programm“-Form), Quellcode oder Differenzcode („Delta“ oder „Patch“-Code) sein. Der Softwareinhalt der hier beschriebenen Ausführungsformen kann über einen Herstellungsartikel mit dem Inhalt darauf gespeichert oder über ein Verfahren zum Betreiben einer Kommunikationsschnittstelle zum Senden von Daten über die Kommunikationsschnittstelle bereitgestellt werden. Ein maschinenlesbares Speicherungsmedium kann eine Maschine zum Durchführen der beschriebenen Funktionen oder Vorgänge veranlassen und beinhaltet einen beliebigen Mechanismus, der Informationen in einer Form speichert, die für eine Maschine (z. B. eine Rechenvorrichtung, ein elektronisches System usw.) zugänglich ist, wie etwa beschreibbare/nichtbeschreibbare Medien (z. B. Nur-Lese-Speicher (ROM), Direktzugriffsspeicher (RAM), Magnetplattenspeicherungsmedien, optische Speicherungsmedien, Flash-Speichervorrichtungen usw.). Eine Kommunikationsschnittstelle beinhaltet einen beliebigen Mechanismus, der an ein beliebiges eines festverdrahteten, drahtlosen, optischen usw. Mediums ankoppelt, um mit einer anderen Vorrichtung zu kommunizieren, wie etwa eine Speicherbusschnittstelle, eine Prozessorbusschnittstelle, eine Internetverbindung, eine Plattensteuerung usw. Die Kommunikationsschnittstelle kann durch Bereitstellen von Konfigurationsparametern und/oder Senden von Signalen oder beides konfiguriert werden, um die Kommunikationsschnittstelle zum Bereitstellen eines Datensignals, das den Softwareinhalt beschreibt, vorzubereiten. Auf die Kommunikationsschnittstelle kann über ein(en) oder mehrere Befehle oder Signale, die an die Kommunikationsschnittstelle gesendet werden, zugegriffen werden.
-
Verschiedene hier beschriebene Komponenten können ein Mittel zum Durchführen der beschriebenen Vorgänge oder Funktionen sein. Jede hier beschriebene Komponente beinhaltet Software, Hardware oder eine Kombination von diesen. Die Komponenten können als Softwaremodule, Hardwaremodule, Spezialhardware (z. B. anwendungsspezifische Hardware, anwendungsspezifische integrierte Schaltkreise (ASICs), digitale Signalprozessoren (DSPs) usw.), eingebettete Steuerungen, festverdrahtete Schaltungsanordnung usw. implementiert werden.
-
Abgesehen von dem, was hier beschrieben ist, können verschiedene Modifikationen an den offenbarten Ausführungsformen und Implementierungen der Erfindung vorgenommen werden, ohne von ihrem Schutzumfang abzuweichen.
-
Daher sollten die Veranschaulichungen und Beispiele hier in einem veranschaulichenden und nicht einem begrenzenden Sinn ausgelegt werden. Der Schutzumfang der Erfindung sollte allein durch Bezugnahme auf die Ansprüche, die folgen, bemessen werden.