-
Die Erfindung bezieht sich auf ein
Speichersystem.
-
Eine bekannte Art von Speichersystemen
ist als "RAID" bekannt, in welchem
Daten über
viele Plattenlaufwerke verteilt und gespeichert werden, um im Falle,
dass eines dieser Plattenlaufwerke oder einer oder mehrer seiner
Speicherblöcke
mit Datenverlust ausfällt,
wieder herzustellen. Um zur späteren
Wiederherstellung Daten zu speichern, nehmen RAID-Systeme Daten
zusammen mit Paritätsinformation
auf, so dass Daten aus der Paritätsinformation
wieder hergestellt werden können.
Beispielsweise wird in einer Art von RAID-Systemen eine Reihe von
fünf Platten
verwendet, um vier Datenblöcke
und einen Block mit Paritätsinformation
in einer als "Stripe" bekannten Einheit
aufzunehmen.
-
Ein Problem, welches im Fachgebiet
auftrat, ist, dass RAID-Systeme, welche Paritätsinformationen aufnehmen,
schnell und häufig
die Berechnung von Paritätsinformationen
erfordern. Beispielsweise erfordern Operationen, welche auf einen
Stripe schreiben, mindestens eine Reihe von zu berechnenden Paritätsinformationen.
Die Berechnung von Paritätsinformation
benötigt
im wesentlichen die XOR (exclusiv-or-)Funktion. Dies kann die Belegung
wesentlicher Rechenressourcen erfordern, wie z. B. Prozessorzyklen,
Cache-Adressen und Speicherzugriffszyklen.
-
Eine mögliche Technik zur Berechnung
von Paritätsinformation
ist, Software zur Kontrolle eines Prozessors zur Berechnung der
XOR-Funktion anzubieten. Diese Technik hat mehrere Ausführungsalternativen, wie
z. B. diese, welche Versuche enthalten, Prozessoranweisungen zu
koordinieren, um Registerkon flikte und unnötiges Warten zu vermeiden und
Cache-Fehler zu verringern, um unnötige Speichertransfers und
unnötiges
Warten durch den Prozessor zu vermeiden. Während diese Technik das Ziel
der Berechnung von Paritätsinformation
erreicht, leidet sie unter den Nachteilen, dass sie wesentliche
Rechenressourcen erfordert (Prozessorzyklen, Cache-Adressen, Speichertransfers).
-
Eine andere mögliche Technik zur Berechnung
von Paritätsinformation
ist die Bereitstellung eines zweiten Prozessors mit einem unabhängigen Speicher
zur Ausführung
von XOR-Operationen. Der zweite Prozessor ist an den Hauptspeicher
gekoppelt (d. h., durch den ersten Prozessor verwendeter Speicher),
wobei er eine EMA-Verbindung verwendet, welche Eingaben für die XOR-Operation vom Speicher,
welcher DMA-Operationen verwendet, abruft, wodurch der erste Prozessor
frei ist, andere Tasks auszuführen.
Während
diese Technik das Ziel der Berechnung von Paritätsinformation erreicht, leidet
sie auch unter den Nachteilen, dass sie wesentliche Speichertransfers
und Verwendung des Systembus erfordert, sogar obwohl sie den ersten
Prozessor von einigen seiner Belastungen entlastet.
-
Danach wäre es vorteilhaft, ein Verfahren
und eine Anordnung zur Ausführung
von XOR-Operationen bereitzustellen, welches gleichzeitig weniger
Rechenressourcen verbraucht. Dieser Vorteil wird in einem Ausführungsbeispiel
der Erfindung erreicht, in welchem ein spezialisierter Prozessor
Speicher- und Plattenzugriffe, während
sie auf einem Systembus übertragen
werden, prüft,
welcher XOR Operationen ausführt,
die Ergebnisse dieser XOR-Operationen speichert und welcher auf
Prozessoranweisung die Ergebnisse dieser XOR-Operationen ausgibt.
-
US
5,335,235 offenbart eine logische Schaltung für einen
FIFO basierten Paritätsgenerator,
zur Generierung von Paritätsblöcken zur
Verwendung in einem Computersystem. Die logische Schaltung kann
einen Datenblock generieren, welcher aus einer XOR-Operation einer
logischen "0" mit jedem Bit in
der ersten der Folgen von Datenblöcken resultiert und welcher
den resultierenden Datenblock in einer FIFO Datenstruktur speichert.
Es ist kein Gerätespeicher vorgesehen,
welcher zur Anpassung eines Teils einer ausgewählten Speicheradresse mit einer
Vielzahl von XOR-Akkumulator-Puffern eingerichtet ist.
-
WO 98/21656, welche nur aufgrund
des Artikels 54(3)EPC Stand der Technik ist, offenbart einen Hochleistungsdatenpfad
zur Ausführung
von XOR on the fly, wobei einer an einen ersten Bus und ein zweiter an
einen zweiten Bus angeschlossen ist, welcher selektiv an den ersten
Bus gekoppelt ist.
-
Die Erfindung, welche in den anhängenden
Ansprüchen
festgelegt ist, sieht ein Verfahren und eine Anordnung zur Ausführung von
XOR-Operationen vor, ohne wesentliche Rechenressourcen zu verbrauchen.
Ein spezialisierter Prozessor ist an denselben Bus wie eine Reihe
von Plattenlaufwerken gekoppelt; der spezialisierte Prozessor prüft Datentransfers
zu und von den Plattenlaufwerken und führt auf Basis der Daten, welche zu
und von den Plattenlaufwerken transferiert wurden, XOR-Operationen
ohne das Erfordernis separater Transfers durch.
-
In einem bevorzugten Ausführungsbeispiel
unterstützt
der spezialisierte Prozessor einen XOR-Akkumulator, welcher für XOR-Operationen
verwendet wird, welcher die Ergebnisse von XOR-Operationen aufnimmt
und welcher auf Anweisung des Prozessors ausgelesen wird. Der XOR-Akkumulator
umfaßt
eine Reihe von Akkumulatorregistern für jeden RAID-Stripe, für eine ausgewählte Reihe
von RAID-Stripes. Ein Speicher (wie ein inhaltsadressierbarer Speicher)
verbindet eine Reihe von Akkumulatorregistern mit jedem ausgewählten RAID-Stripe.
-
1 zeigt
ein Blockdiagramm eines Systems zur Ausführung von fly-by XOR.
-
2 zeigt
ein Flußdiagramm
eines Verfahrens zum Betreiben eines Systems, um fly-by XOR auszuführen.
-
3 zeigt
ein Blockdiagramm eines ersten fly-by XOR-Elements.
-
4 zeigt
ein Blockdiagramm eines zweiten fly-by XOR-Elements.
-
Detaillierte
Beschreibung des bevorzugten Ausführungsbeispiels
-
In der folgenden Beschreibung wird
ein bevorzugtes Ausführungsbeispiel
der Erfindung in Bezug auf bevorzugte Prozessschritte und Datenstrukturen
beschrieben. Dennoch würde
der Fachmann nach Durchsicht dieser Anmeldung erkennen, dass Ausführungsbeispiele
der Erfindung implementiert werden können, bei denen einer oder
mehrere Mehrzweckprozessoren (oder Sonderanwendungsprozessoren,
welche an die besonderen Prozessschritte und Datenstrukturen angepasst
sind) verwendet werden, welche unter Programmkontrolle operieren,
und dass die Implementierung der bevorzugten Prozessschritte und
Datenstrukturen, welche hierin beschrieben sind und derartige Ausstattung
nutzen, kein übermäßiges Experimentieren
oder weitere Erfindung erfordern würden.
-
Systemkomponenten
-
1 zeigt
ein Blockdiagramm eines Systems zur Ausführung von fly-by XOR.
-
Ein System 100 umfaßt mindestens
einen Prozessor 110, einen Speicher 120, und einen
Systembus 130 zur Kopplung des Prozessors 110 und
des Speichers 120. Obwohl nur ein Prozessor 110 gezeigt
ist, kann in Ausführungsbeispielen,
welche für
einige Anwendungen bevorzugt sein können, mehr als ein Prozessor 110 an
den Systembus 130 gekoppelt werden und die Prozessoren 110 arbeiten
in ihren Operationen zusammen.
-
Das System 100 umfaßt auch
eine Vielzahl von Plattenlaufwerken 140 und mindestens
einen Platten-I/O-Adapter 150, der an die Plattenlaufwerke 150 gekoppelt
ist, um die Plattenlaufwerke 140 zu kontrollieren und Daten
zwischen den Plattenlaufwerken 140 und dem Systembus 130 zu
koppeln, wobei ein sekundärer
Bus 160 verwendet wird.
-
In einem bevorzugten Ausführungsbeispiel
ist der sekundäre
Bus 160 ein PCI-Bus,
wie er durch bekannte Standards für PCI-Busse definiert wird,
und ist an den Speicherbus 130 gekoppelt, wobei eine PCI-Brücke 170 verwendet
wird.
-
Obwohl der sekundäre Bus 160 in einem
bevorzugten Ausführungsbeispiel
ein PCI-Bus ist, ist die Erfindung nicht auf die Verwendung eines
PCI-Bus oder eines anderen besonderen Bustyps beschränkt. Gleichermaßen ist
die Erfindung, obwohl der sekundäre
Bus hierin weiter als ein 32-Bit-Bus beschrieben wird, nicht auf
die Verwendung eines 32-Bit-Bus beschränkt und könnte auch mit einer anderen
Busbreite, wie ein 64-Bit-Bus, implementiert werden. Solche Alternativen
würden
kein übermäßiges Experimentieren
oder Erfinden erfordern.
-
Ein fly-by XOR-Element 180 ist
an den sekundären
Bus 160 gekoppelt, um Daten von Datentransfers ausfindig
zu machen, welche den sekundären
Bus 160 verwenden. Das fly-by XOR-Element 180 verwendet einen
XOR-Puffer 140 zur Speicherung von Teil- und Endergebnissen
von XOR-Operationen.
-
Wenn der Prozessor 110 den
Transfer von Daten zwischen dem Speicher 120 und einem
oder mehreren der Plattenlaufwerke 140 anweist, werden
die Daten transferiert, indem der Speicherbus 130, die PCI-Brücke 170 und
der sekundäre
Bus 160 verwendet werden. Während die Daten mit Verwendung
des sekundären
Bus 160 transferiert werden, liest das fly-by XOR-Element 180 die
Daten (ohne Beeinflussung des Datentransfers) und fügt sie zu
einem der XOR-Akkumulatoren (siehe 2)
in dem XOR-Puffer 109 hinzu. Wird ein RAID-Stripe entweder
gesamt oder teilweise gelesen oder beschrieben, berechnet das fly-by XOR-Element 180 dadurch
dynamisch eine Reihe von Paritätsinformationen
für das
RAID-Stripe, ohne zusätzliche
Ressourcen von irgendeinem Teil des Systems 100 zu erfordern.
Keine zusätzlichen
Datentransfers sind notwendig, und der Prozessor 110 und
der Speicher 120 werden nicht zur Ausführung dieser XOR-Operationen
benötigt.
-
Wenn der Prozessor 110 derart
anweist, wird das fly-by XOR-Element 180 akkumulierte Paritätsinformation
von einem der XOR-Akkumulatoren in dem XOR-Puffer 190 auslesen,
wie z. B. beim Ausschreiben der Paritätsinformation an einen Speicherblock
in dem RAID-Stripe, welcher gelesen oder beschrieben wurde. Die akkumulierte
Paritätsinformation
von dem XOR-Puffer 190 kann auch zum Rekonstruieren oder
Reparieren von Daten in dem RAID-Stripe verwendet werden, wenn eines
der Plattenlaufwerke 140 in dem RAID-Stripe alle oder einen
Teil von einem der Speicherblöcke
in dem RAID-Stripe verliert.
-
Systemoperation
-
2 zeigt
ein Flußdiagramm
eines Verfahrens zum Betreiben eines Systems um fly-by XOR auszuführen.
-
Ein Verfahren 200 zum Betreiben
des fly-by XOR-Elements 180 umfaßt eine Folge von durch den
Prozessor 110, die Plattenlaufwerke 140 und das
fly-by XOR-Element 180 auszuführenden Schritten.
-
An einem Flußpunkt 210 führt das
System 100 eine XOR-Operation auf einem RAID-Stripe aus.
-
Bei einem Schritt 221 belegt
der Prozessor 110 einen Speicherpuffer in dem Speicher 120 und
legt Daten fest, damit sie zu oder von dem Speicherpuffer und einem
der Plattenlaufwerke 140 DMA-transferiert werden.
-
Bei einem Schritt 222 überträgt der Prozessor 110 eine
Speicheradresse des Speicherpuffers an das fly-by XOR-Element 180 und
weist das fly-by XOR-Element
an, Daten zu erkennen, welche zu oder von diesem Speicherpuffer
transferiert werden. Der Prozessor 110 belegt auch einen
der XOR-Akkumulator-Puffer in dem XOR-Puffer 190, um die
Ergebnisse der XOR-Operation zu akkumulieren.
-
Bei einem Schritt 223 wird
der DMA-Transfer ausgeführt.
Das fly-by XOR-Element 180 überwacht
den sekundären
Bus 160 und versucht Transfers zu oder von dem Speicherpuffer
zu erkennen. Wenn das fly-by XOR-Element 180 solch einen
Transfer erkennt, kopiert es die transferierten Daten und fügt sie (mittels
Ausführung
einer XOR-Operation) der akkumulierten Paritätsinformation in dem angeschlossen
XOR-Akkumulator-Puffer hinzu. Wenn alle Daten für den bekannten Speicherpuffer
transferiert wurden, enthält
der angeschlossene XOR-Akkumulator-Puffer die berechnete Parität für den RAID-Stripe.
-
Beim Schritt 224 weist der
Prozessor 110 das fly-by XOR-Element 180 an, die
akkumulierte Paritätsinformation
aus dem angeschlossenen XOR-Akkumulator-Puffer, entweder zu einem
Speicherpuffer in dem Speicher 110 oder in den Speicherblock
auf einem der Plattenlaufwerke 140 auszulesen. In jedem
Fall wird das Auslesen aus dem fly-by XOR-Element 180 mittels
Lesen durch den Prozessor oder DMA-Transfer zu einem der Plattenlaufwerke 140 ausgeführt. In
einem bevorzugten Ausführungsbeispiel
bedingt ein Auslesen der akkumulierten Paritätsinformation, dass der angeschlossene
XOR-Akkumulator-Puffer auf Null zurückgesetzt wird.
-
Bei einem Flußpunkt 230 ist die
XOR-Operation auf dem RAID-Stripe komplett, und das System 100 kann
mit einem anderen RAID-Stripe fortfahren.
-
In einem bevorzugten Ausführungsbeispiel
kann der Prozessor 110 eine XOR-Operation ausführen, ohne wirklich Daten von
einem der Plattenlaufwerke 140 zu einem Speicherpuffer
in dem Speicher 120 zu transferieren. Dies ist hierin als
ein Transfer zu einem "Null"-Speicherpuffer bezeichnet,
da die Operation abläuft,
als ob es in jeder Hinsicht ein Transfer zu einem Speicherpuffer
wäre, mit
der Ausnahme, dass die Daten nicht wirklich in dem Speicher 120 gespeichert
werden. Es ist vorteilhaft in der Lage zu sein, zu einem Null-Speicherpuffer
zu transferieren, da es Plattenoperationen für einen RAID-Stripe gibt, in
welchen es gewünscht
ist, weniger als alle der Speicherblöcke des RAID-Stripe zu lesen
oder zu schreiben, die in den Plattenlaufwerken 140 gespeichert
sind, aber in welchen es notwendig ist, Paritätsinformation für den gesamten RAID-Stripe
zu berechnen.
-
Wenn es beispielsweise gewünscht ist,
gerade einen Speicherblock eines RAID-Stripe zu schreiben, ist es
notwendig, sowohl auf diesen Speicherblock als auch den Paritätsinformations-Speicherblock
zu schreiben. In bekannten RAID-Speichersystemen würde es notwendig
sein, zuerst sowohl die aktuelle Parität als auch Datenblöcke von
den Platten in den Speicher zu lesen, so dass der Prozessor dann
die neue Paritätsinformation
berechnen kann. Jedoch könnten
diese Blöcke
mittels der Erfindung zu einem Null-Speicherpuffer transferiert
werden, so dass Ressourcen des Prozessors 110 oder des
Speichers 120 nicht verwendet werden, sondern dass Paritätsinformation
mittels des flyby XOR-Elements 180 berechnet werden.
-
Außerdem wird in einem bevorzugten
Ausführungsbeispiel
das Schreiben nur eines Speicherblocks eines RAID-Stripes in weniger
Schritten ausgeführt:
(1) Die alten Speicherblockdaten und die alten Paritätsblockdaten
werden zu einem Null-Speicherpuffer transferiert, um Paritätsinformation
mittels dem fly-by XOR-Element 180 zu akkumulieren. (2)
Die neuen Speicherblockdaten werden in den Speicherblock geschrieben,
um sowohl den Speicherblock zu beschreiben als auch gleichzeitig
Paritätsinformation
mittels dem fly-by XOR-Element 180 zu
akkumulieren. (3) Die akkumulierte Paritätsinformation wird in den Paritätsspeicherblock von
dem XOR-Puffer 190 geschrieben. Die Ressourcen des Prozessors 110 und
des Speichers 120 werden für diese Operationen nicht benötigt.
-
Um den Transfer zu einem Null-Speicherpuffer
auszuführen,
belegt der Prozessor 110 bei dem Schritt 221 keinen
Speicherpuffer in dem Speicher 120 und legt Daten fest,
welche zwischen einem der Plattenlaufwerke 140 und einer
Speicheradresse, welche nicht durch den Speicher 120 erkannt
wird, DMA-transferiert werden.
Bei dem Schritt 223 wird der DMA-Transfer ausgeführt und
das fly-by XOR-Element überwacht
den sekundären
Bus 160, jedoch erfasst der Speicher 120 keine
der Daten, welche zu dem Null-Speicherpuffer "transferiert" werden.
-
Erstes fly-by
XOR-Element
-
3 zeigt
ein Blockdiagramm eines ersten fly-by XOR-Elements 180.
-
Ein erstes fly-by XOR-Element 180 umfasst
ein Businterface 310, ein Zeit- und Kontrollglied 320 und einen
inhaltsadressierbaren Speicher (CAM) 330 und angeschlossene
Elemente. Der XOR-Puffer 190 wird an das fly-by XOR-Element gekoppelt
und umfasst einen Schreib-Lese-Speicher (RAM) 340, eine
FIFO-Reihe 350 und angeschlossene Elemente. Obwohl der
XOR-Puffer 190 konzeptionell den RAM 340 umfasst,
wird das RAM 340 in einem bevorzugten Ausführungsbeispiel
implementiert, wobei ein externer RAM-Schaltkreis verwendet wird,
während
die FIFO 350 und angeschlossene Elemente mit anderen Schaltkreisen
des fly-by XOR-Elements 180 in einem ASIC implementiert
werden.
-
Die Busschnittstelle 310 und
das Zeit- und Kontrollglied 320 stellen eine Schnittstelle
zwischen dem fly-by XOR-Element 180 und dem sekundären Bus 160 bereit.
Die Schnittstelle umfasst eine Reihe von Kontrollpfaden 311,
welche durch den sekundären
Bus 160 verwendete Kontrollsignale übermittelt, einen Busadressenpfad
(BA) 312, welcher einen Busadressenwert übermittelt,
der die Bits 0 bis einschließlich
31 besitzt, und einen Busdatenpfad (BD) 313, welcher einen
Busdatenwert übermittelt,
der die Bits 0 bis einschließlich
31 besitzt. Die Übermittlung
mittels einem PCI-Bus ist im Fachgebiet des Computersystemgestaltung
bekannt.
-
In alternativen Ausführungsbeispielen,
in denen der sekundäre
Bus 160 kein PCI-Bus ist oder eine andere Breite als 32
Bit besitzt, besitzt der Busdatenwert andere Bit-Kennungen (wie
Bits 0 bis einschließlich
63) und die Übermittlung
erfolgt mittels einem vom PCI verschiedenen Busprotokoll.
-
Der XOR-Puffer 190 umfaßt einen
Schreib-Lese-Speicher (RAM) 340, welcher eine Reihe von
32 XOR-Akkumulator-Puffern bildet, wobei jeder 1024 Einträge lang
mit 4 Byte (32 Bit) Breite ist, also 4K Byte groß. Deshalb können bei
bis zu 32 verschiedenen RAID-Stripes XOR-Akkumulation stattfinden,
welche gleichzeitig mittels des fly-by XOR-Elements 180 ausgeführt werden.
-
Der XOR-Puffer 190 besitzt
auch eine FIFO-Warteschlange 350, welche vorgesehen ist
für die
Eingabe sequentieller Busdatenwertworte und für die Durchfürhung der
XOR-Operation auf Basis dieser sequentiellen Worte, um Paritätsinformationen
in einem der 32 XOR-Akkumulator-Puffer in dem RAM 340 zu
akkumulieren.
-
Der CAM 330 stellt eine
Reihe von 256 Eingängen
bereit, wobei jeder einen 20-Bit
Busadressenwert mit einer zugehörigen
5-Bit-Adresse eines der 32 XOR-Akkumulator-Puffer
in dem RAM 340 verbindet. Der CAM 330 besitzt
einen Adresseneingangsport 331 zum Auswählen eines der 256 Eingänge in dem
CAM 330, einen 20-Bit Kennzeichenport 332 zum
Bereitstellen eines 20-Bit Kennzeichens, welches mittels des CAM 330 angepasst
wird, einen 5-Bitwert-Port 330 zum
Bereitstellen eines durch den CAM 330 mit dem 20-Bit Kennzeichen
verbundenen 5-Bit Werts, einen Schreib-Kontroll-Port 334 zum
Empfangen eines Schreib-Kontroll-Signals und einen Übereinstimmungs-Kontrollport 335,
zum Bereitstellen eines Übereinstimmungs-Kontrollsignals.
-
Das Zeit- und Kontrollglied 320 empfängt auch
das Übereinstimmungs-Kontrollsignal
vom Übereinstimmungs-Kontroll-Port 335 und
stellt einen 15-Bit RAM Adressenpfad (RA) 314 zur Adressierung
des RAM 340 und einen Schreib-Kontroll-Pfad 315 zur
Kontrolle des CAM 330 bereit.
-
Bits 12 bis einschließlich 31
des Busadressenpfads 312 und Bits 12 bis einschließlich 31
des Busadressenpfads 313 (also in jedem Fall die höherwertigen
20 Bits) werden an Eingänge
eines CAM Multiplexers 336 gekoppelt, wobei ein Ausgang
dessen an den Kennzeichenport 332 des CAM 330 gekoppelt
ist. Der Kennzeichenport 332 bildet auch ein 20-Bit Ausgangskennzeichen,
welches an den Busdatenpfad 313 gekoppelt werden kann,
wobei ein Treiber 337 verwendet wird. Der zugehörige 5-Bit
Wert an dem Wertport 333 ist an den XOR-Puffer 190 gekoppelt und ist
auch an den Busdatenpfad 313 gekoppelt, wobei ein Paar
Treiber 338 verwendet wird.
-
Der XOR-Puffer 190 umfasst
den RAM 340, welcher einen RAM-Adressenport 341 zum
Empfangen des 15-Bit RAM-Adressenwert und einen RAM-Datenports 342 zum
Bereitstellen eines 32-Bit RAM-Datenwerts umfasst, welcher an der
zugehörigen
Adresse in dem RAM 340 gespeichert ist. Der RAM 340 ist
konzeptuell in 32 separate XOR-Akkumulator-Puffer aufgeteilt, wobei
jeder 1K 32-Bit-Wörter
(also 4K Byte) umfasst und eine Reihe von Adressen in dem RAM 340 belegt,
wobei jede ihre 5-Bit XOR-Akkumulator-Puffernummer (0 bis einschließlich 31)
als die höherwertigen
Bits des RAM-Adressenwerts besitzt.
-
Der zugehörige 5-Bit-Wert an dem Wertport 333 ist
an den RAM-Adressenport 341 gekoppelt und stellt höherwertige
5-Bit zur Adressierung von Wörtern
in dem RAM 340 bereit. Bits 2 bis einschließlich 11
des Busadressenpfads 312 (also die niederwertigen 10 Bits
zur Adressierung eines 4-Byte-Worts)
stellen die niederwertigen 10 Bit zur Adressierung von Wörtern in
RAM 340 bereit und sind auch an den RAM-Adressenport 341 gekoppelt.
Also empfängt
der RAM 340 eine 15-Bit-Adresse an dem RAM-Adressenport 341 und
stellt ein 32-Bit Ausgangsdatenwort an dem RAM-Datenport 342 bereit.
-
Der RAM-Datenport 342 ist
mittels eines Treibers 351 an den Busdatenpfad 313 (und
auch an einen Eingang der FIFO-Warteschlange 350), an einen
Ausgang eines FIFO-Multiplexers 352 und an einen Eingang eines
FIFO-Registers 352 gekoppelt. Die FIFO-Warteschlange 350 besitzt
einen Ausgang, welcher an einen XOR-Operator 354 gekoppelt
ist, welcher eine Reihe von 32 XOR-Steuerelementen zur parallelen
Ausführung einer
XOR-Operation auf ein gesamtes 32-Bit Wort umfasst. Der FIFO-Multiplexer 352 ist
an einen Ausgang des XOR-Operators 354 und an einen "Null"-Eingang 355 gekoppelt.
-
Um einen XOR-Akkumulator-Puffer für einen
neuen RAID-Stripe wie in dem Schritt 221 und dem Schritt 222 zu
belegen, veranlaßt
das Zeit- und Kontrollglied 320, den CAM 330 mit
einer 20-Bit Speicheradresse für
einen Speicherpuffer in dem Speicher 120 (oder eine 20-Bit
Speicheradresse für
einen Null-Speicherpuffer) geladen zu werden, und verbindet diese
20-Bit Spei cheradresse mit einer 5-Bit Kennung für einen der 32 XOR-Akkumulator-Puffer. Bits 2 bis
einschließlich
9 des Busadressenfads 312 werden an den Adresseneingangsport 331 gekoppelt
und bilden die Adresse eines neuen Eintrags für den CAM 330. Der
CAM-Multiplexer 336 wählt
unter Kontrolle des Zeit- und Rollelements 320 den Busdatenpfad 313 zur
Kopplung an den Kennzeichenport 332 aus. Der CAM 330 fügt Bits 12 bis
einschließlich
31 des Busdatenwerts von dem Busdatenpfad 313 als ein neues
20-Bit Kennzeichen an der Adresse ein, welche an dem Adresseneingangsport 331 spezifiziert
ist, und fügt
Bits 0 bis einschließlich
4 des Busdatenwerts von dem Busdatenpfad 313 als einen neuen
5-Bit Wert ein. Der Prozessor 110 kann auch einen ausgewählten Eintrag
in dem CAM 330 für
Diagnostikzwecke lesen.
-
Um den sekundären Bus 160 wie in
Schritt 223 zu überwachen,
wählt das
Zeit- und Kontrollelement 320 den
Busadressenpfad 312 zur Kopplung an den Kennzeichenport 332 aus.
Wenn die höherwertigen
20 Bits einer Speicheradresse (oder einer Adresse innerhalb eines
Null-Speicherpuffers), welche auf dem sekundären Bus 160 erscheint,
mit einem der 20-Bit Kennzeichen in dem CAM 330 übereinstimmt,
stimmt der CAM 330 die Bits 12 bis einschließlich 31
der Busadresse ab und verbindet ein 5-Bit Wert mit diesem 20-Bit
Kennzeichen.
-
Der zugehörige 5-Bit-Wert wird zur Auswahl
eines der 32 XOR-Akkumulator-Puffern in dem RAM 340 verwendet,
während
Bits 2 bis einschließlich
11 des Busadressenpfads 312 zur Auswahl eines individuellen Worts
in dem XOR-Akkumulator-Puffer
in dem RAM 340 verwendet werden, so dass die Datenwerte
an dem sekundären
Bus 160 Wort für
Wort in die FIFO-Warteschlange 350 eingelesen werden. Das
Zeit- und Kontrollglied 320 sequentiert jedes Wort in der
FIFO-Warteschlange 350 in Verbindung mit einem entsprechenden Wort,
welches von dem RAM 340 in den FIFO-Register 353 gelesen
wurde, durch den XOR-Operator 354, um eine XOR-Operation
auf Basis von Daten in dem verbundenen XOR-Akkumulator-Puffer in
dem RAM 340 mit Daten in der FIFO-Warteschlange 350 auszuführen. Das
Zeit- und Kontrollelement 320 veranlaßt daraufhin, dass die Ergebnisse
der XOR-Operation in den XOR-Akkumulator-Puffer
in dem RAM 340 zurückgeschrieben werden.
-
Um die akkumulierte Paritätsinformation
wie in Schritt 224 auszulesen, wählt das Zeit- und Kontrollglied 320 den
Busadressenpfad 312 zur Kopplung an den RAM-Adressenport 341 aus,
um jedes Wort in dem XOR-Akkumulator-Puffer in dem RAM 340 in
Reihe auf dem Busdatenpfad 313 auszulesen, während DMA-Transfer
entweder zu dem Speicher 120 oder zu einem der Plattenlaufwerke 140 erfolgt.
Am üblichsten geht
DMA-Transfer direkt zu einem der Plattenlaufwerke 140,
kann aber zu dem Speicher 120 gehen, wenn der Prozessor 110 mit
der Paritätsinformation
operieren muß.
Der Prozessor 110 kann die RAM 340 Einträge auch
direkt für
Diagnosezwecke lesen oder währenddessen
in dem XOR-Puffer 190 bearbeiten, wenn es anderenfalls
wünschenswert
ist, an der Paritätsinformation
zu lesen oder zu operieren. Das Zeit- und Kontrollglied 320 schreibt
gleichzeitig Null-Werte in jedes Wort in dem XOR-Akkumulator-Puffer
in dem RAM 340, um den XOR-Akkumulator-Puffer zu veranlassen, auf einen gleichförmigen Null-Wert
zurückgesetzt
zu werden.
-
Der Prozessor 110 kann auch
direkt auf ausgewählte
Adressen in dem RAM 340 schreiben, um eine XOR-Operation
direkt zwischen den Inhalten des XOR-Puffers 190 und ausgewählter Information
durchzuführen.
Dies ist ähnlich
der XOR-Operation, welche in Schritt 223 ausgeführt wurde.
Dennoch werden Bits 12 bis einschließlich 16 des Busdatenpfads 113 an
den RAM-Adressenport 341 anstelle des 5-Bit Ausgangswerts von
dem Wertport 333 des CAM 330 gekoppelt.
-
In einem bevorzugten Ausführungsbeispiel
werden Werte auf dem Busadressenpfad 312 und Busdatenpfad 313 wie
in Tabelle 3-1 verwendet. In Tabele 3-1 werden Adressbereichswerte in hexidezimaler
Darstellung gezeigt, und ausgewählte
Bit-Bereiche werden für
den Busadressenpfad (BA) 312 und Busdatenpfad (BD) 313 gezeigt.
-
-
Zweites fly-by
XOR-Element
-
4 zeigt
ein Blockdiagramm eines zweiten fly-by XOR-Elements. Ein zweites
fly-by XOR-Element 180 und ein XOR-Puffer 190 sind
dem ersten fly-by XOR-Element 180 und XOR-Puffer 190 gleich.
Dennoch wird ein erster SRAM 430 anstelle des CAM 330 und
ein zweiter SRAM 440 anstelle des RAM 340 verwendet. Obwohl
auch der XOR-Puffer 190 konzeptuell den SRAM 430 beinhaltet,
ist der SRAM 430 in einem bevorzugten Ausführungsbeispiel ähnlich dem
ersten fly-by XOR-Element 180 und XOR-Puffer 190 mittels
einem externen SRAM-Schaltkreis implementiert, während andere Elemente des XOR-Puffers 190 mit
anderen Schaltkreisen des fly-by XOR-Elements 180 in einem
ASIC implementiert sind.
-
Die Busschnittstelle 410 für das zweite
fly-by XOR-Element 180 ist gleich der Busschnittstelle 310 für das erste
fly-by XOR-Element 180; das Zeit- und Kontrollglied 420 für das zweite
fly-by XOR-Element 180 ist gleich dem Zeit- und Kontrollglied 320 für das erste
fly-by XOR-Element 180. Die Busschnittstelle 410 und
das Zeit- und Kontrollelement 420 bilden in ähnlicher
Weise eine Schnittstelle zwischen dem fly-by XOR-Element 180 und
dem sekundären
Bus 160. Die Schnittstelle umfaßt eine Reihe von Kontrollpfaden 411,
welche durch den sekundären
Bus 160 verwendete Kontrollsignale übermitteln, ein Busadressenpfad
(BA) 412, welcher einen Busadressenwert übermittelt,
der Bits 0 bis einschließlich
31 besitzt, und ein Busdatenpfad (BD) 413, welcher einen
Busdatenwert übermittelt,
welcher Bits 0 bis einschließlich
31 besitzt.
-
Der erste SRAM 430 umfaßt ein 1
Megawortspeicher von 5-Bit Worten und besitzt einen ersten SRAM-Adresseneingangsport 431,
einen Schreib-Kontroll-Eingangsport 432 zum Empfang eines
Schreibkontrollsignals, einen 5-Bit ersten RAM-Datenport 433 und
einen Gültigkeitskontroll-Ausgangsport 434 (einen
zusätzlichen
Datenbit-Ausgangsport für
den SRAM 430) zur Bereitstellung eines Ausgangs-Datenbits,
welches als ein Gültigkeitskontrollsignal
verwendet wird. Bits 2 bis einschließlich 21 des Busadressenpfads 412 sind
an einen ersten Eingang eines SRAM-Multiplexers 435 gekoppelt,
Bits 12 bis einschließlich
31 des Busadressenpfads 412 sind an einen zweiten Eingang
des SRAM-Multipelxers 435 gekoppelt und ein Ausgang des SRAM-Multiplexers 435 ist
an den ersten SRAM-Adresseneingangsport 431 gekoppelt.
-
Das Zeit- und Kontrollglied 420 empfängt auch
das Gültigkeitskontrollsignal
von dem Gültigkeitskontroll-Ausgangsport 434 und
bildet einen 15-Bit RAM-Adressenpfad
(RA) 414 zur Adressierung des zweiten SRAM 440 und
einen Schreib-Kontrollpfad 415 zur Kontrolle des ersten
SRAM 430.
-
Der XOR-Puffer 190 besitzt
den zweiten SRAM 440, welcher einen zweiten SRAM-Adresseneingangsport 441 besitzt,
um den zweiten 15-Bit SRAM-Adressenwert
zu empfangen, und einen zweiten SRAM-Datenport 442 zur
Bereitstellung eines 32-Bit SRAM-Datenwert umfasst, welcher unter
der zugehörigen
Adresse in dem zweiten SRAM 440 gespeichert wird. Ähnlich dem
RAM 340 ist der zweite SRAM 440 konzeptuell in
32 separate XOR-Akkumulator-Puffer geteilt, von denen jeder 1K 32-Bit-Wörter (also
4K-Byte) umfaßt
und eine Reihe von Adressen in dem zweiten SRAM 440 belegt,
von denen jede ihre 5-Bit XOR-Akkumulator-Puffer-Nummer (0 bis einschließlich 31)
als die höherwertigen
Bits des zweiten SRAM-Adressenwerts besitzt.
-
Anstelle einen 5-Bit-Wert mit einem
aus einer Reihe von 256 20-Bit Kennzeichen zu verbinden, behält der erste
SRAM 430 eine Tabelle bei, welche einen Eintrag für jedes
mögliche
20-Bit Kennzeichen, ein gültiges Bit
für jeden
Eintrag und für
jene Einträge
mit einer gültigen
Bit-Reihe einen 5-Bit Wert besitzt. Jedes 20-Bit Kennzeichen repräsentiert
mögliche
höherwertige
20-Bit einer Adresse eines Speicherpuffers in dem Speicher 120 (oder
eine Adresse für
einen Null-Speicherpuffer). Jeder 5-Bit Wert repräsentiert
eine mögliche
XOR-Akkumulator-Puffer-Nummer.
-
Der zugehörige 5-Bit Wert an dem ersten
SRAM-Datenport 433 wird an den zweiten SRAM-Adressenport 441 gekoppelt
und stellt höherwertige
5-Bit zur Adressierung von Worten in dem zweiten SRAM 440 dar. Bits
2 bis einschließlich
11 des Busadressenpfads 412 (also die niederwertigen 10
Bits zur Adressierung eines 4-Byte Wortes) stellen die niederwertigen
10 Bits zur Adressie rung von Worten in dem zweiten SRAM 440 dar und
werden auch an den zweiten SRAM-Adressenport 441 gekoppelt.
Somit empfängt
der zweite SRAM 440 eine 15-Bit Adresse an dem zweiten
SRAM-Adressenport 441 und bildet ein 32-Bit Datenwortausgang
an dem zweiten SRAM Datenport 442.
-
Der zweite SRAM-Datenport 442 wird
an ein erstes Register 450 und mittels einem Treiber 451 an
den Busdatenpfad 413 (und auch an ein zweites Register 452)
gekoppelt. Der erste Register 450 und der zweite Register 452 werden
an Eingänge
eines XOR-Operators 453 gekoppelt, welcher eine Reihe von
32 XOR-Steuerelementen zur parallelen Ausführung einer XOR-Operation an
einem gesamten 32-Bit Wort umfasst. Ein Ausgang des XOR-Operators 453 und
ein "Null"-Eingang 454 sind
an einen Eingang eines XOR-Multiplexers 455 gekoppelt;
ein Ausgang des XOR-Multiplexers 455 ist auch an den zweiten
SRAM-Datenport 442 gekoppelt.
-
In alternativen Ausführungsbeispielen
kann das zweite Register 452 mit einer FIFO oder anderen Schaltungsstrukturen
ersetzt werden, insbesondere wenn der zweite SRAM 440 nicht
schnell genug ist, um rechtzeitig Ergebnisse für das zweite Register 452 zu
liefern.
-
Um einen XOR-Akkumulator-Puffer für einen
neuen RAID-Stripe wie in Schritt 221 und Schritt 222 zu belegen,
veranlasst das Zeit- und Kontrollglied 420 den ersten SRAM 430 an
eine 20-Bit Speicheradresse für einen
Speicherpuffer in dem Speicher 120 gekoppelt zu werden
(oder eine 20-Bit Speicheradresse für einen Null-Speicherpuffer)
und speichert eine 5-Bit Kennung für einen der 32 XOR-Akkumulator-Puffern
in der durch die 20-Bit Speicheradresse spezifizierten Adresse.
-
Der SRAM-Multiplexer 435 wählt unter
Kontrolle des Zeit- und Kontrollglieds 420 Bits 2 bis einschließlich 21
des Busadressenpfads 412 zur Kopplung an den ersten SRAM-Adresseneingangsport 431 aus,
speichert Bits 0 bis einschließlich
4 des Busdatenwerts von dem Busdatenpfad 413 als einen
neuen 5-Bit Wert für diese
Adresse und setzt den gültigen
Bit für
diese Adresse. Der Pro zessor 110 kann auch einen ausgewählten Eintrag
in dem ersten SRAM 430 zu Diagnosezwecken lesen.
-
Um den sekundären Bus 160 wie in
Schritt 223 zu überwachen,
wählt das
Zeit- und Kontrollglied 420 den
Busadnessenpfad 412 zur Kupplung an den ersten SRAM-Adresseneingangsport 431 aus.
Die höherwertigen
20 Bits einer Speicheradresse (oder einer Adresse innerhalb eines
Null-Speicherpuffers), welche an dem sekundären Bus 160 erscheinen,
werden verwendet, um den ersten SRAM 430 zu adressieren;
wenn das gültige
Bit für
diese Adresse gesetzt ist, stellt der erste SRAM-Datenport 433 einen
5-Bit-Wert für
einen XOR-Akkumulatorpuffer bereit, welcher mit dieser 20-Bit Speicheradresse
verbunden ist.
-
Der verbundene 5-Bit-Wert wird zum
Auswählen
eines der 32 XOR-Akkumulator-Puffer in dem zweiten SRAM 440 verwendet,
während
Bits 2 bis einschließlich
11 des Busdadressenpfads 412 zum Auswählen eines individuellen Worts
in dem XOR-Akkumulator-Puffer in dem zweiten SRAM 440 verwendet
werden. Datenwerte in dem zweiten SRAM 440 werden Wort
für Wort
in das erste Register 450 ausgelesen, während Datenwerte von dem sekundären Bus 160 zu
dem zweiten Register 452 Wort für Wort kopiert werden. Der
XOR-Operator 453 führt die
XOR-Operation auf Basis von Daten in dem XOR-Akkumulator-Puffer
mit Daten durch, welche den sekundären Bus 160 durchqueren.
Ausgaben von dem XOR-Operator 453 werden in den zweiten
SRAM 440 zurückgeschrieben,
wobei der zweite SRAM Datenport 442 verwendet wird.
-
Gleich dem ersten fly-by XOR-Element 180 zum
Auslesen der akkumulierten Paritätsinformation
wie in Schritt 422 wählt
das Zeit- und Kontrollglied 420 den Busadressenpfad 412 zur
Kopplung an den zweiten SRAM Adressenport 441 aus, um jedes
Wort in dem XOR-Akkumulator-Puffer in dem zweiten SRAM 440 der Reihe
nach auf den Busdatenpfad 413 auszulesen, während der
DMA-Transfer entweder
zu dem Speicher 120 oder zu einem der Plattenlaufwerke 140 erfolgt. Ähnlich dem
ersten fly-by XOR-Element 180, kann der Prozessor 110 die
Einträge
des zweiten SRAM 440 direkt für Diagnosezwecke auslesen oder
währenddessen
in dem XOR-Puffer 190 Paritätsinformation zu lesen oder zu
bearbeiten, wenn es anders gewünscht
ist. Gleich dem ersten fly-by XOR-Element 180 schreibt das Zeit-
und Kontrollglied 420 gleichzeitig Null-Werte in jedes Wort
in dem XOR-Akkumulator-Puffer in dem zweiten SRAM 440,
um den XOR-Akkumulator-Puffer zu einem Rücksetzen auf einen gleichförmigen Null-Wert
zu bedingen.
-
Ähnlich
dem ersten fly-by XOR-Element 180 kann der Prozessor 110 auch
direkt auf ausgewählte Adressen
in dem zweiten SRAM 440 schreiben, um eine XOR-Operation
direkt zwischen den Inhalten des XOR-Puffers 190 und ausgewählten Informationen
auszuführen.
-
Das zweite fly-by XOR-Element 180 besitzt
das zusätzliche
Merkmal, dass die Anzahl von Speicherpuffern in dem Speicher 120 (oder
Null-Speicherpuffern), welche mit einem XOR-Akkumulator-Puffer verbunden
werden können,
nicht durch die Anzahl der Einträge
in dem CAM 330 begrenzt ist. Dies erlaubt die Verwendung
von RAID-Stripes mit beliebiger Breite, wo bis zu 32 RAID-Stripes gleichzeitig
verwendet werden. Das zweite fly-by XOR-Element 180 kann
zum Abändern
der Anzahl von XOR-Akkumulator-Puffern modifiziert werden, indem
die Breite des ersten SRAM-Datenport 433 und die Größe des zweiten
SRAM 440 geändert wird.
-
In einem bevorzugten Ausführungsbeispiel
werden Werte auf dem Busadressenpfad 412 und Busdatenpfad 430,
wie in Tabelle 4-1 gezeigt, verwendet. In Tabelle 4-1 werden Adressbereichwerte
hexadezimal und ausgewählte
Bit-Bereiche für den Busadressenpfad
(BA) 312 und Busdatenpfad (BD) 313 gezeigt.
-
-
Bevorzugte Ausführungsbeispiele
-
Das erste fly-by XOR-Element 180 und
sein zugehöriger
XOR-Puffer 190 und das zweite fly-by XOR-Element 180 und
sein zugehöriger
XOR-Puffer 190 sind bevorzugte Ausführungsbeispiele. Dem Fachmann
wird es nach Durchsicht dieser Anmeldung klar sein, dass das erste
fly-by XOR-Element 180 und sein zugehöriger XOR-Puffer 190 für einige
Arten von Gestaltungsbeschränkungen
bevorzugt werden würde
und dass das zweite fly-by XOR-Element 180 und sein zugehöriger XOR-Puffer 190 für andere
Gruppen von Gestaltungsbeschränkungen
bevorzugt werden würde.
-
Beispielsweise würden das erste fly-by XOR-Element 180 und
sein zugehöriger
XOR-Puffer 190 in jenen Fällen bevorzugt sein, in denen
ein relativ kleiner aber komplexer CAM 330 weniger kostenaufwändig als ein
zusätzlicher
relativ großer
externer SRAM 430 ist, während das zweite fly-by XOR-Element 180 und
sein zugehöriger
XOR-Puffer 190 in jenen Fällen der gegensätzlichen
Situation bevorzugt werden, oder wenn die Stripes für das RAID-Suchsystem
relativ breit sind.
-
Alternative
Ausführungsbeispiele
-
Obwohl hierin bevorzugte Ausführungsbeispiele
offenbart sind, sind viele Variationen möglich, welche innerhalb des
Bereichs der Ansprüche
bleiben, und diese Variationen werden dem Fachmann nach Durchsicht dieser
Anmeldung klar.