DE102021123290A1 - Schnelles verfolgen von cache zum unterstützen von aggressivem vorablesen - Google Patents

Schnelles verfolgen von cache zum unterstützen von aggressivem vorablesen Download PDF

Info

Publication number
DE102021123290A1
DE102021123290A1 DE102021123290.2A DE102021123290A DE102021123290A1 DE 102021123290 A1 DE102021123290 A1 DE 102021123290A1 DE 102021123290 A DE102021123290 A DE 102021123290A DE 102021123290 A1 DE102021123290 A1 DE 102021123290A1
Authority
DE
Germany
Prior art keywords
address
bloom filter
cache
value
candidate
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
DE102021123290.2A
Other languages
English (en)
Inventor
Mohit Karve
Naga P. Gorti
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE102021123290A1 publication Critical patent/DE102021123290A1/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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/1021Hit rate improvement
    • 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/602Details relating to cache prefetching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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

Ein Bloom-Filter wird verwendet, um die Inhalte eines Caches zu verfolgen. Ein System überprüft den Bloom-Filter, bevor es entscheidet, ob eine Adresse vorab zu lesen ist (indem es die Adresse in einen Hashwert umwandelt und auf der Grundlage des Hashwerts einen Wert des Bloom-Filters in einem Index überprüft). Dies ermöglicht es dem System, aggressivere Vorablesen-Schemata zu verwenden, indem es das Risiko verschwenderischer, überflüssiger Arbeitsschritte des Vorablesens verringert.

