-
Hintergrund
-
Techniken zur Datenreduzierung können angewandt werden, um die Menge der in einem Speichersystem gespeicherten Daten zu verringern. Ein Beispiel für ein Datenreduktionsverfahren ist die Datendeduplizierung. Die Datendeduplizierung identifiziert doppelte Dateneinheiten und versucht, die Anzahl der im Speichersystem gespeicherten doppelten Dateneinheiten zu reduzieren oder zu eliminieren.
-
Figurenliste
-
Einige Ausführungsformen werden anhand der folgenden Abbildungen beschrieben.
- ist ein schematisches Diagramm eines Beispielspeichersystems gemäß einigen Ausführungsformen.
- zeigt ein Beispiel für Datenstrukturen in Übereinstimmung mit einigen Implementierungen.
- ist eine Darstellung von Beispiel-Datenstrukturen in Übereinstimmung mit einigen Implementierungen.
- ist eine Illustration eines Beispielprozesses in Übereinstimmung mit einigen Implementierungen.
- sind Abbildungen von Beispiel-Datenstrukturen gemäß einigen Implementierungen.
- sind Abbildungen von Beispiel-Datenstrukturen gemäß einigen Implementierungen.
- ist eine Illustration eines Beispielprozesses in Übereinstimmung mit einigen Implementierungen.
- sind Abbildungen von Beispiel-Datenstrukturen gemäß einigen Implementierungen.
- ist ein schematisches Diagramm eines Beispiel-Computergeräts gemäß einigen Implementierungen.
- ist ein Diagramm eines Beispiels eines maschinenlesbaren Mediums, das Anweisungen in Übereinstimmung mit einigen Implementierungen speichert.
- ist eine Illustration eines Beispielprozesses in Übereinstimmung mit einigen Implementierungen.
-
In den Zeichnungen bezeichnen identische Referenznummern ähnliche, aber nicht unbedingt identische Elemente. Die Abbildungen sind nicht unbedingt maßstabsgetreu, und die Größe einiger Teile kann übertrieben sein, um das gezeigte Beispiel deutlicher zu machen. Darüber hinaus enthalten die Zeichnungen Beispiele und/oder Ausführungsformen, die mit der Beschreibung übereinstimmen; die Beschreibung ist jedoch nicht auf die in den Zeichnungen dargestellten Beispiele und/oder Ausführungsformen beschränkt.
-
Ausführliche Beschreibung
-
In der vorliegenden Offenlegung schließt die Verwendung des Begriffs „ein“, „ein“ oder „die“ auch die Pluralformen ein, sofern aus dem Kontext nicht eindeutig etwas anderes hervorgeht. Auch der Begriff „umfasst“, „einschließlich“, „umfasst“, „umfasst“, „haben“ oder „haben“, wenn er in dieser Offenlegung verwendet wird, spezifiziert das Vorhandensein der angegebenen Elemente, schließt aber das Vorhandensein oder die Zugabe anderer Elemente nicht aus.
-
In einigen Beispielen kann ein Speichersystem Daten deduplizieren, um den für die Speicherung der Daten erforderlichen Speicherplatz zu reduzieren. Das Speichersystem kann einen Deduplizierungsprozess durchführen, bei dem ein Datenstrom in diskrete Dateneinheiten oder „Chunks“ unterteilt wird. „Darüber hinaus kann das Speichersystem Identifikatoren oder „Fingerabdrücke“ eingehender Dateneinheiten ermitteln und feststellen, welche eingehenden Dateneinheiten Duplikate von zuvor gespeicherten Dateneinheiten sind. Im Falle von Dateneinheiten, bei denen es sich um Duplikate handelt, kann das Speichersystem Verweise auf die vorherigen Dateneinheiten speichern, anstatt die doppelten eingehenden Dateneinheiten zu speichern.
-
Wie hier verwendet, bezieht sich der Begriff „Fingerabdruck“ auf einen Wert, der durch Anwendung einer Funktion auf den Inhalt der Dateneinheit abgeleitet wird (wobei der „Inhalt“ die Gesamtheit oder eine Teilmenge des Inhalts der Dateneinheit umfassen kann). Ein Beispiel für eine Funktion, die angewendet werden kann, ist eine Hash-Funktion, die einen Hash-Wert auf der Grundlage der eingehenden Dateneinheit erzeugt. Beispiele für Hash-Funktionen sind kryptografische Hash-Funktionen wie die Hash-Funktionen des Secure Hash Algorithm 2 (SHA-2), z. B. SHA-224, SHA-256, SHA-384, usw. In anderen Beispielen können auch andere Arten von Hash-Funktionen oder andere Arten von Fingerprint-Funktionen verwendet werden.
-
Ein „Speichersystem“ kann ein Speichergerät oder eine Anordnung von Speichergeräten umfassen. Ein Speichersystem kann auch einen oder mehrere Speicher-Controller enthalten, die den Zugriff auf das/die Speichergerät(e) verwalten. Eine „Dateneinheit“ kann sich auf jeden Teil der Daten beziehen, der im Speichersystem separat identifiziert werden kann. In einigen Fällen kann sich eine Dateneinheit auf einen Chunk, eine Sammlung von Chunks oder einen anderen Teil von Daten beziehen. In einigen Beispielen kann ein Speichersystem Dateneinheiten in einem persistenten Speicher speichern. Die dauerhafte Speicherung kann mit einem oder mehreren dauerhaften (z. B. nichtflüchtigen) Speichergeräten, wie plattenbasierten Speichergeräten (z. B. Festplattenlaufwerken (HDDs)), Solid-State-Geräten (SSDs), wie Flash-Speichergeräten oder Ähnlichem, oder einer Kombination davon erfolgen.
-
Ein „Steuergerät“ kann sich auf einen Hardware-Verarbeitungsschaltkreis beziehen, der eine beliebige oder eine Kombination aus einem Mikroprozessor, einem Kern eines Multi-Core-Mikroprozessors, einem Mikrocontroller, einem programmierbaren integrierten Schaltkreis, einem programmierbaren Gate-Array, einem digitalen Signalprozessor oder einem anderen Hardware-Verarbeitungsschaltkreis umfassen kann. Alternativ kann sich ein „Steuergerät“ auf eine Kombination aus einer Hardware-Verarbeitungsschaltung und maschinenlesbaren Anweisungen (Software und/oder Firmware) beziehen, die auf der Hardware-Verarbeitungsschaltung ausführbar sind.
-
In einigen Beispielen kann ein Deduplizierungsspeichersystem Metadaten für die Verarbeitung eines oder mehrerer eingehender Datenströme (z. B. mehrerer gleichzeitiger eingehender Datenströme) verwenden. Solche Metadaten können zum Beispiel Datenrezepte (hier auch als „Manifeste“ bezeichnet) enthalten, die die Reihenfolge angeben, in der bestimmte Dateneinheiten (z. B. in einem Datenstrom) empfangen werden. Anschließend kann das Deduplizierungssystem als Reaktion auf eine Leseanforderung einen Satz von Manifesten verwenden, um die Reihenfolge der empfangenen Dateneinheiten zu bestimmen, und so den ursprünglichen Datenstrom wiederherstellen. Dementsprechend kann der Satz von Manifesten eine Darstellung des ursprünglichen Datenstroms sein. Die Manifeste können eine Folge von Datensätzen enthalten, wobei jeder Datensatz einen bestimmten Satz von Dateneinheiten darstellt.
-
In einigen Beispielen kann das Deduplizierungsspeichersystem einen eingehenden Datenstrom verarbeiten, um eine deduplizierte Kopie aller Datenblöcke einer bestimmten Datensammlung (z.B. einer Datei, eines Verzeichnisses usw.) zu speichern, was hier als „Vollsicherung“ der Datensammlung bezeichnet werden kann. Anschließend kann das Deduplizierungsspeichersystem einen weiteren Datenstrom verarbeiten, um eine deduplizierte Kopie nur derjenigen Datenblöcke der Datensammlung zu speichern, die sich seit der vorherigen Sicherung geändert haben, was hier als „inkrementelle Sicherung“ der Datensammlung bezeichnet werden kann. Darüber hinaus kann das Deduplizierungsspeichersystem die Verarbeitung weiterer Datenströme fortsetzen, um zu verschiedenen Zeitpunkten inkrementelle Sicherungen zu erstellen.
-
In einigen Beispielen kann das Deduplizierungsspeichersystem die Datensammlung so wiederherstellen, wie sie zu einem bestimmten Zeitpunkt auf der Grundlage der Vollsicherung und einer Folge inkrementeller Sicherungen bestand. Insbesondere kann das Deduplizierungsspeichersystem die Daten aus der Vollsicherung neu erstellen und auch die Daten aus jeder folgenden inkrementellen Sicherung neu erstellen, bis die inkrementelle Sicherung erreicht ist, die dem bestimmten Zeitpunkt entspricht. Auf diese Weise können die Änderungen, die an der Datensammlung vorgenommen wurden, der Reihe nach akkumuliert werden, bis der Zustand der Datensammlung erreicht ist, wie er zu dem bestimmten Zeitpunkt bestand. Die vollständige Kopie der Datensammlung, die aus einer Vollsicherung und einer Reihe inkrementeller Sicherungen neu erstellt wird, kann hier als „synthetische Vollsicherung“ bezeichnet werden. Die Vollsicherung und die inkrementellen Sicherungen, die zur Erstellung der synthetischen Vollsicherung verwendet werden, können im Folgenden als „Komponentensicherungen“ der synthetischen Vollsicherung bezeichnet werden. Ein Beispiel für die Erstellung einer synthetischen Vollsicherung wird im Folgenden unter Bezugnahme auf beschrieben.
-
In einigen Beispielen muss das Deduplizierungsspeichersystem bei der Erstellung einer synthetischen Vollsicherung (z. B. als Reaktion auf eine Leseanforderung) möglicherweise auf Metadaten aus mehreren Datenströmen zugreifen und diese lesen, die den Komponentensicherungen entsprechen (z. B. eine Vollsicherung und inkrementelle Sicherungen). Darüber hinaus kann das Deduplizierungsspeichersystem jedem Datenstrom die gleiche Menge an Systemressourcen zuweisen, um ihn zu verarbeiten. Beispielsweise kann das Deduplizierungsspeichersystem einen gleichen Anteil des Cache-Speichers für die Speicherung von Metadaten aus jedem Datenstrom zuweisen. Solche Zuweisungen sind jedoch durch die Gesamtmenge des Cache-Speichers im Deduplizierungsspeichersystem begrenzt.
-
In einigen Beispielen kann jede inkrementelle Sicherung mehrere Änderungen an verschiedenen Teilen der Datensammlung enthalten und kann Teile der Daten überschreiben, die in früheren Komponentensicherungen enthalten waren. Daher kann die Erstellung der synthetischen Vollsicherung ein wiederholtes Hin- und Herspringen zwischen einer beliebigen Anzahl von Komponentensicherungen erfordern, um verschiedene Datenbereiche zu lesen. Da der verfügbare Cache-Speicher jedoch begrenzt ist, müssen die Metadaten unter Umständen wiederholt aus dem Cache-Speicher geladen (z. B. um gelesen zu werden) und entladen werden (z. B. um Platz für andere Metadaten zu schaffen). Dieses „Hin- und Herschieben“ von Daten kann dazu führen, dass der Cache-Speicher weniger wahrscheinlich Daten speichert, die zu einem bestimmten Zeitpunkt benötigt werden. Dementsprechend kann die Leistungsverbesserung, die normalerweise durch den Cache-Speicher erzielt wird (d. h. der schnelle Zugriff auf benötigte Daten), bei der Erstellung einer synthetischen Vollsicherung verringert oder aufgehoben werden. Außerdem kann das wiederholte Laden und Entladen von Daten in den Cache-Speicher beträchtliche Mengen an Bandbreite und Zeit verbrauchen (z. B. für den Zugriff auf den Speicher, die Übertragung von Daten, das Auslagern von Daten usw.), ohne dass ein nennenswerter Nutzen entsteht. Darüber hinaus können sich diese Probleme noch verschärfen, wenn das Deduplizierungsspeichersystem mehrere gleichzeitige Generationen von synthetischen Vollbackups unterstützen muss (z. B. für verschiedene Anforderer).
-
In Übereinstimmung mit einigen Implementierungen der vorliegenden Offenbarung kann ein Speichersystem einen Speicher-Controller enthalten, um eine logische Gruppe mit mehreren Datenströmen zu erzeugen, die mit einer synthetischen Vollsicherung verbunden sind. Der logischen Gruppe kann eine bestimmte Menge einer begrenzten Systemressource (z. B. Cache-Speicher) zugewiesen werden. Darüber hinaus kann der logischen Gruppe eine Ressourcenrichtlinie zugewiesen werden, die angibt, wie die Ressourcenzuweisung für den Zugriff auf Metadaten für die mehreren Datenströme in der logischen Gruppe aufgeteilt wird. Bei der Erstellung der synthetischen Vollsicherung kann der Storage Controller die Nutzung der Ressourcenzuweisung in der logischen Gruppe gemäß der Ressourcenrichtlinie verwalten. Auf diese Weise kann die Gesamtnutzung der Ressource intelligent verwaltet werden, um die Effizienz zu steigern und die Verschwendung der Ressource zu reduzieren.
-
Darüber hinaus können einige Implementierungen einen Cache-Controller enthalten, der einen Cache-Eintrag vorverlegt, der in einem aktuellen Kontext als am nützlichsten erachtet wird. Eine solche Funktionalität kann beinhalten, dass festgestellt wird, welcher Datenstrom während eines bestimmten Zeitraums am meisten genutzt wurde, dass der jüngste Cache-Eintrag identifiziert wird, der Daten aus dem am meisten genutzten Datenstrom enthält, und dass der identifizierte Eintrag im Cache gefördert wird. Auf diese Weise können die Daten, die für den aktuellen Kontext (z. B. die Erstellung einer synthetischen Vollsicherung) am nützlichsten sind, für einen längeren Zeitraum im Cache verbleiben und dadurch die Leistung des Cache verbessern.
-
ABB. 1 - Beispiel für ein Speichersystem
-
zeigt ein Beispiel für ein Speichersystem 100, das einen Speicher-Controller 110, einen Speicher 115, einen dauerhaften Speicher 140 und einen Cache 180 gemäß einigen Implementierungen umfasst. Wie dargestellt, kann der persistente Speicher 140 eine beliebige Anzahl von Manifesten 150, Container-Indizes 160 und Datencontainern 170 enthalten. Ferner kann der Speicher 115 auch Manifeste 150, Container-Indizes 160 und Datencontainer 170 enthalten. Der dauerhafte Speicher 140 kann ein oder mehrere nicht-übertragbare Speichermedien wie Festplattenlaufwerke (HDDs), Solid-State-Laufwerke (SSDs), optische Platten usw. oder eine Kombination davon umfassen. Der Speicher 115 kann durch eine oder mehrere Speichervorrichtungen implementiert werden, einschließlich flüchtiger Speichervorrichtungen (z. B. Direktzugriffsspeicher (RAM)), nichtflüchtiger Speichervorrichtungen (einschließlich dauerhafter Speicher) oder einer Kombination davon.
-
In einigen Implementierungen kann das Speichersystem 100 eine gleichzeitige Deduplizierung mehrerer eingehender Datenströme 105A-105N (hier auch als „Datenströme 105“ bezeichnet) durchführen. Zum Beispiel kann der Speicher-Controller 110 jeden Datenstrom 105 in Dateneinheiten unterteilen und mindestens eine Kopie jeder Dateneinheit in einem Datencontainer 170 speichern (z. B. durch Anhängen der Dateneinheiten an das Ende des Containers 170). In einigen Beispielen kann jeder Datencontainer 170 in Teile (hier auch als „Einheiten“ bezeichnet) 175 unterteilt sein. Jede Einheit 175 kann eine oder mehrere gespeicherte Dateneinheiten enthalten.
-
In einer oder mehreren Implementierungen kann die Speichersteuerung 110 einen Fingerabdruck für jede Dateneinheit erzeugen. Der Fingerabdruck kann zum Beispiel einen vollständigen oder teilweisen Hash-Wert auf der Grundlage der Dateneinheit enthalten. Um festzustellen, ob eine eingehende Dateneinheit ein Duplikat einer gespeicherten Dateneinheit ist, kann die Speichersteuerung 110 den für die eingehende Dateneinheit erzeugten Fingerabdruck mit den Fingerabdrücken der gespeicherten Dateneinheiten vergleichen. Ergibt dieser Vergleich eine Übereinstimmung, so kann die Speichersteuerung 110 feststellen, dass ein Duplikat der eingehenden Dateneinheit bereits im Speichersystem 100 gespeichert ist.
-
In einigen Implementierungen kann die Speichersteuerung 110 ein Manifest 150 erstellen, um die Reihenfolge aufzuzeichnen, in der die Dateneinheiten in jedem Datenstrom 105 empfangen wurden. Darüber hinaus kann das Manifest 150 einen Zeiger oder andere Informationen enthalten, die den Containerindex 160 angeben, der mit jeder Dateneinheit verbunden ist. In einigen Implementierungen kann der zugehörige Containerindex 160 den Ort angeben, an dem die Dateneinheit gespeichert ist. Zum Beispiel kann der zugehörige Containerindex 160 Informationen enthalten, die angeben, dass die Dateneinheit an einem bestimmten Offset in einer Entität 175 gespeichert ist und dass die Entität 175 an einem bestimmten Offset in einem Datencontainer 170 gespeichert ist.
-
In einigen Implementierungen kann der Speicher-Controller 110 eine Leseanforderung für den Zugriff auf die gespeicherten Daten erhalten und daraufhin das Manifest 150 in den Speicher 115 laden und die Reihenfolge der Dateneinheiten bestimmen, aus denen die ursprünglichen Daten bestanden. Die Speichersteuerung 110 kann dann die im Manifest 150 enthaltenen Zeigerdaten verwenden, um die den Dateneinheiten zugeordneten Containerindizes 160 zu identifizieren. Ferner kann der Speicher-Controller 110 die identifizierten Container-Indizes 160 in den Speicher 115 laden und die Orte bestimmen, an denen die Dateneinheiten gespeichert sind (z. B. Datencontainer 170, Entität 175, Offsets usw.). Die Speichersteuerung 110 kann dann die Dateneinheiten von den ermittelten Speicherplätzen lesen.
-
In einigen Implementierungen kann der Speicher-Controller 110 eine synthetische Vollsicherung (z. B. als Reaktion auf eine Leseanforderung) auf der Grundlage von Komponentensicherungen (z. B. eine Vollsicherung und inkrementelle Sicherungen) erstellen. Dieser Prozess kann den gleichzeitigen Zugriff auf Metadaten (z. B. Manifeste 150 und Container-Indizes 160) aus mehreren Datenströmen 105 beinhalten, die den Komponentensicherungen entsprechen. Die abgerufenen Metadaten können in den Speicher 115 geladen werden. Darüber hinaus kann ein Teil der abgerufenen Metadaten in den Cache 180 geladen werden.
-
Wie in dargestellt, kann die Speichersteuerung 110 eine Ressourcengruppierungs-Engine 120 enthalten. In einigen Implementierungen kann die Ressourcengruppierungs-Engine 120 ein Auslöseereignis erkennen, um eine synthetische Vollsicherung zu erzeugen, und als Reaktion darauf eine logische Gruppe mit Darstellungen der mehreren Datenströme 105 erzeugen, die den Komponentensicherungen entsprechen. Die Ressourcengruppierungsmaschine 120 kann dann der logischen Gruppe eine Ressourcenrichtlinie und mindestens eine Ressourcenzuweisung zuweisen. Die Ressourcenzuweisung kann eine bestimmte Menge einer begrenzten Systemressource (z. B. Cache-Speicher) festlegen. Die Ressourcenrichtlinie kann Einschränkungen und/oder Regeln für die Aufteilung der Ressourcenzuweisung in der logischen Gruppe festlegen. In einigen Implementierungen kann die Ressourcengruppierungsmaschine 120 die Verwendung der Ressourcenzuweisung innerhalb der logischen Gruppe gemäß der Ressourcenrichtlinie steuern. Auf diese Weise kann die Ressourcengruppierungsmaschine 120 ein intelligentes Management der Gesamtnutzung der Systemressource bereitstellen und dadurch die Effizienz steigern und die Verschwendung der Systemressource verringern. Die Verwendung von logischen Gruppen mit Ressourcenrichtlinien und Ressourcenzuweisungen wird weiter unten unter Bezugnahme auf die . Wie hierin beschrieben, kann eine Maschine über Hardware (z. B. elektronische Schaltungen) oder eine Kombination aus Hardware und Programmierung implementiert werden, wie z. B. mindestens ein Prozessor (Hardware) zur Ausführung von Anweisungen (Programmierung), die auf mindestens einem maschinenlesbaren Speichermedium gespeichert sind.
-
Wie in dargestellt, kann der Cache 180 außerdem einen Cache-Controller 185 enthalten (oder mit ihm verbunden sein). In einigen Implementierungen kann der Cache-Controller 185 einen Fehler im Cache 180 erkennen und als Reaktion darauf einen Cache-Eintrag fördern, von dem vorhergesagt wird, dass er in einem aktuellen Kontext am nützlichsten ist. Beispielsweise kann der Cache-Controller 185 die Anzahl der Cache-Fehlversuche in einem bestimmten Zeitraum zählen (d. h. die Anzahl der Fälle, in denen ein angefordertes Datenelement nicht im Cache 180 gefunden wurde). Der Cache-Controller 185 kann einen Cache-Fehler erkennen, wenn die Anzahl der Cache-Fehlversuche einen Schwellenwert überschreitet. In einigen Implementierungen kann der Schwellenwert gleich der Anzahl der Datenelemente sein, die im Cache 180 gespeichert werden können. Ferner kann der Cache-Controller 185 bei der Erkennung des Cache-Fehlers bestimmen, welcher Datenstrom 105 mit den meisten Daten verbunden ist, die während einer bestimmten Zeitspanne aus dem Cache 180 gelesen wurden. Ferner kann der Cache-Controller 185 den jüngsten Eintrag des Cache 180 identifizieren, der mit dem ermittelten Datenstrom 105 verbunden ist, und den identifizierten Eintrag an eine Position im Cache befördern, die in der Räumungsreihenfolge die letzte ist. Auf diese Weise kann der Cache-Controller 185 die Zeitspanne verlängern, in der der für den aktuellen Kontext nützlichste Eintrag (z. B. die Erstellung einer synthetischen Vollsicherung) im Cache 180 verbleibt, und dadurch die Leistung des Cache 180 verbessern. Die Verwendung des Cache-Controllers 185 zur Förderung des Cache-Eintrags, der als am nützlichsten vorhergesagt wird , wird weiter unten unter Bezugnahme auf . In einigen Beispielen kann der Cache-Controller 185 über Hardware (z. B. elektronische Schaltungen) oder eine Kombination aus Hardware und Programmierung (z. B. mit mindestens einem Prozessor und Anweisungen, die von dem mindestens einen Prozessor ausgeführt werden können und auf mindestens einem maschinenlesbaren Speichermedium gespeichert sind) implementiert werden. In einigen Beispielen kann der Cache 180 über eine oder mehrere Speichervorrichtungen, einschließlich flüchtiger oder nichtflüchtiger Speichervorrichtungen oder einer Kombination davon, implementiert werden.
-
ABB. 2 - Beispielhafte Datenstrukturen
-
zeigt ein Beispiel für Datenstrukturen 200, die bei der Deduplizierung in Übereinstimmung mit einigen Implementierungen verwendet werden. Wie gezeigt, können die Datenstrukturen 200 einen Manifestdatensatz 210, einen Containerindex 220, einen Container 250 und eine Entität 260 enthalten. In einigen Beispielen können der Manifestdatensatz 210, der Containerindex 220, der Container 250 und die Entität 230 im Allgemeinen den Beispielimplementierungen eines Manifestdatensatzes 155, eines Indexes 160, eines Datencontainers 170 bzw. einer Entität 175 (in dargestellt) entsprechen. In einigen Beispielen können die Datenstrukturen 200 von der Speichersteuerung 110 (in dargestellt) erzeugt und/oder verwaltet werden.
-
Wie in dargestellt, kann der Manifestdatensatz 210 in einigen Beispielen verschiedene Felder enthalten, wie z. B. Offset, Länge, Containerindex und Einheitsadresse. In einigen Ausführungsformen kann jeder Containerindex 220 eine beliebige Anzahl von Dateneinheitendatensätzen 230 und Entitätsdatensätzen 240 enthalten. Jeder Datensatz 230 kann verschiedene Felder enthalten, wie z. B. einen Fingerabdruck (z. B. einen Hash der Dateneinheit), eine Einheitsadresse, einen Entitätsidentifikator, einen Einheitsoffset (d. h. einen Offset der Dateneinheit innerhalb der Entität), einen Zählwert und eine Einheitslänge. Darüber hinaus kann jeder Entitätsdatensatz 240 verschiedene Felder enthalten, z. B. einen Entitätsbezeichner, einen Entitätsoffset (d. h. einen Offset der Entität innerhalb des Containers), eine gespeicherte Länge (d. h. eine Länge der Dateneinheit innerhalb der Entität), eine dekomprimierte Länge, einen Prüfsummenwert und Komprimierungs-/Verschlüsselungsinformationen (z. B. Art der Komprimierung, Art der Verschlüsselung und so weiter). In einigen Ausführungsformen kann jeder Container 250 eine beliebige Anzahl von Einheiten 260 enthalten, und jede Einheit 260 kann eine beliebige Anzahl von gespeicherten Dateneinheiten enthalten.
-
In einer oder mehreren Implementierungen können die Datenstrukturen 200 verwendet werden, um gespeicherte deduplizierte Daten abzurufen. Beispielsweise kann eine Leseanforderung einen Versatz und eine Länge von Daten in einer bestimmten Datei angeben. Diese Anforderungsparameter können mit den Offset- und Längenfeldern eines bestimmten Manifestdatensatzes 210 abgeglichen werden. Der Containerindex und die Einheitsadresse des bestimmten Manifestdatensatzes 210 können dann mit einem bestimmten Dateneinheitsdatensatz 230 abgeglichen werden, der in einem Containerindex 220 enthalten ist. Ferner kann die Entitätskennung des bestimmten Datensatzes 230 mit der Entitätskennung eines bestimmten Entitätsdatensatzes 240 abgeglichen werden. Darüber hinaus können ein oder mehrere andere Felder des bestimmten Entitätsdatensatzes 240 (z. B. der Entitätsoffset, die gespeicherte Länge, die Prüfsumme usw.) zur Identifizierung des Behälters 250 und der Entität 260 verwendet werden, und die Dateneinheit kann dann aus dem identifizierten Behälter 250 und der Entität 260 gelesen werden.
-
ABB. 3 - Beispielhafte Datenstrukturen
-
zeigt eine Illustration von Beispiel-Datenstrukturen 300, die bei der Erstellung einer synthetischen Vollsicherung gemäß einigen Implementierungen beteiligt sind. Wie gezeigt, enthalten die Datenstrukturen 300 mehrere Datenstromdarstellungen 310-314, die zu verschiedenen Zeitpunkten empfangene Datenströme darstellen (z. B. durch das in dargestellte System 100). Beispielsweise stellt die Datenstromdarstellung 310 einen Datenstrom dar, der zu einem ersten Zeitpunkt empfangen wird und zur Erstellung der vollständigen Sicherung 320 verwendet wird (d. h. einschließlich deduplizierter Kopien aller Datenblöcke in einer Quellensammlung von Daten). In einigen Implementierungen kann jede der Datenstromdarstellungen 310-340 ein oder mehrere Manifeste enthalten, die die Reihenfolge angeben, in der bestimmte Dateneinheiten in einem eingehenden Datenstrom empfangen wurden.
-
Des Weiteren stellt die Datenstromdarstellung 311 einen Datenstrom dar, der zu einem zweiten Zeitpunkt empfangen wird und zur Erstellung der inkrementellen Sicherung 321 verwendet wird (d. h. einschließlich deduplizierter Kopien nur derjenigen Datenblöcke der Quellensammlung von Daten, die sich seit der Erstellung der vollständigen Sicherung 320 geändert haben). Darüber hinaus stellen die Datenstromdarstellungen 312-314 Datenströme dar, die jeweils zu einem dritten, vierten und fünften Zeitpunkt empfangen und zur Erstellung der inkrementellen Backups 322-324 verwendet werden.
-
Wie in dargestellt, kann zu einem sechsten Zeitpunkt eine synthetische Vollsicherung 330 erzeugt werden, indem die Vollsicherung 320 und die inkrementellen Sicherungen 321-324 neu erstellt und kombiniert werden. In einigen Implementierungen können die in den inkrementellen Sicherungen 321-324 enthaltenen Datenänderungen in der Reihenfolge ihrer Erstellung akkumuliert werden. Beachten Sie zum Beispiel, dass ein Teil 350 der Vollsicherung 320 durch die inkrementelle Sicherung 321 geändert wird und durch die inkrementelle Sicherung 323 erneut geändert wird. Dementsprechend kann die synthetische Vollsicherung 330 alle Datenblöcke in der Quellensammlung von Daten enthalten, wie sie zum fünften Zeitpunkt (d. h. zum Erstellungszeitpunkt der letzten inkrementellen Sicherung 324) vorhanden waren.
-
In einigen Implementierungen können Anweisungen zur Erzeugung einer logischen Gruppe 340 als Reaktion auf ein auslösendes Ereignis zur Erzeugung der synthetischen Vollsicherung 330 ausgeführt werden. Zum Beispiel können die Anweisungen zum Erzeugen der logischen Gruppe 340 Anweisungen zum Definieren der logischen Gruppe 340 enthalten, um die Datenstromdarstellungen 310-314 einzuschließen, die die Daten in den Komponentensicherungen (d. h. Vollsicherung 320 und inkrementelle Sicherungen 321-324) enthalten, die zum Erzeugen der synthetischen Vollsicherung 330 verwendet werden. In einigen Implementierungen kann ein Speicher-Controller (z. B. der in gezeigte Speicher-Controller 110) die logische Gruppe 340 verwenden, um die gemeinsame Nutzung einer Systemressource (z. B. Cache-Speicher) durch mehrere gleichzeitige Prozesse zu verwalten, die auf die Datenstromdarstellungen 310-314 zugreifen und diese verarbeiten, um die synthetische Vollsicherung 330 zu erzeugen.
-
In einigen Implementierungen kann die Mitgliedschaft in der logischen Gruppe 340 nach deren Erstellung geändert werden. So können beispielsweise einige oder alle Datenstromdarstellungen 310-314 aus der logischen Gruppe 340 entfernt werden, wenn sie für die Erstellung der synthetischen Vollsicherung 330 nicht mehr benötigt werden. Außerdem können der logischen Gruppe 340 weitere Datenstromdarstellungen hinzugefügt werden, wenn sie für die Erstellung der synthetischen Vollsicherung 330 benötigt werden.
-
ABB. 4 und 5A-5B - Beispielverfahren für zur Erstellung einer synthetischen Vollsicherung
-
zeigt einen Beispielprozess 400 zum Erzeugen einer synthetischen Vollsicherung in Übereinstimmung mit einigen Implementierungen. Der Prozess 400 kann von der Speichersteuerung 110 durchgeführt werden, die Anweisungen ausführt (die Anweisungen der Ressourcengruppierungsmaschine 120 enthalten können), oder von der Ressourcengruppierungsmaschine 120 (die Schaltkreise oder Hardware (z. B. eine Steuerung) und zugehörige Programmierung (z. B. Anweisungen) enthalten kann). Der Prozess 400 kann in Hardware oder einer Kombination aus Hardware und Programmierung (z. B. maschinenlesbare Anweisungen, die von einem oder mehreren Prozessoren ausgeführt werden können) implementiert werden. Die maschinenlesbaren Anweisungen können in einem nicht-transitorischen, computerlesbaren Medium gespeichert werden, z. B. in einem optischen, Halbleiter- oder magnetischen Speichergerät. Die maschinenlesbaren Anweisungen können von einem einzigen Prozessor, mehreren Prozessoren, einer einzigen Verarbeitungsmaschine, mehreren Verarbeitungsmaschinen usw. ausgeführt werden. Zur Veranschaulichung werden Einzelheiten des Prozesses 400 im Folgenden unter Bezugnahme auf , die Beispiel-Datenstrukturen 500 in Übereinstimmung mit einigen Implementierungen zeigen. Es sind jedoch auch andere Implementierungen möglich.
-
Block 410 kann die Entscheidung beinhalten, eine synthetische Vollsicherung zu erzeugen. Block 420 kann die Identifizierung mehrerer Datenströme umfassen, die die Quelldaten für die synthetische Vollsicherung enthalten. Block 430 kann die Erstellung einer logischen Gruppe umfassen, die die mehreren Datenströme enthält. Zum Beispiel, bezogen auf die und , kann der Speicher-Controller 110 einen Befehl oder eine Anforderung (z. B. von einem internen Prozess, von einem Client usw.) erhalten, eine synthetische Vollsicherung 330 zu erzeugen, um den Zustand einer Quellensammlung von Daten zu einem bestimmten Zeitpunkt wiederherzustellen. Als Reaktion auf die Anforderung kann der Speicher-Controller 110 feststellen, dass der bestimmte Zeitpunkt dem Erstellungszeitpunkt der inkrementellen Sicherung 324 entspricht, und kann dadurch feststellen, dass die synthetische Vollsicherung 330 durch Kombination der Vollsicherung 320 und der inkrementellen Sicherungen 321-324 erzeugt werden kann. Die Speichersteuerung 110 kann dann eine logische Gruppe 340 erzeugen, die die Datenstromdarstellungen 310-314 enthält, die jeweils der Vollsicherung 320 und den inkrementellen Sicherungen 321-324 entsprechen.
-
Wiederum Bezug nehmend auf , kann Block 440 die Angabe einer Ressourcenzuweisung für die logische Gruppe beinhalten. Block 450 kann die Festlegung einer Ressourcenrichtlinie für die logische Gruppe beinhalten. Block 460 kann die Erstellung der synthetischen Vollsicherung unter Verwendung der Systemressourcenzuweisung und der Ressourcenrichtlinie für die logische Gruppe umfassen. Zum Beispiel, siehe und , kann der Speicher-Controller 110 der logischen Gruppe 340 (einschließlich der Datenstromdarstellungen 310-314) eine Gruppenzuweisung 510 zuweisen. Wie in gezeigt, kann die Gruppenzuweisung 510 in einigen Ausführungsformen eine Ressourcenrichtlinie 520 und eine beliebige Anzahl von Ressourcenzuweisungen 530A-530N (hier auch als „Ressourcenzuweisungen 530“ bezeichnet) enthalten. Jede Ressourcenzuweisung 530 kann einen bestimmten Teil (z. B. Menge, Prozentsatz usw.) einer Systemressource (z. B. Cache-Speicher, Bandbreite, Speicher usw.) angeben, der ausschließlich der logischen Gruppe 340 zugewiesen wird. Die Ressourcenrichtlinie 520 kann Beschränkungen und/oder Regeln dafür festlegen, wie die Ressourcenzuweisungen 530 innerhalb der logischen Gruppe 340 geteilt werden. Einige Beispiele für Ressourcenrichtlinien 520 werden im Folgenden unter Bezugnahme auf beschrieben. Die Speichersteuerung 110 kann die Verwendung der Ressourcenzuweisungen 530 gemäß der Ressourcenrichtlinie 520 verwalten und dadurch die angeforderte synthetische Vollsicherung erzeugen.
-
Wiederum Bezug nehmend auf , kann der Entscheidungsblock 470 die Feststellung beinhalten, ob irgendeine Datenstromdarstellung in der logischen Gruppe nicht mehr für die Erzeugung der synthetischen Vollsicherung benötigt wird. Ist dies nicht der Fall, kann der Prozess 400 zu Block 460 (siehe oben) zurückkehren. Andernfalls, wenn im Entscheidungsblock 470 festgestellt wird, dass ein Datenstrom in der logischen Gruppe nicht mehr benötigt wird, kann der Prozess 400 im Block 475 fortgesetzt werden, einschließlich des Entfernens des nicht benötigten Datenstroms aus der logischen Gruppe. Zum Beispiel, bezogen auf und kann der Speicher-Controller 110 beispielsweise feststellen, dass alle Datenänderungen an der Vollsicherung 320, die durch die Datenstromdarstellungen 311 und 313 repräsentiert werden, bereits verarbeitet (d. h. in die synthetische Vollsicherung 330 aufgenommen) wurden und daher die Datenströme 311 und 313 nicht mehr für die Erzeugung der synthetischen Vollsicherung 330 benötigt werden. Dementsprechend können die Datenströme 311 und 313 aus der logischen Gruppe 340 entfernt werden (, wie in dargestellt,). In einigen Implementierungen kann die Anzahl der Mitglieder der logischen Gruppe 340 erhöht werden, nachdem sie erstellt wurde. Beispielsweise kann, wie in gezeigt, der Datenstrom 315 der logischen Gruppe 340 hinzugefügt werden, wenn dies zur Erstellung der synthetischen Vollsicherung erforderlich ist.
-
Wiederum Bezug nehmend auf kann der Entscheidungsblock 480 die Feststellung beinhalten, ob alle in der logischen Gruppe enthaltenen Datenstromdarstellungen in die synthetische Vollsicherung aufgenommen wurden. Ist dies nicht der Fall, kann der Prozess 400 zu Block 460 (siehe oben) zurückkehren. Andernfalls, wenn in Entscheidungsblock 480 festgestellt wird, dass alle Datenstromdarstellungen in der logischen Gruppe in die synthetische Vollsicherung aufgenommen wurden, kann der Prozess 400 in Block 485 fortfahren, einschließlich des Löschens der logischen Gruppe und der Freigabe ihrer Ressourcenzuweisungen. Nach Block 485 kann der Prozess 400 abgeschlossen werden. Zum Beispiel, siehe und , kann der Speicher-Controller 110 feststellen, dass die verbleibenden Datenstromdarstellungen 310, 312 und 314 in der logischen Gruppe 340 bereits verarbeitet wurden (oder zuvor aus der logischen Gruppe 340 entfernt wurden). Daraufhin kann die Speichersteuerung 110 die logische Gruppe 340 löschen und ihre Ressourcenzuweisungen 530A-530N freigeben (d. h. die Ressourcenzuweisungen für die Zuweisung an eine andere logische Gruppe verfügbar machen).
-
ABB. 6A-6B - Beispielhafte Datenstrukturen
-
zeigt eine Darstellung mehrerer Ressourcenzuweisungen 610A-610N (hier auch als „Ressourcenzuweisungen 610“ bezeichnet). Wie dargestellt, kann jede Ressourcenzuweisung 610 einen festen oder variablen Teil einer Gesamtmenge 600 einer Systemressource darstellen. In einigen Implementierungen kann jede Ressourcenzuweisung 610 für eine andere logische Gruppe reserviert (oder anderweitig zugewiesen) werden.
-
In ist eine Richtlinientabelle 650 abgebildet. In einigen Implementierungen kann die Richtlinientabelle 650 eine gespeicherte Datenstruktur sein, die zur Auswahl der der logischen Gruppe 340 zugewiesenen Ressourcenrichtlinie 520 (dargestellt in verwendet wird. Wie dargestellt, kann die Richtlinientabelle 650 verschiedene Richtlinien 1-4 enthalten, wobei jede Richtlinie eine andere Strategie oder Methodik zur Verwaltung einer Ressourcenzuweisung für eine logische Gruppe widerspiegelt.
-
Beispielsweise kann die erste Strategie der „festen Zuweisung“ festlegen, dass jede Ressourcenzuweisung zum Zeitpunkt der Erstellung der logischen Gruppe festgelegt ist und nicht geändert wird, wenn sich die logische Gruppe ändert (z. B. wenn eine Datenstromdarstellung aus der logischen Gruppe entfernt wird). In einem anderen Beispiel kann die zweite Strategie der „begrenzten Skalierung“ festlegen, dass die Ressourcenzuweisung für jede Datenstromdarstellung, die der logischen Gruppe hinzugefügt wird, gleichmäßig erhöht wird, bis ein Höchstwert erreicht ist.
-
In einem weiteren Beispiel kann die dritte Richtlinie der „nichtlinearen Skalierung“ festlegen, dass der ersten Datenstromdarstellung in der logischen Gruppe eine erste konfigurierbare Menge X zugewiesen wird und allen zusätzlichen Datenstromdarstellungen, die der logischen Gruppe hinzugefügt werden, eine zweite konfigurierbare Menge Y zugewiesen wird (z. B. wobei Y kleiner als X oder größer als X sein kann). In einem weiteren Beispiel kann die vierte Richtlinie „Client-gesteuert“ festlegen, dass eine Client-Anwendung oder ein Benutzer in der Lage ist, die den einzelnen Datenstromdarstellungen zugewiesenen Mengen festzulegen (z. B. durch Zuweisung größerer Mengen an Datenstromdarstellungen für vollständige Backups als an Datenstromdarstellungen für inkrementelle Backups).
-
ABB. 7 und 8A-8C - Beispiel eines Verfahrens zur Förderung eines Cache-Eintrags
-
In ist ein Beispielprozess 700 zur Förderung eines Cache-Eintrags in Übereinstimmung mit einigen Implementierungen dargestellt. Der Prozess 700 kann unter Verwendung des Cache-Controllers 185 und/oder des Speicher-Controllers 110 (dargestellt in ) durchgeführt werden. Der Prozess 700 kann in Hardware oder einer Kombination aus Hardware und Programmierung (z. B. maschinenlesbare Anweisungen, die von einem oder mehreren Prozessoren ausgeführt werden können) implementiert werden. Die maschinenlesbaren Anweisungen können in einem nicht-transitorischen, computerlesbaren Medium gespeichert werden, z. B. in einem optischen, Halbleiter- oder magnetischen Speichergerät. Die maschinenlesbaren Anweisungen können von einem einzigen Prozessor, mehreren Prozessoren, einer einzigen Verarbeitungsmaschine, mehreren Verarbeitungsmaschinen usw. ausgeführt werden. Zur Veranschaulichung werden im Folgenden Einzelheiten des Prozesses 700 unter Bezugnahme auf die beschrieben, die ein Beispiel für Datenstrukturen in Übereinstimmung mit einigen Implementierungen zeigen. Es sind jedoch auch andere Implementierungen möglich.
-
Block 710 kann die Erkennung eines Fehlers in einem Cache beinhalten, der Daten aus einer Vielzahl von Datenströmen speichert. Beispielsweise kann der Cache 180 Metadaten (z. B. Manifeste 150 und Container-Indizes 160) speichern, die mit mehreren Datenströmen 105 verbunden sind (z. B. während der Erstellung einer synthetischen Vollsicherung) (siehe ). Der Cache-Controller 185 kann die Gesamtzahl der Fehlversuche zählen, die während eines bestimmten Zeitraums im Cache 180 auftreten, und feststellen, ob die Anzahl der Fehlversuche einen Schwellenwert überschreitet. In einigen Implementierungen kann der Schwellenwert gleich der Gesamtzahl der Einträge im Cache 180 sein. Der Cache-Controller 185 kann einen Cache-Fehler erkennen, wenn die Anzahl der Fehlversuche den Schwellenwert überschreitet.
-
Wiederum Bezug nehmend auf kann Block 720 für jede Datenstromdarstellung die Bestimmung eines Maßes für die Gesamtmenge an Daten beinhalten, die mit der Datenstromdarstellung verbunden sind, die während einer kürzlichen Zeitspanne aus dem Cache gelesen wurde. Zum Beispiel, bezogen auf die und , kann der Cache-Controller 185 Cache-Informationen 800 in Bezug auf den Cache 180 bestimmen oder sammeln. Die Cache-Informationen 800 können die Datenstromdarstellung 820 identifizieren, die die derzeit in jedem Cache-Eintrag 810 gespeicherten Daten enthält. Die Cache-Informationen 800 können auch eine Wertmetrik 830 identifizieren, die mit jedem Cache-Eintrag 810 verbunden ist. In einigen Implementierungen kann die Wertmetrik 830 eine Zahl sein, die die Datenmenge angibt, die aus dem zugehörigen Cache-Eintrag 810 während eines kürzlichen Zeitraums (z. B. seit der letzten Erkennung eines Cache-Fehlers) gelesen wurde. Ferner kann der Cache-Controller 185 als Reaktion auf die Erkennung eines Fehlers im Cache 180 die Wertmetriken 830 nach der Datenstromdarstellung 810 summieren und so die Summe der Wertinformationen 840 bestimmen. Die Summe der Wertinformationen 840 kann die Gesamtdatenmenge für jede Datenstromdarstellung 810 angeben, die aus dem Cache 180 gelesen wurde.
-
Wieder Bezug nehmend auf , kann Block 730 die Identifizierung einer Datenstromdarstellung mit der größten Menge an Daten beinhalten, die in der jüngsten Zeitperiode aus dem Cache gelesen wurden. Block 740 kann die Identifizierung eines Eintrags umfassen, der zuletzt aus dem Cache gelesen wurde und Daten aus der identifizierten Datenstromdarstellung enthält. Zum Beispiel, bezogen auf und , kann der Cache-Controller 185 die Summe der Wertinformationen 840 verwenden, um zu bestimmen, dass die Datenstromdarstellung C die größte Menge 850 an Daten hatte, die in der jüngsten Zeitperiode aus dem Cache 180 gelesen wurden. In einigen Implementierungen kann der zuletzt gelesene Cache-Eintrag, der der Datenstromdarstellung mit der größten aus dem Cache gelesenen Datenmenge zugeordnet ist (d. h. Eintrag 8 in dem in den dargestellten Beispiel), als der nützlichste Eintrag für den aktuellen Verwendungskontext des Cache 180 angesehen werden.
-
Erneut auf Bezug nehmend, kann Block 750 die Beförderung des identifizierten Eintrags an eine Position im Cache beinhalten, die in der Räumungsreihenfolge die letzte ist. Nach Block 750 kann der Prozess 700 abgeschlossen sein. Zum Beispiel, bezogen auf und , kann der Cache-Controller 185 eine Beförderung 870 durchführen, um den Eintrag 8 an die niedrigste nummerierte Position im Cache 180 (d. h. Position 1) zu verschieben, die in der Räumungsreihenfolge die letzte ist (d. h. die letzte, die von den Einträgen 1-10 geräumt wird). Wie in gezeigt, können die verbleibenden Einträge 1-7 und 9-10 in ihren jeweiligen Positionen im Cache 180 nach unten verschoben werden. Auf diese Weise kann der Cache-Controller 185 die Zeitspanne erhöhen, in der der für den aktuellen Nutzungskontext nützlichste Eintrag (d. h. Eintrag 8) im Cache 180 verbleibt, und dadurch die Leistung des Cache 180 verbessern.
-
ABB. 9 - Beispiel für eine Datenverarbeitungsanlage
-
zeigt ein schematisches Diagramm eines Beispiel-Computergeräts 900. In einigen Beispielen kann die Rechenvorrichtung 900 im Allgemeinen einem Teil oder der Gesamtheit des Speichersystems 100 (dargestellt in ) entsprechen. Wie dargestellt, kann die Rechenvorrichtung 900 einen Hardwareprozessor 902 und einen maschinenlesbaren Speicher 905 mit Befehlen 910-940 enthalten. Der maschinenlesbare Speicher 905 kann ein nicht-übertragbares Medium sein. Die Befehle 910-940 können von dem Hardware-Prozessor 902 oder von einer im Hardware-Prozessor 902 enthaltenen Verarbeitungsmaschine ausgeführt werden.
-
Die Anweisung 910 kann ausgeführt werden, um zu bestimmen, dass eine synthetische Vollsicherung auf der Grundlage von Datenstromdarstellungen einer Vielzahl von Datenströmen erzeugt werden soll. Die Anweisung 920 kann ausgeführt werden, um als Reaktion auf die Bestimmung, die synthetische Vollsicherung zu erzeugen, eine logische Gruppe zu erstellen, die die Vielzahl von Datenstromdarstellungen enthält. Die Anweisung 930 kann ausgefiihrt werden, um eine Cache-Ressourcenzuweisung für die logische Gruppe festzulegen. Die Anweisung 940 kann ausgeführt werden, um die synthetische Vollsicherung unter Verwendung einer durch die Cache-Ressourcenzuweisung für die logische Gruppe begrenzten Menge an Cache-Ressourcen zu erzeugen.
-
ABB. 10 - Beispiel für ein maschinenlesbares Medium
-
zeigt ein maschinenlesbares Medium 1000, auf dem Anweisungen 1010-1040 gemäß einigen Implementierungen gespeichert sind. Die Anweisungen 1010-1040 können von einem einzelnen Prozessor, mehreren Prozessoren, einer einzelnen Verarbeitungsmaschine, mehreren Verarbeitungsmaschinen usw. ausgeführt werden. Das maschinenlesbare Medium 1000 kann ein nicht-transitorisches Speichermedium sein, wie z. B. ein optisches, Halbleiter- oder magnetisches Speichermedium.
-
Die Anweisung 1010 kann ausgeführt werden, um zu bestimmen, dass eine synthetische Vollsicherung auf der Grundlage von Datenstromdarstellungen einer Vielzahl von Datenströmen zu erzeugen ist. Die Anweisung 1020 kann ausgeführt werden, um als Reaktion auf die Bestimmung, eine synthetische Vollsicherung zu erzeugen, eine logische Gruppe zu erstellen, die die Datenstromdarstellungen enthält. Die Anweisung 1030 kann ausgeführt werden, um der logischen Gruppe eine Ressourcenrichtlinie und eine Ressourcenzuweisung zuzuweisen. Die Anweisung 1040 kann ausgefiihrt werden, um die synthetische Vollsicherung aus den Datenstromdarstellungen auf der Grundlage der Ressourcenrichtlinie und der Ressourcenzuweisung zu erzeugen, die der logischen Gruppe zugewiesen wurden.
-
ABB. 11 - Beispielprozess für das Heraufstufen eines Cache-Eintrags
-
In ist ein Beispielprozess 1100 zur Förderung eines Cache-Eintrags in Übereinstimmung mit einigen Implementierungen dargestellt. Der Prozess 1100 kann unter Verwendung des Cache-Controllers 185 (in dargestellt) durchgeführt werden. Der Prozess 1100 kann in Hardware oder einer Kombination aus Hardware und Programmierung (z. B. maschinenlesbare Anweisungen, die von einem oder mehreren Prozessoren ausgeführt werden können) implementiert werden. Die maschinenlesbaren Anweisungen können in einem nicht-transitorischen, computerlesbaren Medium gespeichert werden, z. B. in einem optischen, Halbleiter- oder magnetischen Speichergerät. Die maschinenlesbaren Anweisungen können von einem einzigen Prozessor, mehreren Prozessoren, einer einzigen Verarbeitungsmaschine, mehreren Verarbeitungsmaschinen usw. ausgeführt werden.
-
Block 1110 kann beinhalten: Erkennen eines Fehlers in einem Cache, der eine Vielzahl von Cache-Einträgen umfasst, durch einen Cache-Controller, wobei die Vielzahl von Cache-Einträgen Daten aus einer Vielzahl von Datenstromdarstellungen speichert. Block 1120 kann als Reaktion auf die Erkennung des Fehlers beinhalten, dass der Cache-Controller eine Datenstromdarstellung bestimmt, die die größte Menge an Daten aufweist, die in einer ersten Zeitperiode aus dem Cache gelesen wurde. Block 1130 kann beinhalten, dass der Cache-Controller einen zuletzt verwendeten Cache-Eintrag bestimmt, der mit der bestimmten Datenstromdarstellung verbunden ist. Block 1140 kann beinhalten, dass der Cache-Controller den ermittelten, zuletzt verwendeten Cache-Eintrag an eine Position des Caches befördert, die in der Auslagerungsreihenfolge die letzte ist.
-
Einige der hier beschriebenen Implementierungen können einen Speicher-Controller umfassen, der eine logische Gruppe mit mehreren Datenstromdarstellungen erzeugt, die mit einer synthetischen Vollsicherung verbunden sind. Der logischen Gruppe können eine Ressourcenrichtlinie und eine oder mehrere Ressourcenzuweisungen zugewiesen werden. Bei der Erstellung der synthetischen Vollsicherung kann der Controller die Nutzung der Ressourcenzuweisung in der logischen Gruppe gemäß der Ressourcenrichtlinie verwalten. Auf diese Weise kann die Gesamtnutzung der Ressource intelligent verwaltet werden, um die Effizienz zu steigern und die Verschwendung der Ressource zu verringern.
-
Darüber hinaus können einige Implementierungen einen Cache-Controller enthalten, der einen Cache-Eintrag vorverlegt, der in einem aktuellen Kontext als am nützlichsten erachtet wird. Dieser Prozess kann beinhalten, dass ermittelt wird, welche Datenstromdarstellung während eines bestimmten Zeitraums am häufigsten verwendet wurde, dass der jüngste Cache-Eintrag identifiziert wird, der Daten aus der am häufigsten verwendeten Datenstromdarstellung enthält, und dass der identifizierte Eintrag im Cache gefördert wird. Auf diese Weise können die Daten, die für den aktuellen Kontext am nützlichsten sind, für einen längeren Zeitraum im Cache verbleiben und dadurch die Leistung des Cache verbessern.
-
Beachten Sie, dass die verschiedene Beispiele zeigen, sind die Implementierungen in dieser Hinsicht nicht beschränkt. Beispielsweise kann das Speichersystem 100, wie in gezeigt, zusätzliche Geräte und/oder Komponenten, weniger Komponenten, andere Komponenten, andere Anordnungen usw. enthalten. Ein weiteres Beispiel ist, dass die oben beschriebene Funktionalität des Speicher-Controllers 110 und/oder des Cache-Controllers 185 in einer anderen Maschine oder Software des Speichersystems 100 enthalten sein kann. Andere Kombinationen und/oder Variationen sind ebenfalls möglich.
-
Daten und Anweisungen werden in entsprechenden Speichervorrichtungen gespeichert, die als ein oder mehrere computerlesbare oder maschinenlesbare Speichermedien ausgeführt sind. Zu den Speichermedien gehören verschiedene Formen von nicht transitorischen Speichern, darunter Halbleiterspeicher wie dynamische oder statische Direktzugriffsspeicher (DRAMs oder SRAMs), löschbare und programmierbare Festwertspeicher (EPROMs), elektrisch löschbare und programmierbare Festwertspeicher (EEPROMs) und Flash-Speicher; Magnetplatten wie Fest-, Disketten- und Wechselplatten; andere magnetische Medien einschließlich Bänder; optische Medien wie Compact Discs (CDs) oder digitale Videodisks (DVDs) oder andere Arten von Speichervorrichtungen.
-
Es ist zu beachten, dass die oben erörterten Anweisungen auf einem einzigen computerlesbaren oder maschinenlesbaren Speichermedium oder alternativ auf mehreren computerlesbaren oder maschinenlesbaren Speichermedien bereitgestellt werden können, die in einem großen System mit möglicherweise mehreren Knotenpunkten verteilt sind. Ein solches computerlesbares oder maschinenlesbares Speichermedium oder solche Speichermedien werden als Teil eines Artikels (oder eines Herstellungsartikels) betrachtet. Ein Artikel oder Herstellungsgegenstand kann sich auf jede hergestellte Einzelkomponente oder auf mehrere Komponenten beziehen. Das Speichermedium oder die Speichermedien können sich entweder in der Maschine befinden, auf der die maschinenlesbaren Anweisungen ausgeführt werden, oder an einem entfernten Standort, von dem maschinenlesbare Anweisungen über ein Netzwerk zur Ausführung heruntergeladen werden können.
-
In der vorstehenden Beschreibung sind zahlreiche Details aufgeführt, um ein Verständnis des hierin offengelegten Themas zu vermitteln. Allerdings können Implementierungen ohne einige dieser Details praktiziert werden. Andere Implementierungen können Modifikationen und Abweichungen von den oben beschriebenen Details enthalten. Es ist beabsichtigt, dass die beigefügten Ansprüche solche Modifikationen und Variationen abdecken.