-
HINTERGRUND
-
GEBIET DER ERFINDUNG
-
Diese Erfindung betrifft Systeme und Verfahren zum Verbessern der Auslagerungsleistung für RAID-Arrays.
-
HINTERGRUND DER ERFINDUNG
-
Ein RAID („Redundant Array of Independent Disks“) ist eine Speichertechnologie, die verbesserte Speicherfunktionen und eine verbesserte Zuverlässigkeit durch Redundanz bietet. Ein RAID wird erstellt, indem mehrere Speicherlaufwerkskomponenten (z.B. Plattenlaufwerke und/oder Solid-State-Laufwerke) zu einer logischen Einheit zusammengeführt werden. Die Daten werden dann mithilfe verschiedener Techniken, die als „RAID-Stufen“ bezeichnet werden, auf die Laufwerke verteilt. Die Standard-RAID-Stufen, die derzeit die RAID-Stufen 1 bis 6 umfassen, sind ein grundlegender Satz von RAID-Konfigurationen, die Striping, Spiegelung und/oder Parität verwenden, um für Datenredundanz zu sorgen. Alle Konfigurationen sorgen für ein Gleichgewicht zwischen zwei Hauptzielen: (1) Erhöhung der Datenzuverlässigkeit und (2) Erhöhung der E/A-Leistung.
-
In einem RAID-Array konfigurierte Festplatten können eine beschleunigte Leseleistung bieten, da auf Daten von mehreren Laufwerken gleichzeitig zugegriffen werden kann. Es kann jedoch zu einem erhöhten Aufwand kommen, wenn Schreibvorgänge auf RAID-Arrays wie RAID-5- oder RAID-6-Arrays ausgeführt werden. Dies liegt vor allem an der Paritätsberechnung. Um beispielsweise in eine Teilmenge (d.h. einen Strip bzw. Streifen) eines Stride (Segments) von Daten in einem RAID-5-Array zu schreiben, müssen die anderen Streifen des Stride von dem RAID-5-Array möglicherweise zwischengespeichert werden, um den zu dem Stride gehörenden Paritätswert neu zu berechnen. Nachdem der Paritätswert neu berechnet wurde, kann der gesamte Stride zurück auf das RAID-5-Array ausgelagert werden. Daher können Schreibvorgänge von weniger als einem vollen Stride auf ein RAID-5-Array einen erheblichen Aufwand beim Zwischenspeichern von Daten aus dem RAID-Array, Neuberechnen des Paritätswerts und Auslagern der Daten und des neu berechneten Paritätswerts zurück in das RAID-Array erfordern. Andererseits kann ein Schreibvorgang, der einen vollständigen Daten-Stride abdeckt, zusammen mit einem berechneten Paritätswert unter Verwendung einer einzigen Operation auf ein RAID-5-Array ausgelagert werden. Dies liegt daran, dass keine fehlenden Datenwerte oder Paritätswerte von den Plattenlaufwerken geladen werden müssen, bevor ein Stride in das RAID-Array geschrieben wird.
-
KURZDARSTELLUNG
-
Die Erfindung wurde in Reaktion auf den gegenwärtigen Stand der Technik und insbesondere in Reaktion auf die Probleme und Bedürfnisse im Stand der Technik entwickelt, die durch derzeit verfügbare Systeme und Verfahren noch nicht vollständig gelöst wurden. Dementsprechend wurde die Erfindung entwickelt, um die Auslagerungsleistung in ein RAID-Array zu verbessern. Die Merkmale und Vorteile der Erfindung werden aus der folgenden Beschreibung und den beigefügten Ansprüchen vollständiger ersichtlich oder können durch die Umsetzung der Erfindung, wie sie nachstehend beschrieben wird, erlernt werden.
-
In Übereinstimmung mit dem Vorangegangenen ist ein Verfahren zum Verbessern der Auslagerungsleistung in ein RAID-Array offenbart. In einer Ausführungsform scannt ein solches Verfahren periodisch einen Cache nach ersten Strides, die bereit sind, in ein RAID-Array ausgelagert zu werden. Beim Scannen des Cache erkennt das Verfahren zweite Strides, die derzeit nicht bereit sind, in das RAID-Array ausgelagert zu werden, aber wahrscheinlich bereit sein werden, während eines nachfolgenden Scans des Cache ausgelagert zu werden. Das Verfahren leitet als Vorbereitung für den nachfolgenden Scan ein präventives Zwischenspeichern aller fehlenden Daten der zweiten Strides aus dem RAID-Array in den Cache ein. Beim Eintreten des nachfolgenden Scans lagert das Verfahren die zweiten Strides aus dem Cache vom Cache in das RAID-Array aus.
-
Ein entsprechendes Computerprogrammprodukt und -system werden hierin ebenfalls offenbart und beansprucht.
-
Figurenliste
-
Damit die Vorteile der Erfindung leicht verständlich werden, erfolgt eine genauere Beschreibung der oben kurz beschriebenen Erfindung unter Bezugnahme auf bestimmte Ausführungsformen, die in den beigefügten Zeichnungen gezeigt sind. In Anbetracht dessen, dass diese Zeichnungen nur typische Ausführungsformen der Erfindung zeigen und daher nicht als ihren Umfang einschränkend anzusehen sind, wird die Erfindung mit zusätzlicher Genauigkeit und Detailliertheit durch Verwendung der beigefügten Zeichnungen beschrieben und erläutert, in denen:
- 1 ein übergeordnetes Blockschema ist, das ein Beispiel einer Netzwerkumgebung zeigt, in der Systeme und Verfahren gemäß der Erfindung umgesetzt werden können;
- 2 ein übergeordnetes Blockschema ist, das ein Beispiel eines Speichersystems zur Verwendung in der Netzwerkumgebung von 1 zeigt;
- 3A ein übergeordnetes Blockschema ist, das Strides in einem RAID-Array zeigt;
- 3B eine Tabelle ist, die Paritätswerte zeigt, die für jeden Stride in dem RAID-Array von 3A berechnet wurden;
- 4 ein übergeordnetes Blockschema ist, das einen Lese-Cache und einen Schreib-Cache innerhalb des Cache zeigt;
- 5 ein übergeordnetes Blockschema ist, das ein Cache-Auslagerungsmodul zum Auslagern von Daten aus dem Cache in ein RAID-Array zeigt;
- 6 ein Flussdiagramm ist, das eine Ausführungsform eines Verfahrens zum Scannen eines Cache nach Strides zum Auslagern in ein RAID-Array zeigt; und
- 7 ein Flussdiagramm ist, das eine Ausführungsform eines Verfahrens zum Steuern einer Anzahl von Strides zeigt, die in dem Cache präventiv zwischengespeichert werden.
-
DETAILLIERTE BESCHREIBUNG
-
Es versteht sich von selbst, dass die Komponenten der vorliegenden Erfindung, wie sie allgemein in den Figuren hierin beschrieben und gezeigt sind, in einer großen Vielfalt unterschiedlicher Konfigurationen angeordnet und ausgestaltet werden können. Somit soll die folgende ausführlichere Beschreibung der Ausführungsformen der Erfindung, wie sie in den Figuren gezeigt sind, den Schutzbereich der Erfindung wie beansprucht nicht einschränken, sondern steht lediglich stellvertretend für bestimmte Beispiele derzeit in Betracht gezogener Ausführungsformen gemäß der Erfindung. Die hier beschriebenen Ausführungsformen werden am besten unter Bezugnahme auf die Zeichnungen verstanden, in denen gleiche Teile durchweg mit gleichen Bezugszeichen gekennzeichnet sind.
-
Die vorliegende Erfindung kann als ein System, Verfahren und/oder Computerprogrammprodukt ausgeführt sein. Das Computerprogrammprodukt kann ein durch einen Computer lesbares Speichermedium (oder -medien) mit durch einen Computer lesbaren Programmanweisungen darauf umfassen, um einen Prozessor dazu zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
-
Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, die Anweisungen zur Verwendung durch ein System zur Ausführung von Anweisungen halten und speichern kann. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder jede geeignete Kombination daraus handeln, ohne auf diese beschränkt zu sein. Zu einer nicht erschöpfenden Liste spezifischerer Beispiele des durch einen Computer lesbaren Speichermediums gehören die Folgenden: eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein statischer Direktzugriffsspeicher (SRAM), ein tragbarer Kompaktspeicherplatte-Nur-Lese-Speicher (CD-ROM), eine DVD (digital versatile disc), ein Speicher-Stick, eine Diskette, eine mechanisch codierte Einheit wie zum Beispiel Lochkarten oder erhabene Strukturen in einer Rille, auf denen Anweisungen gespeichert sind, und jede geeignete Kombination daraus. Ein durch einen Computer lesbares Speichermedium soll in der Verwendung hierin nicht als flüchtige Signale an sich aufgefasst werden, wie zum Beispiel Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Wellenleiter oder ein anderes Übertragungsmedium ausbreiten (z.B. Lichtwellenleiterkabel durchlaufende Lichtimpulse) oder durch einen Draht übertragene elektrische Signale.
-
Hierin beschriebene, durch einen Computer lesbare Programmanweisungen können von einem durch einen Computer lesbaren Speichermedium auf jeweilige Datenverarbeitungs-/Verarbeitungseinheiten oder über ein Netzwerk wie zum Beispiel das Internet, ein lokales Netzwerk, ein Weitverkehrsnetz und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenübertragungsleiter, drahtlose Übertragung, Leitwegrechner, Firewalls, Vermittlungseinheiten, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder Netzwerkschnittstelle in jeder Datenverarbeitungs-/Verarbeitungseinheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der entsprechenden Datenverarbeitungs-/Verarbeitungseinheit weiter.
-
Bei durch einen Computer lesbaren Programmanweisungen zum Ausführen von Arbeitsschritten der vorliegenden Erfindung kann es sich um Assembler-Anweisungen, ISA-Anweisungen (Instruction-Set-Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, zustandssetzende Daten oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben werden, darunter objektorientierte Programmiersprachen wie Smalltalk, C++ o.ä. sowie herkömmliche prozedurale Programmiersprachen wie die Programmiersprache „C“ oder ähnliche Programmiersprachen.
-
Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer eines Benutzers, teilweise auf dem Computer eines Benutzers, als eigenständiges Software-Paket, teilweise auf dem Computer eines Benutzers und teilweise auf einem fernen Computer oder vollständig auf dem fernen Computer oder Server ausgeführt werden. In letzterem Fall kann ein fern angeordneter Computer mit dem Computer eines Benutzers durch eine beliebige Art Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Verwendung eines Internet-Dienstanbieters). In einigen Ausführungsformen können elektronische Schaltungen, darunter zum Beispiel programmierbare Logikschaltungen, vor Ort programmierbare Gatter-Anordnungen (FPGA, field programmable gate arrays) oder programmierbare Logikanordnungen (PLA, programmable logic arrays) die durch einen Computer lesbaren Programmanweisungen ausführen, indem sie Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen nutzen, um die elektronischen Schaltungen zu personalisieren, um Aspekte der vorliegenden Erfindung durchzuführen.
-
Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Ablaufpläne und/oder Blockschaltbilder bzw. Schaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird darauf hingewiesen, dass jeder Block der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder sowie Kombinationen von Blöcken in den Ablaufplänen und/oder den Blockschaltbildern bzw. Schaubildern mittels durch einen Computer lesbare Programmanweisungen ausgeführt werden können.
-
Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die über den Prozessor des Computers bzw. der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte erzeugen. Diese durch einen Computer lesbaren Programmanweisungen können auch auf einem durch einen Computer lesbaren Speichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, so dass das durch einen Computer lesbare Speichermedium, auf dem Anweisungen gespeichert sind, ein Herstellungsprodukt aufweist, darunter Anweisungen, welche Aspekte der/des in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaltbilder bzw. Schaubilder angegebenen Funktion/Schritts umsetzen.
-
Die durch einen Computer lesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um das Ausführen einer Reihe von Prozessschritten auf dem Computer bzw. der anderen programmierbaren Vorrichtung oder anderen Einheit zu verursachen, um einen auf einem Computer ausgeführten Prozess zu erzeugen, so dass die auf dem Computer, einer anderen programmierbaren Vorrichtung oder einer anderen Einheit ausgeführten Anweisungen die in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte umsetzen.
-
Unter Bezugnahme auf 1 ist ein Beispiel einer Netzwerkumgebung 100 gezeigt. Die Netzwerkumgebung 100 wird gezeigt, um ein Beispiel einer Umgebung zu zeigen, in der Ausführungsformen der Erfindung arbeiten können. Die Netzwerkumgebung 100 wird nur als Beispiel und nicht einschränkend gezeigt. Tatsächlich können die hierin offenbarten Systeme und Verfahren zusätzlich zu der gezeigten Netzwerkumgebung 100 auf eine große Vielfalt unterschiedlicher Netzwerkumgebungen anwendbar sein.
-
Wie gezeigt, umfasst die Netzwerkumgebung 100 einen oder mehrere Computer 102, 106, die durch ein Netzwerk 104 miteinander verbunden sind. Das Netzwerk 104 kann beispielsweise ein lokales Netzwerk (LAN) 104, ein Weitverkehrsnetz (WAN) 104, das Internet 104, ein Intranet 104 oder dergleichen umfassen. In bestimmten Ausführungsformen können die Computer 102, 106 sowohl Client-Computer 102 als auch Server-Computer 106 umfassen (hierin auch als „Hosts“ 106 oder „Host-Systeme“ 106 bezeichnet). Im Allgemeinen leiten die Client-Computer 102 Datenübertragungssitzungen ein, während die Server-Computer 106 auf Anfragen von den Client-Computern 102 warten und auf diese antworten. In bestimmten Ausführungsformen können die Computer 102 und/oder Server 106 mit einem oder mehreren internen oder externen direkt angeschlossenen Speichersystemen 112 (z.B. Arrays von Festplattenlaufwerken, Solid-State-Laufwerken, Bandlaufwerken usw.) verbunden sein. Diese Computer 102, 106 und direkt angeschlossene Speichersysteme 112 können unter Verwendung von Protokollen wie ATA, SATA, SCSI, SAS, Fibre Channel oder dergleichen Daten austauschen.
-
Die Netzwerkumgebung 100 kann in bestimmten Ausführungsformen ein Speichernetzwerk 108 hinter den Servern 106 umfassen, beispielsweise ein Speicherbereichsnetzwerk (SAN) 108 oder ein LAN 108 (z.B. bei Verwendung von Networkattached Storage). Dieses Netzwerk 108 kann die Server 106 mit einem oder mehreren Speichersystemen 110 verbinden, beispielsweise Arrays 110a von Festplattenlaufwerken oder Solid-State-Laufwerken, Bandbibliotheken 110b, einzelnen Festplattenlaufwerken 110c oder Solid-State-Laufwerken 110c, Bandlaufwerken 110d, CD-ROM-Bibliotheken oder dergleichen. Um auf ein Speichersystem 110 zuzugreifen, kann ein Host-System 106 über physische Verbindungen von einem oder mehreren Ports auf dem Host 106 zu einem oder mehreren Ports auf dem Speichersystem 110 Daten austauschen. Eine Verbindung kann über einen Switch, ein Fabric, eine direkte Verbindung oder dergleichen erfolgen. In bestimmten Ausführungsformen können die Server 106 und die Speichersysteme 110 unter Verwendung eines Netzwerkstandards wie Fibre Channel (FC) oder iSCSI Daten austauschen.
-
Unter Bezugnahme auf 2 ist eine Ausführungsform eines Speichersystems 110a gezeigt, das ein Array von Speicherlaufwerken 204 (z.B. Festplattenlaufwerken und/oder Solid-State-Laufwerken) umfasst. Wie gezeigt, umfasst das Speichersystem 110a einen Speichercontroller 200, einen oder mehrere Switches 202 und ein oder mehrere Speicherlaufwerke 204 wie beispielsweise Festplattenlaufwerke und/oder Solid-State-Laufwerke (etwa Flash-Speicher-gestützte Laufwerke). Der Speichercontroller 200 kann es einem oder mehreren Hosts 106 (z.B. Open-System- und/oder Mainframe-Servern 106) erlauben, auf Daten in dem einen oder den mehreren Speicherlaufwerken 204 zuzugreifen. Die Speicherlaufwerke 204 können in bestimmten Ausführungsformen in RAID-Arrays verschiedener RAID-Stufen konfiguriert sein, um für gewünschte Stufen der E/A-Leistung und/oder Datenredundanz zu sorgen.
-
In ausgewählten Ausführungsformen umfasst der Speichercontroller 200 einen oder mehrere Server 206. Der Speichercontroller 200 kann auch Hostadapter 208 und Einheitenadapter 210 umfassen, um den Speichercontroller 200 mit den Hosteinheiten 106 bzw. Speicherlaufwerken 204 zu verbinden. Während des normalen Betriebs (wenn beide Server 206 in Betrieb sind) können die Server 206 E/A zu verschiedenen logischen Teilsystemen (LSSs) in dem Enterprise Storage System 110a verwalten. Beispielsweise kann in bestimmten Konfigurationen ein erster Server 206a E/A zu geraden LSSs bearbeiten, während ein zweiter Server 206b E/A zu ungeraden LSSs bearbeiten kann. Diese Server 206a, 206b können für Redundanz sorgen, um sicherzustellen, dass Daten für verbundene Hosts 106 immer verfügbar sind. Wenn somit ein Server 206a ausfällt, kann der andere Server 206b die E/A-Last des ausgefallenen Servers 206a übernehmen, um sicherzustellen, dass E/A zwischen den Hosts 106 und den Speicherlaufwerken 204 fortgesetzt werden kann. Dieser Vorgang kann als „Übernahme“ bezeichnet werden.
-
In ausgewählten Ausführungsformen umfasst jeder Server 206 einen oder mehrere Prozessoren 212 und Speicher 214. Der Speicher 214 kann flüchtigen Speicher (z.B. RAM) sowie nichtflüchtigen Speicher (z.B. ROM, EPROM, EEPROM, Flash-Speicher, lokale Festplatten, lokale Solid-State-Laufwerke usw.) umfassen. Der flüchtige und der nichtflüchtige Speicher können in bestimmten Ausführungsformen Softwaremodule speichern, die auf dem einen/den mehreren Prozessoren 212 laufen und verwendet werden, um auf Daten in den Speicherlaufwerken 204 zuzugreifen. Diese Softwaremodule können alle Lese- und Schreibanforderungen an logische Datenträger 302 in den Speicherlaufwerken 204 verwalten.
-
In ausgewählten Ausführungsformen umfasst der Speicher 214 einen Cache 218, etwa einen DRAM-Cache 218. Immer wenn ein Host 106 (z.B. ein Open-System- oder Mainframe-Server 106) eine Leseoperation ausführt, kann der Server 206, der die Leseoperation ausführt, Daten von den Speicherlaufwerken 204 abrufen und sie für den Fall in seinem Cache 218 speichern, dass sie erneut benötigt werden. Wenn die Daten erneut von einem Host 106 angefordert werden, kann der Server 206 die Daten aus dem Cache 218 abrufen, anstatt sie von den Speicherlaufwerken 204 abzurufen, was sowohl Zeit als auch Ressourcen spart. Wenn ein Host 106 eine Schreiboperation ausführt, kann der Server 106, der die Schreibanforderung empfängt, in ähnlicher Weise die Schreiboperation in seinem Cache 218 speichern und die Schreiboperation zu einem späteren Zeitpunkt auf die Speicherlaufwerke 204 auslagern. Wenn die Schreiboperation in einem Cache 218 gespeichert wird, kann die Schreiboperation auch in einem nichtflüchtigen Speicher (NVS) 220 des anderen Servers 206 gespeichert werden, so dass die Schreiboperation durch den anderen Server 206 wiederhergestellt werden kann, falls der erste Server 206 ausfällt.
-
Ein Beispiel eines Speichersystems 110a mit einer ähnlichen Architektur wie der in 2 gezeigten ist das IBM DS8000® Enterprise Storage System. Das DS8000® ist ein hochleistungsfähiger Speichercontroller mit hoher Kapazität, das Festplatten- und Solid-State-Speicher bereitstellt, der für die Unterstützung des Dauerbetriebs ausgelegt ist. Dennoch sind die hierin offenbarten Systeme und Verfahren nicht auf das IBM DS8000® Enterprise Storage System beschränkt, sondern können in allen vergleichbaren oder analogen Speichersystemen oder Gruppen von Speichersystemen umgesetzt werden, unabhängig von Hersteller, Produktname oder Komponenten oder Komponentennamen, die zu dem System gehören. Jedes Speichersystem, das von einer oder mehreren Ausführungsformen der Erfindung profitieren kann, wird als in den Umfang der Erfindung fallend angesehen. Somit wird das IBM DS8000® nur beispielhaft angegeben und soll nicht einschränkend sein.
-
Unter Bezugnahme auf 3A können in ausgewählten Ausführungsformen Plattenlaufwerke 204 des Speichersystems 110a in einem RAID-Array 302 („redundanten Array von kostengünstigen Festplatten“) konfiguriert sein. Beispielsweise können in einem „RAID 5“-Array 302 logisch sequentielle Daten über mehrere Plattenlaufwerke 204a - d segmentiert werden. Wenn zum Beispiel die Plattenlaufwerke 204a - d vier Platten umfassen, können logisch sequentielle Daten „A“ in Segmente „A1“, „A2“ und „A3“ (zusammen als „Stride A“ bezeichnet) aufgeteilt und auf drei getrennten Platten 204a - c gespeichert werden. In ausgewählten Ausführungsformen weist jedes Segment eine oder mehrere Spuren 300 auf, obwohl auch andere Unterteilungen möglich sind. Es können Paritätsdaten „Ap“ berechnet werden, indem eine XOR-Operation an A1, A2 und A3 durchgeführt wird. Diese Paritätsdaten können auf einer vierten Platte 204d gespeichert werden. Beispielhafte Daten und Paritätswerte sind in 3B gezeigt (die Paritätswerte sind schattiert). Falls eine der Platten 204a - c ausfällt, können die verbleibenden Daten und Paritätswerte verwendet werden, um die Daten auf der ausgefallenen Platte zu rekonstruieren. Wenn zum Beispiel die Platte 204b ausfällt, die A2 enthält, können die Werte A1, A3 und Ap verwendet werden, um A2 zu rekonstruieren.
-
In einem RAID-Array 302 konfigurierte Platten können eine beschleunigte Leseleistung bieten, da auf Daten von mehreren Laufwerken 204a - c gleichzeitig zugegriffen werden kann. Es besteht jedoch normalerweise ein erhöhter Aufwand, wenn Schreibvorgänge in das Array ausgeführt werden. Dies liegt vor allem an der Paritätsberechnung. Um beispielsweise auf A1 zu schreiben, müssen möglicherweise die Werte A2, A3 und Ap von den Plattenlaufwerken 204 geladen (d.h. zwischengespeichert) werden, der Wert A1 muss auf den Plattenlaufwerken geändert werden und der Paritätswert Ap muss (unter Verwendung der Werte A1, A2 und A3) neu berechnet und in die Plattenlaufwerke 204 ausgelagert werden. Diese Operationen erfordern insgesamt vier Plattenoperationen. Andererseits kann ein voller Daten-Stride (d.h. A1, A2 und A3) zusammen mit dem Paritätswert Ap unter Verwendung einer einzigen Plattenoperation auf die Plattenlaufwerke 204 ausgelagert werden. Dies liegt daran, dass es nicht erforderlich ist, die Datenwerte oder den Paritätswert von den Plattenlaufwerken 204 zu laden, wenn ein Stride darauf geschrieben wird. Aus diesem Grund werden Auslagerungen vollständiger Strides bevorzugt, wenn Daten aus dem Cache 218 in die Speicherlaufwerke 204 ausgelagert werden.
-
Unter Bezugnahme auf 4 kann der Cache 218 in bestimmten Ausführungsformen in einen Lese-Cache 218a und einen Schreib-Cache 218b unterteilt sein. Der Lese-Cache 218a kann unveränderte Daten (z.B. unveränderte Spuren 400) speichern. Der Schreib-Cache 218b kann geänderte Daten (z.B. geänderte Spuren 400) speichern. Diese geänderten Daten können schließlich auf Backend-Speicherlaufwerke 204 ausgelagert werden.
-
In bestimmten Ausführungsformen kann für jeden Speicherbereich (d.h. das RAID-Array 302) im Speichersystem 110a eine geordnete Liste (z.B. ein b-Baum) geänderter Datenelemente (z.B. Spuren) geführt werden. Diese geordnete Liste kann verwendet werden, um zu ermitteln, welche geänderten Datenelemente aus dem Schreib-Cache 218b in das RAID-Array 302 ausgelagert werden sollen, sowie in welcher Reihenfolge die Auslagerungen ausgeführt werden. In bestimmten Ausführungsformen wird die geordnete Liste auf Grundlage physischer Orte jedes Datenelements in dem RAID-Array 302 sortiert.
-
Wie in 4 gezeigt, können in bestimmten Ausführungsformen ein oder mehrere Zeitgeber-Bits 402 für jedes geänderte Datenelement 400 im Schreib-Cache 218b geführt werden. Beispielsweise können in bestimmten Ausführungsformen vier Zeitgeber-Bits 402 für jedes Datenelement 400 geführt werden, was Werte von null bis fünfzehn ermöglicht. Wie in Verbindung mit 6 ausführlicher beschrieben wird, können diese Zeitgeber-Bits 402 Zählwerte speichern, die verwendet werden, um zu ermitteln, wann die Datenelemente ausgelagert werden sollen. Jedes Mal, wenn die geordnete Liste gescannt wird, können die Zählwerte der Datenelemente dekrementiert werden. Jedes Mal, wenn in ein Datenelement 400 geschrieben wird, kann der zu dem Datenelement 400 gehörende Zählwert inkrementiert werden. Die Zählwerte können sicherstellen, dass Datenelemente 400, auf die oft geschrieben wird, nicht vorzeitig aus dem Cache 218 in die Speicherlaufwerke 204 ausgelagert werden.
-
Unter Bezugnahme auf 5 kann in bestimmten Ausführungsformen ein Cache-Auslagerungsmodul 500 bereitgestellt werden, um Datenelemente 400 aus dem Schreib-Cache 218b in die Speicherlaufwerke 204 auszulagern. Dieses Cache-Auslagerungsmodul 500 kann verschiedene Teilmodule aufweisen, die verschiedene Merkmale und Funktionen bereitstellen. Das Cache-Auslagerungsmodul 500 und die zugehörigen Teilmodule können in Hardware, Software, Firmware oder Kombinationen davon umgesetzt sein. Das Cache-Auslagerungsmodul 500 und die zugehörigen Teilmodule werden beispielhaft und nicht einschränkend gezeigt. In verschiedenen Ausführungsformen können mehr oder weniger Teilmodule vorgesehen sein. Beispielsweise kann die Funktionalität mancher Teilmodule in einem einzelnen oder einer kleineren Anzahl von Teilmodulen zusammengeführt sein, oder die Funktionalität eines einzelnen Teilmoduls kann über mehrere Teilmodule verteilt sein.
-
Wie gezeigt, umfasst das Cache-Auslagerungsmodul 500 ein Cache-Scan-Modul 502, ein Zähler-Dekrementierungsmodul 504, ein Zähler-Ermittlungsmodul 506, ein Schwellenwertmodul 508, ein Zwischenspeichermodul 510, ein Auslagerungsmodul 512, ein Modul zum präventiven Zwischenspeichern 514 und/oder ein Begrenzungsmodul 516. Das Cache-Scan-Modul 502 kann dazu konfiguriert sein, die geordnete Liste periodisch zu scannen, um zu ermitteln, welche Datenelemente 400 bereit sind, aus dem Schreib-Cache 218b in das RAID-Array 302 ausgelagert zu werden. Jedes Mal, wenn Datenelemente 400 in der geordneten Liste gescannt werden, kann das Zähler-Dekrementierungsmodul 504 die Zählwerte in den Zeitgeber-Bits 402 dekrementieren, die zu den Datenelementen 400 gehören.
-
Beim Scannen der Datenelemente 400 in der geordneten Liste kann das Zähler-Ermittlungsmodul 506 die Zählwerte ermitteln, die zu den Datenelementen 400 gehören, indem es die Zeitgeber-Bits 402 liest. Nach dem Ausführen dieser Ermittlung kann das Schwellenwertmodul 508 ermitteln, ob alle Zählwerte, die zu Datenelementen 400 desselben Stride gehören, kleiner oder gleich einem ersten Schwellenwert (z.B. null) sind. Wenn die Zählwerte kleiner oder gleich dem ersten Schwellenwert sind, können die Datenelemente 400 als „bereit“ betrachtet werden, aus dem Cache 218 in das RAID-Array 302 ausgelagert zu werden. Falls erforderlich, kann das Zwischenspeichermodul 510 alle fehlenden Datenelemente 400 aus dem RAID-Array 302 in den Cache 218 zwischenspeichern, so dass die Datenelemente 400 in dem Cache 218 einen vollständigen Stride bilden. Das Auslagerungsmodul 512 kann dann, falls erforderlich, den zu dem Stride gehörenden Paritätswert neu berechnen und den Stride aus dem Cache 218 in das RAID-Array 302 auslagern.
-
Wenn die Zählwerte für Datenelemente 400, die zu dem Stride gehören, nicht kleiner oder gleich dem ersten Schwellenwert sind, kann das Schwellenwertmodul 508 ermitteln, ob die Zählwerte kleiner oder gleich einem zweiten Schwellenwert (z.B. drei) sind. Wenn dies der Fall ist, sind die zu dem Stride gehörenden Datenelemente 400 derzeit möglicherweise nicht für die Auslagerung in das RAID-Array 302 „bereit“ (da ihre Zählwerte nicht kleiner oder gleich dem ersten Schwellenwert sind), werden aber wahrscheinlich während eines nachfolgenden Scans des Cache 218 bereit sein (da ihre Zählwerte dekrementiert werden und daher während des nachfolgenden Scans wahrscheinlich kleiner oder gleich dem ersten Schwellenwert sein werden, vorausgesetzt, es treten keine Ereignisse wie Schreibvorgänge auf, die die Zählwerte über den ersten Schwellenwert anheben würden). In solchen Fällen kann das Modul zum präventiven Zwischenspeichern 514 alle fehlenden Datenelemente 400 präventiv aus dem RAID-Array 302 in den Cache 218 zwischenspeichern, so dass für den nächsten Durchlauf des Cache-Scan-Moduls 502 der vollständige Stride im Cache 218 vorhanden ist. Wenn während des nächsten Scans des Cache 218 alle Zählwerte, die zu den Datenelementen 400 des Stride gehören, unter dem ersten Schwellenwert liegen, werden die zu dem Stride gehörenden Datenelemente 400 als „bereit“ zum Auslagern betrachtet. Das präventive Zwischenspeichern fehlender Datenelemente 400 auf diese Weise kann die Notwendigkeit beseitigen oder verringern, zum Zeitpunkt der Auslagerung fehlende Datenelemente 400 aus dem RAID-Array 302 in den Cache 218 zwischenzuspeichern, wodurch die Effizienz verbessert wird.
-
Das Begrenzungsmodul 516 kann dazu konfiguriert sein, eine Anzahl von Strides zu begrenzen, die gerade präventiv aus einem RAID-Array 302 zwischengespeichert werden. In bestimmten Ausführungsformen kann das Begrenzungsmodul 516 die Anzahl der Strides auf einen ausgewählten Schwellenwert (z.B. fünfzig) begrenzen. Wenn die Anzahl der Strides, die präventiv zwischengespeichert werden, größer oder gleich diesem Wert ist, kann das Begrenzungsmodul 516 alle zusätzlichen Anforderungen für präventives Zwischenspeichern in eine Warteschlange stellen. Wenn die Anzahl der Strides, die präventiv zwischengespeichert werden, unter den Schwellenwert (oder einen noch niedrigeren Schwellenwert) fällt, kann das Begrenzungsmodul 516 erneut mit der Verarbeitung von Anforderungen beginnen, Strides präventiv zwischenzuspeichern, beginnend mit Anforderungen in der Warteschlange in der Reihenfolge, in der sie in die Warteschlange gestellt wurden. Eine Ausführungsform eines Verfahrens 700, das von dem Begrenzungsmodul 516 verwendet werden kann, wird in Verbindung mit 7 beschrieben.
-
Unter Bezugnahme auf 6 ist eine Ausführungsform eines Verfahrens 600 zum Scannen eines Cache 218 gezeigt. Ein derartiges Verfahren 600 kann durch das zuvor beschriebene Cache-Auslagerungsmodul 500 ausgeführt werden. Wie gezeigt, ermittelt 602 das Verfahren 600 anfänglich, ob ein Scan des Cache 218 ansteht. In bestimmten Ausführungsformen kann ein Scan bei Abschluss eines vorherigen Scans oder in einem festgelegten Intervall erfolgen. Die Zeit, die benötigt wird, um einen Scan auszuführen, kann in bestimmten Ausführungsformen einer Zeitdauer entsprechen, die benötigt wird, um die zuvor beschriebene geordnete Liste zu durchlaufen.
-
Wenn ein neuer Scan eingeleitet wird, prüft 604 das Verfahren 600, wie gezeigt, Datenelemente 400 in dem Cache 218, die zu einem ersten Stride in der geordneten Liste gehören. Wenn bei Schritt 606 Zählwerte (d.h. die Zeitgeber-Bits 402) aller Datenelemente 400, die zu dem Stride gehören, bei oder unter einem ersten Schwellenwert (z.B. null) liegen, ist der Stride zum Auslagern in das RAID-Array 302 bereit. Wenn bei Schritt 608 Daten zum Ausführen einer Auslagerung eines ganzen Stride fehlen (unter der Annahme, dass eine Auslagerung eines ganzen Stride erforderlich und/oder die effizienteste Art und Weise zum Auslagern der Daten ist), speichert das Verfahren 600 die fehlenden Datenelemente 400 aus RAID-Array 302 zwischen 610, so dass der vollständige Stride im Cache 218 vorhanden ist. Unter Verwendung des vollständigen Daten-Strides berechnet das Verfahren 600 bei 612 den Paritätswert neu und lagert den Stride in das RAID-Array 302 aus 612. Wenn andererseits bei Schritt 608 keine Daten in dem Stride fehlen, berechnet das Verfahren 600 einfach den Paritätswert neu 612 und lagert den Stride aus 612. Es ist kein Zwischenspeichern fehlender Datenelemente 400 aus dem RAID-Array 302 erforderlich. Das Verfahren 600 ermittelt 614 dann, ob die geordnete Liste mehr Strides enthält, und prüft 604, wenn dies der Fall ist, den nächsten Stride in der geordneten Liste.
-
Wenn bei Schritt 606 die Zählwerte (d.h. Zeitgeber-Bits 402) aller Datenelemente 400, die zu dem Stride gehören, nicht bei oder unter dem ersten Schwellenwert liegen, ermittelt 616 das Verfahren 600, ob die Zählwerte aller Datenelemente 400, die zu dem Stride gehören, bei oder unter einem zweiten Schwellenwert (z.B. drei) liegen. Wenn die nicht der Fall ist, ermittelt 614 das Verfahren 600, ob die geordnete Liste mehr Strides enthält, und prüft 604, wenn dies der Fall ist, den nächsten Stride in der geordneten Liste. Wenn alle zu dem Stride gehörenden Datenelemente 400 bei oder unter dem zweiten Schwellenwert liegen, ist der Stride möglicherweise derzeit nicht zum Auslagern in das RAID-Array 302 bereit, wird aber wahrscheinlich während eines nachfolgenden Scans des Cache 218 zum Auslagern bereit sein (vorausgesetzt, dass keine weiteren Schreibvorgänge an den Datenelementen 400 vorgenommen werden). Wenn bei Schritt 616 alle Datenelemente 400, die zu dem Stride gehören, bei oder unter dem zweiten Schwellenwert liegen, ermittelt 618 das Verfahren 600, ob irgendwelche fehlenden Daten benötigt werden, um den Stride zu vervollständigen, unter der Annahme, dass eine vollständige Stride-Auslagerung erforderlich und/oder am effizientesten ist. Wenn Daten fehlen, speichert das Verfahren 600 die fehlenden Daten präventiv aus dem RAID-Array 302 in den Cache 218 zwischen 620, wodurch sichergestellt wird, dass der vollständige Stride für den nächsten Scan im Cache 218 vorhanden ist. Wenn andererseits in Schritt 618 keine Daten in dem Stride fehlen, ist kein präventives Zwischenspeichern erforderlich. Das Verfahren 600 ermittelt 614 dann, ob die geordnete Liste mehr Strides enthält, und prüft 604, wenn dies der Fall ist, den nächsten Stride in der geordneten Liste.
-
Nachdem alle Strides in der geordneten Liste geprüft wurden 604, endet das Verfahren 600 und wartet 602 auf den Beginn des nächsten Scan. In bestimmten Ausführungsformen beginnt der nächste Scan sofort. In weiteren Ausführungsformen beginnt der nächste Scan, nachdem der vorherige Scan beendet wurde und eine bestimmte Zeitspanne verstrichen ist. In noch weiteren Ausführungsformen treten Scans in regelmäßigen Intervallen ein und der nächste Scan beginnt am Beginn des nächsten regelmäßigen Intervalls.
-
Unter Bezugnahme auf 7 ist eine Ausführungsform eines Verfahrens 700 zum Steuern einer Anzahl von Strides gezeigt, die präventiv aus dem RAID-Array 302 zwischengespeichert werden. Wie gezeigt, ermittelt das Verfahren 700 bei 702, ob für einen Stride im Cache 218 ein präventives Zwischenspeichern erforderlich ist. Wenn dies der Fall ist, ermittelt 704 das Verfahren 700, ob eine Anzahl von Strides, die präventiv zwischengespeichert werden, über einem hohen Schwellenwert (z.B. fünfzig) liegt. Wenn dies der Fall ist, stellt das Verfahren 700 den Stride in die Warteschlange 706. Wenn bei Schritt 704 die Anzahl der Strides, die präventiv zwischengespeichert werden, unter dem hohen Schwellenwert liegt, inkrementiert 708 das Verfahren 700 eine Anzahl der Strides, die gegenwärtig präventiv zwischengespeichert werden, und leitet ein präventives Zwischenspeichern für den Stride ein 708.
-
Wenn bei Schritt 710 das präventive Zwischenspeichern für einen Stride abgeschlossen ist, dekrementiert 712 das Verfahren 700 eine Anzahl der Strides, die derzeit präventiv zwischengespeichert werden. Das Verfahren 700 ermittelt 714 dann, ob die Anzahl der Strides, die derzeit präventiv zwischengespeichert werden, unter einem niedrigen Schwellenwert (z.B. vierzig) liegt. Wenn dies der Fall ist, ermittelt 716 das Verfahren 700, ob sich derzeit irgendwelche Strides in der Warteschlange befinden. Wenn dies der Fall ist, inkrementiert 708 das Verfahren 700 die Anzahl der Strides, die derzeit präventiv zwischengespeichert werden, und leitet ein präventives Zwischenspeichern für den nächsten Stride oben in der Warteschlange ein 708. Wenn sich keine Strides in der Warteschlange befinden, kehrt das Verfahren 700 zum Anfang zurück, um zu ermitteln 702, ob ein weiterer Stride präventiv zwischengespeichert werden soll, oder ermittelt 710, ob das präventive Zwischenspeichern für einen Stride abgeschlossen ist.
-
Die Ablaufpläne und die Blockschaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Ausführungen von Systemen, Verfahren und von einem Computer nutzbaren Medien gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Ablaufplänen oder Blockschaubildern ein Modul, ein Segment oder einen Teil von Anweisungen darstellen, der eine oder mehrere ausführbare Anweisungen zur Ausführung der angegebenen logischen Funktion(en) aufweist. Es sollte auch beachtet werden, dass in einigen alternativen Umsetzungen die Funktionen, die in dem Block beschrieben sind, außerhalb der in den Figuren angegebenen Reihenfolge auftreten können. Zwei nacheinander gezeigte Blöcke können zum Beispiel in Wirklichkeit im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal je nach entsprechender Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Blockschaubilder und/oder Ablaufpläne sowie Kombinationen aus Blöcken in den Blockschaubildern und/oder Ablaufplänen durch spezielle auf Hardware beruhende Systeme, welche die festgelegten Funktionen oder Schritte ausführen, oder durch Kombinationen aus Spezial-Hardware und Computeranweisungen umgesetzt werden können.