Description

  • HINTERGRUND
  • Fast alle modernen Datenverarbeitungssysteme nutzen in der einen oder anderen Form ein Zwischenspeichern in einem Cache. Caches dienen im Wesentlichen als temporäre lokale Kopie von Informationen. Ein Zugreifen auf einen Cache ist deutlich zeit- und leistungseffizienter als ein Lesen von Daten aus einem längerfristigen und/oder größeren Speicher (wie zum Beispiel einem Festplattenlaufwerk und/oder einem Hauptspeicher).
  • Ein Vorablesen von Daten (prefetching) ist eine immer häufiger anzutreffende Methode, um zu versuchen, die Anzahl von zeitaufwendigen Speicherzugriffen zu verringern, die eine Anwendung benötigt. Wenn eine gewünschte Zeile (sei es eine Anweisung oder ein Datensegment) nicht in einem Cache gespeichert ist, muss sie möglicherweise aus einem längerfristigen Speicher gelesen werden, was mit einem erheblichen Zeitverlust verbunden ist. Das Vorablesen macht sich ein Konzept zunutze, das als „zeitliche Lokalität“ bekannt ist und das erkennt, dass Daten/Anweisungen häufig in kleinen Gruppen aufgerufen werden. Wenn zum Beispiel Daten unter einer Adresse 0003 aufgerufen werden, deutet die zeitliche Lokalität darauf hin, dass Daten an den Adressen 0004, 0005 und 0006 wahrscheinlich in naher Zukunft aufgerufen werden. So könnten viele Vorablesesysteme beim Erkennen eines Datenabrufs unter der Adresse 0003 die Adressen 0004 bis 0006 präemptiv in den Cache einlesen. Wenn die Adressen 0004 bis 0006 tatsächlich als nächstes aufgerufen werden, führen diese Aufrufe auf diese Weise zu Cache-Treffern.
  • KURZDARSTELLUNG
  • Einige Ausführungsformen der vorliegenden Offenbarung können als Verfahren veranschaulicht sein. Das Verfahren umfasst ein Vorhersagen einer in Frage kommenden Adresse. Das Verfahren umfasst darüber hinaus ein Berechnen eines Hashwertes der in Frage kommenden Adresse. Das Verfahren umfasst auch ein Überprüfen eines Bloom-Filters auf der Grundlage des Hashwerts. Das Verfahren umfasst auch ein Feststellen (auf der Grundlage des Überprüfens), dass unter der in Frage kommenden Adresse gespeicherte Informationen vorab zu lesen sind.
  • Einige Ausführungsformen der vorliegenden Offenbarung können auch als Computerprogrammprodukt veranschaulicht sein, das ein durch einen Computer lesbares Speichermedium aufweist, auf dem Programmanweisungen enthalten sind, wobei die Programmanweisungen von einem Computer ausführbar sind, um den Computer dazu zu veranlassen, das vorstehend erörterte Verfahren durchzuführen.
  • Einige Ausführungsformen der vorliegenden Offenbarung können als System veranschaulicht sein. Das System kann einen Speicher und eine Verarbeitungseinheit wie zum Beispiel eine Steuereinheit oder eine zentrale Verarbeitungseinheit (CPU) aufweisen. Die Verarbeitungseinheit kann so konfiguriert sein, dass sie Anweisungen ausführt, um das vorstehend erörterte Verfahren durchzuführen.
  • Die vorstehende Zusammenfassung hat nicht den Zweck, jede veranschaulichte Ausführungsform oder jede Umsetzung der vorliegenden Offenbarung zu beschreiben.
  • Figurenliste
  • Die in der vorliegenden Anmeldung enthaltenen Zeichnungen sind in die Beschreibung eingebunden und bilden einen Teil davon. Sie veranschaulichen Ausführungsformen der vorliegenden Offenbarung und dienen gemeinsam mit der Beschreibung dazu, die Grundgedanken der Offenbarung zu erklären. Die Zeichnungen veranschaulichen lediglich bestimmte Ausführungsformen und schränken die Offenbarung nicht ein. Merkmale und Vorteile verschiedener Ausführungsformen des beanspruchten Gegenstands werden im Verlauf der folgenden „Ausführlichen Beschreibung“ und unter Bezugnahme auf die Zeichnungen ersichtlich, in denen gleiche Zahlen gleiche Teile bezeichnen und in denen:
    • 1 ein Cache-Überwachungsverfahren auf höherer Ebene veranschaulicht, das ein Überprüfen von Bloom-Filter-Inhalten umfasst, bevor entschieden wird, ob Informationen in Übereinstimmung mit mehreren Ausführungsformen der vorliegenden Offenbarung vorab zu lesen sind.
    • 2 veranschaulicht einen Ablaufplan auf höherer Ebene für ein Verfahren zum Aktualisieren eines Bloom-Filters in Übereinstimmung mit mehreren Ausführungsformen der vorliegenden Offenbarung.
    • 3 veranschaulicht beispielhafte Umsetzungen eines Bloom-Filters in Übereinstimmung mit mehreren Ausführungsformen der vorliegenden Offenbarung.
    • 4 veranschaulicht ein Blockschaubild auf höherer Ebene eines beispielhaften Computersystems, das beim Umsetzen von Ausführungsformen der vorliegenden Offenbarung verwendet werden kann.
  • Während die Erfindung für verschiedene Abänderungen und alternative Formen offen ist, sind deren Einzelheiten in den Zeichnungen beispielhaft gezeigt und werden ausführlich beschrieben. Es sollte jedoch klar sein, dass die Absicht darin besteht, die Erfindung nicht auf die bestimmten beschriebenen Ausführungsformen zu beschränken. Im Gegenteil, die Absicht besteht darin, alle Abänderungen, Entsprechungen und Alternativen abzudecken, die unter den Sinngehalt und den Umfang der Erfindung fallen.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Aspekte der vorliegenden Offenbarung betreffen Systeme und Verfahren zum Überwachen von Cache-Inhalten. Speziellere Aspekte betreffen ein System zum Erkennen eines Cache-Treffers, zum Bestimmen von Adressen von für ein Vorablesen in Frage kommenden Informationen, zum Bestimmen, auf der Grundlage eines Bloom-Filters, ob die für ein Vorablesen in Frage kommenden Informationen vorab zu lesen sind, und zum Pflegen des Bloom-Filters auf der Grundlage von Cache-Schreibvorgängen.
  • In dieser gesamten Offenbarung wird auf „Daten“, „Anweisungen“ und „Informationen“ Bezug genommen. Viele Systeme setzen getrennte Daten-Caches (Dcaches) und Anweisungs-Caches (Icaches) um. Systeme und Verfahren, die mit der vorliegenden Offenbarung übereinstimmen, können umgesetzt werden, um die Leistung eines der beiden (oder beider) sowie von Systemen zu verbessern, bei denen nicht zwischen Daten und Anweisungen unterschieden wird. Um Verwirrung zu vermeiden, wird der Begriff „Informationen“ daher als verallgemeinerte Form sowohl von „Daten“ als auch von „Anweisungen“ verwendet. Caches werden hierin als Informationen speichernd beschrieben; dies kann sich auf einen Dcache beziehen, in dem Daten gespeichert sind, oder auf einen Icache, in dem Anweisungen gespeichert sind, sowie auf andere Speicherverwaltungstechniken wie zum Beispiel Auslagerung und Ein-Speicher-Adressraum.
  • In dieser gesamten Offenbarung wird auf „Vorablesen“ sowie auf eine Entscheidung, ob ein Vorablesen durchgeführt werden soll, Bezug genommen. Vorablesen bezieht sich in der Verwendung hierin auf ein „präemptives“ Lesen von Informationen aus einem Speicher in einen Cache (Lesen von Informationen aus einem Speicher in einen Cache, bevor sie benötigt werden). Beim Bestimmen, ob Informationen vorab zu lesen sind, werden diese Informationen hierin als „für ein Vorablesen in Frage kommende Informationen“ und die Speicheradresse, unter der die Informationen gespeichert sind, als „eine in Frage kommende Adresse“ bezeichnet.
  • In dieser gesamten Offenbarung wird auf „Adressen“ und „Indizes“ Bezug genommen. Der hierin verwendete Begriff „Adressen“ bezieht sich auf eine Adresse in einem Speicher (der sich auf flüchtigen Speicher wie zum Beispiel einen Direktzugriffsspeicher (RAM) oder auf nichtflüchtigen Speicher wie zum Beispiel ein Festplattenlaufwerk (HDD), beziehen kann). Informationen werden in einem Speicher unter einer bestimmten Adresse gespeichert. Diese Informationen können auch in dem Cache unter einer bestimmten Cache-Adresse gespeichert sein. Für die Zwecke dieser Offenbarung bezieht sich eine „Adresse“ jedoch auf eine spezifische Stelle in einem Speicher. Diese Offenbarung bezieht sich auf ein oder mehrere Arrays und/oder Vektoren, die zum Verfolgen eines Zustands eines Caches verwendet werden. Eine „Adresse“ von Informationen wird in einen Hashwert umgewandelt (oder anderweitig umgewandelt), um einen entsprechenden „Index“ einer Datenstruktur wie zum Beispiel eines Vektors zu erzeugen. Obwohl die beiden Begriffe zusammenhängen, sind sie nicht austauschbar. Der Wert des in einem bestimmten Index gespeicherten Vektors wird verwendet, um anzugeben, ob die unter der entsprechenden Adresse gespeicherten Informationen derzeit ebenfalls in dem Cache gespeichert sind.
  • In dieser gesamten Offenbarung wird auf Bloom-Filter Bezug genommen. In der Verwendung hierin bezieht sich ein Bloom-Filter auf eine probabilistische Datenstruktur (zum Beispiel ein 1-dimensionales Array oder einen 1-dimensionalen Vektor). Bloom-Filter werden aktualisiert, um die Inhalte eines Caches zu überwachen/zu verfolgen. Üblicherweise weisen Bloom-Filter die Werte „0“ oder „1“ auf (was hierin als ein „binärer“ Bloom-Filter bezeichnet wird). Dieser Wert kann beim Auftreten eines Schreibvorgangs in dem Cache aktualisiert werden, um widerzuspiegeln, dass bestimmte Informationen in dem Cache zwischengespeichert sind. Als veranschaulichendes Beispiel wird in einigen Ausführungsformen jedes Mal dann, wenn Informationen, die unter einer Adresse in dem Speicher gespeichert sind, in den Cache geschrieben werden, ein Wert in einem Index der Bloom-Filter auf „1“ gesetzt, um dies widerzuspiegeln. Der Index hängt von der Speicheradresse der Informationen ab, die in dem Cache zwischengespeichert wurden. In einer beispielhaften Ausführungsform wird die Adresse der in den Cache geschriebenen Information in einen Hashwert umgewandelt, und das in einen Hashwert umgewandelte Ergebnis wird als Index für den Bloom-Filter verwendet. So kann ein System möglicherweise prüfen, ob Informationen unter einer bestimmten Adresse in dem Cache zwischengespeichert sind, indem es die Adresse in einen Hashwert umwandelt und prüft, ob der Wert des Bloom-Filters (bei einem Index des Bloom-Filters, der dem Hashwert der Adresse entspricht) eine „1“ oder eine „0“ aufweist.
  • Insbesondere stellt der für die Adresse verwendete Hash-Algorithmus nicht unbedingt eindeutige Ergebnisse bereit; dies ermöglicht eine Verwendung eines Bloom-Filters mit weniger Indizes als die Größe des Adressraums, allerdings auf Kosten der Möglichkeit des Auftretens von „falsch-positiven Ergebnissen“. Wenn zum Beispiel Adresse A und Adresse B beide in Hashwerte in Form von Index X umgewandelt werden, wird der Wert des Bloom-Filters in Index X aktualisiert, wenn entweder A oder B in dem Cache zwischengespeichert wird. Zum Beispiel führt ein Zwischenspeichern von Informationen in dem Cache, die unter Adresse A gespeichert sind, dazu, dass X auf „1“ gesetzt wird. In einer späteren Überprüfung zum Ermitteln, ob Adresse B in dem Cache zwischengespeichert ist, wird der Index X (der aufgrund von A „1“ ist) überprüft, wobei angegeben wird, dass Adresse B in dem Cache zwischengespeichert ist, unabhängig davon, ob sie es tatsächlich ist. Mit der richtigen Feinabstimmung/Anpassung des Hash-Algorithmus/der Größe des/der Bloom-Filter(s) können erhebliche Leistungsverbesserungen erzielt werden. Ein einfacher Indexberechnungsalgorithmus würde einfach die erforderliche Anzahl von niedrigstwertigen Bits der Cache-Zeilenadresse verwenden (die Adresse nach Weglassen der relativen Adressbits der Cache-Zeile). Zum Beispiel könnten für ein Zugreifen auf einen Bloom-Filter mit 1024 Einträgen nur die 10 niedrigstwertigen Bits der Adresse der Cache-Zeile verwendet werden. Ein ausgefeilterer Hash-Algorithmus könnte eine XOR-Funktion auf zusätzliche Bits der Cache-Zeilenadresse anwenden, um 20 bis 30 Bits der Adresse in einen 10-Bit-Index zu komprimieren. Dies könnte zu einer gleichmäßigeren Verwendung des Bloom-Filters führen. Gleichermaßen kann die Größe des Bloom-Filters selbst in Abhängigkeit von der Größe des Caches und dem Speicherbedarf der üblichen Arbeitslast, die auf dem Prozessor läuft, abgestimmt werden. Es hat sich gezeigt, dass eine Größe von 1024 Einträgen in den meisten Fällen eine angemessene Abdeckung bereitstellt.
  • Wenn eine Adresse aufgerufen wird, werden wahrscheinlich auch die nächsten paar Adressen aufgerufen (auf der Grundlage der zeitlichen Lokalität), wie es für einen Fachmann verständlich ist. Wenn also eine Adresse gelesen wird, kann ein Vorablesen eines Satzes von folgenden Adressen zu einer Reihe von Cache-Treffern führen. Wenn sich die vorab gelesenen, in Frage kommenden Informationen jedoch bereits in dem Cache befänden, wären sie auch ohne das Vorablesen Cache-Treffer gewesen, was das Vorablesen überflüssig und verschwenderisch machen würde. Die Leistungskosten derartiger „ungenutzter“ Vorablesevorgänge können besonders hoch sein, da das Cache-Verzeichnis abgefragt werden muss, um zu überprüfen, ob ein Vorablesevorgang erforderlich ist. Derartige Abfragen verbrauchen sehr viel Leistung, insbesondere bei stark assoziativen Caches. Da das Konzept der zeitlichen Lokalität auch für die Inhalte eines Caches gelten kann, ist es besonders wahrscheinlich, dass das Vorablesen nach einem Cache-Treffer zu einer Verschwendung von Arbeit führt.
  • Als verdeutlichendes Beispiel kann es sich bei Informationen um die Anweisung „Addiere 3 zu X“ handeln. Diese Informationen können in dem Speicher unter einer Adresse 5350 gespeichert sein. Wenn die Adresse 5350 aufgerufen wird, wird die Anweisung „Addiere 3 zu X“ in den Cache geschrieben. Wenn dies geschieht, wird die Adresse (5350) in einen Hashwert umgewandelt. Zum Zwecke eines einfachen Beispiels kann der Hash-Algorithmus einfach die letzten beiden Ziffern der Adresse verwenden, so dass das in einen Hashwert umgewandelte Ergebnis hier 50 ist (die letzten beiden Ziffern von 5350 sind 50). Das in einen Hashwert umgewandelte Ergebnis der Adresse wird als Index eines Bloom-Filters verwendet. Der Wert des Filters in diesem Index wird auf „1“ gesetzt. So wird in diesem Beispiel, wenn die Anweisung „Addiere 3 zu X“ in den Cache geschrieben wird, der 50. Eintrag in einem Vektor auf „1“ gesetzt (diese Werte beruhen der Einfachheit halber auf der Basis 10). Später kann der Bloom-Filter überprüft werden, um festzustellen, ob die unter der Adresse 5350 gespeicherten Informationen (d.h. „Addiere 3 zu X“) in dem Cache zwischengespeichert sind. Um diese Überprüfung durchzuführen, wird die Adresse erneut in einen Hashwert umgewandelt (was wiederum 50 ergibt), wobei das Ergebnis des Hashwertes als Index verwendet wird (es wird also der 50. Wert des Bloom-Filters überprüft). Da der Wert „1“ ist, weist dies darauf hin, dass sich die unter der betreffenden Adresse (5350) gespeicherten Informationen in dem Cache befinden.
  • Wenn die in Frage kommenden Informationen nicht in dem Cache zwischengespeichert sind, kann ein Vorablesen derselben zu Cache-Treffern anstelle von Cache-Fehltreffern führen, was eine erhebliche Zeitersparnis bedeutet. Wenn die in Frage kommenden Informationen jedoch bereits in dem Cache zwischengespeichert sind, ist ein Vorablesen derselben überflüssig und verschwendet somit Leistung, Zeit und Ressourcen, die für das Vorablesen erforderlich sind. Daher können „aggressive“ Vorablesen-Schemata (wie zum Beispiel ein automatisches Vorablesen der 5 auf eine aufgerufene Adresse folgenden Adressen) am Ende mehr Ressourcen kosten als sie einsparen. Folglich stellen Systeme und Verfahren, die mit der vorliegenden Offenbarung übereinstimmen, eine rechnerisch einfache Art und Weise bereit, um festzustellen, ob sich die in Frage kommenden Informationen bereits in dem Cache befinden, und die Entscheidung abzuleiten, ob sie vorab zu lesen sind. Wenn die in Frage kommenden Informationen bereits in dem Cache zwischengespeichert sind, kann ein Verzichten auf das Vorablesen doppelte Arbeit und Leistung einsparen.
  • Ein Pflegen eines oder mehrerer Bloom-Filter zum Verfolgen von Inhalten des Caches kann jedoch vorteilhafterweise ein „aggressives“ Vorablesen-Schema ermöglichen, das andernfalls häufig Leistung verschwenden würde. Einige Systeme setzen mehrere Caches um; einen Anweisungscache (Icache) und einen Datencache (Dcache). Anweisungen werden im Vergleich mit Daten aus Daten-Caches (Dcaches) üblicherweise in relativ kleinen lokalisierten Gruppen gelesen. Zum Beispiel kann es beim Lesen von Daten üblich sein, Tausende von Adressen der Reihe nach zu lesen, während Anweisungen üblicherweise in Gruppen von etwa drei bis zehn gelesen werden. Daher ist es wesentlich wahrscheinlicher, dass ein übliches aggressives Vorablesen im Kontext von Icaches im Vergleich zu Dcaches verschwenderisch ist.
  • Während zum Beispiel ein Vorablesen von mehreren Tausend Datenadressen wahrscheinlich dazu führt, dass zumindest ein Teil der Arbeit vergeudet wird (z.B. ist es wahrscheinlich, dass Informationen, die an einigen der vorab gelesenen Adressen gespeichert sind, bereits in dem Cache zwischengespeichert wurden), bleibt die Zeit- und Energieersparnis durch die anderen Vorablesevorgänge (die potenzielle Cache-Fehltreffer in Cache-Treffer umwandeln) im Allgemeinen eine erhebliche Leistungssteigerung. Bei den kleineren Gruppen, die in Icaches behandelt werden, reichen jedoch schon ein paar vergeudete Vorablesevorgänge aus, damit die Kosten des Vorablesens die Einsparungen aufwiegen. Als einfaches Beispiel sind 50 vergeudete Vorablesevorgänge von 3.000 (ein üblicher Datenlesevorgang) eine unbedeutende Menge an verschwendeten Ressourcen, wenn man sie mit dem Vorteil vergleicht, 2.950 potenzielle Cache-Fehltreffer in Cache-Treffer zu verwandeln. Andererseits können 2 vergeudete Vorablesevorgänge von 3 Vorablesevorgängen (ein üblicher Anweisungslesevorgang) mehr kosten als der daraus resultierende einzelne Cache-Treffer einspart. In Anbetracht dieses Risikos vernachlässigen viele Systeme ein aggressives Vorablesen im Kontext von Icaches, da die möglichen Vorteile durch die damit verbundenen Risiken aufgewogen werden. Daher sind Systeme und Verfahren, die mit der vorliegenden Offenbarung übereinstimmen, besonders vorteilhaft, wenn sie auf Anweisungscaches (Icaches) angewendet werden, obwohl sie schon auch zu Leistungsverbesserungen führen werden, wenn sie auch auf Dcaches angewendet werden.
  • Da Werte eines Bloom-Filters auf „1“ gesetzt werden, wenn in den Cache geschrieben wird, kann der Bloom-Filter im Laufe der Zeit bis zu dem Punkt gesättigt werden, dass alle Werte letztendlich zu „1“ werden, wenn sie nicht überprüft werden. Um dies anzugehen, werden Bloom-Filter in einigen Ausführungsformen in regelmäßigen Abständen geleert, indem alle ihre Werte auf „0“ gesetzt werden. In einigen Ausführungsformen kann der entsprechende Index der Bloom-Filter auf „0“ gesetzt werden, wenn Informationen aus dem Cache entfernt werden, obwohl dies zu falsch negativen Ergebnissen für andere Adressen führen kann, die, wenn sie in einen Hashwert umgewandelt werden, demselben Index entsprechen.
  • Bloom-Filter können in einigen Ausführungsformen hierin als „Lebenszyklen“ aufweisend beschrieben werden und werden in Bezug auf diese Lebenszyklen als „alt“ oder „jung“ bezeichnet. Nachdem ein Bloom-Filter geleert wurde, werden nachfolgende Abfragen des neu geleerten Filters wahrscheinlich negativ ausfallen, unabhängig von dem Zustand des Caches. Im Laufe der Zeit werden Werte in dem Filter von „0“ auf „1“ geändert, wenn Informationen in den Cache geschrieben werden, so dass ein neu geleerter Filter „reift“, wenn in den Cache geschrieben wird. Um die Anzahl von wahrscheinlich falsch-negativen Ergebnissen zu verringern, die von dem „jüngsten“ (zuletzt geleerten) Filter zurückgemeldet werden, werden in vielen Ausführungsformen der vorliegenden Offenbarung mindestens zwei getrennte Filter verwendet. Zum Beispiel kann in einigen Ausführungsformen die Lebensdauer eines Filters auf 10.000 Zyklen festgelegt werden, was bedeutet, dass der Filter alle 10.000 Zyklen geleert wird. Wenn zwei Filter verwendet werden, können die Leerungen jedoch um 5.000 Zyklen versetzt sein.
  • Als veranschaulichendes Beispiel (wobei die vorstehend erläuterte Möglichkeit von „falsch positiven Ergebnissen“ vorübergehend außer Acht gelassen wird) würde eine Datenadresse, die vor 7.000 Zyklen in einem Cache zwischengespeichert wurde (d.h. bevor der jüngere Filter geleert wurde), lediglich in dem älteren Filter erscheinen. Mit anderen Worten: Der ältere Filter würde in dem Index, der dem Hashwert der Adresse entspricht, den Wert „1“ aufweisen, während der jüngere Filter in demselben Index eine „0“ aufweisen würde. Wenn jedoch eine Datenadresse vor 12.000 Zyklen in dem Cache zwischengespeichert wurde (d.h. bevor beide Filter geleert wurden), würde sie in keinem der beiden Filter erscheinen. Wurde hingegen eine Datenadresse in dem Cache zwischengespeichert, nachdem der jüngste Filter geleert wurde, so würden beide Filter darauf hinweisen, dass die Datenadresse in dem Cache zwischengespeichert wurde.
  • Beim Überprüfen der Filter, um festzustellen, ob eine Adresse bereits in dem Cache zwischengespeichert ist, kann ein System die logische ODER-Verknüpfung der beiden (oder mehrerer) Filter anwenden. Dadurch werden die falsch-negativen Ergebnisse des jüngsten Filters verringert. Jedes Mal, wenn in den Cache geschrieben wird, kann der entsprechende Index aller Bloom-Filter auf „1“ gesetzt werden. Daher ist eine Überprüfung der logischen ODER-Verknüpfung der Filter in ihrer Wirkung gleich wie eine Überprüfung des ältesten Filters (wobei ein Anwenden der ODER-Verknüpfung schneller und effizienter sein kann, als zu verfolgen und zu bestimmen, welcher der Filter am längsten nicht mehr geleert wurde).
  • In einigen Ausführungsformen wird der Wert nicht speziell auf „1“ gesetzt, wie bei den vorstehend besprochenen „binären“ Bloom-Filtern, sondern der Wert kann erhöht werden. Auf diese Weise kann ein Bloom-Filter die für eine bestimmte Ausgabe in einen Hashwert umgewandelten Adressen (der in den Cache geschriebenen Informationen) mehrmals darstellen. In einigen Ausführungsformen können mehrere derartige Bloom-Filter umgesetzt sein, wobei ein Überprüfen der Filter das Verwenden eines Maximalwertes für jeden Index umfasst (wenn zum Beispiel zwei Filter [0,0,1,0] und [1,0,3,0] lauten, kann ein System, das die Filter überprüft, einen Wert aus [1,0,3,0] überprüfen). Wie bei dem vorstehend unter Bezugnahme auf „binäre“ Filter (Filter, deren Werte entweder auf „1“ oder ,,0" beschränkt sind) beschriebenen logischen ODER ist dies funktionell identisch mit einer Überprüfung des „ältesten“ Filters. Obwohl sich diese Offenbarung auf die einfacheren Ausführungsformen mit „binären“ Filtern konzentriert, ist dies nicht als Einschränkung zu verstehen. Wie der Fachmann versteht, lassen sich Bloom-Filter mit mehr als zwei möglichen Werten mit minimalen Abänderungen umsetzen.
  • In einigen Ausführungsformen können Entscheidungen dahingehend, ob ein Vorablesen durchgeführt werden soll, darüber hinaus durch Kenntnis von spezifischen Eigenschaften (oder des „Verhaltens“) eines verwendeten Hash-Algorithmus abgeleitet werden. Zum Beispiel können verschiedene Hash-Algorithmen unterschiedlich große „Ausgaberäume“ aufweisen (Bereiche von möglichen Ausgabewerten bei einer Reihe von möglichen Eingaben). Dies kann in Kombination mit einem Verfolgen, wie oft Anweisungen, deren Adressen mittels Hash-Verfahren in eine spezifische Ausgabe umgewandelt werden, in dem Cache zwischengespeichert wurden (um zum Beispiel eine Wahrscheinlichkeit, dass eine bestimmte Anweisung bereits in dem Cache zwischengespeichert wurde, genauer zu bestimmen). Als einfaches Beispiel kann ein Hash-Algorithmus eine Eingabeadresse einfach durch zwei teilen und abrunden, und ein Bloom-Filter kann darauf hindeuten, dass zwei frühere Cache-Schreibvorgänge Informationen gespeichert haben, deren Speicheradresse mittels Hash-Verfahren zu einem bestimmten Index umgewandelt wurde. Wenn eine in Frage kommende Adresse mittels Hash-Verfahren zu dem bestimmten Index umgewandelt wird, kann die Kenntnis, dass es lediglich zwei mögliche Speicheradressen aus dem gesamten Adressraum gibt, die mittels Hash-Verfahren zu diesem bestimmten Index umgewandelt werden können (Index*2 und Index*2 + 1), in Verbindung mit dem Hinweis des Bloom-Filters, dass zwei frühere Cache-Schreibvorgänge zu Speicheradressen gehörten, die mittels Hash-Verfahren zu diesem Index umgewandelt wurden, stark darauf hindeuten, dass die betreffenden Informationen in dem Cache zwischengespeichert sind. Es ist jedoch immer noch möglich, dass diese beiden Cache-Schreibvorgänge darauf zurückzuführen sind, dass Informationen an einer einzelnen Adresse zweimal in den Cache geschrieben wurden, im Gegensatz zu Informationen an zwei Adressen, die beide per Hash-Verfahren zu demselben Index umgewandelt wurden, der einmal in den Cache geschrieben wird. Jedes dieser Ereignisse kann dazu führen, dass der Filter den Wert „2“ aufweist, so dass falsch positive Ergebnisse immer noch möglich sind.
  • Als veranschaulichendes Beispiel könnte eine Ausgabe eines ersten „Hash“-Algorithmus die Endziffer („Einerstellen“) einer eingegebenen Zahl lauten (also würde eine Eingabe von „64“ zu einer Ausgabe von „4“ führen, eine Eingabe von „1024“ würde ebenfalls zu einer identischen Ausgabe von „4“ führen, und eine Eingabe von „4096“ würde zu einer Ausgabe von „6“ führen, usw.). Eine Ausgabe eines zweiten Hash-Algorithmus könnte eine Eingabe sein, die durch 16 geteilt und abgerundet wird (also würde eine Eingabe von „64“ zu einer Ausgabe von „4“ führen, eine Eingabe von „1024“ würde zu einer Ausgabe von „64“ führen, eine Eingabe von „4097“ würde zu einer Ausgabe von „256“ führen, usw.). Insbesondere hat der erste Algorithmus lediglich 10 mögliche Ausgaben, 0 bis 9, so dass in einem System mit mehr als 10 möglichen getrennten Eingaben doppelte Ausgaben unvermeidlich sind. Während die Abrundung des zweiten Algorithmus ebenfalls zu Duplikaten führen kann, hat ein System mit mehr als 159 möglichen Eingaben auch mehr mögliche Ausgaben und damit einen größeren „Ausgaberaum“ als der erste Algorithmus.
  • 1 veranschaulicht ein Cache-Überwachungsverfahren 100 auf höherer Ebene, das ein Überprüfen von Bloom-Filter-Inhalten umfasst, bevor entschieden wird, ob Informationen in Übereinstimmung mit mehreren Ausführungsformen der vorliegenden Offenbarung vorab zu lesen sind. Das Verfahren 100 kann von einem Computersystem durchgeführt werden, das einen oder mehrere Speicher-Caches umsetzt (wie zum Beispiel ein System 400 aus 4).
  • Das Verfahren 100 umfasst ein Bestimmen eines Satzes von Adressen in Arbeitsschritt 102. In einigen Ausführungsformen kann der Arbeitsschritt 102 als Reaktion auf ein Erkennen eines Cache-Treffers durchgeführt werden. In einigen Ausführungsformen kann der Arbeitsschritt 102 in regelmäßigen Abständen als Reaktion auf eine Leseanforderung durchgeführt werden (zum Beispiel nach jeweils 5 Leseanforderungen, nach jeder Leseanforderung usw.). Der Arbeitsschritt 102 kann ein Bestimmen einer Adresse einer ersten Leseanforderung umfassen. Der Arbeitsschritt 102 umfasst darüber hinaus ein Bestimmen einer oder mehrerer nachfolgender Adressen auf der Grundlage der Adresse der ersten Leseanforderung. Die eine oder die mehreren nachfolgenden Adressen werden als der Satz von „für ein Vorablesen in Frage kommenden Adressen“ verwendet. In einigen Ausführungsformen kann der Satz von für ein Vorablesen in Frage kommenden Adressen lediglich eine einzelne Adresse umfassen (wie zum Beispiel die Adresse, die unmittelbar auf die Adresse der ersten Leseanforderung folgt). Eine andere Anzahl von für ein Vorablesen in Frage kommenden Adressen ist ebenfalls möglich (zum Beispiel die folgenden 3 Adressen, die folgenden 5 Adressen, usw.). In Ausführungsformen, in denen das Verfahren 100 im Kontext eines Daten-Caches durchgeführt wird, kann der Satz wesentlich mehr Adressen enthalten (zum Beispiel die folgenden 5.000 Adressen).
  • Das Verfahren 100 umfasst darüber hinaus in Arbeitsschritt 104 ein Erzeugen von Hashwerten der für ein Vorablesen in Frage kommenden Adressen. Es können verschiedene Hash-Verfahren genutzt werden; zum Beispiel kann der Arbeitsschritt 104 in einigen Ausführungsformen ein Durchführen einer oder mehrerer mathematischer Operationen an der Adresse (wie zum Beispiel ein Dividieren durch eine Potenz von 2), eines Abschneidens einer vorgegebenen Anzahl von Bytes der Adresse usw. umfassen. In einigen Ausführungsformen kann der Arbeitsschritt 104 ein Umsetzen eines oder mehrerer bekannter Hash-Algorithmen an der Adresse umfassen.
  • In einigen Ausführungsformen kann der Arbeitsschritt 104 für jede in Frage kommende Adresse durchgeführt werden. In einigen Ausführungsformen wird der Arbeitsschritt 104 möglicherweise lediglich für eine erste Adresse aus dem Satz von in Frage kommenden Adressen durchgeführt; in derartigen Ausführungsformen kann eine Entscheidung bezüglich eines Vorablesens auf der Grundlage der ersten in Frage kommenden Adresse getroffen und dann auf den Rest angewendet werden.
  • Das Verfahren 100 umfasst darüber hinaus in Arbeitsschritt 106 ein Verwenden des Hashwertes bzw. der Hashwerte zum Indexieren in die Bloom-Filter. Der Arbeitsschritt 106 kann zum Beispiel ein Nutzen eines Hashwertes einer in Frage kommenden Adresse als Index eines Vektors umfassen. In einigen Ausführungsformen können mehrere Bloom-Filter genutzt werden, um eine Wahrscheinlichkeit eines falsch-negativen Ergebnisses zu verringern (wie nachstehend näher erläutert wird). In einigen dieser „Multi-Filter“-Ausführungsformen kann der Arbeitsschritt 106 ein Auswählen eines einzelnen Filters und ein Überprüfen des Wertes in dem aus Hashwerten abgeleiteten Index umfassen. Zum Beispiel kann der Arbeitsschritt 106 den „ältesten“ Bloom-Filter überprüfen (der „älteste“ ist der Bloom-Filter, der am längsten seit dem Leeren verwendet wird). Um den Aufwand für ein Verfolgen des „Alters“ der verschiedenen Filter zu verringern, kann der Arbeitsschritt 106 durch „Überprüfen“ in einigen Ausführungsformen stattdessen die logische ODER-Verknüpfung aller Filter durchführen und den Index des resultierenden Vektors überprüfen. Insbesondere kann das „Alter“ der Filter weiterhin überwacht werden (um festzustellen, ob ein Filter geleert werden sollte), aber es darf nicht dieselbe Hardwarestruktur für beide Funktionen verwendet werden. Zum Beispiel darf eine erste Struktur lediglich den Zeitablauf verfolgen und den ältesten Filter zurücksetzen, während eine zweite Struktur alle Filter lesen und sie einer ODER-Verknüpfung unterziehen darf.
  • Als veranschaulichendes Beispiel kann der Arbeitsschritt 106, wenn ein System zwei Bloom-Filter nutzt und der in Arbeitsschritt 104 erzeugte Hashwert einer in Frage kommenden Adresse hexadezimal 10FB ist, ein Erzeugen eines Vektors V umfassen, indem die ODER-Verknüpfung der beiden Bloom-Filter durchgeführt und überprüft wird, ob V(4347) eine „1“ oder eine „0“ ist (wobei zu beachten ist, dass hexadezimal 10FB gleichwertig zu dezimal 4347 ist).
  • Das Verfahren 100 umfasst darüber hinaus ein Ermitteln in Arbeitsschritt 108, ob die in Frage kommende Adresse wahrscheinlich ein Cache-Treffer sein wird, indem das Ergebnis aus Arbeitsschritt 106 analysiert wird. Zum Beispiel wird in einigen Ausführungsformen, wenn der Wert bei dem in Arbeitsschritt 106 geprüften Index eine „1“ ist, die entsprechende in Frage kommende Adresse als wahrscheinlich in dem Cache gespeichert angesehen (108 „Ja“). Insbesondere tritt durch die Verwendung von Bloom-Filtern die Möglichkeit von falsch positive Ergebnissen auf; selbst wenn die in Arbeitsschritt 108 getroffene Feststellung nahelegt, dass die Informationen der in Frage kommenden Adresse wahrscheinlich in dem Cache vorhanden sind (was bedeutet, dass eine Suche nach der in Frage kommenden Adresse wahrscheinlich zu einem Cache-Treffer führt), ist folglich ein Cache-Fehltreffer immer noch möglich. Allerdings können die Ressourcen, die durch das Verfahren 100 eingespart werden können, ein aggressiveres Vorablese-Schema ermöglichen, was üblicherweise dieses Risiko insgesamt aufwiegt.
  • Es gibt keine Garantie dafür, dass die in Arbeitsschritt 102 ermittelten, für ein Vorablesen in Frage kommenden Adressen genaue Vorhersagen darstellen; unabhängig von einem Zustand des Caches kann es sein, dass die in den Arbeitsschritten 104 bis 108 bewertete Adresse trotzdem letztendlich nicht aufgerufen wird. Allerdings gehört diese Möglichkeit zu dem Konzept des Vorablesens im Allgemeinen dazu und hat sich als vertretbares Risiko erwiesen.
  • Wenn für die in Frage kommende Adresse kein Cache-Treffer erwartet wird (108 „Nein“), fährt das Verfahren 100 mit Arbeitsschritt 112 fort. Der Arbeitsschritt 112 umfasst ein Vorablesen der unter der in Frage kommenden Adresse gespeicherten Informationen. Zum Beispiel kann der Arbeitsschritt 112 ein Zugreifen auf einen Speicher und ein Schreiben der unter der in Frage kommenden Adresse gespeicherten Informationen in den Cache umfassen. Der Arbeitsschritt 112 kann auch ein Verursachen eines Entfernens einer Zeile aus dem Cache umfassen, wie es bei üblichen Cache-Arbeitsschritten gängig ist.
  • Das Verfahren 100 umfasst darüber hinaus ein Aktualisieren des/der Bloom-Filter(s) in Arbeitsschritt 114. Unabhängig davon, ob die in Frage kommende Adresse wahrscheinlich ein Cache-Treffer ist oder sogar ob die in Frage kommende Adresse tatsächlich aufgerufen wird, werden die Bloom-Filter aktualisiert, damit sie die tatsächlich in den Cache geschriebenen Inhalte widerspiegeln. Der Arbeitsschritt 114 kann zum Beispiel ein Setzen von Werten der Filter auf „1“ auf der Grundlage von in den Cache geschriebenen Informationen umfassen. Zum Beispiel wird in einigen Ausführungsformen, unabhängig von der nächsten aufgerufenen Adresse, diese nächste Adresse in einen Hashwert umgewandelt (auf ähnliche Weise wie bei Arbeitsschritt 104), und die in einen Hashwert umgewandelte Adresse wird als Index der Bloom-Filter verwendet. Der Wert der Bloom-Filter in diesem Index kann auf „1“ gesetzt werden, unabhängig von seinem vorherigen Zustand. Insbesondere werden die Bloom-Filter auch dann aktualisiert, wenn die nächste aufgerufene Adresse nicht zu den in Frage kommenden Adressen gehört, um widerzuspiegeln, dass die unter der nächsten Adresse gespeicherten Informationen in den Cache geschrieben werden. In einigen Ausführungsformen umfasst der Arbeitsschritt 114 ein Warten darauf, dass Informationen tatsächlich in den Cache geschrieben werden, bevor Werte in dem entsprechenden Index auf „1“ gesetzt werden.
  • Wenn für die in Frage kommende Adresse ein Cache-Treffer erwartet wird (108 „Ja“), geht das Verfahren 100 von Arbeitsschritt 108 zu Arbeitsschritt 114 über. Insbesondere umfasst der Arbeitsschritt 114 nicht ein Vorablesen der in Frage kommenden Adresse, da dies vermutlich eine Verschwendung von Ressourcen darstellt, da die unter der in Frage kommenden Adresse gespeicherten Informationen vermutlich bereits in dem Cache vorhanden sind (obwohl dies aufgrund eines falsch positiven Ergebnisses falsch sein kann). Stattdessen fährt das Verfahren 100 mit einem Aktualisieren der Bloom-Filter in Arbeitsschritt 114 fort. Der Prozess des Pflegens und/oder Aktualisierens der Bloom-Filter wird darüber hinaus unter Bezugnahme auf 2 näher beschrieben.
  • 2 veranschaulicht einen Ablaufplan auf höherer Ebene für ein Verfahren 200 zum Aktualisieren eines Bloom-Filters in Übereinstimmung mit mehreren Ausführungsformen der vorliegenden Offenbarung. Das Verfahren 200 kann von einem Computersystem durchgeführt werden, das einen oder mehrere Speicher-Caches umsetzt (wie zum Beispiel das System 400 aus 4). Das Verfahren 200 kann es einem System ermöglichen, einen oder mehrere Bloom-Filter zu pflegen und/oder zu aktualisieren, um Cache-Inhalte zu verfolgen (was wiederum vorteilhafterweise eine aggressivere Vorablesen-Richtlinie ermöglicht).
  • Das Verfahren 200 umfasst bei Arbeitsschritt 202 ein Ermitteln einer Adresse (in dem Speicher) von Informationen, die einer Anfrage zugehören. Je nach Ausführungsform kann die in Arbeitsschritt 202 ermittelte Adresse Informationen entsprechen, die vor Kurzem aus dem Speicher in den Cache geschrieben wurden, gerade dorthin geschrieben werden oder in Kürze dorthin geschrieben werden (zum Beispiel kann es sich bei der Adresse um die Speicheradresse einer Anweisung handeln, die vor Kurzem von einer Anwendung aufgerufen wurde). In einigen Ausführungsformen kann die Adresse Informationen entsprechen, die bereits in dem Cache vorhanden sind. Wenn zum Beispiel eine Anwendung eine Anweisung aufruft und eine anschließende Cache-Suche einen Cache-Treffer ergibt, kann der Arbeitsschritt 202 ein Ermitteln der Adresse der Anweisung umfassen, selbst wenn diese nicht vor Kurzem aus dem Speicher gelesen wurde.
  • Das Verfahren 200 umfasst darüber hinaus in Arbeitsschritt 204 ein Erkennen eines Cache-Schreibvorgangs und/oder eines Cache-Treffers. Der Arbeitsschritt 204 kann zum Beispiel ein Erkennen umfassen, dass es sich bei der Anforderung, die der in Arbeitsschritt 202 ermittelten Adresse zugehörig ist, um einen Aufruf- oder Lesevorgang handelt, der zu einem Cache-Schreibvorgang führen wird. In einigen Ausführungsformen hat der in Arbeitsschritt 204 erkannte Cache-Schreibvorgang möglicherweise noch nicht stattgefunden (zum Beispiel kann der Arbeitsschritt 204 ein Erkennen eines Arbeitsschritts umfassen, der einem Cache-Schreibvorgang unmittelbar vorausgeht, usw.). In einigen Ausführungsformen kann der Arbeitsschritt 204 ein Erkennen eines Cache-Treffers umfassen.
  • Das Verfahren 200 umfasst darüber hinaus ein Erzeugen eines Hashwertes der Adresse in Arbeitsschritt 206. Es können verschiedene Hash-Verfahren genutzt werden; zum Beispiel kann der Arbeitsschritt 206 in einigen Ausführungsformen ein Durchführen einer oder mehrerer mathematischer Operationen an der Adresse (wie zum Beispiel ein Dividieren durch einen Faktor), eines Abschneidens einer vorgegebenen Anzahl von Bytes der Adresse usw. umfassen. In einigen Ausführungsformen kann der Arbeitsschritt 206 ein Umsetzen eines oder mehrerer bekannter Hash-Algorithmen an der Adresse umfassen.
  • Das Verfahren 200 umfasst darüber hinaus in Arbeitsschritt 208 ein Ermitteln, ob eine Lebensdauer des Bloom-Filters abgelaufen ist. Der Arbeitsschritt 208 kann zum Beispiel ein Lesen, Berechnen oder anderweitiges Bestimmen einer Anzahl von Zyklen umfassen, die verstrichen sind, seit der Filter zum letzten Mal geleert wurde, sowie ein Vergleichen dieser Zahl mit einem voreingestellten Höchstwert. Übersteigt die Zahl den Höchstwert, ist die Lebensdauer des Bloom-Filters abgelaufen (208 „Ja“), und das Verfahren 200 fährt in Arbeitsschritt 210 mit dem Leeren des Filters fort. Der Arbeitsschritt 210 kann zum Beispiel ein Setzen jedes Wertes des abgelaufenen Filters auf „0“ umfassen. Neben einer „Zykluszählung“ können auch andere Metriken zum Verfolgen des „Alters“ eines Filters verwendet werden, die hierin ebenfalls berücksichtigt werden, wie zum Beispiel eine verstrichene Zeit, eine Anzahl von Schreibvorgängen (z.B. die Anzahl von Schreibvorgängen in den Filter, den Cache und/oder den Speicher usw.), usw. Das Leeren (z.B. die Arbeitsschritte 208 und 210) kann außerhalb des Verfahrens 200 durchgeführt werden (mit anderen Worten, das Leeren ist nicht vom Durchführen des Arbeitsschritts 204 abhängig).
  • Nachdem ein abgelaufener Filter in Arbeitsschritt 208 geleert wurde, oder wenn die Lebensdauer des Bloom-Filters noch nicht abgelaufen ist (208 „Nein“), fährt das Verfahren 200 mit dem Aktualisieren eines Wertes des Bloom-Filters in Arbeitsschritt 212 fort. Der Arbeitsschritt 212 kann zum Beispiel ein Setzen eines Wertes in einem spezifischen Index des Bloom-Filters auf „1“ umfassen. Der spezifische Index, dessen Wert abgeändert wird, wird auf der Grundlage der in einen Hashwert umgewandelten Adresse bestimmt, die in Arbeitsschritt 206 erzeugt wurde. Wenn zum Beispiel die in Arbeitsschritt 202 ermittelte Adresse „4050“ lautet und die Ausgabe des in Arbeitsschritt 206 umgewandelten Hashwertes „50“ ist, kann der Arbeitsschritt 212 ein Setzen des 50. Wertes des Bloom-Filters auf „1“ umfassen.
  • In einigen Ausführungsformen kann der Arbeitsschritt 212 den Wert um 1 erhöhen, anstatt den Wert strikt auf „1“ zu setzen. Wenn zum Beispiel der Hashwert der Adresse wiederum „50“ ist, der 50. Wert des Bloom-Filters aber bereits „1“ ist, kann der Arbeitsschritt 212 den 50. Wert des Bloom-Filters auf „2“ setzen. Dadurch kann der Bloom-Filter wirksam verfolgen, wie oft diese Informationen an einer Adresse, die einem bestimmten Index entspricht, in den Cache geschrieben wurden. Insbesondere handelt es sich dabei nicht unbedingt darum, wie oft die Informationen unter einer bestimmten Adresse in den Cache geschrieben wurden, da einige Adresseneingaben in den Hash-Algorithmus/die Hash-Algorithmen zu identischen Ausgaben führen können (derselbe Sachverhalt, der die Möglichkeit von falsch-positiven Ergebnissen mit sich bringt). Wenn sich zum Beispiel drei Adressen einen Index „teilen“ (was bedeutet, dass alle drei Adressen zu demselben Hashwert-Ergebnis führen), könnte ein Filterwert von 4 bedeuten, dass eine Adresse dreimal in den Cache geschrieben wurde, eine zweite Adresse einmal in den Cache geschrieben wurde und eine dritte Adresse nicht in den Cache geschrieben wurde (seit der letzten Leerung). In „den Wert erhöhenden“ Ausführungsformen kann statt einer ODER-Verknüpfung der Filter stattdessen ein MAX-Wert angewendet werden.
  • Das Verfahren 200 kann für alle Filter durchgeführt werden. In Ausführungsformen, die mehrere Filter umfassen, können Aspekte des Verfahrens 200 (wie zum Beispiel Arbeitsschritt 212) an jedem Filter entweder seriell oder parallel durchgeführt werden. Das Verfahren 200 endet bei 212.
  • 3 veranschaulicht beispielhafte Umsetzungen 300, 310 und 320 eines Bloom-Filters in Übereinstimmung mit mehreren Ausführungsformen der vorliegenden Offenbarung. 3 umfasst Beispiele für ein Überprüfen einer Reihe von Bloom-Filtern mit einem bestimmten Index (300), ein Setzen eines bestimmten Index von Bloom-Filtern (310) und ein Leeren eines Bloom-Filters (320). Einer einfacheren Erklärung halber umfassen diese Beispiele Bloom-Filter mit 8 Werten, wobei der zu prüfende und/oder zu aktualisierende Wert der vierte ist (zum Beispiel kann eine Adresse in einen Hashwert umgewandelt worden sein und den Index 4 erzeugt haben). Diese Beispiele sind durch gestrichelte Linien 301 und 303 getrennt.
  • Das Überprüfen von Bloom-Filtern (300) kann ein Durchführen einer logischen ODER-Verknüpfung jedes Bloom-Filters umfassen. In 3 sind drei Bloom-Filter (302, 304 und 306) bildlich dargestellt, die geprüft werden. Ein Ergebnisvektor 308 wird durch eine logische ODER-Verknüpfung der Filter 302, 304 und 306 erzeugt. Wenn der vierte Wert (ausgehend von links) des Ergebnisvektors 308 eine „1“ ist, kann dies darauf hinweisen, dass sich die Informationen, deren Adresse per Hash-Verfahren in den Index „4“ umgewandelt wurde, in dem Cache befinden. Da dieser Ergebnisvektor tatsächlich derselbe ist wie der „älteste“ Bloom-Filter, kann der Ergebnisvektor selbst als weiterer Bloom-Filter betrachtet werden.
  • In einigen Ausführungsformen kann dieser Ergebnisvektor in jedem Zyklus erzeugt werden. Dies kann vorteilhafterweise die Zeit verkürzen, die benötigt wird, um zu überprüfen, ob eine Adresse wahrscheinlich zu einem Cache-Treffer führt, da der Ergebnisvektor im Voraus erzeugt wird. Dies kann jedoch zu einer zusätzlichen elektrischen Leistungsaufnahme führen, da wahrscheinlich nur ein einzelner Wert des Ergebnisvektors überprüft wird, bevor der gesamte Vektor ersetzt wird. So wird in einigen Ausführungsformen der Ergebnisvektor erst dann erzeugt, wenn der betreffende Index bekannt ist, woraufhin der Wert jedes Bloom-Filters in diesem Index überprüft wird (wobei die Überprüfung sofort endet, wenn eine „1“ gefunden wird). Dies kann zu Energieeinsparungen führen, ist aber wahrscheinlich langsamer als der Ergebnisvektor-Ansatz, da dies eine Überprüfung mehrerer Werte erfordert und erst nach der Bestimmung des Index beginnt.
  • Wenn Informationen, deren Adresse per Hash-Verfahren in den Index „4“ umgewandelt wird, in den Cache geschrieben werden, werden alle Bloom-Filter aktualisiert, indem ihr vierter Wert auf „1“ gesetzt wird, wie bei 310 bildlich dargestellt ist. In 3 stellen die Filter 312, 314 und 316 aktualisierte Versionen der Filter 302, 304 bzw. 306 dar. Während der vierte Wert der Filter 302 und 304 „0“ betrug, wird insbesondere der vierte Wert der Filter 312 und 314 auf „1“ gesetzt. Obwohl der vierte Wert des Filters 306 bereits auf „0“ war, kann der Filter 316 in einigen Ausführungsformen noch einem Schreibvorgang unterzogen werden (wobei die „1“ mit einer anderen „1“ überschrieben wird). Dies mag zwar überflüssig sein, kann aber auch die Komplexität des Systems verringern. In einigen Ausführungsformen werden Werte überprüft und nur dann überschrieben, wenn das Endergebnis anders ausfallen würde (mit anderen Worten, es wird geprüft, ob der vierte Wert des Filters 306 „1“ ist, und wenn dies der Fall ist, kann er so belassen werden, um Ressourcen zu schonen). In einigen Ausführungsformen kann statt eines Setzens eines bestimmten Wertes auf „1“ stattdessen ein Wert erhöht werden. Zum Beispiel kann der vierte Wert des Filters 316 auf „2“ gesetzt werden (wobei der Wert ausgehend von der „1“ des Filters 306 erhöht wird).
  • Filter können auch in regelmäßigen Abständen geleert werden, wobei ein Beispiel hierfür in Spalte 320 bildlich dargestellt ist. Ein Leeren eines Filters kann ein Setzen aller Werte des Filters auf „0“ umfassen. Wie in 3 bildlich dargestellt ist, wird der Filter 326 (der den Filtern 306 und 316 entspricht) geleert. Wie vorstehend beschrieben, können Filter auf der Grundlage einer Zeit, einer Zyklusanzahl, einer Schreibvorgangsanzahl usw. geleert werden. Zum Beispiel kann ein Filter alle 10.000 Zyklen geleert werden. In Ausführungsformen mit mehreren Filtern (wie zum Beispiel die in 3 dargestellten Beispiele) können die Filter mit der gleichen Häufigkeit, aber versetzt zueinander, geleert werden. Zum Beispiel können die Filter 322, 324 und 326 alle 10.000 Zyklen geleert werden, wobei aber der Filter 326 bei Zyklus X geleert werden kann, der Filter 322 bei Zyklus (X + 3.333) geleert werden kann, der Filter 324 bei Zyklus (X + 6.667) geleert werden kann und der Filter 326 bei Zyklus (X + 10.000) erneut geleert werden kann. In Verbindung mit einem gleichzeitigen Aktualisieren der Filter (wie in Spalte 310 gezeigt) und Durchführen einer logischen ODER-Verknüpfung aller Filter bei deren Überprüfung (wie in Spalte 300 gezeigt) ermöglicht dies, dass der Ergebnisvektor 308 im Wesentlichen die Cache-Inhalte auf der Grundlage der letzten 10.000 Zyklen widerspiegelt (ohne jedoch durch irgendwelche Arbeitsschritte beeinflusst zu werden, die länger als 10.000 Zyklen zurückliegen). Auf diese Weise kann der Ergebnisvektor 308 als relativ schnelles Mittel zum Überprüfen der Cache-Inhalte ohne nennenswerten Aufwand verwendet werden. Die Häufigkeit der Leerungen und die Anzahl von Filtern können auf der Grundlage der Systemkonfiguration angepasst werden. Wenn der Cache eines Systems zum Beispiel besonders klein ist, so dass Inhalte des Caches üblicherweise innerhalb von 5.000 Zyklen nach dem Schreiben entfernt werden, können Filter häufiger geleert werden (z.B. alle 5.000 Zyklen statt alle 10.000 Zyklen), um die Wahrscheinlichkeit zu verringern, dass eine Bloom-Filterprüfung ein „falsch positives Ergebnis“ ergibt.
  • Mit Bezug auf 4 ist ein Blockschaubild auf höherer Ebene des beispielhaften Computersystems 400 gezeigt, das so konfiguriert sein kann, dass es verschiedene Aspekte der vorliegenden Offenbarung durchführt, darunter zum Beispiel die Verfahren 200 bzw. 300. Das beispielhafte Computersystem 400 kann zum Umsetzen eines oder mehrerer der hierin beschriebenen Verfahren oder Module und aller damit verbundenen Funktionen oder Arbeitsschritte (z.B. unter Verwendung einer/eines oder mehrerer Prozessorschaltungen oder Computerprozessoren des Computers) gemäß Ausführungsformen der vorliegenden Offenbarung verwendet werden. In einigen Ausführungsformen können die Hauptkomponenten des Computersystems 400 eine oder mehrere CPUs 402, ein Speicher-Teilsystem 408, eine Terminalschnittstelle 416, eine Speicherschnittstelle 418, eine E/A-(Eingabe/Ausgabe-) Einheitenschnittstelle 420 und eine Netzwerkschnittstelle 422 aufweisen, die alle für den Datenaustausch direkt oder indirekt über einen Speicherbus 406, einen E/A-Bus 414 und eine E/A-Bus-Schnittstelleneinheit 412 zur Datenübertragung zwischen den Komponenten miteinander verbunden sein können.
  • Das Computersystem 400 kann eine oder mehrere programmierbare, vielseitig einsetzbare, zentrale Verarbeitungseinheiten (CPUs) 402 enthalten, von denen einige oder alle einen oder mehrere Kerne 404A, 404B, 404C und 404D umfassen können, die hierin allgemein als CPU 402 bezeichnet werden. In einigen Ausführungsformen kann das Computersystem 400 mehrere Prozessoren enthalten, wie sie für ein relativ großes System üblich sind; in anderen Ausführungsformen kann das Computersystem 400 alternativ jedoch aus einem einzelnen CPU-System bestehen. Jede CPU 402 kann Anweisungen ausführen, die in dem Speicher-Teilsystem 408 auf einem CPU-Kern 404 gespeichert sind, und kann eine oder mehrere Ebenen von integriertem Cache aufweisen.
  • In einigen Ausführungsformen kann das Speicher-Teilsystem 408 einen Halbleiterspeicher mit wahlfreiem Zugriff, eine Speichereinheit oder ein Speichermedium (entweder flüchtig oder nichtflüchtig) zum Speichern von Daten und Programmen aufweisen. In einigen Ausführungsformen kann das Speicher-Teilsystem 408 den gesamten virtuellen Speicher des Computersystems 400 darstellen und kann auch den virtuellen Speicher anderer Computersysteme umfassen, die mit dem Computersystem 400 gekoppelt oder über ein Netzwerk verbunden sind. Bei dem Speicher-Teilsystem 408 kann es sich konzeptionell um eine einzelne monolithische Einheit handeln, wobei es sich aber in einigen Ausführungsformen bei dem Speicher-Teilsystem 408 um eine komplexere Anordnung handeln kann, wie zum Beispiel eine Hierarchie von Caches und anderen Speichereinheiten. Zum Beispiel kann der Speicher in mehreren Ebenen von Caches vorhanden sein, und diese Caches können darüber hinaus nach Funktionen unterteilt sein, so dass ein Cache Anweisungen speichert, während ein anderer Nicht-Befehlsdaten speichert, die von dem Prozessor oder den Prozessoren verwendet werden. Der Speicher kann darüber hinaus verteilt und verschiedenen CPUs oder Gruppen von CPUs zugehörig sein, wie dies in einer beliebigen von verschiedenen so genannten NUMA- (Non-Uniform Memory Access-) Computerarchitekturen bekannt ist. In einigen Ausführungsformen kann der Hauptspeicher oder ein Speicher-Teilsystem 804 Elemente zur Steuerung und zum Verarbeitungsablauf des von der CPU 402 verwendeten Speichers enthalten. Dazu kann eine Speichersteuereinheit 410 gehören.
  • Obwohl der Speicherbus 406 in 4 als eine einzelne Busstruktur gezeigt ist, die einen direkten Datenübertragungspfad zwischen der CPU 402, dem Speicher-Teilsystem 408 und der E/A-Busschnittstelle 412 bereitstellt, kann der Speicherbus 406 in einigen Ausführungsformen mehrere verschiedene Busse oder Datenübertragungspfade aufweisen, die in beliebigen verschiedenen Formen angeordnet sein können, wie zum Beispiel Punkt-zu-Punkt-Verbindungen in hierarchischen, sternförmigen oder netzartigen Konfigurationen, mehrere hierarchische Busse, parallele und redundante Pfade oder jede beliebige andere geeignete Art der Konfiguration. Des Weiteren sind die E/A-Bus-Schnittstelle 412 und der E/A-Bus 414 zwar als einzelne jeweilige Einheiten gezeigt, das Computersystem 400 kann jedoch in einigen Ausführungsformen mehrere E/A-Bus-Schnittstelleneinheiten 412, mehrere E/A-Busse 414 oder beides enthalten. Darüber hinaus sind zwar mehrere E/A-Schnittstelleneinheiten gezeigt, die den E/A-Bus 414 von verschiedenen Datenübertragungspfaden trennen, die zu den verschiedenen E/A-Einheiten führen, doch können in anderen Ausführungsformen einige oder alle der E/A-Einheiten direkt an einen oder mehrere System-E/A-Busse angeschlossen sein.
  • In einigen Ausführungsformen kann es sich bei dem Computersystem 400 um ein Mehrbenutzer-Mainframe-Computersystem, ein Einzelbenutzersystem oder einen Servercomputer oder eine ähnliche Einheit handeln, die so gut wie keine oder gar keine direkte Benutzerschnittstelle aufweist, sondern Anfragen von anderen Computersystemen (Clients) empfängt. Darüber hinaus kann das Computersystem 400 in einigen Ausführungsformen als Desktop-Computer, tragbarer Computer, Laptop- oder Notebook-Computer, Tablet-Computer, Taschencomputer, Telefon, Smartphone, mobile Einheit oder jede andere beliebige geeignete Art von elektronischer Einheit umgesetzt sein.
  • Es wird darauf hingewiesen, dass 4 die typischen Hauptkomponenten des beispielhaften Computersystems 400 bildlich darstellen soll. In einigen Ausführungsformen können jedoch einzelne Komponenten eine höhere oder niedrigere Komplexität aufweisen als in 4 dargestellt ist, es können andere als die in 4 gezeigten oder zusätzliche Komponenten vorliegen, und die Anzahl, Art und Konfiguration derartiger Komponenten kann variieren.
  • In der gesamten Offenbarung wird darauf verwiesen, dass verschiedene Werte eines Bloom-Filters auf „1“ gesetzt werden (was so ausgelegt wird, dass es bedeutet, dass Informationen wahrscheinlich in dem Cache vorhanden sind) und dass der Filter gelegentlich geleert wird, wobei all seine Werte auf „0“ gesetzt werden (was so ausgelegt wird, dass es bedeutet, dass Informationen wahrscheinlich nicht in dem Cache vorhanden sind). Wie der Fachmann verstehen wird, werden die verwendeten spezifischen Werte („1“ und „0“) lediglich beispielhaft verwendet und sind nicht als einschränkend zu betrachten. Andere mögliche Konventionen werden hierin in vollem Umfang berücksichtigt; zum Beispiel kann in einigen Ausführungsformen eine „0“ so ausgelegt werden, dass es bedeutet, dass Informationen wahrscheinlich in dem Cache vorhanden sind, während die Filter gelegentlich „geleert“ werden können, indem alle Werte auf „1“ gesetzt werden. Zur weiteren Verdeutlichung kann in einigen Ausführungsformen eine „5“ bedeuten, dass Informationen wahrscheinlich in dem Cache vorhanden sind, während eine „36“ bedeuten kann, dass Informationen wahrscheinlich nicht in dem Cache vorhanden sind; die Werte selbst können einfach als Indikatoren verwendet werden.
  • Bei der vorliegenden Erfindung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt auf jeder möglichen technischen Detailstufe der Integration handeln. Das Computerprogrammprodukt kann ein durch einen Computer lesbares Speichermedium (oder -medien) mit durch einen Computer lesbaren Programmanweisungen darauf umfassen, um einen Prozessor dazu zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
  • Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, die Anweisungen zur Verwendung durch ein System zur Ausführung von Anweisungen behalten und speichern kann. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder jede geeignete Kombination daraus handeln, ohne auf diese beschränkt zu sein. Zu einer nicht erschöpfenden Liste spezifischerer Beispiele des durch einen Computer lesbaren Speichermediums gehören die Folgenden: eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein statischer Direktzugriffsspeicher (SRAM), ein tragbarer Kompaktspeicherplatte-Nur-Lese-Speicher (CD-ROM), eine DVD (digital versatile disc), ein Speicher-Stick, eine Diskette, eine mechanisch kodierte Einheit wie zum Beispiel Lochkarten oder erhabene Strukturen in einer Rille, auf denen Anweisungen gespeichert sind, und jede geeignete Kombination daraus. Ein durch einen Computer lesbares Speichermedium soll in der Verwendung hierin nicht als flüchtige Signale an sich aufgefasst werden, wie zum Beispiel Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Wellenleiter oder ein anderes Übertragungsmedium ausbreiten (z.B. Lichtwellenleiterkabel durchlaufende Lichtimpulse) oder durch einen Draht übertragene elektrische Signale.
  • Hierin beschriebene, durch einen Computer lesbare Programmanweisungen können von einem durch einen Computer lesbaren Speichermedium auf jeweilige Datenverarbeitungs-/Verarbeitungseinheiten oder über ein Netzwerk wie zum Beispiel das Internet, ein lokales Netzwerk, ein Weitverkehrsnetz und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenübertragungsleiter, drahtlose Übertragung, Leitwegrechner, Firewalls, Vermittlungseinheiten, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder Netzwerkschnittstelle in jeder Datenverarbeitungs-/Verarbeitungseinheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der entsprechenden Datenverarbeitungs-/Verarbeitungseinheit weiter.
  • Bei durch einen Computer lesbaren Programmanweisungen zum Ausführen von Arbeitsschritten der vorliegenden Erfindung kann es sich um Assembler-Anweisungen, ISA-Anweisungen (Instruction-Set-Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, zustandssetzende Daten, Konfigurationsdaten für integrierte Schaltungen oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben werden, darunter objektorientierte Programmiersprachen wie Smalltalk, C++ o.ä. sowie herkömmliche prozedurale Programmiersprachen wie die Programmiersprache „C“ oder ähnliche Programmiersprachen. Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem fernen Computer oder vollständig auf dem fernen Computer oder Server ausgeführt werden. In letzterem Fall kann der entfernt angeordnete Computer mit dem Computer des Benutzers durch eine beliebige Art Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Verwendung eines Internet-Dienstanbieters). In einigen Ausführungsformen können elektronische Schaltungen, darunter zum Beispiel programmierbare Logikschaltungen, vor Ort programmierbare Gatter-Anordnungen (FPGA, field programmable gate arrays) oder programmierbare Logikanordnungen (PLA, programmable logic arrays) die durch einen Computer lesbaren Programmanweisungen ausführen, indem sie Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen nutzen, um die elektronischen Schaltungen zu personalisieren, um Aspekte der vorliegenden Erfindung durchzuführen.
  • Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Ablaufpläne und/oder Blockschaltbilder bzw. Schaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird darauf hingewiesen, dass jeder Block der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder sowie Kombinationen von Blöcken in den Ablaufplänen und/oder den Blockschaltbildern bzw. Schaubildern mittels durch einen Computer lesbare Programmanweisungen ausgeführt werden können.
  • Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die über den Prozessor des Computers bzw. der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen ein Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte erzeugen. Diese durch einen Computer lesbaren Programmanweisungen können auch auf einem durch einen Computer lesbaren Speichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, so dass das durch einen Computer lesbare Speichermedium, auf dem Anweisungen gespeichert sind, ein Herstellungsprodukt aufweist, darunter Anweisungen, welche Aspekte der/des in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaltbilder bzw. Schaubilder angegebenen Funktion/Schritts umsetzen.
  • Die durch einen Computer lesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um das Ausführen einer Reihe von Prozessschritten auf dem Computer bzw. der anderen programmierbaren Vorrichtung oder anderen Einheit zu verursachen, um einen auf einem Computer ausgeführten Prozess zu erzeugen, so dass die auf dem Computer, einer anderen programmierbaren Vorrichtung oder einer anderen Einheit ausgeführten Anweisungen die in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte umsetzen.
  • Die Ablaufpläne und die Blockschaltbilder bzw. Schaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Ausführungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Ablaufplänen oder Blockschaltbildern bzw. Schaubildern ein Modul, ein Segment oder einen Teil von Anweisungen darstellen, die eine oder mehrere ausführbare Anweisungen zur Ausführung der bestimmten logischen Funktion(en) aufweisen. In einigen alternativen Ausführungen können die in dem Block angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren gezeigt stattfinden. Zwei nacheinander gezeigte Blöcke können zum Beispiel in Wirklichkeit in einem Schritt durchgeführt werden, gleichzeitig, im Wesentlichen gleichzeitig, teilweise oder vollständig zeitlich überlappend ausgeführt werden, oder die Blöcke können manchmal je nach entsprechender Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Blockschaltbilder bzw. Schaubilder und/oder der Ablaufpläne sowie Kombinationen aus Blöcken in den Blockschaltbildern bzw. Schaubildern und/oder den Ablaufplänen durch spezielle auf Hardware beruhende Systeme umgesetzt werden können, welche die festgelegten Funktionen oder Schritte durchführen, oder Kombinationen aus Spezial-Hardware und Computeranweisungen ausführen.
  • Die Beschreibungen der verschiedenen Ausführungsformen der vorliegenden Offenbarung wurden zum Zwecke der Veranschaulichung aufgeführt, sollen jedoch nicht gesamthaft stehen für bzw. begrenzt sein auf die offenbarten Ausführungsformen. Für den Fachmann werden viele Abänderungen und Abwandlungen ersichtlich sein, ohne von dem Umfang und dem Sinngehalt der beschriebenen Ausführungsformen abzuweichen. Die hierin verwendete Terminologie wurde gewählt, um die Grundgedanken der Ausführungsformen, die praktische Anwendung oder technische Verbesserung gegenüber auf dem Markt vorgefundenen Technologien zu erläutern oder um es anderen Fachleuten zu ermöglichen, die hierin dargelegten Ausführungsformen zu verstehen.

Claims (15)

  1. Verfahren, umfassend: Vorhersagen einer in Frage kommenden Adresse; Berechnen eines Hashwertes der in Frage kommenden Adresse; Überprüfen eines ersten Bloom-Filters auf der Grundlage des Hashwerts; und Feststellen, auf der Grundlage des Überprüfens, dass unter der in Frage kommenden Adresse gespeicherte Informationen vorab zu lesen sind.
  2. Verfahren nach Anspruch 1, wobei das Vorhersagen beinhaltet: Vorhersagen einer zweiten in Frage kommenden Adresse; Berechnen eines zweiten Hashwertes der zweiten in Frage kommenden Adresse; Überprüfen des ersten Bloom-Filters auf der Grundlage des zweiten Hashwerts; und Feststellen, auf der Grundlage des Überprüfens, dass ein Vorablesen von unter der zweiten in Frage kommenden Adresse gespeicherten zweiten Informationen unnötig ist.
  3. Verfahren nach Anspruch 1, wobei das Vorhersagen beinhaltet: Bestimmen einer ersten Adresse eines Cache-Treffers; und Bestimmen der in Frage kommenden Adresse auf der Grundlage der ersten Adresse.
  4. Verfahren nach Anspruch 1, wobei das Überprüfen beinhaltet: Vergleichen des ersten Bloom-Filters und eines zweiten Bloom-Filters; Erzeugen eines Ergebnisvektors auf der Grundlage des Vergleichs; und Überprüfen des Ergebnisvektors.
  5. Verfahren nach Anspruch 4, darüber hinaus aufweisend: Erkennen eines Cache-Schreibvorgangs; und Aktualisieren eines Wertes des ersten Bloom-Filters und des zweiten Bloom-Filters auf der Grundlage des Hashwertes.
  6. Verfahren nach Anspruch 5, wobei das Aktualisieren ein Erhöhen des Wertes umfasst.
  7. Verfahren nach Anspruch 6, darüber hinaus aufweisend ein regelmäßiges Leeren des ersten Bloom-Filters und des zweiten Bloom-Filters, wobei das Leeren des ersten Bloom-Filters versetzt zum Leeren des zweiten Bloom-Filters erfolgt.
  8. System, aufweisend: einen Speicher; und eine mit dem Speicher verbundene Verarbeitungseinheit, wobei die Verarbeitungseinheit so konfiguriert ist, dass sie Anweisungen ausführt zum: Bestimmen einer Adresse von Informationen, die in den Cache geschrieben sind; Berechnen eines Hashwertes der Adresse; Bestimmen eines Index auf der Grundlage des Hashwertes; und Aktualisieren eines Wertes eines Bloom-Filters in dem Index.
  9. System nach Anspruch 8, wobei die Verarbeitungseinheit darüber hinaus konfiguriert ist zum: Erkennen eines Cache-Treffers; Vorhersagen einer in Frage kommenden Adresse, die dem Cache-Treffer zugehörig ist; und Entscheiden, auf der Grundlage des Bloom-Filters, ob unter der in Frage kommenden Adresse gespeicherte Informationen vorab zu lesen sind.
  10. System nach Anspruch 9, wobei das Vorhersagen beinhaltet: Bestimmen einer ersten Adresse eines Cache-Treffers; und Bestimmen der in Frage kommenden Adresse auf der Grundlage der ersten Adresse.
  11. System nach Anspruch 9, wobei das Entscheiden beinhaltet: Berechnen eines in Frage kommenden Hashwertes der in Frage kommenden Adresse; Bestimmen eines in Frage kommenden Index auf der Grundlage des in Frage kommenden Hashwertes; und Überprüfen eines in Frage kommenden Wertes des Bloom-Filters in dem Index.
  12. System nach Anspruch 11, wobei das Überprüfen beinhaltet: Vergleichen des Bloom-Filters und eines zweiten Bloom-Filters; Erzeugen eines Ergebnisvektors auf der Grundlage des Vergleichs; und Überprüfen des Ergebnisvektors.
  13. System nach Anspruch 8, wobei die Verarbeitungseinheit darüber hinaus so konfiguriert ist, dass sie den Bloom-Filter und einen zweiten Bloom-Filter periodisch leert, wobei das Leeren des Bloom-Filters versetzt zum Leeren des zweiten Bloom-Filters erfolgt.
  14. System nach Anspruch 8, wobei das Aktualisieren ein Erhöhen des Wertes umfasst.
  15. Computerprogrammprodukt, das Computerprogrammprodukt aufweisend ein durch einen Computer lesbares Speichermedium, in dem Programmanweisungen enthalten sind, wobei die Programmanweisungen durch einen Computer ausführbar sind, um den Computer zu veranlassen zum: Bestimmen einer Adresse von Informationen, die in den Cache geschrieben sind; Berechnen eines Hashwertes der Adresse; Bestimmen eines Index auf der Grundlage des Hashwerts; und Aktualisieren eines Wertes eines Bloom-Filters in dem Index.
DE102021123290.2A 2020-10-26 2021-09-08 Schnelles verfolgen von cache zum unterstützen von aggressivem vorablesen Pending DE102021123290A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/079,619 2020-10-26
US17/079,619 US11816034B2 (en) 2020-10-26 2020-10-26 Fast cache tracking to support aggressive prefetching

Publications (1)

Publication Number Publication Date
DE102021123290A1 true DE102021123290A1 (de) 2022-04-28

Family

ID=78497921

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102021123290.2A Pending DE102021123290A1 (de) 2020-10-26 2021-09-08 Schnelles verfolgen von cache zum unterstützen von aggressivem vorablesen

Country Status (5)

Country Link
US (1) US11816034B2 (de)
JP (1) JP2022070218A (de)
CN (1) CN114490445A (de)
DE (1) DE102021123290A1 (de)
GB (1) GB2604205B (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11960544B2 (en) * 2021-10-28 2024-04-16 International Business Machines Corporation Accelerating fetching of result sets
US11822922B2 (en) * 2021-12-31 2023-11-21 International Business Machines Corporation Miss-driven instruction prefetching
CN116049033B (zh) * 2023-03-31 2023-07-28 沐曦集成电路(上海)有限公司 一种高速缓冲存储器Cache读写方法、系统、介质及设备

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8301650B1 (en) * 2008-12-19 2012-10-30 Google, Inc. Bloom filter compaction
US8290972B1 (en) * 2009-04-29 2012-10-16 Netapp, Inc. System and method for storing and accessing data using a plurality of probabilistic data structures
AU2010200866B1 (en) * 2010-03-08 2010-09-23 Quantum Corporation Data reduction indexing
US20110276744A1 (en) * 2010-05-05 2011-11-10 Microsoft Corporation Flash memory cache including for use with persistent key-value store
WO2012032727A1 (en) * 2010-09-09 2012-03-15 Nec Corporation Storage system
US8868843B2 (en) * 2011-11-30 2014-10-21 Advanced Micro Devices, Inc. Hardware filter for tracking block presence in large caches
US8472983B1 (en) * 2011-12-07 2013-06-25 Cisco Technology, Inc. Selective location-aware paging
US9519614B2 (en) * 2012-01-10 2016-12-13 Verizon Digital Media Services Inc. Multi-layer multi-hit caching for long tail content
US20140053064A1 (en) 2012-08-16 2014-02-20 Qualcomm Incorporated Predicting the usage of document resources
US9898445B2 (en) 2012-08-16 2018-02-20 Qualcomm Incorporated Resource prefetching via sandboxed execution
US9378021B2 (en) 2014-02-14 2016-06-28 Intel Corporation Instruction and logic for run-time evaluation of multiple prefetchers
US10691731B2 (en) * 2015-11-26 2020-06-23 International Business Machines Corporation Efficient lookup in multiple bloom filters
US10579530B2 (en) * 2016-05-31 2020-03-03 Intel Corporation Prefetch filter cache for a processor
US10642618B1 (en) * 2016-06-02 2020-05-05 Apple Inc. Callgraph signature prefetch
US10747667B2 (en) * 2018-11-02 2020-08-18 EMC IP Holding Company LLC Memory management of multi-level metadata cache for content-based deduplicated storage
US11847053B2 (en) * 2020-03-27 2023-12-19 Intel Corporation Apparatuses, methods, and systems for a duplication resistant on-die irregular data prefetcher

Also Published As

Publication number Publication date
GB202114291D0 (en) 2021-11-17
JP2022070218A (ja) 2022-05-12
GB2604205B (en) 2023-06-14
CN114490445A (zh) 2022-05-13
US11816034B2 (en) 2023-11-14
US20220129385A1 (en) 2022-04-28
GB2604205A (en) 2022-08-31

Similar Documents

Publication Publication Date Title
DE112019006907B3 (de) Auswählen von einem von mehreren cache-bereinigungsalgorithmen, der zum entfernen einer spur aus dem cache verwendet werden soll
DE112013002355B4 (de) Steigern von Datenzwischenspeicherungsleistung
DE102013205069B4 (de) Erhöhte effizienz bei inline-deduplizierungen
DE102021123290A1 (de) Schnelles verfolgen von cache zum unterstützen von aggressivem vorablesen
DE102009022151B4 (de) Verringern von Invalidierungstransaktionen aus einem Snoop-Filter
DE112017002941T5 (de) Arbeitslastoptimierte Datendeduplizierung mittels Phantomfingerabdrücken
DE69127111T2 (de) Verfahren zum Nachladen aufgeschobener Datenauslagerungen in einen Copy-back Daten-Cachespeicher
DE112011103290B4 (de) Intelligente Schreibcacheoperationen für sequenzielle Datenspuren
DE102012208141B4 (de) Ausgleich nachlassender Funktionsfähigkeit
DE112016000726T5 (de) Transparente hardwareunterstützte speicherdekompression
DE112013001905T5 (de) Erhöhte Inline-Deduplizierungseffizienz
DE112012004540T5 (de) Selektive Speicherplatzfreigabe eines Datenspeichers unter Verwendung von Vergleichs- und Verlagerungskennzahlen
DE112012001808B4 (de) Cache-Management von Spuren in einem ersten Cachespeicher und einem zweiten Cachespeicher für einen Speicher
DE112012004209T5 (de) Dynamisch eingestellter Schwellenwert zum Belegen eines sekundären Cache-Speichers
DE112007001171T5 (de) Verfahren für virtualisierten Transaktionsspeicher bei globalem Überlauf
DE112013001284T5 (de) Adaptive Cachespeicher-Umstufungen in einem Caching-System mit zwei Stufen
DE102012224265A1 (de) Gemeinsame Nutzung dicht benachbarter Daten-Cachespeicher
DE112012002615T5 (de) Vorabladen von Datenspuren und Paritätsdaten zur Verwendung zum Auslagern aktualisierter Spuren
DE102013206744A1 (de) Deduplizierende speicherung mit verbesserter erkennung von häufigen blöcken
DE112018000202T5 (de) Umgehen eines Speicherzugriffs für eine Ladeanweisung unter Verwendung einer Anweisungsadresszuordnung
DE102014000372A1 (de) Verbesserte steuerung des prefetch-traffics
DE112008001666T5 (de) Hierarchische Cache-Tag-Architektur
DE112018002032T5 (de) Gemeinsames nutzen von virtuellen und realen übersetzungen in einem virtuellen cache
DE112014000448T5 (de) Auszugabruf beruhend auf Ähnlichkeitssuche bei Datendeduplizierung
DE102021116489A1 (de) Verwaltung von Prefetch-Anfragen auf Basis von Stream-Informationen für zuvor erkannte Streams

Legal Events

Date Code Title Description
R012 Request for examination validly filed