DE102007009233A1 - Datenzustandsbeschreibungs-Datenstrukturen - Google Patents

Datenzustandsbeschreibungs-Datenstrukturen Download PDF

Info

Publication number
DE102007009233A1
DE102007009233A1 DE102007009233A DE102007009233A DE102007009233A1 DE 102007009233 A1 DE102007009233 A1 DE 102007009233A1 DE 102007009233 A DE102007009233 A DE 102007009233A DE 102007009233 A DE102007009233 A DE 102007009233A DE 102007009233 A1 DE102007009233 A1 DE 102007009233A1
Authority
DE
Germany
Prior art keywords
data structure
data
virtual disk
distributed
segment
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.)
Withdrawn
Application number
DE102007009233A
Other languages
English (en)
Inventor
James M. Fort Collins Reuter
James Fort Collins Jackson
Douglas L. Fort Collins Voigt
Alistair Fort Collins Veitch
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.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Development Co LP
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 Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Publication of DE102007009233A1 publication Critical patent/DE102007009233A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0617Improving the reliability of storage systems in relation to availability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Abstract

Verschiedene Verfahrens- und Systemausführungsbeispiele der vorliegenden Erfindung betreffen Daten und Datenzustandsbeschreibungsdatenstrukturen, die bei Speicherkomponenten eines verteilten Datenspeichersystems verwendet werden. Bei einem Ausführungsbeispiel der vorliegenden Erfindung speichert eine hierarchische Datenstruktur den Datenzustand eines Komponentendatenspeichersystems eines verteilten Datenspeichersystems. Bei einem anderen Ausführungsbeispiel der vorliegenden Erfindung umfasst eine Datenblockadresse, die in einem computerlesbaren Speicher innerhalb eines Komponentendatenspeichersystems eines verteilten Datenspeichersystems gespeichert ist, einen Blockidentifizierer und zusätzliche Datenfelder, die dazu dienen, den adressierten Datenblock eindeutig zu spezifizieren, wenn mehrere Kopien des Datenblocks in dem Komponentendatenspeichersystem unter unterschiedlichen Redundanzschemata gespeichert werden.

