-
Hintergrund der Erfindung
-
Gebiet der Erfindung
-
Die
vorliegende Erfindung bezieht sich auf ein Plattenarraysystem, das
für die
Datenspeicherung in einem Computersystem verwendet wird, und insbesondere
auf die Optimierung der Zuverlässigkeit
eines Plattenarraysystems, das als Speichermedien eine Gruppe von
Plattenvorrichtungen mit Zugriffseinheiten fester Länge verwendet.
-
Beschreibung des Stands
der Technik
-
Ein
Plattenarraysystem, auch als RAID (Redundant Array of Inexpensive
Disks) bezeichnet, besteht im Wesentlichen aus einer Reihe von Plattenvorrichtungen,
die als eine Array oder Anordnung organisiert sind. In einem Plattenarraysystem
wird eine Anforderung von einem Hostcomputer zum Lesen oder Schreiben
von Daten auf mehr als einer Plattenvorrichtung parallel ausgeführt, was
zu einer schnelleren Ein-/Ausgabeverarbeitung führt. Darüber hinaus ist es üblich, redundante
Daten an die auf den Platten gespeicherten Daten anzuhängen, wodurch die
Zuverlässigkeit
in sich erhöht
wird. Plattenarraysysteme werden je nach ihrer Systemkonfiguration (das
heißt
wie die Platten organisiert sind) und der Art der angehängten redundanten
Daten in fünf
Stufen eingeteilt. Die Technologien für Plattenarraysysteme sind
in „A
Case for Redundant Arrays of Inexpensive Disks (RAID)" von David A. Patterson
et al. in Proceedings of the 1988 ACM SIGMOD International Conference
on Management of Data, S. 109 bis 116, beschrieben.
-
Zwei
Merkmale sind wesentlich in Plattenarraysystemen:
das Zerhacken
von Daten und das Assemblieren von Daten. Beim Schreiben in ein
Plattenarraysystem muss die Schreib anforderung vom Host in mehrere Anforderungen
für mehrere
Plattenvorrichtungen übersetzt
werden, und die Daten sollten in mehrere Stücke unterteilt werden, die
dann in mehreren Plattenvorrichtungen gespeichert werden (Zerhacken von
Daten), während
beim Lesen von einem Plattenarraysystem die Leseanforderung vom
Host in mehrere Anforderungen an mehrere Plattenvorrichtungen übersetzt
werden muss, und die kleinen Stücke
von Daten, die aus den mehreren Plattenvorrichtungen gelesen werden,
sollten zu einem bedeutungsvolleren Block von Daten zusammengestellt werden
(Assemblieren von Daten). Das Zerhacken und das Assemblieren von
Daten werden hier allgemein als Plattenarraysteuerung bezeichnet.
-
In
den meisten Plattenarraysystemen wird aus Gründen der Zuverlässigkeit
ein redundantes Stück
Daten an die Originaldaten angehängt
und in den Plattenvorrichtungen gespeichert, so dass im Falle eines
Ausfalls einer der Plattenvorrichtungen die Originaldaten wiederhergestellt
werden können. Zur
weiteren Verbesserung der Zuverlässigkeit
eines gesamten Plattenarraysystems besteht ein anderes bekanntes
Merkmal darin, an jeden logischen Datenblock einen Validierungscode
anzuhängen.
Wie zum Beispiel in den Patent-Offenlegungsschriften 2001-202295
und 2000-347815 beschrieben, kann ein Validierungscode aus der logischen
Adresse (LA) des logischen Blocks und dem Längs- oder Blockprüfzeichen
(LRC) bestehen, das das Ergebnis einer Reihe von exklusiven ODER-Operationen
ist, die horizontal (in Längsrichtung)
an allen Bytes oder Bytegruppen in dem logischen Block ausgeführt werden. Bei
einer Schreiboperation wird ein solcher Validierungscode für jeden
logischen Datenblock erzeugt und auf den Platten zusammen mit den
Daten gespeichert; bei einer Leseoperation wird ein Validierungscode
aus dem gelesenen logischen Datenblock erzeugt und dann mit dem
ursprünglich
mit den betreffenden Daten gespeicherten Validierungscode verglichen.
Eine Nichtübereinstimmung
würde bedeuten,
dass die Adresse oder die Daten beschädigt sind.
-
US-5.588.012
beschreibt ein Plattenarraysystem mit mehreren Plattenvorrichtungen
mit einer festen Blockgröße von zum
Beispiel 512 Byte zum Speichern von Daten. An jeden Block angehängt ist ein
CRC-Code. In dem Dokument wird vorgeschlagen, die Adresse des Blocks
als Ausgangswert für den
CRC-Code zu verwenden.
-
Weitere
Plattenarraysysteme sind in EP-A-0.601.699 und EP-A-0.569.313 beschrieben.
-
Zusammenfassung der Erfindung
-
Eine übliche herkömmliche
Plattenvorrichtung weist eine feste Sektorgröße von 512 Byte auf, und der
Zugriff erfolgt in Einheiten eines Sektors, der die kleinste Zugriffseinheit
ist.
-
Andererseits
verwenden typische Plattenarraysysteme nach dem Stand der Technik
Plattenvorrichtungen mit variablen Sektorgrößen, zum Beispiel SCSI-Platten
(Small Computer System Interface) und FC-Platten (Fiber Channel).
Bei einer solchen Konfiguration stellt es kein Problem dar, die
Größe des logischen
Datenblocks auf 512 Byte einzustellen, der üblichen Sektorgröße von herkömmlichen
Plattenvorrichtungen. Selbst wenn 512 Byte als die Länge des
logischen Datenblocks verwendet werden und ein 8-Byte-Validierungscode,
bestehend aus einer LA (4 Byte) und einem LRC (4 Byte) angehängt wird,
wodurch die Zugriffseinheit effektiv auf 520 Byte vergrößert wird,
ist der Zugriff auf die Plattenvorrichtungen mit 520 Byte als Sektorgröße möglich.
-
Wenn
jedoch ein Plattenarraysystem aus herkömmlichen Plattenvorrichtungen
mit einer festen Sektorgröße von 512
Byte aufgebaut werden soll, würde
die vorstehend genannte Kombination von Datenblockgröße und Validierungscode
ein Problem verursachen, weil 520 Byte nicht als Sektorgröße verwendet
werden können.
-
Ein
Ziel der Erfindung ist die Bereitstellung eines Plattenarraysystems
und eines Verfahrens zum Speichern von Daten in einem Plattenarraysystem
mit verbesserter Zuver lässigkeit
unter Verwendung von Plattenvorrichtungen mit einer Zugriffseinheit
fester Länge.
Dieses Ziel wird mit dem Plattenarraysystem nach Anspruch 1 und
dem Verfahren nach Anspruch 8 erreicht. Die abhängigen Ansprüche beziehen
sich auf bevorzugte Ausführungsformen
der Erfindung. Die vorliegende Erfindung stellt eine Einrichtung
zum Anhängen
eines Validierungscodes in einem Plattenarraysystem mit einer Anordnung
oder Array von Plattenvorrichtungen mit einer Zugriffseinheit fester
Länge bereit.
Ausführungsformen
der vorliegenden Erfindung stellen ein Plattenarraysystem auf der
Grundlage einer Anordnung oder Array von Plattenvorrichtungen mit
einer Zugriffseinheit fester Länge
mit einem Zuverlässigkeitsniveau
bereit, das mindestens so hoch wie das von herkömmlichen Plattenarraysystemen
auf der Grundlage einer Anordnung oder Array von Plattenvorrichtungen
mit einer Zugriffseinheit variabler Länge ist.
-
Zu
diesem Zweck ist das Plattenarraysystem auf der Grundlage einer
Array von Plattenvorrichtungen mit einer Zugriffseinheit fester
Länge mit
einer Einrichtung zum Erzeugen eines Validierungscodes für jede Zugriffseinheit
und einer Einrichtung zum Speicher des Validierungscodes und der
Originaldaten in verschiedenen Teilen des Speichers in den Plattenvorrichtungen
versehen.
-
Kurzbeschreibung der Zeichnungen
-
1 zeigt
die Konfiguration eines Computersystems nach der bevorzugten Ausführungsform der
vorliegenden Erfindung.
-
2 zeigt
ein Beispiel für
einen erweiterten Datenblock.
-
3 zeigt
ein Beispiel für
eine LA/LRC-Gruppe.
-
4 zeigt
ein Beispiel für
die Anordnung der logischen Datenblöcke und LA/LRC-Gruppen in einer
Plattenvorrichtungsgruppe.
-
5 zeigt
ein Ablaufdiagramm für
den Vorgang der Datenübertragung
vom Plattencache an die Plattenvorrichtungsgruppe.
-
6 zeigt
ein Ablaufdiagramm für
den Vorgang der Datenübertragung
von der Plattenvorrichtungsgruppe an den Plattencache.
-
Beschreibung der bevorzugten
Ausführungsform
-
Die
bevorzugte Ausführungsform
wird nachstehend anhand von 1 bis 6 beschrieben.
-
Die
Art, Ziele und Vorteile der vorliegenden Erfindung werden für den Fachmann
nach Lektüre der
nachstehenden ausführlichen
Beschreibung der bevorzugten Ausführungsform in Verbindung mit
den anliegenden Zeichnungen besser verständlich. Dabei ist zu beachten,
dass die Erfindung nicht durch die gezeigte bestimmte Ausführungsform
eingeschränkt
ist, sondern lediglich durch den Umfang der anliegenden Ansprüche.
-
Zuerst
wird die Systemkonfiguration nach der bevorzugten Ausführungsform
der vorliegenden Erfindung unter Bezugnahme auf 1 beschrieben.
-
Ein
Hostcomputer (nachstehend einfach als Host bezeichnet) A 100,
ein Host B 110 und ein Host C 120 sind Vorrichtungen,
die Lese-/Schreibanforderungen an ein Plattenarraysystem 200 ausgeben
und die damit verbundenen Ein-/Ausgabeoperationen ausführen. Diese
Hosts sind über
eine Busweiche 130 mit dem Plattenarraysystem 200 verbunden.
-
Das
Plattenarraysystem 200 umfasst Host-Eingangs-/Ausgangsinterfaces 210 und 211,
einen Plattencache 230, Platten-Eingangs-/Ausgangsinterfaces 250 und 251,
Plattenvorrichtungsgruppen 270 und 271, einen
Prozessor (MPU) 280 für
die Steuerung des gesamten Betriebs des Plattenarraysystems, eine
Busbrücke 285,
einen Speicher 290 und eine Cache-Steuerung 300.
Jede der Plattenvorrichtungsgruppen 270 und 271 umfasst
mehr als eine Plattenvorrichtung. In dem in 1 gezeigten
Beispiel umfasst die Plattenvorrichtungs gruppe 270 die Plattenvorrichtungen 277 bis 279.
Während
in 1 jeweils zwei Einheiten oder Gruppen von Host-Eingangs-/Ausgangsinterfaces,
Platten-Eingangs-/Ausgangsinterfaces und Plattenvorrichtungsgruppen
gezeigt sind, könnte
es alternativ als eine Variante der bevorzugten Ausführungsform
auch nur eine oder eine beliebige Anzahl dieser Einheiten oder Gruppen geben.
-
Host-Eingangs-/Ausgangsinterfaces,
Cache-Steuerung, MPU, Busbrücke,
Speicher, Plattencache und Platten-Eingangs-/Ausgangsinterfaces werden
zusammenfassend als Plattensteuerung bezeichnet.
-
Der
Host A 100, der Host B 110 und der Host C 120 sind über einen
Host-Bus A 140 und einen Host-Bus B 141 mit den
Host-Eingangs-/Ausgangsinterfaces 210 bzw. 211 im
Plattenarraysystem 200 verbunden. Während in 1 drei
Hosts gezeigt sind, kann eine beliebige Anzahl von Hosts (außer null)
mit dem Plattenarraysystem 200 verbunden sein.
-
Nach
Empfang einer Eingabe-/Ausgabeanforderung (Lese-/Schreibanforderung)
vom Host A 100, Host B 110 oder Host C 120 wird
entweder das Host-Eingangs-/Ausgangsinterface 210 oder
das Host-Eingangs-/Ausgangsinterface 211, das die Datenübertragung
zwischen dem Host und der Cache-Steuerung 300 ausführt, über einen
hostseitigen internen Bus 220 mit der Cache-Steuerung 300 verbunden.
-
Die
Platten-Eingangs-/Ausgangsinterfaces 250 und 251,
die die Datenübertragung
zwischen den Plattenvorrichtungsgruppen 270 und 271 und
der Cache-Steuerung 300 ausführen, werden über einen Plattenbus
A 260 bzw. einen Plattenbus B 261 mit den Plattenvorrichtungsgruppen 270 und 271 und über einen
plattenseitigen internen Bus 240 auch mit der Cache-Steuerung 300 verbunden.
Das Platten-Eingangs-/Ausgangsinterface 250 enthält einen (weiter
unten beschriebenen) LA/LRC-Splitter/Joiner 255, der eine
LA und ein LRC von dem zwischen der Cache-Steuerung 300 und
der Plattenvorrichtungsgruppe 270 übertragenen logischen Datenblock
abtrennt bzw. an diesen anhängt.
Das Platten-Eingangs-/Aus gangsinterface 251 weist denselben
Aufbau und dieselbe Funktion im Hinblick auf die Plattenvorrichtungsgruppe 271 auf
wie das Platten-Eingangs-/Ausgangsinterface 250 für die Plattenvorrichtungsgruppe 270.
-
Bei
der hier beschriebenen bevorzugten Ausführungsform der vorliegenden
Erfindung sind die Plattenvorrichtungen 277 bis 279 jene
mit einer festen Sektorlänge
von 512 Byte, zum Beispiel ATA-Platten (AT Attachment) oder SATA-Platten
(Serial ATA). Diese Plattenvorrichtungen haben den Vorteil, dass
sie preiswert sind, denn sie sind für etwa ein Drittel des Preises
von SCSI- oder FC-Platten erhältlich,
die variable Sektorlängen
aufweisen. Daher ist es mit diesen Plattenvorrichtungen möglich, preiswerte
Plattenarraysysteme aufzubauen. ATA- und SATA-Platten unterliegen
jedoch Einschränkungen hinsichtlich
der Anzahl von Plattenvorrichtungen, die an einen Bus angeschlossen
werden können.
An einen einzelnen Bus können
bis zu zwei ATA-Platten bzw. nur eine SATA-Platte angeschlossen
werden. Daher sollten die Plat- ten-Eingangs-/Ausgangsinterfaces 250 und 251 mit
einer ausreichenden Anzahl von Ports zum Anschluss einer geeigneten
Anzahl von Plattenbussen A 260 bzw. B 261 versehen
sein, um alle Plattenvorrichtungen im System zu berücksichtigen.
-
Während für die Beschreibung
der bevorzugten Ausführungsform
davon ausgegangen wird, dass die Plattenvorrichtungen in dem Plattenarraysystem 200 eine
feste Sektorlänge
von 512 Byte aufweisen, kann alternativ eine beliebige Anzahl zum
Beispiel 2048 Byte als feste Sektorlänge gewählt werden.
-
Der
Plattencache 230 ist über
einen Cache-Bus 231 mit der Cache-Steuerung 300 verbunden.
-
Die
Cache-Steuerung 300 umfasst einen hostseitigen internen
Buspuffer 310, der die zwischen den Host-Eingangs-/Ausgangsinterfaces 210 und 211 und
dem Plattencache 230 übertragenen Daten
zwischenspeichert, eine Cache-Steuereinheit 320, die die
Datenübertragung
zwischen dem Plattencache 230 und der Cache-Steuerung 300 steuert, und
einen plattenseitigen internen Buspuffer 330, der die zwischen
den Platten-Eingangs-/Ausgangsinterfaces 250 und 251 und
dem Plattencache 230 übertragenen
Daten zwischenspeichert. Die Cache-Steuerung 300 umfasst
weiter eine LA/LRC-Anhäng-, Prüf- und Löscheinheit 340,
die eine LA und ein LRC (weiter unten beschrieben) an die von den
Host-Eingangs-/Ausgangsinterfaces 210 und 211 an
den Plattencache 230 übertragenen
Daten anhängt,
die LA und das LRC prüft
und löscht,
die an die vom Plattencache 230 an die Host-Eingangs-/Ausgangsinterfaces 210 und 211 übertragenen
Daten angehängt worden
sind, und die LA und das LRC prüft,
die an die zwischen dem Plattencache 230 und den Eingangs-/Augangsinterfaces 250 und 251 übertragenen
Daten angehängt
worden sind.
-
Die
MPU 280 ist über
die Busbrücke 285 mit dem
Speicher 290 und der Cache-Steuerung 300 verbunden.
-
Der
Speicher 290 enthält
ein Plattenarray-Steuerprogramm 291, das die MPU 280 zur Durchführung der
Plattenarraysteuerung verwendet, und ein internes Datenübertragungs-Steuerprogramm 292,
das die Cache-Steuerung 300 anweist, eine LA anzuhängen, und
außerdem
Datenübertragungsbefehle
an die Host-Eingangs-/Ausgangsinterfaces 210 und 211 oder
die Platten-Eingangs-/Ausgangsinterfaces 250 und 251 ausgibt.
-
LA,
und LRC werden nachstehend erläutert, gefolgt
von einer Beschreibung, wie die LA/LRC-Anhäng-, Prüf- und Löscheinheit 340 diese
Elemente an die übertragenen
Daten anhängt,
sie darin prüft
bzw. sie daraus löscht.
-
Das
Plattenarraysystem 200 nach der bevorzugten Ausführungsform
teilt die von einem Hostcomputer empfangenen Daten zur Verwaltung
und Verarbeitung in eine Reihe von logischen Blöcken auf. Die kleinste Verwaltungs-
und Verarbeitungseinheit wird als logischer Datenblock bezeichnet.
Bei der bevorzugten Ausführungsform
wird angenommen, dass die Größe des logischen
Datenblocks 512 Byte beträgt,
was der kleinsten Lese- und Schreibeinheit (das heißt Sektorgröße) entspricht.
-
Die
LA/LRC-Anhäng-,
Prüf- und
Löscheinheit 340 hängt an jeden
logischen Datenblock einen als LA bezeichneten Validierungscode
an, der eine Länge
von 4 Byte aufweist und einen Teil der Quelladresse enthält, so dass
jeder Versuch, aus einer nicht richtig mit dem logischen Datenblock
verbundenen Adresse zu lesen bzw. in eine solche zu schreiben, erkannt
werden kann. Für
eine zusammenhängende
Gruppe von logischen Datenblöcken
sind die entsprechenden LA zusammenhängend. Die MPU 280 liefert
der LA/LRC-Anhäng-,
Prüf- und
Löscheinheit 340 einen
entsprechenden Wert, indem sie das im Speicher 290 gespeicherte
interne Datenübertragungs-Steuerprogramm 292 ausführt. Die LA/LRC-Anhäng-, Prüf- und Löscheinheit 340 hängt als
LA den von der MPU 280 angegebenen Wert an den ersten der
aus den von der Cache-Steuerung 300 eingegebenen Daten
erzeugten logischen Datenblöcke
an sowie an jeden folgenden logischen Datenblock den von der MPU 280 angegebenen
Wert plus der Anzahl der logischen Datenblöcke vor diesem.
-
Das
LRC, das eine Länge
von 4 Byte aufweist, ist das Ergebnis von exklusiven ODER-Operationen,
die in Längsrichtung
an allen 129 Einheiten von 4 Byte ausgeführt werden, die zusammen das 516-Byte-Composite
aus den ursprünglichen
512 Byte des logischen Datenblocks und der LA (4 Byte) bilden. Die
LA/LRC-Anhäng-,
Prüf- und
Löscheinheit 340 berechnet
ein LRC für
das Composite jedes ursprünglichen
Datenblocks und dessen zugehöriger LA
und hängt
es an dieses Composite an, um einen erweiterten Datenblock von 520
Byte zu erhalten. Jedes Mal, wenn ein Datenblock gelesen, geschrieben oder übertragen
wird, kann die LA/LRC-Anhäng-, Prüf- und Löscheinheit 340 einen
Datenbitfehler feststellen, der in der Plattenvorrichtung oder während der
Datenübertragung
aufgetreten ist, indem sie ein LRC für das Composite aus dem Datenblock
und dessen zugehöriger
LA berechnet und es mit dem LRC vergleicht, das an den Datenblock
angehängt ist.
-
Ausführliche
Beschreibungen, wie LA und LRC angehängt, geprüft und gelöscht werden, finden sich in
den Patent-Offenlegungsschriften 2001-202295
und 2000-347815.
-
2 zeigt,
wie die LA/LRC-Anhäng-,
Prüf- und
Löscheinheit 340 eine
LA und ein LRC an die Daten anhängt.
Ein logischer Datenblock 401, ein logischer Datenblock 411 und
ein logischer Datenblock 421 sind eine Folge von Datenblöcken, die
von der Cache-Steuerung 300 durch Zerhacken einer zusammenhängenden
Gruppe von drei logischen Datenblöcken erhalten wird, die ein
Stück der
vom Host A 100 an das Plattenarraysystem 200 übertragenen Hostdaten
bilden. Die LA 402 mit einer Länge von 4 Byte ist die LA für den logischen
Datenblock 401 und wird an dessen Ende angehängt. Das
Ergebnis von exklusiven ODER-Operationen mit einer Breite von 4 Byte,
die in Längsrichtung
an dem Composite des logischen Datenblocks 401 und der
LA 402 von Byte-Position 1 bis Byte-Position 516 ausgeführt werden,
wird als ein LRC 403 mit einer Länge von ebenfalls 4 Byte rechts
neben der LA 402 angefügt.
LA 412 und LRC 413 sowie LA 422 und LRC 423 sind
die LA- und LRC-Werte entsprechend den logischen Datenblöcken 411 bzw. 421 und
werden in gleicher Weise wie LA 402 und LRC 403 an
diese angehängt.
Der logische Datenblock 401, die LA 402 und das
LRC 403 werden zusammenfassend als erweiterter Datenblock 400 mit
einer Länge
von 520 Byte bezeichnet. Entsprechend den logischen Datenblöcken 411 und 421 gibt
es auch erweiterte Datenblöcke 410 bzw. 420.
-
Die
LA/LRC-Anhäng-,
Prüf- und
Löscheinheit 340 hängt eine
LA und ein LRC bei einer Datenübertragung
vom Host-Interface 210 oder 211 an
den Plattencache 230 an. Bei einer Datenübertragung vom
Plattencache 230 an das Host-Interface 210 oder 211 prüft die LA/LRC-Anhäng-, Prüf- und Löscheinheit 340,
ob ein Fehler in der LA oder dem LRC in dem aus dem Plattencache
ausgelesenen erweiterten Datenblock vorliegt; liegt kein Fehler
vor, löscht
sie die LA und das LRC (insgesamt 8 Byte) aus dem erweiterten Daten block.
Danach sendet die Cache-Steuerung 300 nur den Datenteil,
das heißt
den ursprünglichen
logischen Datenblock mit 512 Byte, an das Host-Interface 210 oder 211.
Dadurch führt der
hostseitige interne Bus 220 logische Datenblöcke, während der
Cache-Bus 231 und der plattenseitige interne Bus 240 erweiterte
Datenblöcke
führen.
-
Die
zwischen dem Plattencache 230 und den Platten-Eingangs-/Ausgangsinterfaces 250 und 251 übertragenen
Daten weisen ein erweitertes Format auf. Bei einer Datenübertragung
zwischen dem Plattencache 230 und dem Platten-Eingangs-/Ausgangsinterface 250 oder 251 prüft die LA/LRC-Anhäng-, Prüf- und Löscheinheit 340,
ob ein Fehler in der LA oder dem LRC vorliegt; liegt kein Fehler
vor, erlaubt sie die Fortsetzung der Datenübertragung. Liegt ein Fehler
vor, führt
die LA/LRC-Anhäng-,
Prüf- und Löscheinheit 340 kein
Löschen
durch, sondern informiert einfach die MPU 280, die dies
mit einer Fehlerhandhabungsroutine erledigt.
-
Der
LA/LRC-Splitter/Joiner 255, der in jedem der Platten-Eingangs-/Ausgangsinterfaces 250 und 251 enthalten
ist, wird nachstehend beschrieben, gefolgt von einer Erläuterung,
wie Datenblöcke,
LA und LRC in einer Plattenvorrichtung mit einer festen Sektorlänge von
512 Byte gespeichert werden. Da die bei der bevorzugten Ausführungsform
verwendeten Plattenvorrichtungen eine feste Sektorlänge von
512 Byte aufweisen, entspricht die kleinste Einheit für eine Lese-
oder Schreiboperation aus oder zu diesen 512 Byte. Daher passt ein
erweiterter Datenblock mit einer Länge von 520 Byte nicht in einen
Block auf der Platte. Der Validierungscode, der aus der LA und dem
LRC besteht, hat eine Länge
von 8 Byte und ist zu klein, um einen Block auf der Platte zu belegen. Wenn
bei jedem Speichern eines logischen Datenblocks der Validierungscode
auf der Platte gespeichert werden soll, wären 504 Byte, das heißt 512 Byte
minus 8 Byte, nutzlose Daten für
jeden zusätzlichen
Block des Validierungscodes, was zu einer erheblichen Verschwendung
von Plattenplatz führt.
-
Die
bevorzugte Ausführungsform
der vorliegenden Erfindung löst
dieses Problem des verschwendeten Plattenplatzes durch gemeinsame
Verwaltung der Validierungscodes für mehrere logische Datenblöcke, wie
in 3 gezeigt. Weil 64 mal 8 den Wert 512 ergibt,
stellt der LA/LRC-Splitter/Joiner 255 insgesamt 64 Validierungscodes
entsprechend 64 logischen Datenblöcken zusammen, um eine LA/LRC-Gruppe
von 512 Byte zu bilden, die sauber in einen Sektor passt.
-
Im
Einzelnen ordnet jedes der Platten-Eingangs-/Ausgangsinterfaces 250 und 251 Daten
und Validierungscodes in Einheiten von 1 Megabyte (= 1.024 × 1.024
Byte) an, wie in 4 gezeigt, so dass 2.016 logische
Datenblöcke
in den ersten 2.016 Sektoren und deren entsprechende Validierungscodes (LA
und LRC) in den restlichen 32 Sektoren gespeichert werden. Die LA/LRC-Gruppe
1 ist eine Sammlung von 64 Validierungscodes entsprechend den 64 logischen
Datenblöcken
von DATA1 bis DATA64; in gleicher Weise ist die LA/LRC-Gruppe 2
eine Sammlung von 64 Validierungscodes, entsprechend den 64 logischen
Datenblöcken
von DATA65 bis DATA128. Von den 2.048 Sektoren, die 1 Megabyte bilden,
sind 2.016 Datenblöcke,
die 31,5 (= 2.016 dividiert durch 64) LA/LRC-Gruppen entsprechen.
Daher ist die LA/LRC-Gruppe 32 nur halb voll: 256 Byte sind reale LA-
und LRC-Werte, während
die übrigen
256 Byte leer sind.
-
Bei
der in 4 gezeigten Anordnung kann die Position des Validierungscodes
auf der Platte entsprechend einem gegebenen logischen Datenblock ohne
weiteres anhand eines mathematischen Verfahrens bestimmt werden.
Wenn der ganzzahlige Teil des Ausdrucks (X/64) + 1 mit Y angesetzt
wird, ergibt sich der 8-Byte-Validierungscode für einen bestimmten logischen
Datenblock DATAX mit 8 × {(X
mod 64) – 1}
in der LA/LRC-Gruppe Y. Ist das Ergebnis der letztgenannten Formel
negativ (das heißt
X ist ein ganzzahliges Vielfaches von 64), bedeutet dies, dass der
entsprechende Validierungscode an der letzten 8-Byte-Position in
der LA/LRC-Gruppe
(Y–1)
zu finden ist.
-
Der
Validierungscode für
DATA127 ist zum Beispiel an der Byte-Position 496 (= 8 × {(127
mod 64) – 1
= 62}) in der LA/LRC-Gruppe 2 (= ganzzahliger Teil von (127/64)+1)
zu finden. Daher kann innerhalb einer ganzzahligen Grenze von 1
Megabyte die Position des Validierungscodes für einen bestimmten logischen
Datenblock mathematisch berechnet werden.
-
Der
LA/LRC-Splitter/Joiner 255 enthält einen Puffer von 512 Byte,
der eine LA/LRC-Gruppe aufnehmen kann. Wie vorstehend erläutert, enthält eine LA/LRC-Gruppe
die Validierungscodes für
64 logische Datenblöcke.
Der LA/LRC-Splitter/Joiner 255 verwaltet daher 64 logische
Datenblöcke
und deren entsprechende Validierungscodes als eine Gruppe, der eine
eindeutige Gruppennummer zugeordnet ist.
-
Es
gibt verschiedene Möglichkeiten
zum Zuordnen von Gruppennummern. Der LA/LRC-Splitter/Joiner 255 kann
zum Beispiel einer Kombination aus einer Gruppe von logischen Datenblöcken und ihrer
zugehörigen
LA/LRC-Gruppe eine beliebige Zahl Z zuweisen.
-
Alternativ
kann die Gruppennummer durch die LA bestimmt werden, die die logische
Adresse enthält.
Weil zusammenhängende
logische Datenblöcke
zusammenhängende
LA-Werte auf weisen, werden auch die LA-Werte, die den zur selben
Gruppe gehörenden
logischen Datenblöcken
entsprechend, als zusammenhängend
angesehen. Wenn daher ein logischer Datenblock denselben Wert für Z', das der ganzzahlige
Teil des Quotienten von (LA dividiert durch 64) ist, wie ein anderer
logischer Datenblock aufweist, wird angenommen, dass die beiden
logischen Datenblöcke
derselben LA/LRC-Gruppe entsprechen, das heißt sie werden als zur selben logischen
Datenblockgruppe gehörig
angesehen. Daher kann der Wert von Z' als die Gruppennummer verwendet werden,
die dem logischen Datenblock und seiner entsprechenden LA/LRC-Gruppe
zugewiesen wird.
-
Eine
weitere Möglichkeit
zur Bestimmung der Gruppennummer wäre die Verwendung der Adresse,
die bei der Datenüber tragung
zur Identifizierung des logischen Datenblocks verwendet wird, zu
dem die Übertragung
erfolgt. Logische Datenblöcke,
die zur selben Gruppe gehören,
werden in einem zusammenhängenden
Bereich von 32 Kilobyte, was 64 mal 512 Byte entspricht, auf einer
Platte gespeichert. Daher bedeutet eine Datenübertragung an eine Adresse,
die 32 Kilobyte oder mehr entfernt ist, eine Übertragung an einen logischen
Datenblock, der zu einer anderen logischen Datenblockgruppe gehört. Damit
ist es möglich,
als Ursprung die Position des ersten logischen Datenblocks in einer
logischen Datenblockgruppe in einer Plattenvorrichtung zu verwenden
und als Gruppennummer den ganzzahligen Teil des Quotienten (Z'') [der Differenz in Byte zwischen dem
Ursprung und der durch die logische Datenblockadresse angegebenen
Position der Plattenvorrichtung] dividiert durch 32 Kilobyte zu
verwenden.
-
Der
Verfahrensablauf bei einer Datenübertragung
vom Plattencache 230 an die Plattenvorrichtungsgruppe 270 im
Platten-Eingangs-/Ausgangsinterface 250 wird nachstehend
anhand von 5 beschrieben.
-
Das
Platten-Eingangs-/Ausgangsinterface 250 enthält einen
internen Puffer zur Aufnahme eines erweiterten Datenblocks von 520
Byte. Nach Empfang eines Befehls von der MPU 280 für eine Datenübertragung
vom Plattencache 230 an die Plattenvorrichtungsgruppe 270 liest
das Platten-Eingangs-/Ausgangsinterface 250 den erweiterten
Datenblock mit 520 Byte, der aus dem logischen Datenblock und dessen
Validierungscode (LA und LRC) besteht, aus dem Plattencache 230 in
seinen internen Puffer (Schritt 1000). Der LA/LRC-Splitter/
Joiner 255 teilt den erweiterten Datenblock in einen logischen
Datenblock von 512 Byte und einen 8-Byte-Validierungscode (LA und
LRC) auf und speichert nur den logischen Datenblock in der Plattenvorrichtungsgruppe 270 (Schritt 1010).
-
Danach
vergleicht der LA/LRC-Splitter/Joiner 255 die Gruppennummer,
die dem in Schritt 1010 in der Plattenvor richtungsgruppe
gespeicherten logischen Datenblock entspricht, mit der Gruppennummer,
die dem bei der vorherigen Übertragung
eines erweiterten Datenblocks in seinem internen Puffer gespeicherten
Validierungscode (LA und LRC) entspricht (Schritt 1020).
Stimmen sie nicht überein,
was bedeutet, dass die Validierungscodes (LA und LRC) im internen
Puffer zu der Gruppe für
die unmittelbar vorherige Datenübertragung
gehören,
aber nicht zur selben Gruppe wie der gegenwärtig übertragene Datenblock, speichert
das Platten-Eingangs-/Ausgangsinterface 250 die
im internen Puffer enthaltenen Validierungscodes in der Plattenvorrichtungsgruppe 270 und
löscht
den internen Puffer (Schritt 1030). Danach kopiert der
LA/LRC-Splitter/Joiner 255 den Validierungscode für den soeben
in Schritt 1010 in der Plattenvorrichtungsgruppe 270 gespeicherten
logischen Datenblock aus dem internen Puffer des Platten-Eingangs-/Ausgangsinterfaces 250 in seinen
eigenen internen Puffer (Schritt 1040) und kehrt zu Schritt 1000 zurück, um die
Datenübertragung
fortzusetzen.
-
Stimmen
die beiden Gruppennummern in Schritt 1020 überein,
was bedeutet, dass die Validierungscodes (LA und LRC) im internen
Puffer zur selben Gruppe gehören
wie die soeben in Schritt 1010 in der Plattenvorrichtungsgruppe 270 gespeicherten Daten,
kopiert der LA/LRC-Splitter/Joiner 255 den Validierungscode
für den
logischen Datenblock, der soeben in Schritt 1010 in der
Plattenvorrichtungsgruppe 270 gespeichert worden ist, aus
dem internen Puffer des Platten-Eingangs-/Ausgangsinterface 250 in
seinen eigenen internen Puffer (Schritt 1040) und kehrt
zu Schritt 1000 zurück,
um die Datenübertragung
fortzusetzen. In gleicher Weise kopiert er beim eigentlichen Start
einer Datenübertragung,
wenn der interne Puffer des LA/LRC-Splitters/Joiners 255 leer ist,
den Validierungscode für
den soeben in der Plattenvorrichtungsgruppe 270 gespeicherten
logischen Datenblock aus dem internen Puffer des Platten-Eingangs-/Ausgangsinterface 250 in
seinen eigenen internen Puffer (Schritt 1040) und kehrt
zu Schritt 1000 zurück,
um die Datenübertragung
fortzusetzen.
-
Der
vorstehende Vorgang wird wiederholt, bis alle Daten, deren Übertragung
von der MPU 280 angefordert worden ist, verarbeitet sind.
Nach Abschluss der Datenübertragung
ist der Inhalt des internen Puffers in der Plattenvorrichtungsgruppe 270 gespeichert,
und der interne Puffer ist gelöscht.
-
Das
Speichern der Validierungscodes (LA und LRC) für Daten in einer neuen Übertragungsoperation
in der Plattenvorrichtungsgruppe 270, die bereits zur selben
Datenblockgruppe gehörende
Daten enthält,
würde zur
Zerstörung
dieser LA und der entsprechenden LRC führen. Um dieses Problem zu verhindern,
muss sichergestellt werden, dass, wenn die Plattenvorrichtungsgruppe 270 bereits
zur selben Datenblockgruppe gehörende
Daten wie die mit einem neuen Befehl zu übertragenden Daten enthält, die
den alten Daten entsprechenden Validierungscodes (LA und LRC) zuerst
in den internen Puffer geholt und dann mit denen für die neuen
Daten zusammengeführt
werden.
-
Eine
weitere Lösung
für dieses
Problem bestünde
darin, die Datenverarbeitungseinheit im Plattencache als ein Vielfaches
der Größe einer
logischen Datenblockgruppe festzulegen, zum Beispiel 32 Kilobyte
oder 64 Kilobyte, wenn die Größe einer logischen
Datenblockgruppe 32 Kilobyte beträgt. Wenn die vom Host angeforderte
Schreiboperation Daten betrifft, die kürzer als diese Einheit sind,
zum Beispiel 512 Byte, wird zunächst
der gesamte 32-Kilobyte-Block mit dem 512-Byte-Bereich (das Ziel
der Schreiboperation) aus der Plattenvorrichtungsgruppe in den Plattencache
geholt, wo dann neue Daten gespeichert werden. Bei einer derartigen
Anordnung ist die Einheit für
das Schreiben (Speichern) von Daten in der Plattenvorrichtungsgruppe
auch die Datenverarbeitungseinheit im Plattencache. Wenn daher die Datenverarbeitungseinheit
im Plattencache 32 Kilobyte ist, erfolgt die Schreiboperation (Speichern)
in die Plattenvorrich tungsgruppe immer in Einheiten von einer logischen
Datenblockgruppe, wodurch die Notwendigkeit der vorstehend beschriebenen
Zusammenführungsoperation
entfällt.
-
Der
Verfahrensablauf, wie das Platten-Eingangs-/Ausgangsinterface 250 Daten
von der Plattenvorrichtungsgruppe 270 an den Plattencache 230 überträgt, wird
nachstehend anhand von 6 beschrieben.
-
Nach
Empfang eines Befehls von der MPU 280 für eine Datenübertragung
von der Plattenvorrichtungsgruppe 270 an den Plattencache 230 liest das
Platten-Eingangs-/Ausgangsinterface 250 den logischen Datenblock
von 512 Byte aus dem Plattencache 230 in seinen internen
Puffer (Schritt 1100). Danach vergleicht das Platten-Eingangs-/Ausgangsinterface 250 die
Gruppennummer, die dem gerade geholten logischen Datenblock entspricht,
mit der Gruppennummer, die den im internen Puffer des LA/LRC-Splitters/Joiners 255 gespeicherten
Validierungscodes (LA und LRC) entspricht (Schritt 1110).
-
Stimmen
diese Gruppennummern nicht überein
oder ist der interne Puffer des LA/LRC-Splitters/Joiners 255 leer,
weil die Leseoperation gerade erst anfängt, holt das Platten-Eingangs-/Ausgangsinterface 250 die
512 Byte große
LA/LRC-Gruppe, die dem
in Schritt 1100 in den eigenen internen Puffer gelesenen
logischen Datenblock entspricht, aus der Plattenvorrichtung in den
internen Puffer des LA/LRC-Splitters/Joiners 255 (Schritt 1120).
-
Eine Übereinstimmung
zwischen den beiden Gruppennummern in Schritt 1110 bedeutet,
dass die Validierungscodes (LA und LRC) für den in Schritt 1100 geholten
logischen Datenblock bereits im internen Puffer enthalten sind.
Der LA/LRC-Splitter/Joiner 255 kombiniert den in Schritt 1100 geholten
logischen Datenblock und dessen Validierungscode (LA und LRC) (im
internen Puffer enthalten) zu einem erweiterten Datenblock mit 520
Byte und speichert ihn im Plattencache 230 (Schritt 1130);
danach kehrt er zu Schritt 1100 zurück, um die Datenübertragung
fortzusetzen.
-
Der
vorstehende Vorgang wird wiederholt, bis alle Daten, deren Übertragung
von der MPU 280 angefordert worden ist, verarbeitet sind.
-
Die
vorstehenden Beschreibungen der bevorzugten Ausführungsform der vorliegenden
Erfindung haben gezeigt, dass es auch in einem Plattenarraysystem 200 auf
der Grundlage von Plattenvorrichtungen mit einer festen Sektorlänge von
512 Byte möglich
ist, einen Validierungscode (LA und LRC) von 8 Byte an einen logischen
Datenblock von 512 Byte anzuhängen,
wie bei den meisten herkömmlichen
Plattenarraysystemen. Eine Reihe von Validierungscodes wird zusammengestellt,
um in einen Sektor zu passen, und auf der Platte getrennt von den
ihnen entsprechenden logischen Datenblöcken gespeichert, im Gegensatz
zu herkömmlichen Plattenarraysystemen.
Diese Situation wird durch Bereitstellung einer Gruppe von Einrichtungen
und Funktionen zur Verwaltung der Entsprechung zwischen logischen
Datenblöcken
und Validierungscodes, Berechnung der Speicherposition des Validierungscodes,
Aufteilen und Zusammenfügen
von logischem Datenblock und Validierungscode und Speichern und
Holen von Validierungscodes in und aus den Plattenvorrichtungen
gehandhabt. Alle diese Einrichtungen und Funktionen werden durch
Hardware (den LA/LRC-Splitter/Joiner) realisiert, wodurch die Wahrscheinlichkeit
von Störungen
aufgrund von Software-Fehlern entfällt, so dass dasselbe Qualitätsniveau
bei der Feststellung und Handhabung von Beeinträchtigungen der Adresse und
Daten in den Plattenvorrichtungen wie bei herkömmlichen Plattenarraysystemen
sichergestellt ist.
-
Während bei
der bevorzugten Ausführungsform
davon ausgegangen wird, dass der LA/LRC-Splitter/Joiner durch Hardware
realisiert ist, wäre
es alternativ auch möglich,
das Platten-Eingangs-/Ausgangsinterface mit einem Mikroprozessor und
einem Speicher zu versehen und in dem Speicher ein Programm zu speichern,
das die Funktionen des LA/LRC-Splitters/Joiners ausführt.
-
Als
Schnittstelle zwischen dem Host A100, dem Host B 110 oder
dem Host C120 und dem Host-Eingangs-/Ausgangsinterface 210 oder
dem Host-Eingangs-/Ausgangsinterface 211 wird typischerweise
der sog. Fiber Channel oder SCSI verwendet, aber andere Schnittstellen
können
ebenfalls verwendet werden. Der hostseitige interne Bus 220 und
der plattenseitige interne Bus 240 können jeweils ein 64-Bit-PCI-Bus, ein 32-Bit-PCI-Bus
oder ein anderer geeigneter Bus sein.
-
Obwohl
bei der bevorzugten Ausführungsform
angenommen wird, dass die Sektorlänge der Plattenvorrichtungen
in dem Plattenarraysystem 200 und die Größe des logischen
Datenblocks beide jeweils 512 Byte betragen und dass die Länge des
Validierungscodes 8 Byte beträgt,
können
auch andere Werte für
diese Parameter verwendet werden, ohne vom Umfang der vorliegenden
Erfindung abzuweichen.
-
Es
ist auch möglich,
den Validierungscode (LA und LRC) in dem übertragenen erweiterten Datenblock
vom Platten-Eingangs-/Ausgangsinterface prüfen zu lassen und auf diese
Weise eine Fehladressierung und Datenstörungen zu erkennen, die in
den Plattenvorrichtungen, auf dem Plattenbus, auf dem plattenseitigen
internen Bus oder anderswo aufgetreten sind.
-
Während bei
der hier diskutierten bevorzugten Ausführungsform der LA/LRC-Splitter/Joiner
im Platten-Eingangs-/Ausgangsinterface angeordnet ist, können auch
andere alternative Möglichkeiten verwendet
werden. In einem Plattenarraysystem zum Beispiel, in dem der Fiber
Channel als Platten-Eingangs-/Ausgangsinterface verwendet wird,
externe JBOD-Einheiten, die über
Fiber Channel verbunden sind, als Plattenvorrichtungen verwendet
werden und diese externen JBOD-Einheiten einen Protokollwandler
vom Fiber Channel- auf
das SATA-Protokoll aufweisen, um SATA-Platten zu unterstützen, ist
es möglich,
die hier beschriebenen Funktionen durch Integration des LA/LRC-Splitters/Joiners
in den Fiber Channel-/SATA-Protokollwandler zu realisieren.
-
Während bei
der hier diskutierten bevorzugten Ausführungsform die vorstehend beschriebenen Funktionen überwiegend
vom LA/LRC-Splitter/Joiner im Platten-Eingangs-/Ausgangsinterface
ausgeführt werden,
sind auch alternative Implementierungen vorstellbar. So lassen sich
zum Beispiel durch Anordnen der logischen Datenblöcke und
ihrer entsprechenden Validierungscodes in dem Plattencache wie in 4 gezeigt,
durch Suchen der Position des dem logischen Datenblock entsprechenden
Validierungscodes (LA und LRC) durch ein internes Datenübertragungs-Steuerprogramm
und Anweisen des Platten-Eingangs-/Ausgangsinterface, die Validierungscodes
zusammen mit ihren entsprechenden logischen Datenblöcken zu übertragen,
dieselben Merkmale wie vorstehend beschrieben realisieren.
-
Wenn
504 Byte als Größe des logischen
Datenblocks gewählt
werden, so dass der erweiterte Datenblock, der den logischen Datenblock
mit einer LA von 4 Byte und einem LRC von 4 Byte kombiniert, eine
Länge von
512 Byte aufweist (die feste Sektorlänge), können dieselben Merkmale realisiert
werden, ohne dass der LA/LRC-Splitter/Joiner nötig ist.
-
Daher
stellt die vorliegende Erfindung eine Einrichtung zum Anhängen von
Validierungscodes an logische Datenblöcke und zu deren gemeinsamer Speicherung
in Plattenvorrichtungen auch in einem Plattenarraysystem mit einer
Anordnung oder Array von Plattenvorrichtungen mit einer Zugriffseinheit fester
Länge bereit.
Folglich ist es möglich,
ein sehr zuverlässiges
Plattenarraysystem auf der Grundlage relativ preiswerter Plattenvorrichtungen
mit einer Zugriffseinheit fester Länge aufzubauen.