DE102012212183B4 - Verfahren und Speichercontroller zur Bestimmung einer Zugriffscharakteristik einer Datenentität - Google Patents

Verfahren und Speichercontroller zur Bestimmung einer Zugriffscharakteristik einer Datenentität Download PDF

Info

Publication number
DE102012212183B4
DE102012212183B4 DE102012212183.8A DE102012212183A DE102012212183B4 DE 102012212183 B4 DE102012212183 B4 DE 102012212183B4 DE 102012212183 A DE102012212183 A DE 102012212183A DE 102012212183 B4 DE102012212183 B4 DE 102012212183B4
Authority
DE
Germany
Prior art keywords
counters
data entity
time interval
bloom filter
group
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.)
Active
Application number
DE102012212183.8A
Other languages
English (en)
Other versions
DE102012212183A1 (de
Inventor
Xiao-Yu Hu
Ioannis Koltsidas
Roman Pletka
Robert Haas
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 DE102012212183A1 publication Critical patent/DE102012212183A1/de
Application granted granted Critical
Publication of DE102012212183B4 publication Critical patent/DE102012212183B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Complex Calculations (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

Verfahren zur Bestimmung einer Charakteristik einer Datenentität, wobei diese Charakteristik auf einer Zugriffshäufigkeit auf diese Datenentität in einem Speichersystem beruht, umfassend das – Bereitstehen eines zählenden Bloomfilters (CBF), um während eines Zeitintervalls betrieben zu werden, wobei das zählende Bloomfilter (CBF) eine Gruppe (S1) von Zählern (C) umfasst, – Bereitstellen einer Datenstruktur, umfassend eine Gruppe von Elementen, wobei jedes Element der Gruppe von Elementen einem Zähler der Gruppe von Zählern zugeordnet ist, – Bestimmen der Charakteristik dieser Datenentität abhängig von einem Wert mindestens eines Elements der Gruppe von Elementen, – wobei für jedes Einzelzeitintervall, in welchem das zählende Bloomfilter betrieben wird, – die Zähler der Gruppe von Zählern am Anfang des Einzelzeitintervalls auf Null gesetzt werden, – ein Wert mindestens eines Zählers (C) jedes Mal, wenn während des Einzelzeitintervalls auf die Datenentität zugegriffen wird, erhöht wird, – Bestimmen der Charakteristik der Datenentität durch Gewichten des zugeordneten Zählerwertes (C) nach dem Einzelzeitiintervall (j) und Addieren des gewichteten Wertes (Ci) zu Beginn des Einzelzeitintervalls (j) anhand der folgenden Regel ci = αci + (1 – α)cj i – wobei α ein Gewichtungsfaktor ist, der auf 0,75 bis 0,95 gesetzt ist.

Description

  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung betrifft Verfahren und Speichercontroller zur Bestimmung einer Charakteristik einer Datenentität, wobei diese Charakteristik auf einer Zugriffshäufigkeit auf diese Datenentität in einem Speichersystem beruht.
  • HINTERGRUND
  • Im Folgenden wird eine Charakteristik einer Datenentität, die eine relative Häufigkeit darstellt, mit welcher auf die Datenentität zugegriffen wird, als Temperatur solch einer Datenentität bezeichnet. Die Bestimmung der Temperatur einer bestimmten Datenentität, einschließlich insbesondere ihrer logischen Adresse, ist eine seit langer Zeit bestehende Herausforderung in Speichersystemen. Die Temperatur einer bestimmten Datenentität bezieht sich auf ihre relative Abfragehäufigkeit, was Lese- oder Schreibzugriffe auf andere Datenentitäten im selben Speichersystem einschließen kann. Eine Sammlung von Temperaturinformation für das gesamte Speichersystem wird auch als Wärmebild bezeichnet. Eine Datenentität wird oft „heiß” genannt, wenn häufig auf sie zugegriffen wird, oder „kalt”, wenn selten auf sie zugegriffen wird. Die Temperatur ist ein quantitatives Maß dafür, wie oft und wie kürzlich auf eine Datenentität zugegriffen wurde.
  • Eine einfache und unkomplizierte Methode, die Temperatur von Datenentitäten zu bestimmen, ist die Verwendung eines Zählers für jede Datenentität, um die Zahl der Abfragen zu verfolgen. Bei Speichersystemen mit großer Kapazität kann dies jedoch nicht speichereffizient sein. Um den Speicherbedarf des Wärmebilds zu verkleinern, besteht eine gängige Lösung darin, einen Zähler für eine Gruppe zusammenhängender Datenentitäten zu verwenden, das heißt, die Temperatur von Daten mit einer gröberen Granularität zu verfolgen.
  • Aus US 2009/0031082 A1 ist eine Datenverarbeitung bekannt, bei der eine Folge von Operationen durchgeführt wird. Dabei wird u. a. eine Fehlspeicherung im Cache-Speicher frühzeitig angezeigt.
  • In Dongchul Park et al.: „Hot Data Identification for Flash-based Storage Systems Using Muitiple Bloom Filters” in IEEE 27th Symposium an Mass Storage Systems und Technologies, 23.–27.05.2011, S. 1–11, wird die Datenidentifizierung häufig genutzter Daten (”hot data”) offenbart.
  • KURZE ZUSAMMENFASSUNG DER ERFINDUNG
  • Ausgehend von diesem Stand der Technik stellt sich die Erfindung die Aufgabe, die Zugriffshäufigkeit von Datenentitäten mit möglichst wenigen weiteren Annahmen über die Datenentitäten zu bestimmen.
  • Diese Aufgabe wird mit dem Verfahren nach Anspruch 1, dem Computerprogrammerzeugnis nach Anspruch 3 und dem Speichercontroller nach Anspruch 4 gelöst. Bevorzugte Ausführungsformen der Erfindung sind Gegenstand der jeweiligen Unteransprüche.
  • Zu einem Verfahren zur Bestimmung einer Charakteristik einer Datenentität, wobei diese Charakteristik auf einer Zugriffshäufigkeit auf diese Datenentität in einem Speichersystem beruht, kann ein zählendes Bloomfilter bereitgestellt werden, um während eines Zeitintervalls betrieben zu werden, wobei dieses zählende Bloomfilter eine Gruppe von Zählern umfasst. Eine Datenstruktur wird bereitgestellt, wobei die Datenstruktur eine Gruppe von Elementen umfasst, wobei jedes Element der Gruppe von Elementen einem Zähler der Gruppe von Zählern zugeordnet ist. Die Charakteristik der Datenentität wird abhängig von einem Wert mindestens eines Elements der Gruppe von Elementen bestimmt. Das zählende Bloomfilter wird für jedes einzelne Zeitintervall betrieben
    • – die Zähler der Gruppe von Zählern werden vor oder am Anfang des Einzelzeitintervalls zurückgesetzt,
    • – ein Wert mindestens eines Zählers einer Untergruppe von Zählern wird jedes Mal, wenn während des Einzelzeitintervalls auf die Datenentität zugegriffen wird, erhöht, wobei die Datenentität auf diese Untergruppe von Zählern im zählenden Bloomfilter abgebildet wird,
    • – der Wert jedes Einzelelements der Gruppe von Elementen wird am oder nach einem Ende des Einzelzeitintervalls aktualisiert, wobei der Wert des Einzelelements abhängig von einem Wert, den der Zähler, der dem Einzelelement zugeordnet ist, am Ende des Einzelzeitintervalls aufweist, und abhängig von einem vorlegenden Wert des Einzelelements aktualisiert wird.
  • Dieses Verfahren kann eines oder mehrere der folgenden Merkmale umfassen:
    • – das zählende Bloomfilter wird mehrmals für aufeinanderfolgende Zeitintervalle betrieben;
    • – der Wert des Einzelelements wird abhängig von einem gewichteten Wert, den der Zähler, der dem Einzelelement zugeordnet ist, am Ende des Einzelzeitintervalls aufweist, und abhängig von einem gewichteten vorliegenden Wert des Einzelelements aktualisiert;
    • – der Wert des Einzelelements wird durch den Wert aktualisiert, den der Zähler, der dem Einzelelement zugeordnet ist, am Ende des Einzelzeitintervalls aufweist, wobei dieser Wert mit einem Faktor α gewichtet wird, plus dem vorliegenden Wert des Einzelelements, wobei dieser vorliegende Wert mit einem Faktor 1 – α gewichtet wird;
    • – der Faktor α hat einen Wert zwischen 0,75 und 0,95;
    • – die Datenentität wird mithilfe einer oder mehrerer Hash-Funktionen auf die Untergruppe von Zählern abgebildet;
    • – die Untergruppe von Zählern umfasst mehrere Zähler, auf welche die Datenentität im zählenden Bloomfilter abgebildet wird, und nur der Wert eines einzigen Zählers in der Untergruppe wird erhöht, wobei dieser einzige Zähler der Zähler in der Untergruppe ist, der aktuell unter den mehreren Zählern in der Untergruppe einen niedrigsten Wert aufweist;
    • – jedes Element der Gruppe von Elementen ist einem einzigen Zähler der Gruppe von Zählern zugeordnet, und jeder Zähler der Gruppe von Zählern ist einem einzigen Element der Gruppe von Elementen zugeordnet;
    • – die Untergruppe von Zählern umfasst mehrere Zähler, auf welche die Datenentität im zählenden Bloomfilter abgebildet wird, eine Untergruppe von Elementen enthält Elemente, die den Zählern der Untergruppe von Zählern zugeordnet sind, und die Charakteristik der Datenentität wird abhängig vom Wert eines Elements oder mehrerer Elemente der Untergruppe von Elementen bestimmt;
    • – die Charakteristik der Datenentität wird abhängig vom Wert des Elements bestimmt, das unter den mehreren Elementen in der Untergruppe von Elementen den niedrigsten Wert aufweist; der Zugriff auf die Datenentität schließt mindestens eines vom Lesen und von der Aktualisierung der Datenentität ein;
    • – die Datenentität stellt Daten dar, auf welche über eine einzige logische Blockadresse zugegriffen wird;
    • – die Datenentität wird abhängig von der bestimmten Charakteristik dieser Datenentität gewählt, um in den Cache gestellt zu werden;
    • – die Datenentität wird abhängig von der bestimmten Charakteristik dieser Datenentität gewählt, um in einer dedizierten Schicht in einem mehrschichtigen Speichersystem gespeichert zu werden.
  • Für ein weiteres Verfahren zur Bestimmung einer Charakteristik einer Datenentität, wobei diese Charakteristik auf einer Zugriffshäufigkeit auf diese Datenentität in einem Speichersystem beruht, kann ein erstes zählendes Bloomfilter bereitgestellt werden, um während eines ersten Zeitintervalls aktiv zu sein, wobei dieses erste zählende Bloomfilter eine Gruppe von ersten Zählern umfasst. Jedes Mal, wenn während des ersten Zeitintervalls auf die Datenentität zugegriffen wird, wird ein Wert mindestens eines ersten Zählers einer Untergruppe von ersten Zählern erhöht, wobei die Datenentität auf diese Untergruppe von ersten Zählern im ersten zählenden Bloomfilter abgebildet wird. Ein zweites zählendes Bloomfilter wird bereitgestellt, um während eines zweiten Zeitintervalls aktiv zu sein, wobei dieses zweite zählende Bloomfilter eine Gruppe von zweiten Zählern umfasst. Jedes Mal, wenn während des zweiten Zeitintervalls auf die Datenentität zugegriffen wird, wird ein Wert mindestens eines zweiten Zählers einer Untergruppe von zweiten Zählern erhöht, wobei die Datenentität auf diese Untergruppe von zweiten Zählern im zweiten zählenden Bloomfilter abgebildet wird. Die Charakteristik der Datenentität wird abhängig von einem Wert mindestens eines ersten Zählers der Untergruppe von ersten Zählern am Ende des ersten Zeitintervalls und abhängig von einem Wert mindestens eines zweiten Zählers der Untergruppe von zweiten Zählern am Ende des zweiten Zeitintervalls bestimmt.
  • Dieses Verfahren kann eines oder mehrere der folgenden Merkmale umfassen:
    • – insgesamt n zählende Bloomfilter werden bereitgestellt, wobei jedes der n zählenden Bloomfilter während eines zugeordneten Zeitintervalls aktiv ist, wobei diese zugeordneten Zeitintervalle aufeinanderfolgen; jedes der n zählenden Bloomfilter wird jedes Mal, wenn während des zugeordneten Zeitintervalls auf die Datenentität zugegriffen wird, dem ersten oder zweiten zählenden Bloomfilter entsprechend betrieben; und die Charakteristik der Datenentität wird für jedes der n zählenden Bloomfilter abhängig von einem Wert mindestens eines Zählers einer Untergruppe von Zählern, die dieser Datenentität im jeweiligen zählenden Bloomfilter zugeordnet ist, am Ende des zugeordneten Zeitintervalls bestimmt;
    • – die Charakteristik der Datenentität wird auf der Basis eines Durchschnitts der Zählerwerte bestimmt, die aus den n zählenden Bloomfiltern gewählt werden;
    • – die Datenentität wird mithilfe einer oder mehrerer Hash-Funktionen auf die Untergruppe von ersten Zählern abgebildet, und die Datenentität wird mithilfe der gleichen einen oder mehreren Hash-Funktionen auf die Untergruppe von zweiten Zählern abgebildet;
    • – die Untergruppe von ersten Zählern umfasst mehrere erste Zähler, auf welche die Datenentität im ersten zählenden Bloomfilter abgebildet wird; nur der Wert eines einzigen ersten Zählers in der Untergruppe wird erhöht, wobei dieser einzige erste Zähler der erste Zähler in der Untergruppe ist, der unter den mehreren ersten Zählern in der Untergruppe aktuell einen niedrigsten Wert aufweist; und die Untergruppe von zweiten Zählern umfasst mehrere zweite Zähler, auf welche diese Datenentität im zweiten zählenden Bloomfilter abgebildet wird; nur der Wert eines einzigen zweiten Zählers in der Untergruppe wird erhöht, wobei dieser einzige zweite Zähler der zweite Zähler ist, der unter den mehreren zweiten Zählern in der Untergruppe aktuell einen niedrigsten Wert aufweist;
    • – die Untergruppe von ersten Zählern umfasst mehrere erste Zähler, auf welche die Datenentität im ersten zählenden Bloomfilter abgebildet wird, die Untergruppe von zweiten Zählern umfasst mehrere zweite Zähler, auf welche die Datenentität im zweiten zählenden Bloomfilter abgebildet wird; die Charakteristik dieser Datenentität wird abhängig von einem Wert eines dedizierten ersten Zählers der Untergruppe von ersten Zählern bestimmt, wobei dieser dedizierte erste Zähler der erste Zähler ist, der unter den mehreren ersten Zählern in der Untergruppe am Ende des ersten Zeitintervalls den niedrigsten Wert aufweist, und abhängig von einem Wert eines dedizierten zweiten Zählers der Untergruppe von zweiten Zählern, wobei dieser dedizierte zweite Zähler der zweite Zähler ist, der unter den mehreren zweiten Zählern in der Untergruppe am Ende des zweiten Zeitintervalls den niedrigsten Wert aufweist;
    • – der Zugriff auf die Datenentität schließt mindestens eines vom Lesen und von der Aktualisierung der Datenentität ein;
    • – die Datenentität stellt Daten dar, auf welche über eine einzige logische Blockadresse zugegriffen wird;
    • – die Datenentität wird abhängig von der bestimmten Charakteristik dieser Datenentität gewählt, um in den Cache gestellt zu werden;
    • – die Datenentität wird abhängig von der bestimmten Charakteristik dieser Datenentität gewählt, um in einer dedizierten Schicht in einem mehrschichtigen Speichersystem gespeichert zu werden.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die Erfindung und ihre Ausführungsformen werden in der folgenden Beschreibung erläutert.
  • Die Figuren zeigen:
  • 1, ein Diagramm einer zeitlichen Abfolge von zählenden Bloomfiltern, die einer Ausführungsform der vorliegenden Erfindung gemäß angewandt werden;
  • 2, ein Diagramm eines ersten zählenden Bloomfilters, das einer Ausführungsform der vorliegenden Erfindung gemäß angewandt wird;
  • 3, ein Diagramm eines zweiten zählenden Bloomfilters, das einer Ausführungsform der vorliegenden Erfindung gemäß angewandt wird;
  • 4, ein Diagramm eines mehrschichtigen Speichersystems;
  • 5, ein Flussdiagramm eines Verfahrens nach einer Ausführungsform der vorliegenden Erfindung; und
  • 6, ein Flussdiagramm eines Verfahrens nach einer anderen Ausführungsform der vorliegenden Erfindung.
  • AUSFÜHRLICHE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
  • Einleitend zur folgenden Beschreibung wird zuerst auf allgemeine Aspekte der Erfindung hingewiesen, die Verfahren und Controller zur Bestimmung der Charakteristik einer Datenentität betrifft, wobei diese Charakteristik auf einer Zugriffshäufigkeit auf die Datenentität beruht. Derartige Verfahren und Speichercontroller verwenden ein oder mehrere Bloomfilter, die spezifisch an die vorliegende Anwendung angepasst sind, und verwenden insbesondere ein oder mehrere zählende Bloomfilter.
  • Ein Bloomfilter kann als eine einfache, Platz sparende randomisierte Datenstruktur zur Darstellung einer Gruppe betrachtet werden, um Abfragen zur Mitgliedschaft zu unterstützen. Bloomfilter erreichen Platzeinsparungen auf Kosten von Fehltreffern; die Wahrscheinlichkeit eines Fehltreffers kann jedoch auf einen ausreichend niedrigen Wert gehalten werden. Bloomfilter wurden in den 1970er Jahren von Burton Bloom eingeführt und haben seitdem in Datenbankanwendungen sowie im Netzbetrieb weit verbreitete Anwendung gefunden. Ein Bloomfilter kann als ein Verfahren zur Darstellung einer Gruppe S = {s1, s2, ..., sn) von Elementen aus einem Universum U mithilfe eines Bit-Vektors V von m = O(n) Bits betrachtet werden. Alle Bits im Vektor V sind am Anfang auf 0 gesetzt. Das Bloomfilter kann k Hash-Funktionen verwenden, h1, h2, ..., hk, um Elemente aus U auf den Bereich {1, 2, ..., m) abzubilden. Für jedes Element s in S werden die Bits an den Positionen h1(s), h2(s), ..., hk(s) in V auf 1 gesetzt. Um ein Element abzufragen, d. h., um zu prüfen, ob das Element in der Gruppe ist, wird das Element bevorzugt jeder von den k Hash-Funktionen zugeführt, um k Bitpositionen zu erhalten. Wenn Bits an diesen Positionen auf 0 sind, ist das Element nicht in der Gruppe – sonst wären alle Bits auf 1 gesetzt worden, als es eingefügt wurde. Wenn alle erkannten Bitpositionen auf 1 sind, ist das Element entweder in der Gruppe oder die Bits sind beim Einfügen anderer Elemente auf 1 gesetzt worden; der letztere Fall wird als „False Positive” bezeichnet. Die Wahrscheinlichkeit für einen Fehltreffer, der auf ein False Positive zurückzuführen ist, hängt von der Wahl der Parameter m, k ab. Diese Wahrscheinlichkeit wird bei k = log2(m/n) minimiert. Das Bloomfilter kann selbst bei m = cn mit einer kleinen Konstante c als sehr effektiv betrachtet werden. Bei c = 8 zum Beispiel liegt die Fehltrefferquote etwas über 2%.
  • Das Einfügen eines neuen Elements in ein Bloomfilter, d. h., das Einfügen eines neuen Elements in die Gruppe von Elementen, wird durch die folgenden Schritte erreicht: das Hashen des neuen Elements k mal mithilfe der k Hash-Funktionen und das Setzen der aus diesem Hashen resultierenden Bits auf 1. Eine Löschung eines Elements aus der Gruppe kann jedoch nicht durch Umkehren des Prozesses erreicht werden. Wenn das zu löschende Element gehasht wird und die entsprechenden Bits auf 0 gesetzt werden, kann eine Bitposition auf 0 gesetzt werden, die für ein anderes Element gehasht wurde. Um dieses Problem zu vermeiden, wurde die Idee des zählenden Bloomfilters entwickelt. In einem zählenden Bloomfilter wird jede Bitposition im Bloomfilter nicht durch ein Einzelbit, sondern durch einen Zähler dargestellt. Wenn ein neues Element in die Gruppe eingefügt wird, werden die entsprechenden Zähler inkrementiert; wenn ein Element aus der Gruppe gelöscht wird, werden die entsprechenden Zähler dekrementiert. Um einen Zählerüberlauf zu vermeiden, werden die Zähler groß genug ausgelegt. Zum Beispiel dürften vier Bits pro Zähler für die meisten Anwendungen ausreichen.
  • In gegenwärtigen Speicheranwendungen können zählende Bloomfilter nicht geeignet sein, um direkt zur Generierung von Wärmebildern benutzt zu werden, weil zählende Bloomfilter inhärent kurzfristig sind. Wenn mehr und mehr Datenentitäten angefordert werden, d. h., zum Speichersystem hinzugefügt werden, werden ihre entsprechenden Zähler inkrementiert, wodurch diese Zähler groß werden und schließlich überlaufen können.
  • Daher werden speicher- und berechnungseffiziente Verfahren zur Schätzung einer Charakteristik vorgeschlagen, die auf die Zugriffshäufigkeit einer Datenentität in einem Speichersystem bezogen ist.
  • Es wird bevorzugt ein einziges zählendes Bloomfilter mit einer Gruppe von Zählern bevorzugt wiederholt in einer Sequenz von Einzelzeitintervallen angewandt, um die Zugriffshäufigkeit einer und bevorzugt jeder Datenentität in jedem dieser Zeitintervalle zu erfassen. Bevorzugt ergibt die Sequenz von Einzelzeitintervallen einen zusammenhängenden Zeitraum. Daher wird für eine spezifische Datenentität jedes Mal, wenn während des Einzelzeitintervalls auf die Datenentität zugegriffen wird, ein Wert mindestens eines Zählers erhöht, wobei dieser Zähler Teil einer Untergruppe von Zählern ist und diese Datenentität bevorzugt mithilfe einer oder mehrerer Hash-Funktionen auf diese Untergruppe von Zählern abgebildet wird.
  • Zusätzlich wird eine Datenstruktur bereitgestellt, wobei diese Datenstruktur eine Gruppe von Elementen umfasst. Bevorzugt ist jedes Element aus der Gruppe von Elementen einem dedizierten einzigen Zähler aus der Gruppe von Zählern zugeordnet, und bevorzugt ist jeder Zähler aus der Gruppe von Zählern nur einem dedizierten einzigen Element zugeordnet.
  • Wenn das Verfahren beginnt, wird das zählende Bloomfilter zum ersten Mal gestartet, um für ein erstes Zeitintervall betrieben zu werden. An diesem Zeitpunkt oder davor werden alle Zähler der Gruppe von Zählern und alle Elemente der Gruppe von Elementen bevorzugt zurückgesetzt, d. h., in einer spezifischen Ausführungsform auf den Wert null gesetzt. Nullwerte stellen also am Anfang des ersten Zeitintervalls die vorliegenden Werte der Elemente und Zähler dar. Während des ersten Zeitintervalls können die Zähler jedoch abhängig vom Zugriff auf Datenentitäten erhöht werden, sodass die Zählerwerte am Ende des ersten Zeitintervalls Indikatoren dafür darstellen können, wie oft während dieses ersten Zeitintervalls auf verschiedene Datenentitäten zugegriffen wurde. Dagegen ändern sich die Elementwerte während eines Zeitintervalls typischerweise nicht.
  • Am Ende, nach dem Ende oder als Reaktion auf das Ende des ersten Zeitintervalls werden ein oder mehrere und bevorzugt alle der vorliegenden Elementwerte in der Gruppe von Elementen aktualisiert. Diese Aktualisierung beinhaltet, dass einem Einzelelement ein neuer Wert zugewiesen wird, wobei der neue Wert von einem Wert des Zählers, der dem Einzelelement zugeordnet ist, und vom vorliegenden Wert des Einzelelements abhängig ist.
  • Zur Bestimmung der Charakteristik einer spezifischen Datenentität an einem beliebigen Zeitpunkt wird die Gruppe von Elementen bevorzugt abgefragt. Hash-Funktionen, die der betreffenden Datenentität zugeordnet sind, werden angewandt und ergeben jeweils eine spezifische Untergruppe von Zählern und/oder eine spezifische Untergruppe von Elementen. Die Charakteristik kann aus den Werten der Elemente der Untergruppe von Elementen am gegebenen Zeitpunkt abgeleitet werden.
  • Es kann das zählende Bloomfilter auf relativ kurze Zeitintervalle angewandt werden, in denen das zählende Bloomfilter nicht Gefahr läuft, durch einen Zählerüberlauf blockiert zu werden. Die Datenstruktur mit der Gruppe von Elementen wird verwendet, um einen Durchschnitt von Zählerwerten über mehrere Zeitintervalle hinweg zu ermitteln. Bevorzugt stellt der vorliegende Wert eines Elements der Datenstruktur daher einen Durchschnitt vorheriger Zählerwerte am Ende von Zeitintervallen des zugeordneten Zählers dar. Nach Ablauf eines anderen Zeitintervalls wird der Zählerwert, der am Ende solch eines Zeitintervalls erreicht wurde, bevorzugt mit dem vorliegenden Durchschnittswert in Relation gesetzt. Bevorzugt wird dies erreicht, indem der vorliegende Elementwert mit einem Faktor nahe 1 gewichtet wird und indem der neue Zählerwert mit einem Faktor nahe null gewichtet wird und beide gewichteten Werte addiert werden. Dadurch wird nur ein einziges zählendes Bloomfilter benötigt, zusammen mit einer Datenstruktur, die langfristig gemittelte Zählerwerte enthält.
  • In dieser Hinsicht kann die Datenstruktur auch als „langfristig zählendes Bloomfilter” interpretiert werden, da sie Elementwerte enthält, die den zeitlichen Durchschnitt von zugeordneten Zählerwerten des zählenden Bloomfilters darstellen, wobei die Größe dieser Zähler des zählenden Bloomfilters begrenzt ist. Sobald das langfristig zählende Bloomfilter aktualisiert ist, wird das kurzfristig zählende Bloomfilter bevorzugt initialisiert, indem alle Zähler der Gruppe auf null zurückgesetzt werden, und ein nachfolgendes Zeitintervall wird gestartet. Die Charakteristik einer Datenentität kann bevorzugt bestimmt werden, indem ein minimaler Elementwert unter diesen Elementen ausgelesen wird, die durch Hash-Werte einer IRA der Datenentität indiziert sind.
  • Alternativ wird ein erstes zählendes Bloomfilter nur für ein begrenztes Zeitintervall angewandt, bevor ein anderes zählendes Bloomfilter für ein nachfolgendes Zeitintervall angewandt wird. Von den zwei oder mehr Bloomfiltern reflektiert jedes das Zugriffsverhalten auf entsprechende Datenentitäten während der zugeordneten Intervalle, wobei eine Routine zur Durchschnittswertermittlung bevorzugt die am Ende jedes Intervalls erreichten Ergebnisse der zählenden Bloomfilter mittelt, d. h., durchschnittliche Zählerwerte ermittelt, die die Ergebnisse mehrerer Bloomfilter im Zeitablauf darstellen. Es ist zudem anzumerken, dass die Ergebnisse der zählenden Bloomfilter gemittelt werden, indem die Zählerwerte jedes zählenden Bloomfilters gewählt werden, die der Datenentität entsprechen, deren Zugriffshäufigkeit bestimmt werden soll und deren Zählerwerte bevorzugt gemittelt werden können.
  • Es ist anzumerken, dass eine Erhöhung eines Zählers oder Zählerwerts auch jede andere Modifikation des Zählers oder Zählerwerts einschließen kann, die eine Schätzung der Zahl/Häufigkeit von Zugriffen auf die entsprechende Datenentität erlaubt.
  • Das zählende Bloomfilter kann bevorzugt für jedes Zeitintervall dieselbe Gruppe von k unabhängigen Hash-Funktionen verwenden, um die Zähler, die als ein Ergebnis gehashter Datenentitäten bestimmt werden, zu füllen. Die zählenden Bloomfilter und insbesondere das erste zählende Bloomfilter und das zweite zählende Bloomfilter können dieselbe Gruppe von k unabhängigen Hash-Funktionen verwenden, um die Zähler, die als ein Ergebnis gehashter Datenentitäten bestimmt werden, zu füllen.
  • Bevorzugt wird ein zählendes Bloomfilter über eine Abfragespanne hinweg erhalten, deren Abfragezahl das Zeitintervall definiert, in welchem das zählende Bloomfilter aktiv ist.
  • Das langfristig zählende Bloomfilter wird bevorzugt durch einen geglätteten oder exponentiell gleitenden Durchschnitt mehrerer oder aller früheren kurzfristig zählenden Bloomfilter dargestellt, wobei dieses langfristig zählende Bloomfilter als Wärmebild verwendet werden kann. Die Temperatur einer bestimmten Datenentität wird durch Abfragen des langfristig zählenden Bloomfilters erhalten. Auch hier bezeichnet eine Temperatur einer Datenentität ihre relative Abfragehäufigkeit, was Lese- oder Schreibzugriffe auf andere Datenentitäten im gleichen Speichersystem einschließen kann, wobei diese Temperatur eine der Charakteristika sein kann, deren Bestimmung in einem Speichersystem von Interesse ist. Insbesondere kann die ganze Temperaturinformation für ein gesamtes Speichersystem auch als Wärmebild bezeichnet werden. Eine Datenentität wird oft „heiß” genannt, wenn häufig auf sie zugegriffen wird, oder „kalt”, wenn selten auf sie zugegriffen wird oder sie selten aktualisiert wird. Die Temperatur ist ein quantitatives Maß dafür, wie oft und wie kürzlich auf eine Datenentität zugegriffen wurde. Eine Charakteristik, die auf der Zugriffshäufigkeit auf/einer Datenentität beruht, kann sich jedoch auf ihre absolute(n) Zugriffshäufigkeit/-zahlen beziehen.
  • Eine Beispieldatenentität kann bevorzugt ein Datenblock sein, der durch eine logische Blockadresse (LBA) adressiert wird.
  • In 1 wird eine zeitliche Abfolge von zählenden Bloomfiltern CBF1 bis CBF4 gezeigt, die einer Ausführungsform der vorliegenden Erfindung gemäß angewandt werden. Ein erstes zählendes Bloomfilter CBF1 wird während eines ersten Zeitintervalls t1–t0 angewandt, ein zweites zählendes Bloomfilter CBF2 wird während eines zweiten Zeitintervalls t2–t1 angewandt, ein drittes zählendes Bloomfilter CBF3 wird während eines dritten Zeitintervalls t3–t2 angewandt, und ein viertes zählendes Bloomfilter CBF4 wird während eines vierten Zeitintervalls t4–t3 angewandt. Insgesamt n zählende Bloomfilter CBF können angewandt werden, wobei jedes davon während eines zugeordneten Zeitintervalls aktiv ist. Dem ersten Aspekt der vorliegenden Erfindung gemäß können alle zählenden Bloomfilter CBF1 bis CBF4 physikalisch einem einzigen zählenden Bloomfilter CHF entsprechen, das wiederverwendet und direkt am Ende jedes Zeitintervalls neu gestartet wird, wobei dieser Neustart bevorzugt ein vorheriges Zurücksetzen seiner Zähler einschließt. Bevorzugt überschneiden sich die Zeitintervalle nicht, und ein nachfolgendes Zeitintervall folgt auf das vorherige Zeitintervall, ohne dass eine Lücke dazwischen liegt. Jedes Zeitintervall kann eine definierte begrenzte Länge haben, wobei diese definierte Länge zum Beispiel durch eine vordefinierte Zahl von Zugriffen während dieses Zeitintervalls dargestellt werden kann. Folglich müssen die verschiedenen Zeitintervalle nicht unbedingt die gleiche Länge haben. Die vordefinierte Zahl von Zugriffen kann gewählt werden, um eine größtmögliche zu sein, bevor eine Mehrheit der Zähler C des entsprechenden zählenden Bloomfilters CBF überläuft. Darüber hinaus kann selbst die Zahl der Zugriffe für Einzelzeitintervalle ungleich sein.
  • Daher wird eine mehrmalige Verwendung eines einzigen zählenden Bloomfilters oder, alternativ dazu, eine einmalige Verwendung von mehreren zählenden Bloomfiltern in Betracht gezogen, wobei jedes während eines spezifischen Zeitintervalls aktiv Ist, wie in 1 gezeigt. Beim letzteren Aspekt wird am Anfang jedes Zeitintervalls ein neues zählendes Bloomfilter CBFx initialisiert, indem alle Zähler dieses zählenden Bloomfilters CBF auf null gesetzt werden. Beim ersten Aspekt wird das einzige zählende Bloomfilter initialisiert, indem alle Zähler dieses zählenden Bloomfilters CBF am Anfang jedes neuen Zeitintervalls auf null gesetzt werden.
  • Ein erstes zählendes Bloomfilter CBF1 wird in 2 gezeigt. Eine Anzahl m von ersten Zählern C1 0 bis C1 m-1 bilden eine Gruppe S1 von ersten Zählern, die dem ersten zählenden Bloomfilter CBF1 zugeordnet ist. Ein Eingabewert, der im vorliegenden Fall eine logische Blockadresse LBA sein kann, die eine Datenentität darstellt, wird bevorzugt durch mehrere Hash-Funktionen h1(LBA), h2(LBA), ... hk(LBA) – mit k = 2 im vorliegenden Beispiel – auf k erste Zähler C1 aus der Gruppe S1 der m ersten Zähler C1 abgebildet. Dies bedeutet, dass im vorliegenden Fall zwei verschiedene Hash-Funktionen für jede LBA verwendet werden, sobald von einen Host, vom Speichersystem selbst oder von einer anderen Entität auf solch eine LBA zugegriffen wird. Im vorliegenden Beispiel wird die LBA mit dem Wert 1 in die ersten Zähler C1 0 und C1 m-1 gehasht. Die LBA mit dem Wert 4 wird in die ersten Zähler C1 1 und C1 4 gehasht. Die LBA mit dem Wert 5 wird in die ersten Zähler C1 3 und C1 5 gehasht. Daher ist jedem Dateneintrag, der durch eine IRA dargestellt wird, eine Untergruppe von zwei ersten Zählern C1 aus der Gruppe S1 der ersten Zähler C1 zugeordnet. Bei jedem Zugriff auf eine IRA werden die entsprechenden ersten Zähler C1 ihrer Untergruppe inkrementiert. Wenn k Hash-Funktionen angewandt werden, um das erste zählende Bloomfilter CBF1 aufzubauen, d. h., um jeden Dateneintrag auf k erste Zähler C1 abzubilden, besteht eine Untergruppe von ersten Zählern C1 typischerweise aus k ersten Zählern C1. In einer anderen Ausführungsform wird nur ein einziger erster Zähler C1 aus der Untergruppe von ersten Zählern C1 bei jedem Zugriff auf die entsprechende Datenentität inkrementiert, der bevorzugt der erste Zähler C1 aus der Untergruppe von ersten Zählern C1 mit dem niedrigsten Wert ist. Solch eine Ausführungsform zielt darauf ab, in diesem kurzfristigen CBF mehr Zugriffe zuzulassen, ohne dass ein Überlauf seiner Zähler auftritt, und die Genauigkeit der Häufigkeitsschätzung zu erhöhen.
  • Das erste zählende Bloomfilter nach 2 kann in der Anwendung mit einem einzigen zählenden Bloomfilter wiederholt verwendet werden.
  • Ein zweites zählendes Bloomfilter CBF2, wie es in der Anwendung mit mehreren zählenden Bloomfiltern verwendet werden kann, wird in 3 gezeigt. Grundsätzlich ist das zweite zählende Bloomfilter in seiner Struktur mit dem ersten zählenden Bloomfilter CBF1 identisch. Eine Gruppe S2 von m zweiten Zählern C2 enthält zweite Zähler CP0 bis C2 m-1, die dem zweiten zählenden Bloomfilter CBF2 zugeordnet sind. Der Eingabewert, der wieder eine logische Blockadresse IRA ist, auf die während eines zweiten Zeitintervalls zugegriffen wird, in welchem das zählende Bloomfilter CBF2 aktiv ist, wird durch dieselben k Hash-Funktionen wie die, die im ersten zählenden Bloomfilter CBF1 verwendet werden, d. h., Hash-Funktionen h1(LBA), h2(LBA), ... hk(LBA) – mit k = 2 – auf zweite Zähler C2 aus der Gruppe S2 von m zweiten Zählern C2 abgebildet. Zwei verschiedene Hash-Funktionen werden im vorliegenden Falle für jede LBA verwendet, sobald von einem Host, vom Speichersystem selbst oder von einer anderen Entität auf solch eine LBA zugegriffen wird. Im vorliegenden Beispiel wird die LBA mit dem Wert 1 in zweite Zähler C2 0 und C2 m-1 gehasht. Die LBA mit dem Wert 4 wird in zweite Zähler C2 1 und C2 4 gehasht. Die LBA mit dem Wert 5 wird in zweite Zähler C2 3 und C2 5 gehasht. Daher ist jedem Dateneintrag, der durch eine LBA dargestellt wird, eine Untergruppe von zwei zweiten Zählern C2 aus der Gruppe S2 von m zweiten Zählern C2 zugeordnet. Bei jedem Zugriff auf eine LBA werden die entsprechenden zweiten Zähler C2 ihrer Untergruppe inkrementiert. Wenn k Hash-Funktionen angewandt werden, um das zweite zählende Bloomfilter CBF2 aufzubauen, d. h., um jeden Dateneintrag auf k zweite Zähler C2 abzubilden, besteht eine Untergruppe von zweiten Zählern C2 typischerweise aus k zweiten Zählern C2. In einer anderen Ausführungsform wird nur ein einziger zweiter Zähler C2 aus der Untergruppe von zweiten Zählern C2 bei jedem Zugriff auf die entsprechende Datenentität inkrementiert, der bevorzugt der zweite Zähler C2 aus der Untergruppe von zweiten Zählern C2 mit dem niedrigsten Wert ist. Solch eine Ausführungsform zielt darauf ab, in diesem kurzfristigen CBF mehr Zugriffe zuzulassen, ohne dass ein Überlauf seiner Zähler auftritt, und die Genauigkeit der Häufigkeitsschätzung zu erhöhen.
  • Im vorliegenden Beispiel wird das zweite Zeitintervall, in welchem das zweite zählende Bloomfilter angewandt wird, definiert, indem die gleiche Zahl von Datenentitätzugriffen zugelassen wird wie die, die verwendet wurde, um die Länge des ersten Zeitintervalls zu definieren.
  • Auf gleiche Weise können n kurzfristig zählende Bloomfilter CBF angewandt werden, um ein großes Zeitintervall gemäß 1 entsprechend abzudecken. Bevorzugt werden die Zählerwerte jedes Zählers eines zählenden Bloomfilters CBF am Ende seines zugeordneten Zeitintervalls gespeichert. Wenn C j / i der Wert des i-ten Zählers im i-ten zählenden Bloomfilter CBF ist, kann der Wert des i-ten Zählers Ci des langfristig zählenden Bloomfilters CBF erhalten werden, indem die C j / i in allen kurzfristig zählenden Bloomfiltern CBF1 bis CBFn gemittelt werden, nämlich
    Figure DE102012212183B4_0002
  • Der resultierende Zählerwert Ci kann dann als Temperatur einer zugehörigen Datenentität verwendet werden. Durch Bestimmen aller Zählerwerte C0 bis Cm-1 kann ein Wärmebild des betreffenden Speichersystems erhalten werden. Solch ein Zählerwert Ci kann auch allgemeiner als ein Element einer Datenstruktur bezeichnet werden, wobei diese Datenstruktur die Mittelung der Einzelzählerwerte unterstützt. Die Temperatur einer spezifischen Datenentität kann bestimmt werden, indem ihre LBA k mal gehasht wird, was eine Untergruppe von k Zählerwerten aus C0 bis Cm-1 ergibt und auch als langfristig zählendes Bloomfilter bezeichnet wird, und der Minimalwert aus der Untergruppe von k Zählerwerten als die geschätzte Temperatur der entsprechenden Datenentität genommen wird.
  • Zur Realisierung eines langfristig zählenden Bioomfilters kann ein geglätteter oder exponentiell gleitender Durchschnitt aller früheren Werte kurzfristig zählender Bloomfilter verwendet werden. Als Ergebnis braucht nur das einzige kurzfristig zählende Bloomfilter CBF verfolgt zu werden. Das einzige kurzfristig zählende Bloomfilter CBF wird für jede neue Epoche, d. h., jedes neuen Zeitintervall wiederverwendet und am Anfang dieser Epoche initialisiert, d. h. seine Zähler Ci werden auf null gesetzt. Auch hier bezeichnet C j / i den Wert des i-ten Zählers der Gruppe von Zählern, der am Ende des letzten Zeitintervalls j erreicht wurde, wobei dieses Zeitintervall j gerade erst abgelaufen sein kann. Es ist anzumerken, dass die Zählerwerte früherer Zeitintervalle nicht mehr verfügbar sind, da nur ein einziges zählendes Bloomfilter verwendet wird. Der aktualisierte Wert des i-ten Elements Ci der Gruppe von Elementen kann durch Gewichten des zugeordneten Zählerwerts C j / i und durch Addieren des gewichteten vorliegenden Werts des i-ten Elements Ci erhalten werden, zum Beispiel anhand einer der folgenden Regeln: Ci = αCi + (1 – α)C j / i
    Figure DE102012212183B4_0003
    wobei α, j Gewichtungsfaktoren sind, die typischerweise auf 0,75–0,95 gesetzt sind. Diese Operation wird bevorzugt für alle Elemente Ci aus der Gruppe für Elemente C0 bis Cm-1 durchgeführt, was m Elementwerte ergibt. Sobald das aktuelle kurzfristig zählende Bloomfilter CBF in die zugeordnete Gruppe von Elementen gemischt wurde, werden alle seine Zähler auf null zurückgesetzt. Daher kann nur ein einziges zählendes Bloomfilter verwendet werden, um Datenentitätszugriffe für das aktuelle Zeitintervall abzudecken. Nach Ablauf des Zeitintervalls wird die zugehörige Datenstruktur aktualisiert, indem die Zählerwerte auf die zugeordneten Elementwerte angewandt werden. Dann wird das zählende Bloomfilter initialisiert, indem all seine Zähler auf null zurückgesetzt werden, und ein neues Zeitintervall wird gestartet, in welchem das zählende Bloomfilter von neuem betrieben wird.
  • Auf diese Weise wird nur ein einziges kurzfristig zählendes Filter und eine Datenstruktur benötigt, und dadurch wird der RAM-Bedarf drastisch gesenkt.
  • Die Vorteile der periodisch aktualisierten Datenstruktur sind zweifach. Erstens erfordert sie nur eine Hauptspeichergröße für zwei gespeicherte zählende Bloomfilter CBFs, wodurch der Speicherbedarf drastisch gesenkt wird. Zweitens können sich die vorgeschlagenen langfristig zählenden Bloomfilter CBF dank der Verwendung des exponentiell gleitenden Durchschnitts an die veränderliche Auslastungsdynamik anpassen.
  • Eine genaue Schätzung der Temperatur einer gegebenen Datenentität kann dazu beitragen, die Leistung und/oder Kostenwirksamkeit von Speichersystemen zu verbessern. Diese Information kann in einem oder mehreren von einem Cache, einem mehrschichtigen Speichersystem oder einem Gerät auf Flashspeicherbasis integriert werden. Zum Beispiel können „heiße” Daten, sobald sie erkannt werden, in einen Cache gestellt werden, um eine Cache-Trefferrate und somit die Leistung zu erhöhen. Ein hierarchisches, d. h., ein mehrschichtiges Speichersystem besteht mindestens aus zwei Speichermedien: eines ist typischerweise teuer, aber schnell, während das andere typischerweise billig, aber langsamer ist. „Heiße” Daten können, sobald sie erkannt werden, auf dem teuren, aber schnellen Speichermedium in einer ersten Schicht des mehrschichtigen Speichersystems gespeichert werden, während „kalte” Daten auf dem billigeren, aber langsameren Speichermedium mit größerer Kapazität in einer zweiten Schicht des mehrschichtigen Speichermediums gespeichert werden können, um eine höhere Leistung zu niedrigeren Kosten anzustreben. Wenn ein Flashspeichergerät als Speichermedium verwendet wird, können Daten mit ähnlicher Aktualisierungshäufigkeit bevorzugt in derselben Flash-Löscheinheit gespeichert sein, um den Schreibfaktor zu minimieren.
  • Dieser Ansatz ist auf jedes System anwendbar, das aus der Verfolgung des Werts einer Metrik/Charakteristik für eine sehr große Population von Datenentitäten über lange Zeit hinweg Nutzen ziehen kann, während eine sehr kleine Menge an Speicherplatz in Anspruch genommen wird.
  • In einer bevorzugten Ausführungsform der vorliegenden Erfindung kann das vorliegende Verfahren zum selektiven Füllen eines Caches angewandt werden und kann bevorzugt auch für Entscheidungen über die Entfernung von Blöcken aus dem Cache angewandt werden. Ein Cache ist typischerweise ein Teil des Speicherplatzes, der Datenentitäten enthält, auf welche häufig zugegriffen wird, um durch Vermeidung von Mehrfachzugriffen auf das zugrunde liegende Speichermedium Zugriffslatenzen zu reduzieren. Ein Cache kann als Lese-Cache, Schreib-Cache oder kombinierter Lese-und-Schreib-Cache realisiert sein.
  • Insbesondere, wenn ein Cache auf Flashspeicher realisiert ist, ist das Filtern der Datenentitäten, mit denen der Cache gefüllt wird, kritisch: das Füllen des Caches mit „kalten” Datenentitäten belastet nicht nur den Cache und kann potentielle „heiße” Datenentitäten aus dem Cache verdrängen, sondern kann auch zu einer großen Zahl von Flash-Schreibvorgängen führen, die typischerweise zufällig sind. Letzteres führt zu einer Cache-Leistung, die viel geringer ist, da der Durchsatz des Caches stark verringert wird und die Latenzzeit anderer Lese-und-Schreib-Anforderungen, die parallel ausgeführt werden, zunimmt. Überdies führt eine hohe Schreibrate in den Flash-Cache zum früheren Verschleiß des Flash-Chips und somit zu einer kürzeren Lebensdauer der Einheit.
  • Das vorliegende Verfahren kann zur effektiven Verwaltung eines Caches verwendet werden, indem es ein langfristig zählendes Bloomfilter CBF verwendet, d. h., ein Mittel zur Durchschnittswertermittlung an Zählerwerten, die von zählenden Bloomfiltern stammen, die in begrenzten Zeitperioden angewandt werden. Ein entsprechender Speichercontroller kann ein langfristiges CBF über den ganzen Adressraum des Speichersystems hinweg mit Blockgranularität verwalten, wobei eine Datenentität einem Datenblock entspricht, d. h., die Temperatur aller Blöcke im System wird verfolgt. Bei jedem Zugriff auf einen Block aktualisiert das System dessen Temperatur im kurzfristigen CBF. Gleichzeitig kann der Speichercontroller bevorzugt die niedrigste Temperatur verfolgen, die in Datenböcken des Caches gefunden wird.
  • Wenn in Antwort auf eine Zugriffsanforderung auf einen Datenblock dieser Datenblock im Cache gefunden wird, wird sie vom Cache bedient. Angenommen, dass der Zugriff auf einen Datenblock angefordert wurde und dieser nicht im Cache gefunden wird, liest das System den Block aus dem zugrunde liegenden Speichermedium, das in einer Ausführungsform eine Festplattengruppe sein kann. Dann verwendet der Speichercontroller das aktuelle kurzfristig zählende Bloomfilter CBF und das langfristig zählende Bloomfilter CBF, um eine Messung der Temperatur des Blocks zu erhalten. Wenn diese Temperatur höher ist als die Mindesttemperatur im Cache, wird der Block in den Cache zugelassen, d. h., eine Kopie des Blocks wird in den Cache geschrieben, und insbesondere in den Flashspeicher, wenn der Cache als Flashcache ausgeführt ist. Andernfalls wird der Block an den Benutzer ausgegeben, aber nicht im Cache gespeichert.
  • Wenn ein Block in den Cache zugelassen wird, kann es vorkommen, dass der Cache voll ist, das heißt, dass ein Block entfernt werden muss, bevor der neue Block in den Cache geschrieben werden kann. Dann kann das System das zählende Bloomfilter CBF verwenden oder nicht, um einen Block zu wählen, der aus dem Cache entfernt werden soll. Im ersteren Fall wird der Block mit der geringsten Temperatur im Cache zur Entfernung gewählt. Im letzteren Fall kann das System eine andere bestehende Seitenersetzungsrichtlinie verwenden, um einen zu entfernenden Block zu wählen. Diese Richtlinie kann auf einem oder mehreren von einer Neuheit der Zugriffe, der Zugriffshäufigkeit oder einem beliebigen anderen Kriterium basieren, das der Entwickler für geeignet hält. Ein Vorteil dieses Ansatzes ist, dass die Interna des Caches nicht modifiziert zu werden brauchen.
  • In einer anderen Ausführungsform kann ein Speichersystem einen Speichercontroller und mehrschichtige Speichermedien umfassen. Ein derartiges System wird auch als mehrschichtiges Speichersystem bezeichnet. Auch Speichersysteme mit mehreren Schichten persistenten Speichers können hinsichtlich der Leistung und Kapazität vom vorliegenden Ansatz profitieren. In einem typischen mehrschichtigen Speichersystem sind die Speichermedien ihren Leistungseigenschaften entsprechend geordnet. Je höher die Leistung eines Speichermediums ist, umso teurer ist es natürlich pro Speichereinheit, und umso geringer wird daher seine Kapazität sein. Ein derartiges System wird im Diagramm von 4 gezeigt. In diesem Beispiel schließt das System vier Schichten T0–T3 ein, mit einem Bandspeicher um, der das langsamste Medium mit der größten Kapazität in der untersten Schicht T0 ist, während ein Flashspeichermedium das schnellste Speichermedium mit der geringsten Kapazität unter den vorhandenen Speichermedien ist und in der obersten Schicht T3 liegt. Zwischen den zwei Extremen liegen zwei Schichten T2 und T1 mit Magnetplatten; die zweitoberste Schicht T2 umfasst zum Beispiel SAS-Festplatten, die in einem RAID 5-Array konfiguriert sind, während die zweitunterste Schicht T1 zum Beispiel SATA-Festplatten umfasst, die in einem RAID 6-Array konfiguriert sind. Wenn man die Hierarchie von Schicht T0 zu Schicht T3 durchgeht, verbessert sich die Leistung sowohl hinsichtlich der Latenzzeit als auch hinsichtlich des Durchsatzes, während die Kapazität kleiner wird.
  • In mehrschichtigen Speichersystemen entspricht die Gesamtkapazität des Speichersystems typischerweise der Summe der Kapazitäten der Einzelschichten. Dies bedeutet, dass alle Schichten vom System als persistenter Speicher benutzt werden und kein Block in mehr als einer der Schichten gleichzeitig zu finden ist.
  • Insbesondere wird keine der Schichten als Cache in der Hierarchie verwendet. Natürlich kann eine Datenentität von einer Schicht zu einer anderen Schicht umgelagert werden. Um eine maximale Leistung zu erreichen, strebt der Speichercontroller solch eines mehrschichtigen Speichersystems an, Datenböcke mit der heißesten Temperatur auf den schnellsten Schichten zu speichern, während Datenböcke mit der kältesten Temperatur zu den langsameren Schichten nach unten verlagert werden.
  • In einem derartigen mehrschichtigen Speichersystem kann der vorliegende Ansatz zur Bestimmung der Temperaturen von Datenentitäten angewandt werden, indem die Temperatur über den gesamten Adressraum des Speichersystems mit Datenblockgranularität bestimmt wird, d. h., die Temperatur aller Datenböcke im Speichersystem wird mithilfe von zählenden Bloomfiltern verfolgt. Bei jedem Zugriff auf einen Datenblock aktualisiert das System dessen Temperatur im kurzfristig zählenden Bloomfilter CBF. Gleichzeitig kann das System die höchste(n) und die niedrigste(n) Temperatur(en) verfolgen, die in jeder Schicht des Systems gefunden werden.
  • Bei jedem Zugriff auf einen Block, der aktuell auf einer Schicht j gespeichert ist, kann das System das aktuelle kurzfristig zählende Bloomfilter CBF und das langfristig zählende Bloomfilter CBF verwenden, um eine Messung der Temperatur des Blocks zu erhalten. Wenn diese Temperatur höher ist als die niedrigste Temperatur in der Schicht j + 1, wird für diesen Block eine Umlagerung von der Schicht j zur Schicht j + 1 ausgelöst. Gleichzeitig wird der Block mit der niedrigsten Temperatur von der Schicht j + 1 zur Schicht j zurückversetzt, da angenommen wird, dass die Schicht j + 9 voll ist, d. h., alle ihre Blöcke zugewiesen worden sind. Es ist anzumerken, dass der Block als Alternative zu einer beliebigen Schicht j' > j + 1 verschoben werden kann, wenn sich herausstellt, dass seine Temperatur höher ist als die niedrigste Temperatur der Schicht j'. Ein Block wird bevorzugt zu einer niedrigeren Schicht zurückversetzt, wenn er durch einen anderen Block ersetzt wird, d. h., wenn sich herausstellt, dass er der kälteste Block in seiner aktuellen Schicht ist. Wenn am Anfang ein neuer Block zugewiesen wird, wird er in der obersten Schicht angeordnet, die noch nicht voll ist.
  • 5 zeigt ein Flussdiagramm, das ein Verfahren nach einer Ausführungsform der vorliegenden Erfindung darstellt. In Schritt SO wird das Verfahren gestartet, indem ein Index I des zählenden Bloomfilters auf 1 gesetzt wird. In Schritt S1 wird ein erstes zählendes Bloomfilter – dem Index i = 1 gemäß -initialisiert, indem alle Zähler des ersten zählenden Bloomfilters auf 0 gesetzt werden. In Schritt S2 wird eine neue Zugriffsanforderung auf eine Datenentität des vorliegenden Speichermediums empfangen. In Schritt S3 wird geprüft, ob ein erstes Zeitintervall, das dem ersten zählenden Bloomfilter zugeordnet ist, abgelaufen ist. Wenn das erste Intervall nicht abgelaufen ist (N), wird die Datenentität oder ihre jeweilige Kennung wie z. B. die LBA dem ersten zählenden Bloomfilter zugeführt, und die Untergruppe der entsprechenden Zähler, die erkannt wird, indem die vorliegende LBA mithilfe von k Hash-Funktionen gehasht wird, wird in Schritt S4 inkrementiert. In Schritt 85 kann die Zugriffsanforderung bedient werden, und optional werden die Zähler der Untergruppe in Schritt S6 analysiert, um mit einem niedrigsten Temperaturwert einer Datenentität in einem Cache des Speichersystems verglichen zu werden. Dann fährt das Speichersystem mit Schritt S2 fort und wartet auf/empfängt eine neue Datenzugriffsanforderung.
  • Wenn das erste Intervall in Schritt S3 abgelaufen/beendet ist (J), werden die Zählerwerte des ersten zählenden Bloomfilters in Schritt S7 gespeichert, und in Schritt S8 werden aus allen vorherigen Zählerwerten neue Durchschnittszählerwerte bestimmt. Im nächsten Schritt S9 wird der Index des zählenden Bloomfilters inkrementiert, und in Schritt S1 wird ein nächstes zählendes Bloomfilter initialisiert, d. h., laut Index das zweite zählende Bloomfilter.
  • 6 zeigt ein Flussdiagramm, das ein anderes Verfahren nach einer Ausführungsform der vorliegenden Erfindung darstellt. In Schritt SO wird das Verfahren gestartet, und x Elemente einer Datenstruktur, die x Zählern eines zählenden Bloomfilters entsprechen, werden auf null gesetzt. In Schritt S1 wird das zählende Bloomfilter initialisiert, indem alle x Zähler des zählenden Bloomfilters auf null gesetzt werden, und das zählende Bloomfilter wird gestartet, um während eines definierten Zeitintervalls betrieben zu werden, wobei dieses Zeitintervall in Schritt S1 gestartet wird. In Schritt S2 wird eine neue Zugriffsanforderung auf eine Datenentität des vorliegenden Speichermediums empfangen. In Schritt 83 wird geprüft, ob das Zeitintervall, in welchem das zählende Bloomfilter betrieben wird, bereits abgelaufen ist. Wenn das Intervall nicht abgelaufen ist (N), wird die Datenentität oder ihre jeweilige Kennung wie z. B. die LBA dem zählenden Bloomfilter zugeführt, und Zähler einer Untergruppe von Zählern, die erkannt werden, indem die betreffende LBA mithilfe von k Hash-Funktionen gehasht wird, werden in Schritt S4 inkrementiert. In Schritt S5 kann die Zugriffsanforderung bedient werden, und optional werden die Zähler der Untergruppe in Schritt S6 analysiert, um mit einem niedrigsten Temperaturwert einer Datenentität in einem Cache des Speichersystems verglichen zu werden. Dann fährt das Speichersystem mit Schritt S2 fort und wartet auf/empfängt eine neue Datenzugriffsanforderung.
  • Wenn das Intervall in Schritt S3 abgelaufen/beendet ist (J), was zum Beispiel bestimmt werden kann, wenn eine definierte Zahl von Datenentitätszugriffen erreicht worden ist, werden in Schritt S7 neue Werte von Elementen der Datenstruktur auf der Basis der vorliegenden Zählerwerte bestimmt und auf der Basis der vorliegenden Elementwerte des ersten zählenden Bloomfilters gespeichert. Bevorzugt wird für jedes Element in der Datenstruktur ein neuer Wert bestimmt, da jedes Element einem Zähler des zählenden Bloomfilters entspricht. Die neuen Elementwerte werden in Schritt S8 gespeichert. Im folgenden Schritt S1 werden die Zählerwerte zurückgesetzt, und ein neues Zeitintervall wird gestartet. Die anstehende Zugriffsanforderung kann temporär gespeichert worden sein und kann während des neuen Zeitintervalls ausgeführt werden.

Claims (4)

  1. Verfahren zur Bestimmung einer Charakteristik einer Datenentität, wobei diese Charakteristik auf einer Zugriffshäufigkeit auf diese Datenentität in einem Speichersystem beruht, umfassend das – Bereitstehen eines zählenden Bloomfilters (CBF), um während eines Zeitintervalls betrieben zu werden, wobei das zählende Bloomfilter (CBF) eine Gruppe (S1) von Zählern (C) umfasst, – Bereitstellen einer Datenstruktur, umfassend eine Gruppe von Elementen, wobei jedes Element der Gruppe von Elementen einem Zähler der Gruppe von Zählern zugeordnet ist, – Bestimmen der Charakteristik dieser Datenentität abhängig von einem Wert mindestens eines Elements der Gruppe von Elementen, – wobei für jedes Einzelzeitintervall, in welchem das zählende Bloomfilter betrieben wird, – die Zähler der Gruppe von Zählern am Anfang des Einzelzeitintervalls auf Null gesetzt werden, – ein Wert mindestens eines Zählers (C) jedes Mal, wenn während des Einzelzeitintervalls auf die Datenentität zugegriffen wird, erhöht wird, – Bestimmen der Charakteristik der Datenentität durch Gewichten des zugeordneten Zählerwertes (C) nach dem Einzelzeitiintervall (j) und Addieren des gewichteten Wertes (Ci) zu Beginn des Einzelzeitintervalls (j) anhand der folgenden Regel ci = αci + (1 – α)cj i – wobei α ein Gewichtungsfaktor ist, der auf 0,75 bis 0,95 gesetzt ist.
  2. Verfahren nach Anspruch 1, wobei das zählende Bloomfilter mehrmals für aufeinanderfolgende Zeitintervalle betrieben wird.
  3. Computerprogrammerzeugnis, umfassend ein computerlesbares Medium mit computerlesbarem Programmcode, der damit verkörpert ist, wobei der computerlesbare Programmcode computerlesbaren Programmcode umfasst, der konfiguriert ist, um ein Verfahren nach einem der vorherigen Ansprüche durchzuführen.
  4. Speichercontroller zur Bestimmung einer Charakteristik einer Datenentität, wobei diese Charakteristik auf einer Zugriffshäufigkeit auf diese Datenentität in einem Speichersystem beruht, umfassend eine Steuereinheit, die geeignet ist, ein Verfahren nach einem der vorherigen Ansprüche 1 bis 2 auszuführen.
DE102012212183.8A 2011-07-26 2012-07-12 Verfahren und Speichercontroller zur Bestimmung einer Zugriffscharakteristik einer Datenentität Active DE102012212183B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP11175348.9 2011-07-26
EP11175348 2011-07-26

Publications (2)

Publication Number Publication Date
DE102012212183A1 DE102012212183A1 (de) 2013-01-31
DE102012212183B4 true DE102012212183B4 (de) 2017-10-05

Family

ID=46605713

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102012212183.8A Active DE102012212183B4 (de) 2011-07-26 2012-07-12 Verfahren und Speichercontroller zur Bestimmung einer Zugriffscharakteristik einer Datenentität

Country Status (3)

Country Link
CN (1) CN103150245B (de)
DE (1) DE102012212183B4 (de)
GB (1) GB2493243B (de)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103838850B (zh) * 2014-03-11 2017-02-08 湖州师范学院 一种基于动态计数型Bloom filter的散列数据表示及查询方法
US9285994B2 (en) 2014-06-05 2016-03-15 International Business Machines Corporation Block-level predictive data migration
CN105487823B (zh) * 2015-12-04 2018-06-05 华为技术有限公司 一种数据迁移的方法及装置
US10275541B2 (en) * 2016-08-05 2019-04-30 Micron Technology, Inc. Proactive corrective actions in memory based on a probabilistic data structure
US11099849B2 (en) * 2016-09-01 2021-08-24 Oracle International Corporation Method for reducing fetch cycles for return-type instructions
US10108368B2 (en) 2017-01-09 2018-10-23 International Business Machines Corporation Heat map transfer in space-efficient storage
KR20200021821A (ko) * 2018-08-21 2020-03-02 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
CN109656901A (zh) * 2018-10-15 2019-04-19 阿里巴巴集团控股有限公司 数据处理方法和装置、电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090031082A1 (en) * 2006-03-06 2009-01-29 Simon Andrew Ford Accessing a Cache in a Data Processing Apparatus

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101655861B (zh) * 2009-09-08 2011-06-01 中国科学院计算技术研究所 基于双计数布鲁姆过滤器的哈希方法和哈希装置
US20110276744A1 (en) * 2010-05-05 2011-11-10 Microsoft Corporation Flash memory cache including for use with persistent key-value store

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090031082A1 (en) * 2006-03-06 2009-01-29 Simon Andrew Ford Accessing a Cache in a Data Processing Apparatus

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Dongchul Park et al.: Hot Data Identification for Flash-based Storage Systems Using Multiple Bloom Filters. In: IEEE 27th Symposium on Mass Storage Systems and Technologies, 23.-27.05.2011, 1 - 11. *

Also Published As

Publication number Publication date
GB2493243B (en) 2014-04-23
CN103150245B (zh) 2016-06-08
GB201210250D0 (en) 2012-07-25
GB2493243A (en) 2013-01-30
CN103150245A (zh) 2013-06-12
DE102012212183A1 (de) 2013-01-31

Similar Documents

Publication Publication Date Title
DE102012212183B4 (de) Verfahren und Speichercontroller zur Bestimmung einer Zugriffscharakteristik einer Datenentität
DE102019130450B4 (de) Bypass-Speicherklasse Lese Cache auf der Grundlage eines Schwellwertes der Warteschlange
DE112013006656B4 (de) Speichersystem
DE112011100618B4 (de) Verwalten von Schreiboperationen auf einen Speicherbereich von Spuren, der zwischen Speichereinheiten verlagert wird
DE69529283T2 (de) Adressraumzuweisungsverfahren und -system in einem virtuellen speichersystem
DE69623720T2 (de) Verfahren zum Aufräumen eines Flash-Speichers mit Übersetzungsschicht
DE102013200032B4 (de) Herabstufen von partiellen Speicherspuren aus einem ersten Cachespeicher in einen zweiten Cachespeicher
DE102012208141A1 (de) Ausgleich nachlassender Funktionsfähigkeit
DE112010003794B4 (de) Datenspeicherung unter Verwendung von Bitmaps
DE112017005868T5 (de) Verwaltung von e/a-abläufen für datenobjekte in einem speichersystem
DE19961499A1 (de) Caching von Objekten in Platten-gestützten Datenbanken
DE112012002452B4 (de) Anpassungsfähiges Zwischenspeichern von Datensätzen für Halbleiterplatten
DE112009004503T5 (de) Optimierung der zugriffszeit von auf speichern gespeicherten dateien
DE112010003133T5 (de) Datenmigration zwischen datenspeichereinheiten
DE112012004540T5 (de) Selektive Speicherplatzfreigabe eines Datenspeichers unter Verwendung von Vergleichs- und Verlagerungskennzahlen
DE112012004796B4 (de) Periodische Auslagerungen von Innen- und Aussendurchmessern von Platten zum Verbessern von Lesereaktionszeiten
WO2015090668A1 (de) Posix-kompatibles dateisystem, verfahren zum erzeugen einer dateiliste und speichervorrichtung
DE112009000418T5 (de) Vorrichtung und Verfahren zur Nutzung eines Cache
DE102016010276A1 (de) Verfahren und systeme zur verbesserung von flash-speicher-leerung
DE102021101239B4 (de) Schwellenwert des deduplizierungssystems basierend auf der abnutzung eines speichergeräts
DE102020102781A1 (de) Auswahl von massenspeicherungsvorrichtungs-streams zur speicherbereinigung auf der basis lokaler sättigung
DE102020112531A1 (de) Operationelle metrische Berechnung für Arbeitsbelastungstyp
DE69126108T2 (de) Rotierende Speicheranordnung
DE112019000627T5 (de) Speicherstrukturbasiertes Coherency Directory Cache
DE112017007323T5 (de) Cache-speicher und verfahren zur steuerung desselben

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G11C0007000000

Ipc: G11C0007040000

Free format text: PREVIOUS MAIN CLASS: G06F0012000000

Ipc: G11C0007040000

Free format text: PREVIOUS MAIN CLASS: G11C0007020000

Ipc: G11C0007040000

R016 Response to examination communication
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R130 Divisional application to

Ref document number: 102012025812

Country of ref document: DE

R084 Declaration of willingness to licence
R020 Patent grant now final