Description

  • Während Computervernetzungs- und -verbindungssysteme stetig an Fähigkeiten, Zuverlässigkeit und Durchsatz gewonnen haben und während verteilte Rechensysteme, die auf Vernetzungs- und Verbindungssystemen basieren, entsprechend an Größe und Fähigkeiten zugenommen haben, wurde ein enormer Fortschritt gemacht beim Entwickeln des theoretischen Verständnisses von Problemen beim verteilten Rechnen, was wiederum die Entwicklung und umfassende Verbreitung von leistungsfähigen und nützlichen Werkzeugen und Lösungsansätze zum Verteilen von Rechenaufgaben innerhalb von verteilten Systemen ermöglicht. Früh in der Entwicklung von verteilten Systemen wurden große Großcomputer und Minicomputer, jeder mit einer Vielzahl von Peripheriegeräten, einschließlich Massenspeichervorrichtungen, direkt oder durch Netze verbunden, um eine Verarbeitung von großen Rechenaufgaben zu verteilen. Während Vernetzungssysteme robuster, fähiger und wirtschaftlicher wurden, wurden unabhängige Massenspeichervorrichtungen, wie z. B. unabhängige Laufwerkarrays, die durch ein oder mehr Netze mit entfernten Hostcomputern verbunden sind, zum Speichern von großen Datenmengen entwickelt, die von zahlreichen Computersystemen, von Großcomputern bis zu Personalcomputern, gemeinschaftlich verwendet werden. In letzter Zeit wurde, wie es im Folgenden genauer beschrieben ist, damit begonnen, Entwicklungsbemühungen auf ein Verteilen von Massenspeichersystemen über zahlreiche Massenspeichervorrichtungen, die durch ein oder mehr Netze verbunden sind, zu richten.
  • In dem Maße, in dem sich Massenspeichervorrichtungen von Peripheriegeräten, die getrennt an ein einziges Computersystem angeschlossen sind und durch dasselbe gesteuert werden, zu unabhängigen Vorrichtungen, die durch entfernte Hostcomputer gemeinschaftlich verwendet werden, und schließlich zu verteilten Systemen entwickelt haben, die aus zahlreichen, diskreten Massenspeichereinheiten zusammengesetzt sind, die miteinander vernetzt sind, haben Probleme, die einem gemeinschaftlichen Verwenden von Daten und einem Unterhalten von gemeinschaftlich verwendeten Daten in konsistenten und robusten Zuständen zugeordnet sind, drastisch zugenommen. Die Beteiligten an Entwurf, Entwicklung, Herstellung und Verkauf und schließlich die Benutzer von verteilten Systemen erkennen weiterhin den Bedarf an Erweiterung von bereits entwickelten Verfahren und Routinen zum verteilten Rechnen und an neuen Verfahren und Routinen, die gewünschte Pegel an Datenrobustheit und Konsistenz bei größeren, komplexeren und stärker verteilten Systemen liefern.
  • Es ist die Aufgabe der vorliegenden Erfindung, eine Datenstruktur und ein Verfahren zum Darstellen eines Datenzustands eines verteilten Datenspeichersystems mit verbesserten Charakteristika zu schaffen.
  • Diese Aufgabe wird durch eine Datenstruktur gemäß Anspruch 1 sowie ein Verfahren gemäß Anspruch 7 gelöst.
  • Verschiedene Verfahrens- und Systemausführungsbeispiele der vorliegenden Erfindung betreffen Daten und Datenzustandsbeschreibungsdatenstrukturen, die bei Speicherkomponenten eines verteilten Datenspeichersystems verwendet werden. Bei einem Ausführungsbeispiel der vorliegenden Erfindung speichert eine hierarchische Datenstruktur den Datenzustand eines Komponentendatenspeichersystems eines verteilten Datenspeichersystems. Bei einem anderen Ausführungsbeispiel der vorliegenden Erfindung umfasst eine Datenblockadresse, die in einem computerlesbaren Speicher innerhalb eines Komponentendatenspeichersystems eines verteilten Datenspeichersystems gespeichert ist, einen Blockidentifizierer und zusätzliche Datenfelder, die dazu dienen, den adressierten Datenblock eindeutig zu spezifizieren, wenn mehrere Kopien des Datenblocks in dem Komponentendatenspeichersystem unter unterschiedlichen Redundanzschemata gespeichert sind.
  • Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf die beiliegenden Zeichnungen näher erläutert. Es zeigen:
  • 1 ein Diagramm hoher Ebene eines FAB-Massenspeichersystems gemäß einem Ausführungsbeispiel der vorliegenden Erfindung;
  • 2 ein Diagramm hoher Ebene eines exemplarischen FAB-Bausteins gemäß einem Ausführungsbeispiel der vorliegenden Erfindung;
  • 3 bis 4 das Konzept eines Datenspiegelns;
  • 5 ein Diagramm hoher Ebene, das eine Löschcodierredundanz zeigt.
  • 6 ein 3+1-Löschcodierredundanzschema, das die gleichen Darstellungskonventionen verwendet, wie sie in den 3 und 4 verwendet werden;
  • 7 die hierarchischen Dateneinheiten, die bei einer aktuellen FAB-Implementierung verwendet werden, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen;
  • 8A bis 8D eine hypothetische Abbildung von Logikdatenein heiten auf physische Platten eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt;
  • 9 die Logikdateneinheiten, die innerhalb eines FAB-Systems verwendet werden, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen, un ter Verwendung einer anderen Darstellungskonvention;
  • 10A die Datenstruktur, die durch jeden Baustein unterhalten wird, die den Gesamtdatenzustand des FAB-Systems beschreibt und die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt;
  • 10B eine Bausteinsegmentadresse, die eine Bausteinrolle gemäß einem Ausführungsbeispiel der vorliegenden Erfindung umfasst;
  • 11A bis 11H verschiedene unterschiedliche Typen von Konfigu rationsveränderungen, die sich in der Datenbeschreibungsdatenstruktur, die in 10A gezeigt ist, innerhalb eines FAB-Systems wiederspiegeln, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen;
  • 12 bis 18 den Grundbetrieb eines verteilten Speicherregis ters;
  • 19 die Komponenten, die durch einen Prozess oder eine Verarbeitungsentität Pi verwendet werden, die zusammen mit einer Anzahl von anderen Prozessen und/oder Verarbeitungsentitäten Pj≠i ein verteiltes Speicherregister implementiert;
  • 20 eine Bestimmung des aktuellen Werts eines verteilten Speicherregisters mittels eines Quorums;
  • 21 Pseudocodeimplementierungen für die Routinehandhabungsvorrichtungen und Betriebsroutinen, die in 19 als Diagramm gezeigt sind;
  • 22 modifizierten Pseudocode, der dem Pseudocode ähnlich ist, der in 17 geliefert wird, der Erweiterungen zu dem Speicherregistermodell um fasst, die eine Verteilung von Segmenten über Bausteine gemäß Löschcodierredundanzschemata innerhalb eines FAB-Systems handhaben, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen;
  • 23 die große Abhängigkeit von Zeitstempeln seitens der Datenkonsistenztechniken, die auf dem Speicherregistermodell basieren, innerhalb eines FAB-Systems, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen;
  • 24 eine hierarchische Zeitstempelverwaltung, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt;
  • 25 bis 26 Pseudocode für ein weiteres erweitertes Speicher registermodell, das das Konzept von quorumbasierten Schreiboperationen in mehrere aktive Konfigurationen umfasst, die aufgrund einer Neukonfiguration eines verteilten Segments innerhalb eines FAB-Systems vorhanden sein können, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen;
  • 27 Pseudocode hoher Ebene zur Erweiterung des Speicherregistermodells auf die Migrationsebene innerhalb eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt;
  • 28 die hierarchische Gesamtstruktur von sowohl Steuerverarbeitung als auch Datenspeicherung innerhalb eines FAB-Systems, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt.
  • Verschiedene Verfahrens- und Systemausführungsbeispiele der vorliegenden Erfindung verwenden hierarchische Datenstrukturen, um einen Datenzustand darzustellen, und ein Blockad ressierschema, das eine Komponentendatenspeichersystemrolle umfasst, um zu ermöglichen, dass ein Komponentendatenspeichersystem Teile eines bestimmten Datensegments unter unterschiedlichen Redundanzschemata während einer Redundanzschemamigration speichert. Ausführungsbeispiele der vorliegenden Erfindung sind im Folgenden im Zusammenhang mit einer verteilten Massenspeichervorrichtung, die sich derzeit in Entwicklung befindet, beschrieben. In folgenden Unterabschnitten werden Komponenten und Merkmale des verteilten Massenspeichersystems und verschiedene Verfahren, die durch Verarbeitungskomponenten des verteilten Massenspeichersystems verwendet werden, verwendet, um verschiedene Ausführungsbeispiele der vorliegenden Erfindung zu veranschaulichen. Wie es im Folgenden ausgeführt wird, können Verfahren, Datenstrukturen, Adressierschemata und andere Aspekte der vorliegenden Erfindung eine weit reichende Anwendbarkeit bei vielen anderen verteilten Verarbeitungssystemen finden.
  • Einführung in FAB
  • Die Architektur eines vereinigten Arrays von Bausteinen („FAB" = federated array of bricks) stellt einen neuen, in hohem Maße verteilten Lösungsansatz zur Massenspeicherung dar. 1 zeigt ein Diagramm hoher Ebene eines FAB-Massenspeichersystems gemäß einem Ausführungsbeispiel der vorliegenden Erfindung. Ein FAB-Massenspeichersystem, das nachfolgend als ein „FAB-System" bezeichnet wird, weist eine Anzahl von kleinen, diskreten Komponentendatenspeichersystemen oder Massenspeichervorrichtungen 102109 auf, die miteinander durch ein erstes Kommunikationsmedium 110 kommunizieren und die durch ein zweites Kommunikationsmedium 114 Anforderungen von einer Anzahl von entfernten Hostcomputern 112113 empfangen und Antworten an dieselben senden können. Jedes diskrete Komponentendatenspeichersystem 102109 kann als ein „Baustein" bezeichnet werden. Ein Baustein kann eine Schnittstelle umfassen, durch die Anforderungen von entfernten Hostcomputern empfangen werden können und Antworten auf die empfangenen Anforderungen zurück zu den entfernten Hostcomputern gesendet werden können. Ein beliebiger Baustein eines FAB-Systems kann Anforderungen von Hostcomputern empfangen und auf Anforderungen von Hostcomputern antworten. Ein Baustein eines FAB-Systems übernimmt eine Koordinatorrolle bezüglich irgendeiner bestimmten Anforderung und koordiniert Operationen von allen Bausteinen, die am Antworten auf die bestimmte Anforderung beteiligt sind, und ein beliebiger Baustein in dem FAB-System kann eine Koordinatorrolle bezüglich einer gegebenen Anforderung übernehmen. Ein FAB-System ist deshalb ein Typ von in hohem Maße softwareimplementiertem, symmetrischem, verteiltem Rechensystem. Bei bestimmten alternativen Ausführungsbeispielen kann ein einziges Netz sowohl zum Verbinden von Bausteinen als auch zum Verbinden des FAB-Systems mit entfernten Hostcomputern verwendet werden. Bei anderen alternativen Ausführungsbeispielen können mehr als zwei Netze verwendet werden.
  • 2 zeigt ein Diagramm hoher Ebene eines exemplarischen FAB-Bausteins gemäß einem Ausführungsbeispiel der vorliegenden Erfindung. Der FAB-Baustein, der in 2 veranschaulicht ist, umfasst 12 SATA-Plattenlaufwerke 202213, die mit einem Platten-I/O(E/A)-Prozessor 214 eine Schnittstelle bilden. Der Platten-I/O-Prozessor 214 ist durch einen oder mehr Hochgeschwindigkeitsbusse 216 mit einer zentralen Brückenvorrichtung 218 verbunden. Die zentrale Brücke 218 ist wiederum mit ein oder mehr Allgemeinprozessoren 220, einem Host-I/O-Prozessor 222, einem Zwischenbaustein-I/O-Prozessor 22 und ein oder mehr Speichern 226228 verbunden. Der Host-I/O-Prozessor 222 liefert eine Kommunikationsschnittstelle mit dem zweiten Kommunikationsmedium (114 in 1), durch die der Baustein mit entfernten Hostcomputern kommuniziert. Der Zwischenbaustein-I/O-Prozessor 224 liefert eine Kommunikationsschnittstelle mit dem ersten Kommunikationsmedium (110 in 1), durch die der Baustein mit anderen Bausteinen des FAB kommuniziert.
  • Die ein oder mehr Allgemeinprozessoren 220 führen ein Steuerprogramm aus, neben vielen Aufgaben und Zuständigkeiten zum Verarbeiten von Anforderungen von entfernten Hostcomputern und entfernten Bausteinen, Verwalten von Zustandsinformationen, die in den ein oder mehr Speichern 226228 und auf Speichervorrichtungen 202213 gespeichert sind, und zum Verwalten einer Datenspeicherung und Datenkonsistenz innerhalb des Bausteins. Die ein oder mehr Speicher dienen als ein Cache-Speicher für Daten sowie ein Speicherort für verschiedene Entitäten, einschließlich Zeitstempel und Datenstrukturen, die durch Steuerprozesse verwendet werden, die einen Zugriff auf Daten steuern, die innerhalb des FAB-Systems gespeichert sind, und die Daten innerhalb des FAB-Systems in einem konsistenten Zustand unterhalten. Die Speicher umfassen normalerweise sowohl flüchtige als auch nicht-flüchtige Speicher. In der folgenden Erörterung kann auf die ein oder mehr Allgemeinprozessoren, die ein oder mehr Speicher und andere Komponenten, von denen eine oder mehr anfangs als enthalten erwähnt sind, im Singular Bezug genommen werden, um ein Wiederholen des Ausdrucks „ein oder mehr" zu vermeiden.
  • Bei bestimmten Ausführungsbeispielen der vorliegenden Erfindung sind alle Bausteine in einem FAB im Wesentlichen identisch, wobei die gleichen Steuerprogramme ausgeführt werden, im Wesentlichen die gleichen Datenstrukturen und Steuerinformationen innerhalb ihrer Speicher 226 und Massenspeichervorrichtungen 202213 unterhalten werden und Standardschnittstellen durch die I/O-Prozessoren mit Hostcomputern, mit anderen Bausteinen innerhalb des FAB und mit den internen Plattenlaufwerken geliefert werden. Bei diesen Ausführungsbeispielen der vorliegenden Erfindung können sich Bausteine innerhalb des FAB leicht bezüglich Versionen der Steuerprogramme, spezifischer Modelle und Fähigkeiten von internen Plattenlaufwerken, Versionen der verschiedenen Hardware-Komponenten und anderer derartiger Variationen voneinander unterscheiden. Schnittstellen und Steuerprogramme sind sowohl zur Rückwärts- als auch zur Vorwärtskom patibilität konzipiert, um zu ermöglichen, dass derartige Variationen innerhalb des FAB toleriert werden.
  • Jeder Baustein kann auch zahlreiche andere Komponenten enthalten, die in 2 nicht gezeigt sind, einschließlich ein oder mehr Leistungsversorgungen, Kühlsysteme, Steuerfelder oder anderer externer Steuerschnittstellen, Standarddirektzugriffsspeicher und anderer derartiger Komponenten. Bausteine sind relativ einfache Vorrichtungen, die im Allgemeinen aus Kommoditätskomponenten hergestellt werden, einschließlich Kommoditäts-I/O-Prozessoren und Plattenlaufwerken. Ein Baustein, der 12 100-GB-SATA-Plattenlaufwerke verwendet, liefert 1,2 Terabyte Speicherkapazität, von denen nur ein Bruchteil zur internen Verwendung benötigt wird. Ein FAB kann Hunderte oder Tausende von Bausteinen aufweisen, wobei große FAB-Systeme, bei denen derzeit die Vorstellung vorherrscht, dass dieselben zwischen 5.000 und 10.000 Bausteinen enthalten, Petabyte- („PB"-) Speicherkapazitäten liefern. Somit liefern FAB-Massenspeichersysteme eine enorme Zunahme an Speicherkapazität und Kosteneffizienz gegenüber aktuellen Plattenarrays und netzangeschlossenen Speichervorrichtungen.
  • Redundanz
  • Große Massenspeichersysteme, wie z. B. FAB-Systeme, liefern nicht nur massive Speicherkapazitäten, sondern liefern und verwalten auch eine redundante Speicherung, so dass, wenn Teile von gespeicherten Daten aufgrund von einem Bausteinfehler, einem Plattenlaufwerksfehler, einem Fehler von bestimmten Zylindern, Spuren, Sektoren oder Blöcken bei Plattenlaufwerken, Fehlern von elektronischen Komponenten oder anderen Fehlern verloren gehen, die verlorenen Daten nahtlos und automatisch aus redundanten Daten wiedergewonnen werden können, die durch die Massenspeichersysteme großen Maßstabs gespeichert und verwaltet werden, ohne ein Eingreifen von Hostcomputern oder ein manuelles Eingreifen von Benutzern. Für wichtige Datenspeicheranwendungen, einschließlich Datenbanksysteme und für ein Unternehmen wichtige Daten, werden oft zwei oder mehr Massenspeichersysteme großen Maßstabs verwendet, um mehrere geographisch gestreute Instanzen der Daten zu speichern und zu unterhalten, was eine Redundanz höherer Ebene liefert, so dass selbst fatale Ereignisse nicht zu einem nichtwiederherstellbaren Datenverlust führen.
  • Bei bestimmten Ausführungsbeispielen der vorliegenden Erfindung unterstützen FAB-Systeme automatisch zumindest zwei unterschiedliche Klassen von Redundanz niedrigerer Ebene. Die erste Klasse von Redundanz umfasst ein Bausteinebenenspiegeln oder in anderen Worten ein Speichern von mehreren diskreten Kopien von Datenobjekten an zwei oder mehr Bausteinen, so dass ein Versagen eines Bausteins nicht zu einem nicht-wiederherstellbaren Datenverlust führt. Die 34 veranschaulichen das Konzept einer Datenspiegelung. 3 zeigt ein Datenobjekt 302 und eine logische Darstellung der Inhalte von drei Bausteinen 304306 gemäß einem Ausführungsbeispiel der vorliegenden Erfindung. Das Datenobjekt 302 weist 15 sequentielle Dateneinheiten auf, wie z. B. eine Dateneinheit 308, die in 3 mit „1" bis „15" nummeriert sind. Ein Datenobjekt kann ein Volumen, eine Datei, eine Datenbank oder ein beliebiger Typ von Datenobjekt sein, und Dateneinheiten können Blöcke, Seiten oder andere derartige Gruppen von aufeinanderfolgend adressierten Speicherorten sein. 4 zeigt eine dreifach spiegelnde redundante Speicherung des Datenobjekts 302 bei den drei Bausteinen 304306 gemäß einem Ausführungsbeispiel der vorliegenden Erfindung. Jeder der drei Bausteine enthält Kopien von allen 15 der Dateneinheiten innerhalb des Datenobjekts 302. Bei vielen Darstellungen einer Spiegelung wird die Anordnung der Dateneinheiten so gezeigt, dass dieselbe bei allen Spiegelkopien des Datenobjekts identisch ist. In der Realität kann ein Baustein jedoch entscheiden, Dateneinheiten irgendwo auf seinen internen Plattenlaufwerken zu speichern. In 4 sind die Kopien der Dateneinheiten innerhalb des Datenobjekts 302 in unterschiedlichen Reihenfolgen und Positionen innerhalb der drei unterschiedlichen Bausteine gezeigt. Da jeder der drei Bausteine 304306 eine vollständige Kopie des Datenobjekts speichert, ist das Datenobjekt wiederherstellbar, selbst wenn zwei der drei Bausteine ausfallen. Die Wahrscheinlichkeit eines Versagens eines einzigen Bausteins ist im Allgemeinen relativ gering, und die kombinierte Wahrscheinlichkeit eines Versagens aller drei Bausteine eines Dreibausteinspiegels ist im Allgemeinen extrem gering. Im Allgemeinen kann ein FAB-System Millionen, Milliarden, Billionen oder mehr unterschiedliche Datenobjekte speichern, und jedes unterschiedliche Datenobjekt kann getrennt über eine unterschiedliche Anzahl von Bausteinen innerhalb des FAB-Systems gespiegelt werden. Zum Beispiel kann ein Datenobjekt über Bausteine 1, 7, 8 und 10 gespiegelt werden, während ein weiteres Datenobjekt über Bausteine 4, 8, 13, 17 und 20 gespiegelt werden kann.
  • Eine zweite Redundanzklasse wird als „Löschcodier"-Redundanz bezeichnet. Eine Löschcodierredundanz ist etwas komplizierter als eine Spiegelredundanz. Eine Löschcodierredundanz verwendet oft Reed-Solomon-Codiertechniken, die zur Fehlersteuercodierung von Kommunikationsnachrichten und anderen digitalen Daten, die durch rauschbehaftete Kanäle übertragen werden, verwendet werden. Diese Fehlersteuercodiertechniken sind spezifische Beispiele für binäre lineare Codes.
  • 5 zeigt ein Diagramm hoher Ebene, das eine Löschcodierredundanz zeigt. In 5 ist ein Datenobjekt 502, das n = 4 Dateneinheiten aufweist, über eine Anzahl von Bausteinen 504509 verteilt, die größer als n ist. Die ersten n Bausteine 504506 speichern jeder eine der n Dateneinheiten. Die letzten m = 2 Bausteine 508509 speichern Prüfsummen- oder Paritätsdaten, die von dem Datenobjekt berechnet werden. Das Löschcodierredundanzschema, das in 5 gezeigt ist, ist ein Beispiel eines m+n- Löschcodierredundanzschemas. Da n = 4 und m = 2, wird das spezifische m+n-Löschcodierredundanzschema, das in 5 dargestellt ist, als ein „4+2"-Redundanzschema bezeichnet. Viele andere Löschcodierredundanzschematas sind möglich, einschließlich 8 + 2, 3 + 3 und andere Schemata. Im Allgemeinen ist m kleiner oder gleich n. Solange m oder weniger der m + n Bausteine versagen, unabhängig davon, ob die ausgefallenen Bausteine Daten- oder Paritätswerte enthalten, kann das gesamte Datenobjekt wiederhergestellt werden. Zum Beispiel kann bei dem Löschcodierschema, das in 5 gezeigt ist, das Datenobjekt 502 trotz Fehlern eines beliebigen Paars von Bausteinen, wie z. B. Bausteine 505 und 508, ganz wiederhergestellt werden.
  • 6 zeigt ein exemplarisches 3+1-Löschcodierredundanzschema, das die gleichen Darstellungskonventionen verwendet, wie sie in den 3 und 4 verwendet werden. In 6 ist das 15-Dateneinheiten-Datenobjekt 302 über vier Bausteine 604607 verteilt. Die Dateneinheiten sind streifenartig über die vier Platten angeordnet, wobei jede Dreidateneinheit des Datenobjekts sequentiell über Bausteine 604606 verteilt ist und eine Prüfsummen- oder Paritätsdateneinheit für den Streifen an Baustein 607 platziert ist. Der erste Streifen, der aus den drei Dateneinheiten 608 besteht, ist in 6 durch Pfeile 610612 angezeigt. Obwohl in 6 Prüfsummendateneinheiten alle an einem einzigen Baustein 607 angeordnet sind, können die Streifen unterschiedlich bezüglich der Bausteine ausgerichtet sein, wobei jeder Baustein irgendeinen Teil der Prüfsummen- oder Paritätsdateneinheiten enthält.
  • Eine Löschcodierredundanz wird im Allgemeinen durch ein mathematisches Berechnen von Prüfsummen- oder Paritätsbits für jedes Byte, Wort oder Langwort einer Dateneinheit ausgeführt. Somit werden m Paritätsbits aus n Datenbits berechnet, wobei n = 8, 16 oder 32 oder eine höhere Potenz von Zwei. Zum Beispiel werden bei einem 8+2-Löschcodierredundanzschema zwei Paritätsprüfbits für jedes Byte von Daten erzeugt. Somit erzeugen bei einem 8+2-Löschcodierredundanzschema acht Dateneinheiten von Daten zwei Dateneinheiten von Prüfsummen- oder Paritätsbits, die alle in einem Zehn-Dateneinheiten-Streifen enthalten sein können. In der folgenden Erörterung bezieht sich der Begriff „Wort" auf eine Dateneinheitsgranularität, mit der ein Codieren erfolgt, und kann von Bits zu Langwörtern oder Dateneinheiten größerer Länge variieren. Bei Datenspeicheranwendungen kann die Dateneinheitsgranularität normalerweise 512 Bytes oder mehr betragen.
  • Das i-te Prüfsummenwort ci kann in Abhängigkeit von allen n Datenwörtern durch eine Funktion Fi (d1, d2,..., dn) berechnet werden, bei der es sich um eine lineare Kombination jedes der Datenwörter dj multipliziert mit einem Koeffizienten fi,j handelt, und zwar folgendermaßen:
    Figure 00130001
  • In Matrixschreibweise wird aus der Gleichung:
    Figure 00130002
    oder: C = FD
  • Bei der Reed-Solomon-Technik wird die Funktion F ausgewählt, um eine m × n-Vandermonde-Matrix zu sein, mit Elementen fi,j gleich ji–l, oder:
    Figure 00140001
  • Falls ein bestimmtes Wort d; modifiziert wird, um einen neuen Wert d'j aufzuweisen, dann kann ein neues i-tes Prüfsummenwort c'i berechnet werden als: oder: c' = C + FD' – FD = C + F (D' – D)
  • Somit werden neue Prüfsummenwörter ohne weiteres aus den vorangegangenen Prüfsummenwörtern und einer einzigen Spalte der Matrix F berechnet.
  • Verlorengegangene Wörter aus einem Streifen werden durch eine Matrixinversion wiedergewonnen. Eine Matrix A und ein Spaltenvektor E sind folgendermaßen aufgebaut:
    Figure 00140002
    Figure 00150001
  • Es ist ohne weiteres ersichtlich, dass: AD = Eoder:
    Figure 00150002
  • Beliebige m Zeilen der Matrix A und entsprechende Zeilen des Vektors E können entfernt werden, um modifizierte Matrizen A' und E' zu erzeugen, wobei A' eine Quadratmatrix ist. Dann kann der Vektor D, der die Originaldatenwörter darstellt, durch eine Matrixinversion folgendermaßen wiederhergestellt werden: A'D = E' D = A'–1E'
  • Somit können, wenn m oder weniger Daten- oder Prüfsummenwörter gelöscht werden oder verloren gehen, m Daten- oder Prüfsummenwörter einschließlich der m oder weniger verlorengegangenen Daten- oder Prüfsummenwörter aus dem Vektor E entfernt werden, und entsprechende Zeilen können aus der Matrix A entfernt werden, und die ursprünglichen Daten- oder Prüfsummenwörter können durch eine Matrixinversion wiederhergestellt werden, wie es im Vorhergehenden gezeigt ist.
  • Während eine Matrixinversion ohne weiteres für reelle Zahlen durchgeführt wird, wobei bekannte arithmetische Reellzahlenoperationen einer Addition, Subtraktion, Multiplikation und Division verwendet werden, sind diskretwertige Matrix- und Spaltenelemente, die zur Digitalfehlersteuercodierung verwendet werden, zur Matrixmultiplikation nur geeignet, wenn die diskreten Werte ein arithmetisches Feld bilden, das unter den entsprechenden diskreten arithmetischen Operationen geschlossen ist. Im Allgemeinen werden Prüfsummenbits für Wörter der Länge w berechnet:
    Figure 00160001
  • Ein w-Bit-Wort kann Beliebige von 2w unterschiedlichen Werten aufweisen. Ein mathematisches Feld, das als ein Galois-Feld bekannt ist, kann hergestellt werden, um 2w Elemente aufzuweisen. Die arithmetischen Operationen für Elemente des Galois-Feldes sind zweckmäßigerweise: a ± b = a ⊕ b a·b = antilog[log(a) + log(b)] a ÷ b = antilog[log(a) – log(b)]wobei Tabellen von Logs und Antilogs für die Galois-Feld-Elemente unter Verwendung eines Fortpflanzungsverfahrens berechnet werden können, das ein primitives Polynom des Grades w umfasst.
  • Spiegelredundanzschemata sind vom Konzept her einfacher und eignen sich ohne weiteres für verschiedene Neukonfigurationsoperationen. Falls z. B. ein Baustein eines Drei-Baustein-Dreifachspiegelredundanzschemas ausfällt, können die verbleibenden beiden Bausteine als ein Zwei-Baustein-Spiegelpaar unter einem Doppelspiegelredundanzschema neu konfiguriert werden. Alternativ dazu kann ein neuer Baustein zum Ersetzen des ausgefallenen Bausteins ausgewählt werden, und Daten können von einem der überlebenden Bausteine zu dem neuen Baustein kopiert werden, um das Drei-Baustein-Dreifachspiegelredundanzschema wiederherzustellen. Im Gegensatz dazu ist eine Neukonfiguration von Löschcodierredundanzschemata nicht ganz so einfach. Zum Beispiel hängt jedes Prüfsummenwort innerhalb eines Streifens von allen Datenwörtern des Streifens ab. Falls es erwünscht ist, ein 4+2-Löschcodierredundanzschema zu einem 8+2-Löschcodierredundanzschema umzuwandeln, können alle Prüfsummenbits neu berechnet werden, und die Daten können neu über die zehn Bausteine verteilt werden, die für das neue 8+2-Schema verwendet werden, anstatt die relevanten Inhalte der sechs Bausteine des 4+2-Schemas zu neuen Orten zu kopieren. Außerdem kann sogar eine Veränderung der Streifengröße für das gleiche Löschcodierschema ein Neuberechnen aller Prüfsummendateneinheiten und ein Neuverteilen der Daten über neue Bausteinorte umfassen. In den meisten Fällen umfasst ein Wechsel zu einem Löschcodierschema eine komplette Herstellung einer neuen Konfiguration basierend auf Daten, die von der alten Konfiguration wiedergewonnen werden, anstatt in dem Fall von Spiegelredundanzschemata ein Löschen von einem von mehreren Bausteinen oder ein Hinzufügen eines Bausteins, wobei Daten von einem ursprünglichen Baustein zu dem neuen Baustein kopiert werden. Spiegeln ist im Allgemeinen hinsichtlich des Platzes weniger effizient als Löschcodieren, dasselbe ist jedoch hinsichtlich Zeit und Aufwand von Verarbeitungszyklen effizienter.
  • FAB-Speichereinheiten
  • Wie im Vorhergehenden erörtert, kann ein FAB-System eine enorme Menge an Datenspeicherplatz liefern. Der gesamte Speicherplatz kann logisch in hierarchische Dateneinheiten partitioniert sein, wobei eine Dateneinheit auf jeder hierarchischen Ebene, die nicht die niedrigste ist, logisch aus Dateneinheiten einer nächst-niedrigeren hierarchischen Ebene zusammengesetzt ist. Die logischen Dateneinheiten können auf einen physischen Speicherplatz innerhalb von ein oder mehr Bausteinen abgebildet werden.
  • 7 veranschaulicht die hierarchischen Dateneinheiten, die bei einer aktuellen FAB-Implementierung verwendet werden, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen. Die Dateneinheit höchster Ebene wird als eine „virtuelle Platte" bezeichnet, und der gesamte verfügbare Speicherplatz innerhalb eines FAB-Systems kann so betrachtet werden, dass derselbe in ein oder mehr virtuelle Platten partitioniert ist. In 7 ist der gesamte Speicherplatz 702 so gezeigt, dass derselbe in fünf virtuelle Platten partitioniert ist, einschließlich einer ersten virtuellen Platte 704. Eine virtuelle Platte kann konfiguriert sein, um eine beliebige Größe aufzuweisen, die größer oder gleich der Größe der nächst-niedrigeren hierarchischen Dateneinheit ist, die als ein „Segment" bezeichnet wird. In 7 ist die dritte virtuelle Platte 706 so gezeigt, dass dieselbe logisch in eine Anzahl von Segmenten 708 partitioniert ist. Die Segmente können aufeinanderfolgend geordnet sein und zusammen einen linearen, logischen Speicherplatz bilden, der einer virtuellen Platte entspricht. Wie es in 7 gezeigt ist, kann jedes Segment, wie z. B. Segment 4 (710 in 7), gemäß einem bestimmten Redundanzschema über eine Anzahl von Bausteinen 712 verteilt sein. Das Segment stellt die Granularität einer Datenverteilung über Bausteine dar. Zum Beispiel kann in 7 das Segment 4 (710 in 7) gemäß einem 8+2-Löschcodierredundanzschema über Bausteine 1–9 und 13 verteilt sein. Somit kann Baustein 3 ein Achtel der Segmentdaten speichern, und Baustein 2 kann die Hälfte der Paritätsdaten für das Segment unter dem 8+2-Löschcodierredundanzschema speichern, falls Paritätsdaten getrennt von den Segmentdaten gespeichert werden. Jeder Baustein, wie z. B. Baustein 7 (714 in 7) kann sich entscheiden, ein Segment oder einen Segmentabschnitt über Beliebige der internen Platten des Bausteins 716 oder in einem Cache-Speicher zu verteilen. Wenn ein Segment oder ein Segmentabschnitt auf einer internen Platte oder in einem Cache-Speicher gespeichert ist, wird das- bzw. derselbe logisch so betrachtet, dass das- bzw. derselbe eine Anzahl von Seiten, wie z. B. Seite 718, die in 7 gezeigt ist, aufweist, wobei jede Seite wiederum eine aufeinanderfolgende Sequenz von Blöcken aufweist, wie z. B. Block 720, der in 7 gezeigt ist. Der Block (z. B. 720 in 7) ist die Dateneinheitsebene, der Zeitstempel zugeordnet sind, die gemäß einem Speicherregisterdatenkonsistenzsystem verwaltet werden, das im Folgenden erörtert ist. Bei einem FAB-System, das sich in Entwicklung befindet, weisen Segmente 256 aufeinanderfolgende Megabyte auf, Seiten weisen acht Megabyte auf, und Blöcke weisen 512 Byte auf.
  • Die 8A8D veranschaulichen eine hypothetische Abbildung von logischen Dateneinheiten auf Bausteine und interne Platten eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Die 8A8D verwenden alle die gleichen Darstellungskonventionen, die anschließend unter Bezugnahme auf 8A erörtert sind. Das FAB-System ist als 16 Bausteine 802817 dargestellt. Jeder Baustein ist so gezeigt, dass derselbe vier interne Plattenlaufwerke enthält, wie z. B. die internen Plattenlaufwerke 820823 innerhalb des Bausteins 802. In den 8A8D ist die logische Dateneinheit, die dargestellt ist, auf der linken Seite der Figur gezeigt. Bei der logischen Dateneinheit, die in 8A dargestellt ist, handelt es sich um den gesamten verfügbaren Speicherplatz 826. Eine Schattierung innerhalb der Quadratdarstellungen von inter nen Plattenlaufwerken zeigt Regionen der internen Plattenlaufwerke an, auf die die logische Dateneinheit, die in der Figur dargestellt ist, abgebildet wird. Zum Beispiel ist in 8A der gesamte Speicherplatz 826 so gezeigt, dass derselbe über den gesamten Platz abgebildet wird, der auf allen internen Plattenlaufwerken aller Bausteine verfügbar ist. Es sei darauf hingewiesen, dass eine bestimmte, geringe Menge an internem Speicherplatz zu Steuer- und Verwaltungszwecken durch die Steuerlogik jedes Bausteins reserviert sein kann, aber dieser interne Platz ist in 8A nicht gezeigt. Auch können sich Daten in einem Cache-Speicher in einem Direktzugriffsspeicher befinden; bevor dieselben auf eine Platte geschrieben werden, aber der Speicherplatz wird für die Zwecke der 8A8D so betrachtet, dass derselbe nur vier interne Platten für jeden Baustein aufweist, um die Darstellung zu vereinfachen.
  • 8B zeigt eine exemplarische Abbildung einer Virtuellplattenlogikdateneinheit 828 auf den Speicherplatz des FAB-Systems 800. 8B veranschaulicht, dass eine virtuelle Platte auf Abschnitte von vielen oder sogar allen internen Platten innerhalb von Bausteinen des FAB-Systems 800 abgebildet werden kann. 8C veranschaulicht eine exemplarische Abbildung einer Virtuellplattenbildlogikdateneinheit 830 auf den internen Speicherplatz des FAB-Systems 800. Eine Virtuellplattenbildlogikdateneinheit kann auf einen großen Teil des internen Speicherplatzes einer erheblichen Anzahl von Bausteinen innerhalb eines FAB-Systems abgebildet werden. Die Virtuellplattenbildlogikdateneinheit stellt eine Kopie oder ein Bild einer virtuellen Platte dar. Virtuelle Platten können als zwei oder mehr Virtuellplattenbilder reproduziert werden, jedes Virtuellplattenbild in einer diskreten Partition von Bausteinen innerhalb eines FAB-Systems, um einen hohen Pegel an Redundanz zu liefern. Eine Virtuellplattenreproduktion ermöglicht z. B., dass virtuelle Platten über geographisch getrennte, diskrete Partitionen der Bausteine innerhalb eines FAB-Systems reproduziert werden, so dass eine Katastrophe großen Maßstabs an einem geographischen Ort nicht zu einem nichtwiederherstellbaren Verlust von Virtuellplattendaten führt.
  • 8D veranschaulicht eine exemplarische Abbildung eines Segments 832 auf den internen Speicherplatz innerhalb von Bausteinen eines FAB-Systems 800. Wie es in 8D ersichtlich ist, kann ein Segment auf viele kleine Abschnitte der internen Platten eines relativ kleinen Teilsatzes der Bausteine innerhalb eines FAB-Systems abgebildet werden. Wie es im Vorhergehenden erörtert ist, handelt es sich bei einem Segment bei vielen Ausführungsbeispielen der vorliegenden Erfindung um die Logikdateneinheitsebene zur Verteilung von Daten gemäß Redundanzschemata niedrigerer Ebene, einschließlich Löschcodierschemata und Spiegelschemata. Falls somit keine Datenredundanz erwünscht ist, kann ein Segment auf ein einziges Plattenlaufwerk eines einzigen Bausteins abgebildet werden. Zu den meisten Zwecken werden Segmente jedoch zumindest auf zwei Bausteine gespiegelt. Wie es im Vorhergehenden erörtert ist, verteilt ein Baustein die Seiten eines Segments oder eines Abschnitts eines Segments unter seinen internen Platten gemäß verschiedener Überlegungen, einschließlich verfügbarem Platz, und einschließlich optimaler Verteilungen, um verschiedene Charakteristika von internen Plattenlaufwerken auszunutzen, einschließlich Kopfbewegungsverzögerungen, Drehverzögerungen, Zugriffshäufigkeit und andere Überlegungen.
  • 9 veranschaulicht die Logikdateneinheiten, die innerhalb eines FAB-Systems verwendet werden, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen. Der gesamte verfügbare Datenspeicherplatz 902 kann in virtuelle Platten 904907 partitioniert werden. Die virtuellen Platten werden wiederum, wenn dies erwünscht ist, zu mehreren Virtuellplattenbildern reproduziert. Zum Beispiel wird eine virtuelle Platte 904 zu den Virtuellplattenbildern 908910 reproduziert. Falls die virtuelle Platte nicht reproduziert wird, kann die virtuelle Platte so betrachtet werden, dass dieselbe ein einziges Virtuellplattenbild aufweist. Zum Beispiel entspricht die virtuelle Platte 905 dem einzigen Virtuellplattenbild 912. Jedes Virtuellplattenbild weist eine geordnete Sequenz von Segmenten auf. Zum Beispiel weist das Virtuellplattenbild 908 eine geordnete Liste von Segmenten 914 auf. Jedes Segment wird gemäß einem Redundanzschema über ein oder mehr Bausteine verteilt. Zum Beispiel wird in 9 ein Segment 916 gemäß einem 8+2-Löschcodierredundanzschema über zehn Bausteine 918 verteilt. Als ein weiteres Beispiel ist das Segment 920 in 9 so gezeigt, dass dasselbe gemäß einem Dreifachspiegelredundanzschema über drei Bausteine 922 verteilt ist.
  • FAB-Datenzustandsbeschreibungsdatenstruktur
  • Wie es im Vorhergehenden erörtert wurde, kann jeder Baustein innerhalb eines FAB-Systems im Wesentlichen das gleiche Steuerprogramm ausführen, und jeder Baustein kann Anforderungen von entfernten Hostcomputern empfangen und auf dieselben antworten. Deshalb enthält jeder Baustein Datenstrukturen, die den Gesamtdatenzustand des FAB-Systems darstellen, bis hinunter zu, jedoch im Allgemeinen nicht einschließlich bausteinspezifischen Zustandsinformationen, die durch einzelne Bausteine geeignet verwaltet werden, in einem internen, flüchtigen Direktzugriffsspeicher, einem nicht-flüchtigen Speicher und/oder internem Plattenplatz, so ähnlich wie jede Zelle des menschlichen Körpers die gesamte DNA-codierte Architektur für den gesamten Organismus enthält. Der Gesamtdatenzustand umfasst die Größen und Orte der hierarchischen Dateneinheiten, die in 9 gezeigt sind, zusammen mit Informationen, die die Betriebszustände oder die Gesundheit von Bausteinen und die Redundanzschemata betreffen, unter denen Segmente gespeichert sind. Im Allgemeinen werden bausteinspezifische Datenzustandsinformationen, die die internen Seiten- und Blockadressen von Daten umfassen, die in einem Baustein gespei chert sind, nicht als ein Teil des Gesamtdatenzustands des FAB-Systems betrachtet.
  • 10A veranschaulicht die Datenstruktur, die durch jeden Baustein unterhalten wird, die den Gesamtdatenzustand des FAB-Systems beschreibt und die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Die Datenstruktur ist im Allgemeinen hierarchisch, um die hierarchischen logischen Dateneinheiten zu spiegeln, die in dem vorangegangenen Teilabschnitt beschrieben sind. Auf der höchsten Ebene kann die Datenstruktur eine Virtuellplattentabelle 1002 umfassen, wobei jeder Eintrag derselben eine virtuelle Platte beschreibt. Jeder Virtuellplattentabelleneintrag („VDTE") kann auf eine oder mehr Virtuellplattenbild- („VDI"-) Tabellen verweisen. Zum Beispiel verweist VDTE 1004 auf die VDI-Tabelle 1006 in 10A. Eine VDI-Tabelle kann einen Verweis auf einen Segmentkonfigurationsknoten („SCN") für jedes Segment des Virtuellplattenbildes umfassen. Mehrere VDI-Tabelleneinträge können auf einen einzigen SCN verweisen, um Speicher und Speicherplatz zu sparen, die der Datenstruktur zugeordnet sind. In 10A verweist der VDI-Tabelleneintrag 1008 auf den SCN 1010. Jeder SCN kann eine oder zwei Konfigurationsgruppen („cgrp") darstellen. Zum Beispiel verweist in 10A SCN 1010 auf cgrp 1012. Jede cgrp kann auf eine oder mehr Konfigurationen („cfg") verweisen. Zum Beispiel verweist in 10A cgrp 1014 auf cfg 1016. Schließlich kann jede cfg einem einzigen Anordnungsdatenstrukturelement zugeordnet sein. Zum Beispiel ist in 10A cfg 1016 dem Anordnungsdatenstrukturelement 1018 zugeordnet. Das Anordnungsdatenstrukturelement kann in der cfg enthalten sein, der dasselbe zugeordnet ist, oder dasselbe kann von der cfg getrennt sein und kann Anzeigen der Bausteine innerhalb der zugeordneten cfg enthalten. Die VDI-Tabelle kann ziemlich groß sein, und wirksame Speicherschemata können verwendet werden, um die VDI-Tabelle oder Teile der VDI-Tabelle in einem Speicher oder in einem nicht-flüchtigen Speichermedium effizient zu speichern. Zum Beispiel eine UNIX-artige i-Knotenstruktur mit einem Wur zelknoten, der direkt Verweise auf Segmente enthält, und mit zusätzlichen Knoten mit indirekten Verweisen oder doppelt indirekten Verweisen durch Knoten, die i-Knotenverweise auf zusätzliche Segmentverweise enthaltende Knoten enthalten. Andere wirksame Speicherschemata sind möglich.
  • Für sowohl die VDI-Tabelle als auch alle anderen Datenstrukturelemente der Datenstruktur, die durch jeden Baustein unterhalten wird, die den Gesamtdatenzustand des FAB-Systems beschreibt, kann eine große Vielzahl von physischen Darstellungen und Speichertechniken verwendet werden. Als ein Beispiel können Datenstrukturelemente variabler Länge als Datenstrukturelemente fester Länge und ausreichender Größe, um eine maximal mögliche oder maximal erwartete Anzahl von Dateneinträgen zu enthalten, zugeteilt werden, oder dieselben können als verknüpfte Listen, Bäume oder andere derartige dynamische Datenstrukturelemente dargestellt werden, die in Echtzeit nach Bedarf neu dimensioniert werden können, um neue Daten aufzunehmen oder zur Entfernung von nicht mehr benötigten Daten. Knoten, die so dargestellt sind, dass dieselben in den baumartigen Darstellungen, die in den 10A und 11A11H gezeigt sind, getrennt und gesondert sind, können bei praktischen Implementierungen zusammen in Tabellen gespeichert werden, während Datenstrukturelemente, die so gezeigt sind, dass dieselben in Knoten oder Tabellen gespeichert sind, alternativ dazu in verknüpften Listen, Bäumen oder anderen komplexeren Datenstrukturimplementierungen gespeichert werden können.
  • Wie im Vorhergehenden erörtert, können VDIs verwendet werden, um eine Reproduktion von virtuellen Platten darzustellen. Deshalb kann die hierarchische Auffächerung von VDTEs zu VDIs so betrachtet werden, dass dieselbe eine Reproduktion von virtuellen Platten darstellt. SCNs können verwendet werden, um eine Migration eines Segments von einem Redundanzschema zu einem anderen zu ermöglichen. Es kann erwünscht oder notwendig sein, ein Segment, das gemäß einem 4+2-Löschcodierredundanzschema verteilt ist, zu einem 8+2-Löschcodierredundanzschema zu übertragen. Eine Migration des Segments umfasst ein Erzeugen eines Platzes für das neue Redundanzschema, der über eine potentiell neue Gruppe von Bausteinen verteilt ist, ein Synchronisieren der neuen Konfiguration mit der bestehenden Konfiguration und, wenn die neue Konfiguration mit der bestehenden Konfiguration synchronisiert ist, ein Entfernen der bestehenden Konfiguration. Somit kann eine Zeitperiode lang, während derer eine Migration erfolgt, ein SCN gleichzeitig auf zwei unterschiedliche cgrps verweisen, was einen Übergangszustand darstellt, der eine bestehende Konfiguration unter einem Redundanzschema und eine neue Konfiguration unter einem anderen Redundanzschema aufweist. Datenänderungs- und Datenzustandsänderungsoperationen, die bezüglich eines Segments in Migration ausgeführt werden, werden bezüglich beider Konfigurationen des Übergangszustands ausgeführt, bis eine volle Synchronisation erreicht ist, und die alte Konfiguration kann entfernt werden. Eine Synchronisation umfasst ein Einrichten von Quoren, was im Folgenden erörtert ist, für alle Blöcke in der neuen Konfiguration, ein Kopieren von Daten von der alten Konfiguration zu der neuen Konfiguration nach Bedarf und ein Ausführen aller Datenaktualisierungen, die benötigt werden, um Operationen auszuführen, die das Segment während einer Migration betreffen. In bestimmten Fällen wird der Übergangszustand aufrechterhalten, bis die neue Konfiguration vollständig hergestellt ist, da ein Versagen während der Herstellung der neuen Konfiguration die Konfiguration nicht-wiederherstellbar beschädigt zurücklassen würde. In anderen Fällen, einschließlich Fällen, die im Folgenden erörtert sind, wird nur eine minimale Synchronisation benötigt, da alle bestehenden Quoren in der alten Konfiguration in der neuen Konfiguration gültig bleiben.
  • Der Satz von Bausteinen, über den das Segment gemäß dem bestehenden Redundanzschema verteilt ist, kann den Satz von Bausteinen schneiden, über den das Segment gemäß dem neuen Redundanzschema verteilt ist. Deshalb können Blockadressen innerhalb des FAB-Systems ein zusätzliches Feld oder Objekt umfassen, das das bestimmte Redundanzschema oder die Rolle des Blocks beschreibt, falls das Segment gerade in Migration ist. Die Blockadressen unterscheiden deshalb zwischen zwei Blöcken des gleichen Segments, die unter zwei unterschiedlichen Redundanzschemata in einem einzigen Baustein gespeichert sind. 10B veranschaulicht eine Bausteinsegmentadresse, die eine Bausteinrolle umfasst, gemäß einem Ausführungsbeispiel der vorliegenden Erfindung. Die Blockadresse, die in 10B gezeigt ist, umfasst die folgenden Felder: (1) ein Bausteinfeld 1020, das die Identität des Bausteins enthält, der den Block enthält, auf den durch die Blockadresse verwiesen wird; (2) ein Segmentfeld 1022, das die Identität des Segments enthält, das den Block enthält, auf den durch die Blockadresse verwiesen wird; (3) ein Blockfeld 1024, das die Identität des Blocks innerhalb des Segments enthält, das in dem Segmentfeld identifiziert ist; (4) ein Feld 1026, das eine Anzeige des Redundanzschemas enthält, unter dem das Segment gespeichert ist; (5) ein Feld 1028, das eine Anzeige der Bausteinposition des Bausteins, der durch das Bausteinfeld identifiziert ist, innerhalb eines Löschcodierredundanzschemas enthält, falls das Segment unter einem Löschcodierredundanzschema gespeichert ist; und (6) ein Feld 1030, das eine Anzeige der Streifengröße des Löschcodierredundanzschemas enthält, falls das Segment unter einem Löschcodierredundanzschema gespeichert ist. Die Blockadresse kann zusätzliche Felder enthalten, je nach Bedarf, um die Position eines Blocks bei einer gegebenen FAB-Implementierung vollständig zu beschreiben. Im Allgemeinen bilden die Felder 1026, 1028 und 1030 zusammen eine Bausteinrolle, die die Rolle definiert, die von dem Baustein gespielt wird, der den Block speichert, auf den verwiesen wird. Eine Beliebige von verschiedenen numerischen Codierungen des Redundanzschemas, der Bausteinposition und der Streifengröße kann verwendet werden, um die Anzahl von Bits zu minimieren, die der Bausteinrollencodierung zugeordnet sind. Zum Beispiel können, falls die FAB-Implementierung nur eine Handvoll unterschiedlicher Streifengrößen für verschiedene Löschcodierredundanzschemata verwendet, Streifengrößen durch verschiedene Werte einer Aufzählung oder in anderen Worten durch ein relativ kleines Bitfeld dargestellt werden, das angemessen ist, um numerische Darstellungen der Handvoll von unterschiedlichen Streifengrößen zu enthalten.
  • Eine cgrp kann auf mehrere cfg-Datenstrukturelemente verweisen, wenn die cgrp gerade einer Neukonfiguration unterzogen wird. Eine Neukonfiguration kann eine Veränderung bei den Bausteinen umfassen, über die ein Segment verteilt ist, jedoch keinen Wechsel von einem Spiegelredundanzschema zu einem Löschcodierredundanzschema, von einem Löschcodierredundanzschema, wie z. B. 4 + 3, zu einem anderen Löschcodierredundanzschema, wie z. B. 8 + 2, oder andere derartige Veränderungen, die ein erneutes Herstellen oder ein Verändern der Inhalte von mehreren Bausteinen umfassen. Zum Beispiel kann eine Neukonfiguration ein Neukonfigurieren eines Dreifachspiegels, der auf den Bausteinen 1, 2 und 3 gespeichert ist, zu einem Doppelspiegel umfassen, der auf den Bausteinen 2 und 3 gespeichert ist.
  • Ein cfg-Datenstrukturelement beschreibt im Allgemeinen einen Satz von ein oder mehr Bausteinen, die zusammen ein bestimmtes Segment unter einem bestimmten Redundanzschema speichern. Ein cfg-Datenstrukturelement enthält im Allgemeinen Informationen über die Gesundheit oder den Betriebszustand der Bausteine innerhalb der Konfiguration, die durch das cfg-Datenstrukturelement dargestellt wird.
  • Ein Anordnungsdatenstrukturelement, wie z. B. die Anordnung bzw. das Layout 1018 in 10A, umfasst Identifizierer aller Bausteine, zu denen ein bestimmtes Segment unter einem bestimmten Redundanzschema verteilt ist. Ein Anordnungsdatenstrukturelement kann ein oder mehr Felder umfassen, die das bestimmte Redundanzschema beschreiben, unter dem das dargestellte Segment gespeichert ist, und kann zusätzliche Felder umfassen. Alle anderen Elemente der Datenstruktur, die in 10A gezeigt ist, können je nach Bedarf zusätzliche Felder und beschreibende Unterelemente umfassen, um eine Datenspeicherung und -unterhaltung gemäß dem Datenverteilungsschema, das durch die Datenstruktur dargestellt wird, zu erleichtern. Im unteren Teil von 10A werden Anzeigen geliefert zur Abbildungsbeziehung zwischen Datenstrukturelementen auf aufeinanderfolgenden Ebenen. Es sei darauf hingewiesen, dass mehrere unterschiedliche Segmenteinträge innerhalb von einer oder mehr VDI-Tabellen auf einen einzigen SCN-Knoten verweisen können, was eine Verteilung der unterschiedlichen Segmente über einen identischen Satz von Bausteinen gemäß dem gleichen Redundanzschema darstellt.
  • Die Datenstruktur, die durch jeden Baustein unterhalten wird, die den Gesamtdatenzustand des FAB-Systems beschreibt und die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt, ist eine dynamische Darstellung, die sich ständig ändert und die bewirkt, dass verschiedene Steuerroutinen zusätzliche Zustandsänderungen vornehmen, wenn Blöcke gespeichert werden, auf dieselben zugegriffen wird, und dieselben entfernt werden, Bausteine hinzugefügt und entfernt werden, Bausteine und Verbindungen ausfallen, Redundanzschemata und andere Parameter und Charakteristika des FAB-Systems durch Verwaltungsschnittstellen verändert werden und andere Ereignisse auftreten. Um einen großen Mehraufwand für Verriegelungsschemata zu vermeiden, um Operationen, die Teile der Datenstruktur betreffen, zu steuern und zu serialisieren, können alle Datenstrukturelemente von der cgrp-Ebene bis hinunter zu der Anordnungsebene als unveränderlich betrachtet werden. Wenn ihre Inhalte oder Verbindungen geändert werden müssen, werden neue Datenstrukturelemente mit den neuen Inhalten und/oder Verbindungen hinzugefügt, und Verweise auf die vorangegangenen Versionen werden schließlich gelöscht, anstatt die Datenstrukturelemente auf der cgrp-Ebene bis hinunter zu der Anordnungsebene zu verriegeln, zu ändern und zu entriegeln. Datenstrukturelemente, die auf diese Weise ersetzt werden, werden schließlich verwaist, nachdem die Daten, die durch die alten und die neuen Datenstrukturelemente dargestellt werden, durch ein Einrichten neuer Quoren und ein Ausführen jeglicher benötigter Aktualisierungen synchronisiert worden sind, und die verwaisten Datenstrukturelemente werden dann als Abfall gesammelt. Dieser Lösungsansatz kann dadurch zusammengefasst werden, dass auf die Datenstrukturelemente von der cgrp-Ebene bis hinunter zu der Anordnungsebene als „unveränderlich" Bezug genommen wird.
  • Ein weiterer Aspekt der Datenstruktur, die durch jeden Baustein unterhalten wird, die den Gesamtdatenzustand des FAB-Systems beschreibt und die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt, besteht darin, dass jeder Baustein sowohl eine speicherinterne oder teilweise speicherinterne Version der Datenstruktur zum raschen Zugriff auf die Ebenen und Datenstrukturelemente, auf die am häufigsten zugegriffen wird und am aktuellsten zugegriffen wurde, als auch eine permanente Version unterhalten kann, die auf einem nicht-flüchtigen Datenspeichermedium gespeichert ist. Die Datenelemente der speicherinternen Version der Datenstruktur können zusätzliche Felder umfassen, die in der permanenten Version der Datenstruktur nicht enthalten sind und im Allgemeinen nicht in den 10A, 11A11H und den nachfolgenden Figuren gezeigt sind. Zum Beispiel kann die speicherinterne Version Rückwärtsabbildungselemente, wie z. B. Zeigevorrichtungen, enthalten, die ein effizientes Durchlaufen der Datenstruktur in einer Richtung von unten nach oben, lateralen und komplexeren Richtungen zusätzlich zu dem Durchlaufen von oben nach unten ermöglichen, das durch die Abwärtsrichtungen der Zeigevorrichtungen angezeigt ist, die in den Figuren gezeigt sind. Bestimmte der Datenstrukturelemente der speicherinternen Version der Datenstruktur können auch Verweiszählfelder umfassen, um eine Abfallsammlung und eine Koordination von von einer Steuerroutine ausgeführten Operationen zu ermög lichen, die den Zustand des Bausteins verändern, der die Datenstruktur enthält.
  • Die 11A11H veranschaulichen verschiedene unterschiedliche Typen von Konfigurationsveränderungen, die sich in der Datenbeschreibungsdatenstruktur wiederspiegeln, die in 10A gezeigt ist, innerhalb eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Die 11A11D veranschaulichen einen einfachen Konfigurationswechsel, der eine Veränderung des Gesundheitsstatus eines Bausteins umfasst. In diesem Fall wird ein Segment, das gemäß einem Dreifachspiegelredundanzschema über die Bausteine 1, 2 und 3 verteilt ist (1102 in 11A), entweder neukonfiguriert, um über Folgendes verteilt zu sein: (1) Bausteine 1, 2 und 3 gemäß einem Dreifachspiegelschema (1104 in 11B) aufgrund einer Reparatur von Baustein 3; (2) Bausteine 1, 2 und 4 gemäß einem Dreifachspiegelschema (1106 in 11C) aufgrund eines Ausfalls von Baustein 3 und einer Ersetzung von Baustein 3 durch Reservespeicherplatz innerhalb von Baustein 4; oder (3) Bausteine 1 und 2 gemäß einem Doppelspiegelschema (1108 in 11D) aufgrund eines Ausfalls von Baustein 3. Wenn der Ausfall von Baustein 3 zunächst erfasst wird, wird eine neue cgrp 1112, die eine neue cfg 1110 mit der Bausteingesundheitsanzeige für den Baustein 3 1114 umfasst, die anzeigt, dass der Baustein 3 tot ist, sowie eine Kopie der anfänglichen cfg 1011 zu der Datenstruktur hinzugefügt, wobei die anfängliche cgrp, cfg und Anordnungsdarstellung des verteilten Segments ersetzt wird (1102 in 11). Die Anzeige des „toten Bausteins", die für den Gesundheitsstatus von Baustein 3 gespeichert ist, ist ein wichtiges Merkmal der Gesamtdatenstruktur, die in 10A gezeigt ist. Der Status eines „toten Bausteins" ermöglicht, dass eine Aufzeichnung einer vorangegangenen Teilnahme eines nachfolgend ausgefallenen Bausteins in der Datenstruktur bewahrt wird, um eine nachfolgende Synchronisation und andere Operationen zu ermöglichen, die eventuell von der früheren Teilnahme des ausgefallenen Bausteins Kenntnis haben müssen. Wenn jegliche Synchronisation zwischen der Anfangskonfiguration und der neuen Konfiguration abgeschlossen ist, einschließlich einem Einrichten neuer Quoren für Blöcke ohne aktuelle Quoren aufgrund des Ausfalls von Baustein 3, und eine neue Darstellung des verteilten Segments 1116 zu der Datenstruktur hinzugefügt ist, kann die vorübergehende 2-cfg-Darstellung des verteilten Segments, die die Datenstrukturelemente 11101112 aufweist, gelöscht und als Abfall gesammelt werden, was für die Endbeschreibung des verteilten Segments 1116 eine einzige cfg-Datenstruktur übrig lässt, die anzeigt, dass der Baustein 3 ausgefallen ist. In den 11A11D und in nachfolgenden Figuren ist nur der relevante Abschnitt der Datenstruktur gezeigt, wobei ein Verständnis angenommen wird, dass z. B. auf die cgrps, die in 11A gezeigt sind, durch einen oder mehr SCN-Knoten verwiesen wird.
  • Die 11B11D beschreiben drei unterschiedliche Ergebnisse für das Versagen von Baustein 3, wobei jede mit der Darstellung des verteilten Segments 1116 beginnt, das im unteren Teil von 11A gezeigt ist. Alle drei Ergebnisse umfassen einen vorübergehenden 2-cfg-Zustand, der als der mittlere Zustand der Datenstruktur gezeigt ist, der aus noch einer weiteren neuen cgrp gebildet ist, die auf zwei neue cfg-Datenstrukturelemente verweist, wobei eines eine Kopie der cfg von der Darstellung des verteilten Segments 1116 enthält, das im unteren Teil von 11A gezeigt ist, und das andere neue Bausteingesundheitsinformationen enthält. In 11B wird der Baustein 3 repariert, wobei der vorübergehende 2-cfg-Zustand 1118 sowohl Beschreibungen des ausgefallenen Zustands von Baustein 3 als auch eines reparierten Zustands von Baustein 3 umfasst. In 11C wird Baustein 3 durch Reservespeicherplatz auf Baustein 4 ersetzt, wobei der vorübergehende 2-cfg-Zustand 1120 sowohl Beschreibungen des ausgefallenen Zustands von Baustein 3 als auch einer neuen Konfiguration umfasst, bei der Baustein 3 durch Baustein 4 ersetzt ist. In 11D ist Baustein 3 komplett ausgefallen, und das Segment wird zu einer Verteilung über zwei Bausteine anstatt drei neu konfiguriert, wobei der vorübergehende 2-cfg-Zustand 1122 sowohl Beschreibungen des ausgefallenen Zustands von Baustein 3 als auch einer Doppelspiegelkonfiguration umfasst, bei der die Daten über die Bausteine 1 und 2 verteilt sind.
  • Die 11E11F veranschaulichen einen Verlust eines Bausteins, über den ein Segment gemäß einem 4+2-Löschcodierredundanzschema verteilt ist, und eine Verwendung eines neuen Bausteins anstatt des verlorenen Bausteins. Anfangs ist das Segment über die Bausteine 1, 4, 6, 9, 10 und 11 verteilt (1124 in 11E). Wenn ein Fehler bei Baustein 4 erfasst wird, erhält ein vorübergehender 2-cfg-Zustand 1126, einschließlich einer neuen cgrp, die auf zwei neue cfg-Datenstrukturelemente verweist, die neue cfg 1128, die anzeigt, dass der Baustein 4 ausgefallen ist. Die anfängliche Darstellung des verteilten Segments 1124 kann dann als Abfall gesammelt werden. Wenn eine Synchronisation der neuen Konfiguration mit einem ausgefallenen Baustein 4 bezüglich der alten Konfiguration ausgeführt wird, und eine Beschreibung des verteilten Segments 1132 hinzugefügt worden ist, wobei eine neue cgrp auf ein einziges cfg-Datenstrukturelement verweist, das anzeigt, dass der Baustein 4 ausgefallen ist, kann die vorübergehende 2-cfg-Darstellung 1126 als Abfall gesammelt werden. Dann wird eine neue Konfiguration hinzugefügt, wobei Reservespeicherplatz an Baustein 5 den Speicherplatz ersetzt, der vorhergehend durch Baustein 4 geliefert wurde, um einen vorübergehenden 2-cfg-Zustand 1133 zu erzeugen, wobei die vorangegangene Darstellung 1132 dann als Abfall gesammelt wird. Wenn eine Synchronisation der neuen Konfiguration abgeschlossen ist, wobei Baustein 5 Baustein 4 ersetzt, und eine endgültige neue Darstellung 1136 des verteilten Segments hinzugefügt ist, kann die vorübergehende 2-cfg-Darstellung 1134 als Abfall gesammelt werden.
  • Die beiden alternativen Konfigurationen bei vorübergehenden 2-cfg-Zuständen, wie z. B. die cfgs 1134 und 1135 in 11F, werden gleichzeitig in den vorübergehenden 2-cfg-Darstellungen, die in 11A11F gezeigt sind, während der Zeit unterhalten, in der die neue Konfiguration, z. B. cfg 1135 in 11F, mit der alten Konfiguration, z. B. cfg 1134 in 11F, synchronisiert wird. Während z. B. die Inhalte von Baustein 5 gemäß dem Matrixinversionsverfahren wiederhergestellt werden, das in einem vorangegangenen Unterabschnitt erörtert ist, werden neue SCHREIB-Operationen, die an das Segment ausgegeben werden, an beide Konfigurationen ausgegeben, um sicher zu sein, dass die SCHREIB-Operationen bei einem Quorum von Bausteinen in jeder Konfiguration erfolgreich abgeschlossen werden. Quoren und andere Konsistenzmechanismen sind im Folgenden erörtert. Schließlich kann, wenn die neue Konfiguration 1135 vollständig rekonstruiert ist und der Datenzustand der neuen Konfiguration voll mit dem Datenzustand der alten Konfiguration 1114 synchronisiert ist, die alte Konfiguration durch ein Ersetzen der gesamten Darstellung 1133 mit einer neuen Darstellung 1136 entfernt werden, die nur die Endkonfiguration umfasst, wobei die vorübergehende 2-cfg-Darstellung dann als Abfall gesammelt wird. Indem bestehende Datenstrukturelemente auf der cgrp-Ebene und niedrigeren Ebenen nicht verändert werden, sondern indem stattdessen neue Datenstrukturelemente durch die 2-cfg-Übergangszustände hinzugefügt werden, kann die geeignete Synchronisation erledigt werden, und keine Verriegelungs- oder andere Serialisierungstechniken müssen verwendet werden, um einen Zugriff auf die Datenstruktur zu steuern. SCHREIB-Operationen veranschaulichen Operationen bei Daten, die den Datenzustand innerhalb von ein oder mehr Bausteinen verändern, und werden bei dieser Erörterung deshalb verwendet, um die Klasse von Operationen oder Aufgaben darzustellen, während deren Ausführung sich Datenkonsistenzprobleme aufgrund von Veränderungen des Datenzustands des FAB-Systems ergeben. Andere Operationen und Aufgaben können jedoch auch den Datenzustand verändern, und die im Vorhergehenden beschriebenen Techniken ermöglichen einen ordnungsgemäßen Übergang zwischen Konfigurationen, wenn derar tige andere Operationen und Aufgaben bei einer FAB-Implementierung ausgeführt werden. In noch anderen Fällen kann es sein, dass die 2-cfg-Übergangsdarstellungen nicht benötigt werden, oder es kann sein, dass dieselben nicht erhebliche Perioden lang aufrechterhalten werden müssen, wenn alle Quoren für Blöcke unter einer Anfangskonfiguration im Wesentlichen unverändert und in der neuen Konfiguration gültig bleiben. Wenn z. B. ein doppelt gespiegeltes Segment aufgrund eines Versagens von einem von zwei Bausteinen zu einer nicht-redundanten Konfiguration neukonfiguriert wird, bleiben alle Quoren gültig, da eine Mehrheit von Bausteinen in der doppelt gespiegelten Konfiguration bezüglich des Werts jedes Blocks übereinstimmen musste, was bedeutet, dass alle Bausteine deshalb in der vorangegangenen Konfiguration übereinstimmten und keine Zweideutigkeiten oder gebrochene Quoren sich aus einem Verlust von einem der beiden Bausteine ergeben.
  • 11G veranschaulicht eine noch komplexere Konfigurationsveränderung, die eine Veränderung des Redundanzschemas umfasst, durch das ein Segment über Bausteine eines FAB-Systems verteilt ist. In dem Fall, der in 11G gezeigt ist, migriert ein Segment, das anfangs gemäß einer 4+2-Löschcodierredundanz über die Bausteine 1, 4, 6, 9, 10 und 11 verteilt ist (1140 in 11G), zu einem Dreifachspiegelredundanzschema über den Bausteinen 4, 13 und 18 (1142 in 11G). Ein Verändern des Redundanzschemas umfasst ein Unterhalten von zwei unterschiedlichen cgrp-Datenstrukturelementen 11441145, auf die von einem SCN-Knoten 1146 verwiesen wird, während die neue Konfiguration 1128 mit der vorangegangenen Konfiguration 1140 synchronisiert wird. Eine Steuerlogik auf der SCN-Ebene koordiniert ein Richten von SCHREIB-Operationen auf die beiden unterschiedlichen Konfigurationen, während die neue Konfiguration mit der alten Konfiguration synchronisiert wird, da die Techniken zum Sicherstellen einer übereinstimmenden Ausführung von SCHREIB-Operationen sich bei den beiden unterschiedlichen Redundanzschemata unterscheiden. Da SCN-Knoten verriegelt werden können oder ein Zugriff auf SCN-Knoten anderweitig wirksam gesteuert werden kann, kann der Zustand eines SCN-Knotens während einer Migration verändert werden. Da auf SCN-Knoten jedoch durch mehrere VDI-Tabelleneinträge verwiesen werden kann, wird im Allgemeinen ein neuer SCN-Knoten 1146 für die Migrationoperation zugeteilt.
  • Schließlich veranschaulicht 11H eine exemplarische Reproduktion einer virtuellen Platte innerhalb eines FAB-Systems. Die virtuelle Platte wird durch einen VDTE-Eintrag 1148 dargestellt, der auf eine einzige VDI-Tabelle 1150 verweist. Eine Reproduktion der virtuellen Platte umfasst ein Erzeugen einer neuen VDI-Tabelle 1152, auf die gleichzeitig von der VDTE 1132 zusammen mit der ursprünglichen VDI-Tabelle 1150 verwiesen wird. Eine Steuerlogik auf der Virtuellplattenebene innerhalb der Hierarchie der Steuerlogik koordiniert eine Synchronisation des neuen VDI mit dem vorangegangenen VDI, wobei während des Synchronisationsprozesses mit Feld-SCHREIB-Operationen fortgefahren wird, die die virtuelle Platte betreffen.
  • Die hierarchischen Ebenen innerhalb der Datenbeschreibungsdatenstruktur, die in 10A gezeigt ist, spiegeln Steuerlogikebenen innerhalb der Steuerlogik wider, die durch jeden Baustein in dem FAB-System ausgeführt wird. Die Steuerlogikebenen manipulieren die Datenstrukturelemente auf entsprechenden Ebenen in der Datenzustandsbeschreibungsdatenstruktur und Datenstrukturelemente unter dieser Ebene. Eine Anforderung, die von einem Hostcomputer empfangen wird, wird anfangs auf einer obersten Verarbeitungsebene empfangen und als eine oder mehr Operationen zur Ausführung durch die oberste Verarbeitungsebene zu einer geeigneten virtuellen Platte geleitet. Eine Steuerlogik auf der Virtuellplattenebene leitet dann die Operation an eine oder mehr VDIs, die eine oder mehr Reproduktionen der virtuellen Platte darstellen. Die Steuerlogik auf der VDI-Ebene bestimmt die Segmente in den ein oder mehr VDIs, zu denen die Operation geleitet wird, und leitet die Operation zu den geeigneten Segmenten. Die Steuerlogik auf der SCN-Ebene leitet die Operation zu geeigneten Konfigurationsgruppen, und die Steuerlogik auf der Konfigurationsgruppenebene leitet die Operationen zu geeigneten Konfigurationen. Die Steuerlogik auf der Konfigurationsebene leitet die Anforderungen an Bausteine der Konfiguration, und eine Internbausteinebenensteuerlogik innerhalb von Bausteinen bildet die Anforderungen auf bestimmte Seiten und Blöcke innerhalb der internen Plattenlaufwerke ab und koordiniert lokale, physische Zugriffsoperationen.
  • Speicherregistermodell
  • Das FAB-System kann ein Speicherregistermodell für quorumbasierte, verteilte LESE- und SCHREIB-Operationen verwenden. Ein Speicherregister ist eine verteilte Dateneinheit. Bei aktuellen FAB-Systemen werden Blöcke als Speicherregister behandelt.
  • Die 1218 veranschaulichen die Grundoperation eines verteilten Speicherregisters. Wie es in 12 gezeigt ist, handelt es sich bei dem verteilten Speicherregister 1202 bevorzugt um ein abstraktes oder virtuelles Register anstatt einem physischen Register, das in der Hardware einer bestimmten elektronischen Vorrichtung implementiert ist. Jeder Prozess, der auf einem Prozessor oder einem Computersystem 12041208 läuft, verwendet eine kleine Anzahl von Werten, die in einem dynamischen Speicher gespeichert sind und optional in einem nicht-flüchtigen Speicher gesichert sind, zusammen mit einer kleinen Anzahl von Routinen, die mit einem verteilten Speicherregister in Beziehung stehen, um das verteilte Speicherregister 1202 gemeinsam zu implementieren. Mindestens ein Satz von gespeicherten Werten und Routinen ist jeder Verarbeitungsentität zugeordnet, die auf das verteilte Speicherregister zugreift. Bei einigen Implementierungen kann jeder Prozess, der auf einem physischen Prozessor oder einem Mehrprozes sorsystem läuft, seine eigenen gespeicherten Werte und Routinen verwalten, und bei anderen Implementierungen können Prozesse, die auf einem bestimmten Prozessor oder Mehrprozessorsystem laufen, die gespeicherten Werte und Routinen gemeinschaftlich verwenden, was vorsieht, dass das gemeinschaftliche Verwenden lokal koordiniert wird, um Probleme eines gleichzeitigen Zugriffs durch mehrere Prozesse, die auf dem Prozessor laufen, zu verhindern.
  • In 12 unterhält jedes Computersystem einen lokalen Wert 12101214 für das verteilte Speicherregister. Im Allgemeinen sind die lokalen Werte, die durch die unterschiedlichen Computersysteme gespeichert werden, normalerweise identisch und gleich dem Wert des verteilten Speicherregisters 1202. Gelegentlich kann es jedoch sein, dass die lokalen Werte nicht alle identisch sind, wie bei dem Beispiel, das in 12 gezeigt ist, wobei in diesem Fall, wenn eine Mehrheit der Computersysteme aktuell einen einzigen lokal gespeicherten Wert unterhält, dann der Wert des verteilten Speicherregisters der von der Mehrheit gehaltene Wert ist.
  • Ein verteiltes Speicherregister liefert zwei grundlegende Funktionen hoher Ebene für eine Anzahl von Kommunikationsprozessen, die gemeinsam das verteilte Speicherregister implementieren. Wie es in 13 gezeigt ist, kann ein Prozess eine LESE-Anforderung 1302 zu dem verteilten Speicherregister 1202 leiten. Falls das verteilte Speicherregister aktuell einen gültigen Wert hält, wie es durch den Wert „B" innerhalb des verteilten Speicherregisters 1202 in 14 gezeigt ist, wird der aktuelle, gültige Wert an den anfordernden Prozess zurückgesendet 1402. Wie es in 15 gezeigt ist, wird jedoch, wenn das verteilte Speicherregister 1202 derzeit keinen gültigen Wert enthält, der Wert NULL 1502 zu dem anfordernden Prozess zurückgesendet. Der Wert NULL ist ein Wert, bei dem es sich nicht um einen gültigen Wert handeln kann, der innerhalb des verteilten Speicherregisters gespeichert ist.
  • Ein Prozess kann auch einen Wert in das verteilte Speicherregister schreiben. In 16 leitet ein Prozess eine SCHREIBEN-Nachricht 1602 zu dem verteilten Speicherregister 1202, wobei die SCHREIBEN-Nachricht 1602 einen neuen Wert „X" umfasst, der in das verteilte Speicherregister 1202 geschrieben werden soll. Falls der Wert, der an das verteilte Speicherregister gesendet wird, erfolgreich den Wert überschreibt, der aktuell in dem verteilten Speicherregister gespeichert ist, wie es in 17 gezeigt ist, wird ein Boolescher Wert „WAHR" an den Prozess zurückgesendet 1702, der die SCHREIB-Anforderung an das verteilte Speicherregister geleitet hat. Ansonsten schlägt, wie es in 18 gezeigt ist, die SCHREIB-Anforderung fehl, und ein Boolescher Wert „FALSCH" wird an den Prozess zurückgesendet 1802, der die SCHREIB-Anforderung an das verteilte Speicherregister geleitet hat, wobei der Wert, der in dem verteilten Speicherregister gespeichert ist, von der SCHREIB-Anforderung nicht verändert wird. Bei bestimmten Implementierungen sendet das verteilte Speicherregister Binärwerte „OK" und „NOK" zurück, wobei OK eine erfolgreiche Ausführung der SCHREIB-Anforderung anzeigt, und NOK anzeigt, dass die Inhalte des verteilten Speicherregisters unklar sind oder in anderen Worten, dass das SCHREIBEN erfolgreich gewesen sein kann oder nicht.
  • 19 zeigt die Komponenten, die durch einen Prozess oder eine Verarbeitungsentität Pi verwendet werden, die zusammen mit einer Anzahl von anderen Prozessen und/oder Verarbeitungsentitäten Pj≠i ein verteiltes Speicherregister implementiert. Ein Prozessor oder eine Verarbeitungsentität verwendet drei Grundelemente niedriger Ebene: einen Zeitnehmermechanismus 1902, eine eindeutige ID 1904 und einen Takt 1906. Der Prozessor oder die Verarbeitungsentität Pi verwendet einen lokalen Zeitnehmermechanismus 1902, der es ermöglicht, dass Pi einen Zeitnehmer für eine spezifizierte Zeitperiode setzt und dann darauf wartet, dass dieser Zeitnehmer abläuft, wobei Pi bei Ablauf des Zeitnehmers benachrichtigt wird, um mit irgendeiner Operation fortzufahren. Ein Prozess kann einen Zeitnehmer setzen und eine Ausführung fortsetzen, wobei der Zeitnehmer bezüglich des Ablaufs geprüft oder abgefragt wird, oder ein Prozess kann einen Zeitnehmer setzen, eine Ausführung aussetzen und wieder geweckt werden, wenn der Zeitnehmer abläuft. In jedem Fall ermöglicht der Zeitnehmer, dass der Prozess eine Operation logisch aussetzt und nachfolgend die Operation nach einer spezifizierten Zeitperiode wieder aufnimmt, oder irgendeine Operation eine spezifizierte Zeitperiode lang durchführt, bis der Zeitnehmer abläuft. Der Prozess oder die Verarbeitungsentität Pi weist auch eine zuverlässig gespeicherte und zuverlässig wiedergewinnbare lokale Prozess-ID („PID") 1904 auf. Jeder Prozessor oder jede Verarbeitungsentität weist eine lokale PID auf, die bezüglich aller anderen Prozesse und/oder Verarbeitungsentitäten, die zusammen das verteilte Speicherregister implementieren, eindeutig ist. Schließlich weist die Prozessorverarbeitungsentität Pi einen Echtzeittakt 1906 auf, der grob mit irgendeiner absoluten Zeit koordiniert ist. Die Echtzeittakte aller Prozesse und/oder Verarbeitungsentitäten, die zusammen gemeinsam ein verteiltes Speicherregister implementieren, müssen nicht genau synchronisiert sein, sollten jedoch angemessen irgendein gemeinschaftlich verwendetes Konzept einer absoluten Zeit widerspiegeln. Die meisten Computer, einschließlich Personalcomputer, umfassen einen batteriebetriebenen Systemtakt, der einen aktuellen universellen Zeitwert widerspiegelt. Zu den meisten Zwecken, einschließlich einer Implementierung eines verteilten Speicherregisters, müssen diese Systemtakte nicht genau synchronisiert sein, sondern nur näherungsweise eine aktuelle universelle Zeit widerspiegeln.
  • Jeder Prozessor oder jede Verarbeitungsentität Pi umfasst einen flüchtigen Speicher 1908 und bei einigen Ausführungsbeispielen einen nicht-flüchtigen Speicher 1910. Der flüchtige Speicher 1908 wird zum Speichern von Anweisungen zur Ausführung und lokalen Werten einer Anzahl von Variablen, die für das Verteiltes-Speicherregister-Protokoll verwendet werden, verwendet. Der nicht-flüchtige Speicher 1910 wird für ein permanentes Speichern der Variablen verwendet, die bei einigen Ausführungsbeispielen für das Verteiltes-Speicherregister-Protokoll verwendet werden. Eine permanente Speicherung von variablen Werten liefert eine relativ einfache Wiederaufnahme der Teilnahme eines Prozesses an der gemeinsamen Implementierung eines verteilten Speicherregisters nach einem Absturz oder einer Kommunikationsunterbrechung. Eine permanente Speicherung ist jedoch für eine Wiederaufnahme einer Teilnahme eines abgestürzten oder zeitlich getrennten Prozessors an der gemeinsamen Implementierung des verteilten Speicherregisters nicht erforderlich. Stattdessen, vorausgesetzt, dass die variablen Werte, die in einem dynamischen Speicher gespeichert sind, bei Ausführungsbeispielen einer nicht-permanenten Speicherung im Falle eines Verlustes alle zusammen verloren gehen, vorausgesetzt, dass verlorene Variablen ordnungsgemäß neu initialisiert werden, und vorausgesetzt, dass ein Quorum von Prozessoren zu jeder Zeit wirksam und verbunden bleibt, ist das Verteiltes-Speicherregister-Protokoll korrekt wirksam und ein Fortschritt von Prozessen und Verarbeitungsentitäten, die das verteilte Speicherregister verwenden, wird aufrechterhalten. Jeder Prozess Pi speichert drei Variablen: (1) val 1934, die den aktuellen, lokalen Wert für das verteilte Speicherregister hält; (2) val-ts 1936, die den Zeitstempelwert anzeigt, der dem aktuellen lokalen Wert für das verteilte Speicherregister zugeordnet ist; und (3) ord-ts 1938, die den aktuellsten Zeitstempel anzeigt, der einer SCHREIB-Operation zugeordnet ist. Die Variable val wird insbesondere bei Ausführungsbeispielen einer nicht-permanenten Speicherung auf einen Wert NULL initialisiert, der sich von jedem beliebigen Wert unterscheidet, der durch Prozesse oder Verarbeitungsentitäten in das verteilte Speicherregister geschrieben wird, und der deshalb von allen anderen Werten des verteilten Speicherregisters unterscheidbar ist. Auf ähnliche Weise werden die Werte der Variablen val-ts und ord-ts auf den Wert „An fangsZS" initialisiert, ein Wert, der geringer als irgendein Zeitstempelwert ist, der durch eine Routine „neuZS" zurückgesendet wird, die verwendet wird, um Zeitstempelwerte zu erzeugen. Wird vorgesehen, dass val, val-ts und ord-ts zusammen auf diese Werte neu initialisiert werden, toleriert das gemeinsam implementierte verteilte Speicherregister Kommunikationsunterbrechungen und Prozess- und Verarbeitungsentitätsabstürze, vorausgesetzt, dass zumindest eine Mehrheit von Prozessen und Verarbeitungsentitäten sich erholen und eine Korrekturoperation wieder aufnehmen.
  • Jeder Prozessor oder jede Verarbeitungsentität Pi kann mit den anderen Prozessen und Verarbeitungsentitäten Pj≠i über ein nachrichtenbasiertes Netz verbunden sein, um Nachrichten zu empfangen 1912 und Nachrichten an die anderen Prozesse und Verarbeitungsentitäten Pj≠i zu senden 1914. Jeder Prozessor oder jede Verarbeitungsentität Pi umfasst eine Routine „neuZS" 1916, die einen Zeitstempel ZSi zurücksendet, wenn dieselbe aufgerufen wird, wobei der Zeitstempel ZSi größer ist als irgendein Anfangswert „AnfangsZS". Jedes Mal, wenn die Routine „neuZS" aufgerufen wird, sendet dieselbe einen Zeitstempel ZSi zurück, der größer als irgendein Zeitstempel ist, der vorhergehend zurückgesendet wurde. Auch sollte jeder beliebige Zeitstempelwert ZSi, der durch die neuZS zurückgesendet wird, die durch einen Prozessor oder eine Verarbeitungsentität Pi aufgerufen wird, sich von jedem beliebigen Zeitstempel ZSj unterscheiden, der durch neuZS zurückgesendet wird, die durch irgendeinen anderen Prozessor oder irgendeine andere Verarbeitungsentität Pj aufgerufen wird. Ein praktisches Verfahren zum Implementieren von neuZS besteht darin, dass neuZS einen Zeitstempel ZS zurücksendet, der die Verkettung der lokalen PID 1904 mit der aktuellen Zeit aufweist, die durch den Systemtakt 1906 berichtet wird. Jeder Prozessor oder jede Verarbeitungsentität Pi, der bzw. die das verteilte Speicherregister implementiert, umfasst vier unterschiedliche Handhabungsroutinen: (1) eine LESEN-Handhabungseinrichtung 1918; (2) eine REIHENFOLGE-Handhabungseinrichtung 1920; (3) eine SCHREIBEN-Handhabungseinrichtung 1922; und (4) eine REIHENFOLGE&LESEN-Handhabungseinrichtung 1924. Es ist wichtig, darauf hinzuweisen, dass Handhabungsroutinen eventuell kritische Abschnitte oder Code-Abschnitte verwenden müssen, die durch Verriegelungen eingängig sind, um Wettlaufbedingungen beim Testen und Setzen von verschiedenen lokalen Datenwerten zu verhindern. Jeder Prozessor oder jede Verarbeitungsentität Pi weist auch vier Operationsroutinen auf: (1) LESEN 1926; (2) SCHREIBEN 1928; (3) WIEDERHERSTELLEN 1930; und (4) MEHRHEIT 1932. Sowohl die vier Handhabungsroutinen als auch die vier Operationsroutinen sind im Folgenden genauer erörtert.
  • Eine korrekte Operation eines verteilten Speicherregisters und eine Lebendigkeit oder ein Fortschritt von Prozessen und Verarbeitungsentitäten, die ein verteiltes Speicherregister verwenden, hängt von einer Anzahl von Annahmen ab. Es wird angenommen, dass jeder Prozess oder jede Verarbeitungsentität Pi sich nicht bösartig verhält. In anderen Worten, jeder Prozessor oder jede Verarbeitungsentität Pi hält sich treu an das Verteiltes-Speicherregister-Protokoll. Eine weitere Annahme besteht darin, dass eine Mehrheit der Prozesse und/oder Verarbeitungsentitäten Pi, die gemeinsam ein verteiltes Speicherregister implementieren, entweder niemals abstürzt oder schließlich aufhört abzustürzen und zuverlässig läuft. Wie es im Vorhergehenden erörtert ist, ist eine Implementierung eines verteilten Speicherregisters tolerant gegenüber verlorengegangenen Nachrichten, Kommunikationsunterbrechungen und Prozess- und Verarbeitungsentitätsabstürzen. Wenn eine Anzahl von Prozessen oder Verarbeitungsentitäten abgestürzt oder getrennt ist, die geringer ist als eine ausreichende Anzahl, um das Quorum von Prozessen oder Verarbeitungsentitäten zu brechen, bleibt das verteilte Speicherregister korrekt und live. Wenn eine ausreichende Anzahl von Prozessen oder Verarbeitungsentitäten abgestürzt oder getrennt ist, um das Quorum von Prozessen oder Verarbeitungsentitäten zu brechen, bleibt das System korrekt, jedoch nicht live. Wie es im Vorhergehenden erwähnt ist, sind alle Prozesse und/oder Verarbeitungsentitäten durch ein nachrichtenbasiertes Netz voll verbunden. Das nachrichtenbasierte Netz kann asynchron sein ohne Grenzen bei Nachrichtenübertragungszeiten. Es wird jedoch eine Fairverlusteigenschaft für das Netz angenommen, die im Wesentlichen garantiert, dass, falls Pi eine Nachricht m von Pj empfängt, Pj die Nachricht m gesendet hat, und auch im Wesentlichen garantiert, dass, wenn Pi wiederholt die Nachricht m an Pj sendet, Pj schließlich die Nachricht m empfangen wird, falls Pj ein korrekter Prozess oder eine korrekte Verarbeitungsentität ist. Erneut wird, wie es im Vorhergehenden erörtert ist, angenommen, dass die Systemtakte für alle Prozesse oder Verarbeitungsentitäten alle angemessen irgendeinen gemeinschaftlich verwendeten Zeitstandard widerspiegeln, dieselben müssen jedoch nicht genau synchronisiert sein.
  • Diese Annahmen sind nützlich, um eine Korrektheit des Verteiltes-Speicherregister-Protokolls nachzuweisen und einen Fortschritt sicherzustellen. Bei bestimmten praktischen Implementierungen kann es jedoch sein, dass gegen eine oder mehr der Annahmen verstoßen wird und ein angemessen wirksames verteiltes Speicherregister erhalten wird. Zusätzlich können zusätzliche Schutzmaßnahmen in die Handhabungsroutinen und Operationsroutinen eingebaut werden, um bestimmte Mängel bei den Hardware-Plattformen und Verarbeitungsentitäten zu überwinden.
  • Eine Operation des verteilten Speicherregisters basiert auf dem Konzept eines Quorums. 20 veranschaulicht eine Bestimmung des aktuellen Werts eines verteilten Speicherregisters mittels eines Quorums. 20 verwendet ähnliche Darstellungskonventionen, wie dieselben in den 1218 verwendet werden. In 20 unterhält jeder bzw. jede der Prozesse oder Verarbeitungsentitäten 20022006 die lokale Variable val-ts, wie z. B. die lokale Variable 2007, die durch den Prozess oder die Verarbeitungsentität 2002 unterhalten wird, die einen lokalen Zeitstempelwert für das verteilte Speicherregister enthält. Falls wie in 16 eine Mehrheit der lokalen Werte, die durch die verschiedenen Prozesse und/oder Verarbeitungsentitäten unterhalten werden, die gemeinsam das verteilte Speicherregister implementieren, aktuell bezüglich eines Zeitstempelwerts val-ts übereinstimmt, der dem verteilten Speicherregister zugeordnet ist, wird der aktuelle Wert des verteilten Speicherregisters 2008 so betrachtet, dass derselbe der Wert der Variablen val ist, der durch die Mehrheit der Prozesse oder Verarbeitungsentitäten gehalten wird. Falls eine Mehrheit der Prozesse und Verarbeitungsentitäten nicht bezüglich eines Zeitstempelwerts val-ts übereinstimmen kann oder kein einzelner von der Mehrheit gehaltener Wert vorhanden ist, dann sind die Inhalte des verteilten Speicherregisters unbestimmt. Ein von der Minderheit gehaltener Wert kann jedoch dann von einer Mehrheit von Prozessen und/oder Verarbeitungsentitäten ausgewählt und angenommen werden, um das verteilte Speicherregister wiederherzustellen.
  • 21 zeigt Pseudocodeimplementierungen für die Routinehandhabungseinrichtungen und Operationsroutinen, die in 19 in Form eines Diagramms gezeigt sind. Es sei darauf hingewiesen, dass diese Pseudocodeimplementierungen auf eine detaillierte Fehlerhandhabung und spezifische Details von Kommunikationsgrundelementen niedriger Ebene, lokalem Verriegeln und anderen Details verzichten, die für Fachleute auf dem Gebiet der Computerprogrammierung bekannt sind und von denselben einfach implementiert werden können. Die Routine „Mehrheit" 2102 sendet eine Nachricht in Zeile 2 von einem Prozess oder einer Verarbeitungsentität Pi zu sich selbst und zu allen anderen Prozessen oder Verarbeitungsentitäten Pj≠i, die zusammen mit Pi gemeinsam ein verteiltes Speicherregister implementieren. Die Nachricht wird periodisch erneut gesendet, bis eine ausreichende Anzahl von Antworten empfangen worden ist, und bei vielen Implementierungen wird ein Zeitnehmer gesetzt, um ein endliches Zeit- und Ausführungslimit bei diesem Schritt festzulegen. Dann wartet in den Zeilen 3–4 die Routine „Mehrheit" darauf, Antworten auf die Nachricht zu empfangen, und sendet dann die empfangenen Antworten in Zeile 5 zurück. Die Annahme, dass eine Mehrheit von Prozessen korrekt ist, die im Vorhergehenden erörtert wurde, stellt im Wesentlichen sicher, dass die Routine „Mehrheit" schließlich zurückkehrt, egal ob ein Zeitnehmer verwendet wird oder nicht. Bei praktischen Implementierungen erleichtert ein Zeitnehmer ein Handhaben von Fehlerauftretensfällen auf eine rechtzeitige Art und Weise. Es sei darauf hingewiesen, dass jede Nachricht eindeutig identifiziert ist, im Allgemeinen mit einem Zeitstempel oder einer anderen eindeutigen Zahl, so dass Antworten, die durch den Prozess Pi empfangen werden, mit einer vorhergehend gesendeten Nachricht korreliert werden können.
  • Die Routine „Lesen" 2104 liest einen Wert aus dem verteilten Speicherregister. In Zeile 2 ruft die Routine „Lesen" die Routine „Mehrheit" auf, um eine LESEN-Nachricht an sich selbst und an jeden bzw. jede der anderen Prozesse oder Verarbeitungsentitäten Pj#i zu senden. Die LESEN-Nachricht umfasst eine Anzeige, dass die Nachricht eine LESEN-Nachricht ist, sowie den Zeitstempelwert, der dem lokalen, aktuellen Verteiltes-Speicherregister-Wert zugeordnet ist, der durch den Prozess Pi gehalten wird, val-ts. Falls die Routine „Mehrheit" einen Satz von Antworten zurücksendet, wobei alle den Booleschen Wert „WAHR" enthalten, wie es in Zeile 3 bestimmt wird, dann sendet die Routine „Lesen" den lokalen aktuellen Verteiltes-Speicherregister-Wert val zurück. Ansonsten ruft in Zeile 4 die Routine „Lesen" die Routine „Wiederherstellen" auf.
  • Die Routine „Wiederherstellen" 2106 versucht, einen aktuellen Wert des verteilten Speicherregisters durch eine Quorumtechnik zu bestimmen. Zuerst wird in Zeile 2 ein neuer Zeitstempel ts durch ein Aufrufen der Routine „neuZS" erhalten. Dann wird in Zeile 3 die Routine „Mehrheit" aufgerufen, um REIHENFOLGE&LESEN-Nachrichten an alle Prozesse und/oder Verarbeitungsentitäten zu senden. Falls irgendein Status in den Antworten, die durch die Routine „Mehrheit" zurückgesendet werden, „FALSCH" ist, dann sendet „Wiederherstellen" in Zeile 4 den Wert NULL zurück. Ansonsten wird in Zeile 5 der lokale aktuelle Wert des verteilten Speicherregisters val auf den Wert gesetzt, der dem Zeitstempel des höchsten Werts in dem Satz von Antworten zugeordnet ist, die durch die Routine „Mehrheit" zurückgesendet werden. Dann wird in Zeile 6 die Routine „Mehrheit" erneut aufgerufen, um eine SCHREIBEN-Nachricht zu senden, die den neuen Zeitstempel ts, der in Zeile 2 erhalten wird, und den neuen lokalen aktuellen Wert des verteilten Speicherregisters val umfasst. Falls der Status in allen Antworten den Booleschen Wert „WAHR" aufweist, dann war die SCHREIB-Operation erfolgreich, und eine Mehrheit der Prozesse und/oder Verarbeitungsentitäten stimmen nun mit diesem neuen Wert überein, der in der lokalen Kopie val in Zeile 5 gespeichert ist. Ansonsten sendet die Routine „Wiederherstellen" den Wert NULL zurück.
  • Die Routine „Schreiben" 2108 schreibt einen neuen Wert in das verteilte Speicherregister. Ein neuer Zeitstempel ts wird in Zeile 2 erhalten. Die Routine „Mehrheit" wird in Zeile 3 aufgerufen, um eine REIHENFOLGE-Nachricht, einschließlich des neuen Zeitstempels, an alle Prozesse und/oder Verarbeitungsentitäten zu senden. Falls irgendwelche der Statuswerte, die in Antwortnachrichten zurückgesendet werden, die durch die Routine „Mehrheit" zurückgesendet werden, „FALSCH" sind, dann wird der Wert „NOK" in Zeile 4 durch die Routine „Schreiben" zurückgesendet. Ansonsten wird der Wert val in Zeile 5 in die anderen Prozesse und/oder Verarbeitungsentitäten geschrieben, indem eine SCHREIBEN-Nachricht über die Routine „Mehrheit" gesendet wird. Falls alle Statuswerte in Antworten, die durch die Routine „Mehrheit" zurückgesendet werden, „WAHR" sind, wie es in Zeile 6 bestimmt wird, dann sendet die Routine „Schreiben" den Wert „OK" zurück. Ansonsten sendet die Routine „Schreiben" in Zeile 7 den Wert „NOK" zurück. Es sei darauf hingewiesen, dass sowohl in dem Fall der Routine „Wiederherstellen" 2106 als auch der Routine „Schreiben" die lokale Kopie des Verteiltes-Speicherregister-Werts val und die lokale Kopie des Zeitstempelwerts val-ts beide durch lokale Handhabungsroutinen aktualisiert werden, die im Folgenden erörtert werden.
  • Als Nächstes werden die Handhabungsroutinen erörtert. Zu Beginn sei darauf hingewiesen, dass die Handhabungsroutinen empfangene Werte mit lokalen variablen Werten vergleichen und dann lokale variable Werte gemäß dem Ergebnis der Vergleiche setzen. Es kann sein, dass diese Typen von Operationen streng serialisiert sein müssen und vor Wettlaufbedingungen innerhalb jedes Prozesses und/oder jeder Verarbeitungsentität für Datenstrukturen, die mehrere Werte speichern, geschützt sein müssen. Eine lokale Serialisierung wird ohne weiteres unter Verwendung kritischer Abschnitte oder lokaler Verriegelungen basierend auf atomaren Testen-und-Setzen-Anweisungen erreicht. Die LESEN-Handhabungsroutine 2110 empfängt eine LESEN-Nachricht und antwortet auf die LESEN-Nachricht mit einem Statuswert, der anzeigt, ob die lokale Kopie des Zeitstempels val-ts in dem empfangenden Prozess oder der empfangenden Entität gleich dem Zeitstempel, der in der LESEN-Nachricht empfangen wird, ist oder nicht und ob der Zeitstempel ts, der in der LESEN-Nachricht empfangen wird, größer oder gleich dem aktuellen Wert einer lokalen Variable ord-ts ist oder nicht. Die SCHREIBEN-Handhabungsroutine 2112 empfängt eine SCHREIBEN-Nachricht, die einen Wert für eine Lokalvariable Status in Zeile 2 bestimmt, der anzeigt, ob die lokale Kopie des Zeitstempels val-ts bei dem empfangenden Prozess oder der empfangenden Entität größer als der Zeitstempel, der in der SCHREIBEN-Nachricht empfangen wird, ist oder nicht und ob der Zeitstempel ts, der in der SCHREIBEN-Nachricht empfangen wird, größer oder gleich dem aktuellen Wert einer Lokalvariablen ord-ts ist oder nicht. Falls der Wert der Status-Lokalvariablen „WAHR" ist, was in Zeile 3 bestimmt wird, dann aktualisiert die SCHREIBEN-Handhabungsroutine den lokal gespeicherten Wert und Zeitstempel val und val-ts in den Zeilen 4–5 sowohl in dem dynamischen Speicher als auch in dem permanenten Speicher mit dem Wert und dem Zeitstempel, die in der SCHREIBEN-Nachricht empfangen werden. Schließlich wird in Zeile 6 der Wert, der in der Lokalvariablen Status gehalten wird, zu dem Prozess oder der Verarbeitungsentität zurückgesendet, die die SCHREIBEN-Nachricht gesendet hat, die durch die SCHREIBEN-Handhabungsroutine 2112 gehandhabt wird.
  • Die REIHENFOLGE&LESEN-Handhabungseinrichtung 2114 berechnet einen Wert für die Lokalvariable Status in Zeile 2 und sendet diesen Wert zu dem Prozess oder der Verarbeitungsentität zurück, von dem bzw. der eine REIHENFOLGE&LESEN-Nachricht empfangen wurde. Der berechnete Wert von Status ist ein Boolescher Wert, der anzeigt, ob der Zeitstempel, der in der REIHENFOLGE&LESEN-Nachricht empfangen wird, größer als die beiden Werte, die in den Lokalvariablen val-ts und ord-ts gespeichert sind, ist oder nicht. Falls der berechnete Wert von Status „WAHR" ist, dann wird der empfangene Zeitstempel ts in sowohl den dynamischen Speicher als auch den permanenten Speicher in der Variable ord-ts gespeichert.
  • Auf ähnliche Weise berechnet die REIHENFOLGE-Handhabungseinrichtung 2116 einen Wert für eine Lokalvariable Status in Zeile 2 und sendet diesen Status an den Prozess oder die Verarbeitungsentität zurück, von der eine REIHEN-FOLGE-Nachricht empfangen wurde. Der Status spiegelt wider, ob der empfangene Zeitstempel größer als die Werte, die in den Lokalvariablen val-ts und ord-ts gehalten werden, ist oder nicht. Falls der berechnete Wert von Status „WAHR" ist, dann wird der empfangene Zeitstempel ts in sowohl den dynamischen Speicher als auch den permanenten Speicher in der Variablen ord-ts gespeichert.
  • Unter Verwendung des Verfahrens und des Protokolls des verteilten Speicherregisters, die im Vorhergehenden erörtert sind, können gemeinschaftlich verwendete Zustandsin formationen, die kontinuierlich konsistent in einem verteilten Datenspeichersystem unterhalten werden, in einem Satz von verteilten Speicherregistern gespeichert werden, eine Einheit von gemeinschaftlich verwendeten Zustandsinformationen pro Register. Die Größe eines Registers kann variieren, um unterschiedliche natürliche Größen von Einheiten von gemeinschaftlich verwendeten Zustandsinformationen aufzunehmen. Die Granularität von Zustandsinformationseinheiten kann durch eine Leistungsüberwachung oder durch eine Analyse von erwarteten Austauschraten von Zustandsinformationseinheiten innerhalb eines bestimmten verteilten Systems bestimmt werden. Größere Einheiten verursachen einen geringeren Mehraufwand für Protokollvariablen und andere Daten, die für ein verteiltes Speicherregister unterhalten werden, können jedoch zu einem erhöhten Kommunikationsmehraufwand führen, wenn auf unterschiedliche Teile der Einheiten zu unterschiedlichen Zeiten zugegriffen wird. Es sei auch darauf hingewiesen, dass, obwohl der oben genannte Pseudocode und die Darstellungen eine Implementierung eines einzigen verteilten Speicherregisters betreffen, diese Pseudocoderoutinen verallgemeinert werden können, indem Parameter, die ein bestimmtes verteiltes Speicherregister identifizieren, von einer Zustandsinformationseinheit, die Operationen betreffen, hinzugefügt werden und Arrays von Variablen, wie z. B. val-ts, val und ord-ts, die durch die Identifizierungsparameter indexiert sind, unterhalten werden.
  • Verallgemeinertes Speicherregistermodell
  • Das Speicherregistermodell wird im Allgemeinen durch ein FAB-System auf der Blockebene angewendet, um eine Konsistenz über Segmente aufrechtzuerhalten, die gemäß Spiegelredundanzschemata verteilt sind. In anderen Worten kann jeder Block eines Segments als ein Speicherregister betrachtet werden, das über mehrere Bausteine verteilt ist, und die im Vorhergehenden beschriebenen Techniken, die Quoren und ein Nachrichtenleiten umfassen, werden verwendet, um eine Datenkonsistenz über die Spiegelkopien aufrechtzuerhalten. Das Speicherregisterschema kann jedoch erweitert werden, um Löschcodierredundanzschemata zu handhaben. Erstens verwenden Löschcodierredundanzschemata, anstatt eines Quorums, das aus einer Mehrheit der Bausteine besteht, über die ein Block verteilt ist, wie es im vorhergehenden Abschnitt beschrieben ist und wie es für Spiegelredundanzschemata verwendet wird, Quoren von m + [(n – m)/2] Bausteinen, so dass die Schnittmenge beliebiger zwei Quoren zumindest m Bausteine enthält. Dieser Typ von Quorum wird als ein „m-Quorum" bezeichnet. Zweitens können, anstatt neu empfangene Werte in der zweiten Phase einer SCHREIB-Operation in Blöcke in einer internen Speicherung zu schreiben, Bausteine stattdessen die neuen Werte zusammen mit einem Zeitstempel, der den Werten zugeordnet ist, protokollieren. Die Protokolle können dann asynchron verarbeitet werden, um die protokollierten SCHREIB-Operationen auszuführen, wenn ein m-Quorum von protokollierten Einträgen empfangen und protokolliert worden ist. Ein Protokollieren wird verwendet, da anders als bei Spiegelredundanzschemata Daten aufgrund von Bausteinabstürzen nicht wiederhergestellt werden können, außer ein m-Quorum von Bausteinen hat eine bestimmte SCHREIB-Operation empfangen und korrekt ausgeführt. 22 zeigt einen modifizierten Pseudocode, ähnlich dem Pseudocode, der in 17 bereitgestellt ist, der Erweiterungen zu dem Speicherregistermodell umfasst, die eine Verteilung von Segmenten über Bausteine gemäß Fehlercodierredundanzschemata innerhalb eines FAB-Systems handhaben, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen. In dem Fall, dass m Bausteine z. B. einen am aktuellsten geschriebenen Wert nicht protokolliert haben, wird der am aktuellsten geschriebene Wert zu einem vorangegangenen Wert zurückgesetzt, der sich in zumindest m Kopien innerhalb der Protokolle befindet oder innerhalb zumindest m Bausteinen gespeichert ist.
  • 23 veranschaulicht die große Abhängigkeit von Zeitstempeln seitens der Datenkonsistenztechniken, die auf dem Speicherregistermodell basieren, innerhalb eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. In 23 ist ein Block 2302 so gezeigt, dass derselbe gemäß einem Dreifachspiegelredundanzschema über drei Bausteine 23042306 verteilt ist und gemäß einem 3+2-Löschcodierschema über fünf Bausteine 23082312 verteilt ist. Bei dem Dreifachspiegelredundanzschema ist jede Kopie des Blocks, wie z. B. Block 2314, zwei Zeitstempeln 23162317 zugeordnet, wie es im vorangegangenen Unterabschnitt erörtert ist. Bei dem Löschcodierredundanzschema ist jeder Block, wie z. B. der erste Block 2318, zumindest zwei Zeitstempeln zugeordnet. Die Prüfsummenbits, die aus dem Block 23202321 und aus anderen Blöcken in dem Streifen des Blocks berechnet werden, sind zwei Zeitstempeln zugeordnet, aber ein Block, wie z. B. Block 2324, kann zusätzlich Protokolleinträgen (darunter gezeigt, mit dem Block darüber), wie z. B. Protokolleintrag 2326, zugeordnet sein, von denen jeder ebenfalls einem Zeitstempel zugeordnet ist, wie z. B. Zeitstempel 2328. Es ist klar, dass die Datenkonsistenztechniken, die auf dem Speicherregistermodell basieren, potentiell eine Speicherung und Unterhaltung einer sehr großen Anzahl von Zeitstempeln umfassen, und dass der Gesamtspeicherplatz, der Zeitstempeln zugeordnet ist, ein wesentlicher Teil des gesamten verfügbaren Speicherplatzes innerhalb eines FAB-Systems sein kann. Außerdem kann ein Nachrichtenverkehrmehraufwand sich aus einem Leiten von Zeitstempeln zwischen Bausteinen während der im Vorhergehenden beschriebenen LESE- und SCHREIB-Operationen ergeben, die Speicherregister betreffen.
  • Wegen des enormen potentiellen Mehraufwands bezüglich Zeitstempeln kann ein FAB-System eine Anzahl von Techniken verwenden, um den Speicher- und Nachrichtenübermittlungsmehraufwand bezüglich Zeitstempeln zu verbessern. Erstens können Zeitstempel hierarchisch durch Bausteine in einem nicht-flüchtigen Direktzugriffsspeicher gespeichert werden, so dass ein einziger Zeitstempel einer großen, zusammenhängenden Anzahl von Blöcken zugeordnet sein kann, die bei einer einzigen SCHREIB-Operation geschrieben werden. 24 veranschaulicht eine hierarchische Zeitstempelverwaltung, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. In 24 sind Zeitstempel Blattknoten in einem Typ von großem azyklischem Graphen zugeordnet, der als ein „Intervallbaum" bekannt ist, von dem nur ein kleiner Abschnitt in 24 gezeigt ist. In dem gezeigten Abschnitt des Graphen stellen die beiden Blattknoten 2402 und 2404 Zeitstempel dar, die Blöcken 10001050 bzw. 10512000 zugeordnet sind. Falls bei einer nachfolgenden SCHREIB-Operation eine SCHREIB-Operation die Blöcke 10511099 betrifft, dann wird der Blattknoten 2404 in dem ursprünglichen azyklischen Graphen in zwei Blöcke niedrigerer Ebene 2406 und 2408 in einem modifizierten azyklischen Graphen geteilt. Getrennte Zeitstempel können jedem der neuen Blattknotenblöcke zugeordnet werden. Umgekehrt können, wenn die Blöcke 10512000 nachfolgend in einer einzigen SCHREIB-Operation geschrieben werden, die beiden Blöcke 2406 und 2408 nachfolgend vereinigt werden, was den azyklischen Graphen zu dem ursprünglichen azyklischen Graphen 2400 zurückbringt. Ein Zuordnen von Zeitstempeln zu Gruppen von Blöcken, die bei einzelnen SCHREIB-Operationen geschrieben werden, kann die Anzahl von Zeitstempeln, die durch einen Baustein unterhalten werden, erheblich verringern.
  • Eine andere Möglichkeit, die Anzahl von Zeitstempeln zu verringern, die durch einen Baustein unterhalten werden, besteht darin, Zeitstempel aggressiv als Abfall zu sammeln. Wie es in dem vorangegangenen Unterabschnitt erörtert ist, können Zeitstempel Blöcken zugeordnet werden, um die quorum-basierten Konsistenzverfahren des Speicherregistermodells zu ermöglichen. Wenn jedoch alle Bausteine, über die ein Block verteilt ist, erfolgreich aktualisiert worden sind, werden die Zeitstempel, die den Blöcken zugeordnet sind, nicht mehr benötigt, da die Blöcke sich in einem komplett übereinstimmenden und vollständig redundant gespeicherten Zustand befinden. Somit kann ein FAB-System ferner das Speicherregistermodell erweitern, um eine aggressive Abfallsammlung von Zeitstempeln nach einem voll-ständigen Abschluss von SCHREIB-Operationen zu umfassen. Weitere Verfahren, die durch das FAB-System zum Verringern eines zeitstempel-bezogenen Mehraufwands verwendet werden, können ein Aufladen von zeitstempel-bezogenen Nachrichten im Huckepack-Verfahren innerhalb anderer Nachrichten und ein Verarbeiten von damit in Beziehung stehenden Zeitstempeln zusammen in kombinierten Verarbeitungsaufgaben, einschließlich hierarchischer Degradierung, die im Folgenden erörtert ist, umfassen.
  • Das quorum-basierte Speicherregistermodell kann ferner erweitert werden, um eine Neukonfiguration und Migration zu handhaben, die im Vorhergehenden in einem vorangegangenen Unterabschnitt erörtert sind, wobei Anordnungen und Redundanzschemata verändert werden. Wie es in diesem Unterabschnitt erörtert ist, können während Neukonfigurationsoperationen zwei oder mehr unterschiedliche Konfigurationen gleichzeitig unterhalten werden, während neue Konfigurationen mit vorhergehend bestehenden Konfigurationen vor einer Entfernung und Abfallsammlung der vorhergehenden Konfigurationen synchronisiert werden. SCHREIB-Operationen betreffen beide Konfigurationen während des Synchronisationsprozesses. Somit muss ein Quorum höherer Ebene von Konfigurationen eine SCHREIB-Operation erfolgreich abschließen, bevor die cfg-Gruppe oder die SCN-Ebenensteuerlogik davon ausgeht, dass eine empfangene SCHREIB-Operation erfolgreich abgeschlossen worden ist. Die 2526 liefern Pseudocode für ein weiteres erweitertes Speicherregistermodell, das das Konzept von quorum-basierten Schreiboperationen in mehrere aktive Konfigurationen umfasst, die aufgrund einer Neukonfiguration eines verteilten Segments innerhalb eines FRB-Systems vorhanden sein können, die ein Ausführungsbeispiel der vorliegenden Erfindung darstellen.
  • Leider ist eine Migration noch eine andere Ebene von Neukonfiguration, die noch eine weitere Erweiterung des Speicherregistermodells erfordern kann. Wie bei dem im Vorhergehenden erörterten Neukonfigurationsszenario umfasst eine Migration mehrere aktive Konfigurationen, auf die eine SCN-Ebenensteuerlogik SCHREIB-Operationen während einer Synchronisation einer neuen Konfiguration mit einer alten Konfiguration richtet. Anders als bei der Neukonfigurationsebene erfordert die Migrationebene jedoch, dass eine SCHREIB-Operation, die aktive Konfigurationen betrifft, bei allen Konfigurationen erfolgreich abgeschlossen wird, anstatt bei einem Quorum von aktiven Konfigurationen, da die Redundanzschemata für die aktiven Konfigurationen unterschiedlich sind und es sein kann, dass eine fehlgeschlagene SCHREIB-Operation bei einem Redundanzschema nicht von einer anderen aktiven Konfiguration, die ein anderes Redundanzschema verwendet, wiedergewinnbar ist. Deshalb besteht auf der Migrationebene ein Quorum von aktiven Konfigurationen aus allen aktiven Konfigurationen. Eine Erweiterung des Speicherregistermodells auf die Migrationsebene führt deshalb zu einem allgemeineren speicherregisterartigen Modell. 27 zeigt Pseudocode hoher Ebene zur Erweiterung des Speicherregistermodells auf die Migrationsebene innerhalb eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Noch andere Überlegungen können auf der Reproduktionsebene gelten, bei der SCHREIB-Operationen mehrere Reproduktionen einer virtuellen Platte betreffen. Die allgemeinste Speicherregistermodellerweiterung, die im Vorhergehenden unter Bezugnahme auf 27 erörtert ist, ist jedoch ausreichend allgemein zur Anwendung auf der VDI- und Virtuellplattenebene, wenn VDI-Ebenen-Überlegungen in das allgemeine Speicherregistermodell aufgenommen werden.
  • Infolge der Speicherregistermodellerweiterungen und -überlegungen, die im Vorhergehenden erörtert sind, wird eine endgültige Beschreibung hoher Ebene der hierarchischen Steuerlogik und der hierarchischen Datenspeicherung innerhalb eines FAB-Systems erhalten. 28 veranschaulicht die hierarchische Gesamtstruktur sowohl der Steuerverarbeitung als auch der Datenspeicherung innerhalb eines FAB-Systems, das ein Ausführungsbeispiel der vorliegenden Erfindung darstellt. Eine Koordinatorlogik oberster Ebene, die als der „Koordinator oberster Ebene" 2802 bezeichnet wird, kann der Virtuellplattenebene 2804 des hierarchischen Datenspeichermodells zugeordnet werden. Eine VDI-Ebenensteuerlogik, die als der „VDI-Ebenenkoordinator" 2806 bezeichnet wird, kann der VDI-Ebene 2808 des Datenspeichermodells zugeordnet werden. Eine SCN-Ebenensteuerlogik, die als der „SCN-Koordinator" 2810 bezeichnet wird, kann der SCN-Ebene 2812 des Datenspeichermodells zugeordnet werden. Eine Konfigurationsgruppenebenensteuerlogik, die als der „Konfigurationsgruppenkoordinator" 2814 bezeichnet wird, kann der Konfigurationsgruppenebene 2816 des Datenspeichermodells zugeordnet werden. Schließlich kann eine Konfigurationsebenensteuerlogik, die als der „Konfigurationskoordinator" 2818 bezeichnet wird, der Konfigurationsebene des Datenspeichermodells 2820 zugeordnet werden. Es sei darauf hingewiesen, dass in 28 und nachfolgenden Figuren, die die Darstellungskonventionen verwenden, die in 28 verwendet werden, die cfg- und Anordnungsdatenstrukturelemente zusammen in einem Datenspeichermodellknoten kombiniert sind. Jeder der Koordinatoren in der hierarchischen Organisation von Koordinatoren führt ein erweitertes Speicherregistermodell-Konsistenzverfahren aus, das für die hierarchische Ebene des Koordinators geeignet ist. Zum Beispiel verwendet der cfg-Gruppenkoordinator quorumbasierte Techniken für Spiegelredundanzschemata und m-quorum-basierte Techniken für Löschcodierredundanzschemata. Im Gegensatz dazu verwendet der SCN-Koordinator ein erweitertes Speicherregistermodell, das einen Abschluss einer SCHREIB-Operation durch alle Konfigurationsgruppen, auf die verwiesen wird, erfordert, damit die SCHREIB-Operation als erfolgreich betrachtet wird.
  • Obwohl die vorliegende Erfindung hinsichtlich bestimmter Ausführungsbeispiele beschrieben wurde, soll die Erfindung nicht auf diese Ausführungsbeispiele begrenzt sein. Modifizierungen innerhalb der Wesensart der Erfindung sind für Fachleute ersichtlich. Zum Beispiel können, obwohl das beschriebene Blockadressenausführungsbeispiel einen Segmentidentifizierer; einen Komponentendatenspeichersystemidentifizierer und eine Anzeige einer Komponentendatenspeichersystemrolle umfasst, alternative Ausführungsbeispiele der Blockadresse zusätzliche Felder oder andere Felder umfassen, die zusammen dazu dienen, einen Datenblock innerhalb eines verteilten Datenspeichersystems eindeutig zu spezifizieren, selbst wenn der Block mehrere Male unter unterschiedlichen Datenkonsistenzschemata innerhalb einer einzigen Datenspeicherkomponente gespeichert wird. Bei alternativen Ausführungsbeispielen kann eine Blockadresse ausreichende Informationen enthalten, um mehrere hierarchische Rollen zu definieren, wenn ein Datenblock unter unterschiedlichen hierarchisch organisierten Konsistenzschemata innerhalb einer einzigen Datenspeicherkomponente gespeichert werden kann. Eine fast unbegrenzte Anzahl von unterschiedlichen Codierungen für Feldwerte kann verwendet werden, um die Informationen, die benötigt werden, um eine Blockrolle zu spezifizieren, in knapper Form zu speichern, und viele andere Ordnungen und Strukturen können verwendet werden, um rollenenthaltende Blockadressen zu speichern.
  • Die vorangegangene Beschreibung verwendete zu Erläuterungszwecken eine spezifische Nomenklatur, um ein gründliches Verständnis der Erfindung zu liefern. Es ist jedoch für einen Fachmann ersichtlich, dass die spezifischen Details nicht erforderlich sind, um die Erfindung zu praktizieren. Die vorangegangenen Beschreibungen spezifischer Ausführungsbeispiele der vorliegenden Erfindung sind zu Zwecken der Veranschaulichung und Beschreibung präsentiert. Dieselben sollen nicht erschöpfend sein oder die Erfindung auf die genauen offenbarten Formen beschränken. Es ist offensichtlich, dass viele Modifizierungen und Variationen hinsichtlich der oben genannten Lehren möglich sind. Die Ausführungsbeispiele sind gezeigt und beschrieben, um die Prinzipien der Erfindung und ihre praktischen Anwendungen am besten zu erläutern, um es dadurch anderen Fachleuten zu ermöglichen, die Erfindung und verschiedene Ausführungsbeispiele mit verschiedenen Modifizierungen, wie dieselben für die bestimmte in Betracht gezogene Verwendung geeignet sind, am besten zu verwenden. Es ist beabsichtigt, dass der Schutzbereich der Erfindung durch die folgenden Ansprüche und ihre Äquivalente definiert ist.

Claims (9)

  1. Datenstruktur, die in einem computerlesbaren Medium innerhalb eines Komponentendatenspeichersystems eines verteilten Datenspeichersystems (102109) gespeichert ist, wobei die Datenstruktur eine Hierarchie von Datenstrukturelementen umfasst, mit: einer Virtuellplattentabelle (1002), die Einträge (1004) enthält, die jeder auf eine Virtuellplattenbildtabelle verweisen und jeder eine virtuelle Platte (904907) darstellen, die in ein oder mehr Komponentendatenspeichersystemen gespeichert und reproduziert sein kann; und einer Anzahl von Virtuellplattenbildtabellen (1006), wobei auf jede Tabelle durch einen Virtuellplattentabelleneintrag verwiesen wird und jede Tabelle eine Reproduktion einer virtuellen Platte darstellt.
  2. Datenstruktur gemäß Anspruch 1, wobei die Datenstruktur ferner eine Anzahl von Segmentkonfigurationsknoten (1010) umfasst, wobei jeder Segmentkonfigurationsknoten (1010) ein Virtuellplattensegment (916) darstellt, das gemäß ein oder zwei Redundanzschemata über eine Anzahl von Komponentendatenspeichersystemen verteilt ist; und wobei jede Virtuellplattenbildtabelle (1006) Einträge (1008) enthält, die jeder auf einen Segmentkonfigurationsknoten verweisen.
  3. Datenstruktur gemäß Anspruch 2, wobei auf jeden Segmentkonfigurationsknoten (1010) durch ein oder mehr Virtuellplattenbildtabelleneinträge (1008) verwiesen wird; wobei die Datenstruktur ferner eine Anzahl von cgrp-Datenstrukturelementen (1012) umfasst, wobei jedes cgrp-Datenstrukturelement ein Virtuellplattensegment (915) darstellt, das in ein oder mehr Verteilungskonfigurationen gemäß einem Redundanzschema über eine Anzahl von Komponentendatenspeichersystemen verteilt ist; und wobei jeder Segmentkonfigurationsknoten auf ein oder zwei cgrp-Datenstrukturelemente verweist.
  4. Datenstruktur gemäß Anspruch 3, wobei auf jedes cgrp-Datenstrukturelement durch einen oder mehr Segmentkonfigurationsknoten (1010) verwiesen wird; wobei die Datenstruktur ferner eine Anzahl von cfg-Datenstrukturelementen (1016) umfasst, wobei jedes cfg-Datenstrukturelement ein Virtuellplattensegment darstellt, das in einer Verteilungskonfiguration gemäß einem Redundanzschema über eine Anzahl von Komponentendatenspeichersystemen verteilt ist; und wobei jedes cgrp-Datenstrukturelement auf ein oder mehr cfg-Datenstrukturelemente (918) verweist.
  5. Datenstruktur gemäß Anspruch 4, wobei auf jedes cfg-Datenstrukturelement (1016) durch ein cgrp-Datenstrukturelement verwiesen wird; wobei jede cfg-Datenstruktur Anzeigen einer Komponentendatenspeichersystemgesundheit für jedes der Anzahl von Komponentendatenspeichersystemen umfasst, über die das Virtuellplattensegment verteilt ist; und wobei jedes cfg-Datenstrukturelement auf ein Anordnungsdatenstrukturelement (1018) verweist oder dasselbe umfasst.
  6. Datenstruktur gemäß Anspruch 5, wobei ein Anordnungsdatenstrukturelement (1018) eine Anzeige des Redundanzschemas, gemäß dem das Virtuellplattensegment verteilt ist, und eine Liste der Komponentendatenspeichersysteme umfasst, über die das Virtuellplattensegment verteilt ist; wobei die Liste der Komponentendatenspeichersysteme, über die das Virtuellplattensegment verteilt ist, geordnet ist, wobei die Position jedes Komponentendatenspeichersystems in der Liste eine Rolle anzeigt, die von dem Komponentendatenspeichersystem bei einem Löschcodierredundanzschema gespielt wird; wobei eines oder mehr der Anzahl von Virtuellplattenbildtabellen (1006), der Anzahl von Segmentkonfigurationsknoten (1010), der Anzahl von cgrp-Datenstrukturelementen (1012) und der Anzahl von cfg-Datenstrukturelementen (1016) Referenzzählwerte umfassen, um eine Abfallsammlung und eine Koordination von datenstrukturgetriebenen Operationen zu ermöglichen; und wobei eines oder mehr der Anzahl von Virtuellplattenbildtabellen, der Anzahl von Segmentkonfigurationsknoten, der Anzahl von cgrp-Datenstrukturelementen und der Anzahl von cfg-Datenstrukturelementen Verweise auf zusätzliche Datenstrukturelemente umfassen, um Durchläufe von Datenstrukturelementen innerhalb der Datenstruktur von unten nach oben und lateral zu ermöglichen.
  7. Verfahren zum Darstellen eines Datenzustands eines verteilten Datenspeichersystems (102109), das eine Anzahl von vernetzten Komponentendatenspeichersystemen aufweist, wobei das Verfahren folgende Schritte aufweist: Speichern einer hierarchischen Datenstruktur (1002, 1006, 1010, 1012, 1016, 1018) in einem computerlesbaren Medium, die den Datenzustand bei jedem der Datenspeichersysteme darstellt; und Ausbreiten von Aktualisierungen bei einer hierarchischen Datenstruktur mit einem Komponentendatenspeichersystem zu den hierarchischen Datenstrukturen aller anderen Komponentendatenspeichersysteme des verteilten Datenspeichersystems, so dass alle Komponentendatenspeichersysteme einen aktuellen Datenzustand für das gesamte verteilte Datenspeichersystem unterhalten,
  8. Verfahren gemäß Anspruch 7, bei dem jede hierarchische Datenstruktur folgende Merkmale aufweist: eine Virtuellplattentabelle (1002), die Einträge enthält, wobei jeder Eintrag auf ein Virtuellplattenbild verweist; eine Anzahl von Virtuellplattenbildtabellen (1006), wobei auf jede Tabelle durch einen Virtuellplattentabelleneintrag (1004) verwiesen wird, und wobei jede Virtuellplattenbildtabelle Einträge enthält, die auf einen Segmentkonfigurationsknoten verweisen; eine Anzahl von Segmentkonfigurationsknoten (1010), wobei auf jeden Segmentkonfigurationsknoten durch einen oder mehr Virtuellplattenbildtabelleneinträge (1008) verwiesen wird, und wobei jeder Segmentkonfigurationsknoten auf ein oder zwei cgrp-Datenstrukturelemente verweist; eine Anzahl von cgrp-Datenstrukturelementen (1012), wobei auf jedes cgrp-Datenstrukturelement durch einen oder mehr Segmentkonfigurationsknoten (1010) verwiesen wird, und wobei jedes cgrp-Datenstrukturelement auf ein oder mehr cfg-Datenstrukturelemente (1016) verweist; und eine Anzahl von cfg-Datenstrukturelementen (1016), wobei auf jedes cfg-Datenstrukturelement durch ein cgrp-Datenstrukturelement (1012) verwiesen wird, und wobei jedes cfg-Datenstrukturelement auf ein Anordnungsdatenstrukturelement (1018) verweist oder dasselbe umfasst.
  9. Verfahren gemäß Anspruch 8, wobei ein Virtuellplattentabelleneintrag (1004) eine virtuelle Platte (904907) darstellt, die in ein oder mehr Komponentendatenspeichersystemen gespeichert und reproduziert sein kann; wobei ein Virtuellplattenbildtabelleneintrag (1008) eine Reproduktion (908910) einer virtuellen Platte darstellt, die im Allgemeinen in einem Teilsatz von geographisch zusammen angeordneten Komponentendatenspeichersystemen gespeichert ist; wobei ein Segmentkonfigurationsknoten (1010) ein Virtuellplattensegment (916) darstellt, das gemäß ein oder zwei Redundanzschemata über eine Anzahl von Komponentendatenspeichersystemen verteilt ist; wobei ein cgrp-Datenstrukturelement (1012) ein Virtuellplattensegment (916) darstellt, das in ein oder mehr Verteilungskonfigurationen gemäß einem Redundanzschema über eine Anzahl von Komponentendatenspeichersystemen verteilt ist; und wobei ein cfg-Datenstrukturelement (1016) ein Virtuellplattensegment darstellt, das in einer Verteilungskonfiguration gemäß einem Redundanzschema über eine Anzahl von Komponentendatenspeichersystemen verteilt ist.
DE102007009233A 2006-03-06 2007-02-26 Datenzustandsbeschreibungs-Datenstrukturen Withdrawn DE102007009233A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/370,007 US20070208760A1 (en) 2006-03-06 2006-03-06 Data-state-describing data structures
US11/370,007 2006-03-06

Publications (1)

Publication Number Publication Date
DE102007009233A1 true DE102007009233A1 (de) 2007-09-13

Family

ID=38336250

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102007009233A Withdrawn DE102007009233A1 (de) 2006-03-06 2007-02-26 Datenzustandsbeschreibungs-Datenstrukturen

Country Status (3)

Country Link
US (1) US20070208760A1 (de)
JP (1) JP2007242017A (de)
DE (1) DE102007009233A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9360648B2 (en) 2011-09-16 2016-06-07 Commscope Technologies Llc Systems and methods for the management of fiber optic cables

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7743214B2 (en) * 2005-08-16 2010-06-22 Mark Adams Generating storage system commands
US7702683B1 (en) * 2006-09-18 2010-04-20 Hewlett-Packard Development Company, L.P. Estimating similarity between two collections of information
US8443062B2 (en) * 2008-10-23 2013-05-14 Microsoft Corporation Quorum based transactionally consistent membership management in distributed storage systems
US8554994B2 (en) * 2009-09-29 2013-10-08 Cleversafe, Inc. Distributed storage network utilizing memory stripes
US10324791B2 (en) * 2010-11-01 2019-06-18 International Business Machines Corporation Selectable parallel processing of dispersed storage error encoding
US11429486B1 (en) 2010-02-27 2022-08-30 Pure Storage, Inc. Rebuilding data via locally decodable redundancy in a vast storage network
US8631269B2 (en) * 2010-05-21 2014-01-14 Indian Institute Of Science Methods and system for replacing a failed node in a distributed storage network
US8738578B1 (en) * 2010-12-27 2014-05-27 The Mathworks, Inc. Growing data structures
JP5811747B2 (ja) * 2011-09-30 2015-11-11 ブラザー工業株式会社 ヘッドマウントディスプレイ
US11232093B2 (en) * 2012-03-02 2022-01-25 Pure Storage, Inc. Slice migration in a dispersed storage network
US9575856B2 (en) * 2014-08-29 2017-02-21 Vmware, Inc. Preventing migration of a virtual machine from affecting disaster recovery of replica
CN114065122A (zh) * 2020-07-31 2022-02-18 深圳市中兴微电子技术有限公司 数据处理方法、设备和存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6636778B2 (en) * 2001-09-10 2003-10-21 International Business Machines Corporation Allocation of data storage drives of an automated data storage library
US8504795B2 (en) * 2004-06-30 2013-08-06 Intel Corporation Method, system, and program for utilizing a virtualized data structure table

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9360648B2 (en) 2011-09-16 2016-06-07 Commscope Technologies Llc Systems and methods for the management of fiber optic cables

Also Published As

Publication number Publication date
JP2007242017A (ja) 2007-09-20
US20070208760A1 (en) 2007-09-06

Similar Documents

Publication Publication Date Title
DE102007009233A1 (de) Datenzustandsbeschreibungs-Datenstrukturen
DE102007010250A1 (de) Hierarchische Zeitstempel
JP4541373B2 (ja) 分散データの階層的管理のための方法及びシステム
JP4516087B2 (ja) 一貫性方法及び一貫性システム
US7743276B2 (en) Sufficient free space for redundancy recovery within a distributed data-storage system
DE102014117465B4 (de) Unterstützter kohärenter gemeinsamer Speicher
Plank Efficient checkpointing on MIMD architectures
US20070208790A1 (en) Distributed data-storage system
DE69911930T2 (de) Hochverfügbare dateiprozessoren
Pâris et al. Efficient dynamic voting algorithms
US5737763A (en) Incremental disk backup
DE202015009260U1 (de) Effiziente Datenlesungen von verteilten Speichersystemen
DE112019000149T5 (de) Multivorrichtungsspeichersystem mit gehosteten diensten auf peer-speichervorrichtungen
DE112013006504B4 (de) Speichersystem und Datenverwaltungsverfahren
DE112016005869T5 (de) Vorausschauende Arbeitsspeicherinstandhaltung
DE112014001873T5 (de) Replikation für Hot-Standby-Online-Datenbank
DE102010044531B4 (de) Autonome Speicherarchitektur
DE102005053727A1 (de) Verteilte Verriegelung
EP3575968A1 (de) Verfahren und vorrichtung zum synchronisieren von aktiven transaktionslisten
DE112013006646B4 (de) Computer, System und computerlesbares Ablagemedium zum Identifizieren von Arbeitslast und Dimensionierung von Puffern zum Zweck der Volumenreplikation
CN115309348B (zh) 元数据的管理方法、装置和计算机设备和存储介质
DE112018001561B4 (de) Verteiltes speichernetzwerk
DE112018000227B4 (de) Verfahren zum teilweisen Aktualisieren von Dateninhalten in einem verteilten Speichernetzwerk
Pachajoa et al. Node-failure-resistant preconditioned conjugate gradient method without replacement nodes
DE102020121109A1 (de) Speicher-controller, speichervorrichtungen und betriebsverfahren der speichervorrichtungen

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8139 Disposal/non-payment of the annual fee