-
Die
vorliegende Erfindung bezieht sich auf eine Übertragung von Daten von einem
verteilten Speicher zu einem Prozessor unter Verwendung einer Übereinstimmungssteuerung
bzw. Kohärenzsteuerung.
-
Bei
einer Architektur von verteilten, gemeinsam verwendeten Speichern
kann eine Mehrzahl von Prozessoren von einer Mehrzahl von gemeinsam verwendeten
Speicherressourcen lesen und in dieselbe schreiben. Abschnitte der
gemeinsam verwendeten Speicherressourcen können verschiedenen Zuständen unterworfen
sein. Beispielsweise kann einer der Mehrzahl von Prozessoren eine
bestimmte Seite eines Speichers über
einen Zeitraum verriegeln, oder eine Gruppe der Mehrzahl von Prozessoren
kann einen gemeinsamen Zugriff auf eine bestimmte Seite haben. Ferner
kommuniziert die Mehrzahl von Prozessoren allgemein durch eine physische
Verbindung mit der Mehrzahl von gemeinsam verwendeten Speicherressourcen.
Die Mehrzahl von Prozessoren verwendet in der Regel Cachespeicherungsmechanismen,
um die Leistungsfähigkeit
von Speicherzugriffen zu optimieren und dadurch die Notwendigkeit,
die physische Verbindung für
jede Speichertransaktion zu verwenden, zu vermeiden. Die Verwendung
von Cachespeicherungsmechanismen in einem verteilten, gemeinsam
verwendeten Speicherschema beinhaltet ein Bereitstellen eines Nachverfolgungsschemas
oder -protokolls, um eine Übereinstimmung
zwischen Prozessoren, die auf dieselben physischen Speicherplätze zugreifen,
zu gewährleisten.
-
Allgemein
gibt es zwei Gruppen von Protokollen, die sich mit einer Cachespeicherübereinstimmung
in einer Architektur von verteilten, gemeinsam verwendeten Speichern
beschäftigen.
Im einzelnen können
Rundsendungsprotokolle verwendet werden, bei denen eine Schreibtransaktion
an alle Prozessoren in dem System rundgesendet wird. In der Regel erfolgt
die Rundsendung durch die Kommunikation von Schreibtransaktionen
auf einem gemeinsam verwendeten Bus. Rundsendeprotokolle werden
allgemein als „Schnüffel"-Protokolle (snoopy
protocols) bezeichnet, da alle Prozessoren den Bus bezüglich Schreibtransaktionen überwachen
und entsprechende Maßnahmen
ergreifen, falls eine Schreibtransaktion erfaßt wird, die eine in ihrem
jeweiligen Cachespeicher enthaltene Leitung beeinflußt.
-
Alternativ
dazu können
verzeichnisbasierte Cachespeicherübereinstimmungsprotokolle verwendet
werden. Bei verzeichnisbasierten Cachespeicherübereinstimmungsprotokollen
wird eine Schreibtransaktion lediglich an diejenigen Prozessoren
weitergeleitet, von denen man weiß, daß sie eine Kopie der jüngst geänderten
Cacheleitung besitzen. In diesen Protokollen werden Zustandsinformationen
in einem zentralisierten oder verteilten Verzeichnis unterhalten,
um den Zustand von Cacheleitungen nachzuverfolgen. Ein anfordernder
Cachespeicher kann bei dem Verzeichnis anfragen, um die Besitzer
jeglicher Cachespeicher, die dieselben Cacheleitungen gemeinsam
verwenden, zu bestimmen. Invalidierungssignale oder Schreibaktualisierungen
werden lediglich an Cachespeicher gesandt, die in dem Verzeichnis
identifiziert sind. Verzeichnisbasierte Cachespeicherübereinstimmungsprotokolle
sind vorteilhaft, da kein Bedarf besteht, alle Prozessoren auf einem
einzigen Bus zu verbinden. Überdies
wird das Verkehrsaufkommen über
die Verbindung im Vergleich zu Schnüffel-Protokollen verringert.
Somit eignen sich verzeichnisbasierte Cachespeicherübereinstimmungsprotokolle
besser für
skalierbare Architekturen.
-
Ferner
können
allgemein erhältliche
Speicher (z. B. dynamischer Direktzugriffsspeicher (DRAM)), die
bei Architekturen von verteilten Speichern verwendet werden, problematisch
sein. Im einzelnen besteht eine Wahrscheinlichkeit, daß, wenn Daten
in einem Speicher gespeichert und anschließend wiedergewonnen werden,
die wiedergewonnenen Daten eine gewisse Korruption erleiden. Beispielsweise
speichert ein DRAM Informationen in relativ kleinen Kondensatoren,
die aufgrund einer Vielzahl von Mechanismen eine vorübergehende
Korruption erfahren können. überdies
kann eine Datenkorruption infolge von Hardwareausfällen, z.
B. losen Speichermodulen, defekten Chips, Leitungs- oder Verdrahtungsfehlern
und/oder dergleichen, auftreten. Die durch derartige Ausfälle verursachten
Fehler werden als wiederholbare Fehler bezeichnet, da derselbe physische
Mechanismus wiederholt dasselbe Muster von Datenkorruption bewirkt.
-
Um
dieses Problem anzugehen, wurden bereits eine Vielfalt von Fehlererfassungs-
und Fehlerkorrekturalgorithmen entwickelt. Im allgemeinen verwenden
Fehlererfassungsalgorithmen typischerweise redundante Daten, die
zu einer Zeichenfolge von Daten hinzugefügt werden. Die redundanten
Daten werden unter Verwendung einer Prüfsummen- oder Zyklische-Redundanzprüfung-Operation
(CRC-Operation, CRC = cyclic redundancy check, zyklische Redundanzprüfung) berechnet.
Wenn die Zeichenfolge von Daten und die ursprünglichen redundanten Daten
wiedergewonnen werden, werden die redundanten unter Verwendung der
wiedergewonnenen Daten neu berechnet. Falls die neu berechneten
redundanten Daten nicht mit den ursprünglichen redundanten Daten übereinstimmen,
wird eine Datenkorruption bei den wiedergewonnen Daten erfaßt.
-
Fehlerkorrekturcode-Algorithmen
(ECC-Algorithmen, ECC = error correction code, Fehlerkorrekturcode)
arbeiten auf ähnliche
Weise wie Fehlererfassungsalgorithmen. Wenn Daten gespeichert werden,
werden redundante Daten berechnet und in Zuordnung zu den Daten
gespeichert. Wenn die Daten und die redundanten Daten anschließend wiedergewonnen
werden, werden die redundanten Daten neu berechnet und mit den wiedergewonnenen
redundanten Daten verglichen. Wenn ein Fehler erfaßt wird
(z. B. die ursprünglichen
und die neu berechneten redundanten Daten stimmen nicht überein), können die
ursprünglichen
und die neu berechneten redundanten Daten verwendet werden, um bestimmte Fehlerkategorien
zu korrigieren. Ein Beispiel eines bekannten ECC-Schemas ist in
dem Dokument „Single
Byte Error Correcting-Double Byte Error Detecting Codes for Memory
Systems" von Shigeo
Kaneda und Eiji Fujiwara beschrieben, das in IEEE TRANSAC-TIONS on COMPUTERS,
Bd. C31, Nr. 7, Juli 1982, veröffentlicht
wurde.
-
Allgemein
können
ECC-Algorithmen in einer Anzahl von Komponenten in einem Computersystem eingebettet
sein, um eine Datenkorruption zu korrigieren. Häufig können ECC-Algorithmen in Speichersteuerungen,
wie z. B. kohärenten
Speichersteuerungen, in Architekturen von verteilten und gemeinsam
verwendeten Speichern eingebettet sein. Die Implementierung des
ECC-Algorithmus setzt der Implementierung einer Speichersteuerung
allgemein Grenzen, z. B. Busbreite und -frequenz. Dementsprechend
kann die Implementierung des ECC-Algorithmus Speichertransaktionen
funktionsbedingte Beschränkungen
auferlegen.
-
Bekannte
Systeme implementieren Cachespeicherübereinstimmungsschemata und
ECC-Algorithmen in einem Speichersteuerungssystem. Bei bekannten
Systemen, die eine Einzelbitfehlerkorrektur verwenden, ist es ferner
möglich,
Verzeichnismarkierungsdaten (die Daten, die den Zustand einer Cacheleitung
gemäß dem Cachespeicherübereinstimmungsschema
definieren) zu aktualisieren, ohne eine Kommunikation der Cacheleitungsdaten
zu erfordern. Im einzelnen können
die ECC-Daten, die der Cacheleitung zugeordnet sind, aktualisiert
werden, ohne daß die
Kommunikation und Verarbeitung der Cacheleitungsdaten erforderlich
ist. Jedoch weisen bekannte Systeme, die Markierungsdaten auf diese Weise
aktualisieren, aufgrund von Beschränkungen, die mit dem Einzelbit-ECC-Algorithmus
einhergehen, eine schlechte Busausnutzung auf. Insbesondere erfordern
bekannte Systeme einen Betrieb über
vier Einzelbit-ECC-Domains und erfordern somit einen sehr breiten
Bus (z. B. 576 Bits), wodurch bewirkt wird, daß die Busausnutzung gering
ist.
-
Die
Aufgabe der vorliegenden Erfindung besteht darin, Systeme und ein
Verfahren zu schaffen, die eine Aktualisierung von Markierungsdaten
bei verbesserter Ausnutzung ermöglichen.
-
Diese
Aufgabe wird durch Systeme gemäß Anspruch
1 oder 10 sowie durch ein Verfahren gemäß Anspruch 19 gelöst.
-
Bei
einem Ausführungsbeispiel
ist die Erfindung auf ein System zum Verarbeiten von Speichertransaktionsanforderungen
gerichtet. Das System umfaßt
eine Steuerung zum Speichern und Wiedergewinnen von Cacheleitungen
und einen Puffer, der mit der Steuerung und zumindest einem Bus
kommunikativ gekoppelt ist. Die Steuerung formatiert Cacheleitungen
zu einer Mehrzahl von Abschnitten, implementiert ein Fehlerkorrekturcodeschema (ECC-Schema),
um einen Einzelbytefehler in einem ECC-Codewort für Paare
der Mehrzahl von Abschnitten zu korrigieren, speichert jeweilige
Paare der Mehrzahl von Abschnitten derart, daß jedes Einzelbyte der jeweiligen
Paare der Mehrzahl von Abschnitten in einer einzigen einer Mehrzahl
von Speicherkomponenten gespeichert wird. Wenn die Steuerung eine
Speichertransaktionsanforderung, die Markierungsdaten modifiziert,
ohne Cacheleitungsdaten zu modifizieren, verarbeitet, berechnet
der Puffer neue ECC-Daten unter Verwendung vorheriger ECC-Daten,
vorheriger Markierungsdaten und der neuen Markierungsdaten, ohne
eine Kommunikation von Cacheleitungsdaten zu erfordern.
-
Bevorzugte
Ausführungsbeispiele
der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf
die beiliegenden Zeichnungen näher
erläutert.
Es zeigen:
-
1 ein Speichersteuerungssystem
gemäß repräsentativen
Ausführungsbeispielen;
-
2 ein Cacheleitungsformat,
das durch eine Speichersteuerung, die gemäß repräsentativen Ausführungsbeispielen
implementiert ist, verwendet werden kann;
-
3 ein Cacheleitungslayout,
das verwendet werden, kann, um Cachedaten durch eine Speichersteuerung,
die gemäß repräsentativen
Ausführungsbeispielen
implementiert ist, in einem Speicher zu speichern;
-
4 ein Flußdiagramm
zum Verarbeiten von Cachedaten, die an einen ECC-Algorithmus gemäß repräsentativen
Ausführungsbeispielen
angepaßt
sind;
-
5 ein Speichersystem, bei
dem ein ECC-Algorithmus selektiv eine Löschmodusfehlerkorrektur auf
Daten anwenden kann, die von begrenzten Abschnitten des Speichersystems
wiedergewonnen werden;
-
6 und 7 Flußdiagramme zum Verarbeiten
von Cachedaten, die an einen ECC-Algorithmus gemäß repräsentativen Ausführungsbeispielen angepaßt sind;
-
8 ein Flußdiagramm,
das einer Modifizierung an Markierungsdaten gemäß repräsentativen Ausführungsbeispielen
zugeordnet ist;
-
9 bis 12 XOR-Bäume zum Berechnen neuer ECC-Daten,
die ei ner Markierungsaktualisierungstransaktion gemäß repräsentativen
Ausführungsbeispielen
zugeordnet sind; und
-
13 und 14 andere XOR-Bäume zum Berechnen neuer ECC-Daten,
die einer Markierungsaktualisierungstransaktion gemäß repräsentativen
Ausführungsbeispielen
zugeordnet sind.
-
Repräsentative
Ausführungsbeispiele
implementieren vorteilhafterweise einen Bytefehlerkorrketur-ECC-Algorithmus
in einem Speichersystem, um eine erhöhte Zuverlässigkeit des Speichersystems zu
liefern. Im einzelnen können
repräsentative
Ausführungsbeispiele
Cacheleitungen in einem Speicher speichern, indem sie die verschiedenen
Bits der Cacheleitung über
eine Mehrzahl von DRAM-Komponenten verteilen. Wenn der Byte-ECC-Algorithmus mit
einer entsprechenden Verteilung von Daten über die Mehrzahl von DRAM-Komponenten
kombiniert wird, können
repräsentative
Ausführungsbeispiele den
Ausfall einer gesamten DRAM-Komponente tolerieren, ohne den Ausfall
des gesamten Speichersystems zu bewirken. Repräsentative Ausführungsbeispiele
können
ferner eine Dual-Zyklus-Implementierung eines ECC-Schemas verwenden,
um das ECC-Schema so anzupassen, daß es die Ausnutzung eines zugeordneten
Busses optimiert. Repräsentative
Ausführungsbeispiele
können
selektiv einen „Lösch"-Modus für den ECC-Algorithmus freigeben,
wenn ein wiederholbarer Fehler identifiziert wird, um die Wahrscheinlichkeit
eines Korrigierens von zusätzlichen
Fehlern zu erhöhen.
Der Löschmodus
kann auf einen begrenzten Abschnitt des Speichersystems angewendet
werden, um die Wahrscheinlichkeit falsch diagnostizierten Datenkorruption
zu verringern.
-
Repräsentative
Ausführungsbeispiele
optimieren ferner eine Verarbeitung von Cacheleitungen, die in einer
Mehrzahl von DRAM-Komponenten in einer Architektur von verteilten
Speichern, die eine Cachespeicherübereinstimmung verwendet, gespeichert
sind. Im einzelnen können
ausgewählte
Speichertransaktionen in dem Cachespeicherübereinstimmungsschema eine
Verzeichnismarkierung, die einer Cacheleitung zugeordnet ist, beeinflussen, ohne
die Daten, die der Cacheleitung zugeordnet sind, zu beeinflussen.
Für diese
Typen von Speichertransaktionen muß die Cachesteuerung, die das
Cachespeicherübereinstimmungsprotokoll
implementiert, nicht kommunizieren und alle Cacheleitungsdaten verarbeiten,
um eine Veränderung
bei den Markierungsdaten zu bewirken.
-
Statt
dessen wird ein „intelligenter
Puffer" verwendet,
um die Markierungsdaten zu modifizieren und um die ECC-Daten gemäß den modifizierten Markierungsdaten
zu modifizieren. Dadurch kann eine Busausnutzung und Speicherkomponentenausnutzung
optimiert werden.
-
Repräsentative
Ausführungsbeispiele
können
einen geeigneten Reed-Solomon-Burst-Fehlerkorrekturcode verwenden,
um eine Bytekorrektur durchzuführen.
Bei Reed-Solomon-Algorithmen besteht das Codewort aus n m-Bit-Zahlen
: C = (c, cn-2, ..., c0).
Das Codewort kann mathematisch durch das folgende Polynom eines
Grades n dargestellt werden, wobei die Koeffizienten (Symbole) Elemente
in dem finiten Galios-Feld sind: (2m): C(x)
= (cxn-1 + cn-2xn-2 ... + c0). Das
Codewort wird unter Verwendung eines Generatorpolynoms (das üblicherweise
mit g(x) bezeichnet wird) erzeugt. Im einzelnen werden die Nutzlastdaten
(durch u(x) bezeichnet) zum systematischen Codieren mit dem Generatorpolynom
multipliziert, d. h. C(x) = xn-ku(x) + [xn-ku(x)mod(g(x))]. Ein systematisches Codieren
bewirkt, daß die
ursprünglichen
Nutzlastbits explizit in definierten Positionen des Codeworts erscheinen.
Die ursprünglichen
Nutzlastbits werden durch xn-ku(x) dargestellt,
und die Redundanzinformationen werden durch [xn-ku(x)mod(g(x))]
dargestellt.
-
Wenn
das Codewort anschließend
aus dem Speicher wiedergewonnen wird, kann das wiedergewonnene Codewort
aufgrund eines vorübergehenden
Ausfalls und/oder eines wiederholbaren Ausfalls eine Datenkorruption
erleiden. Das wiedergewonnene Codewort wird durch das Polynom r(x)
dargestellt. Falls r(x) eine Datenkorruption umfaßt, unterscheidet sich
r(x) durch ein Fehlersignal e(x) von C(x). Die Redundanzinformationen
werden aus dem wiedergewonnen Codewort neu berechnet. Die ursprünglichen
Redundanzinformationen, wie sie in dem Speicher gespeichert sind,
und die erneut berechneten Redundanzinformationen werden unter Verwendung einer
Exklusiv-Oder-Verknüpfung
(XOR-Verknüpfung)
kombiniert, um das Syndrompolynom s(x) zu bilden. Das Syndrompo lynom
ist ebenfalls auf das Fehlersignal bezogen. Unter Verwendung dieser
Beziehung können
mehrere Algorithmen das Fehlersignal bestimmen und somit die Fehler
in den durch r(x) dargestellten korrumpierten Daten korrigieren.
Diese Techniken umfassen eine Fehler-Lokalisierer-Polynom-Bestimmung, eine
Wurzelfindung zum Bestimmen der Positionen eines Fehlers bzw. von
Fehlern, und eine Fehlerwertbestimmung zum Bestimmen des richtigen
Bitmusters des Fehlers bzw. der Fehler. Weitere Einzelheiten, die
sich auf die Wiedergewinnung des Fehlersignals e(x) aus dem Syndrom
s(x) gemäß Reed-Solomon-Burst-Fehlerkorrekturcodes beziehen,
finden sich in dem Dokument THE ART OF ERROR CORRECTING CODES von
Robert H. Morelos-Zaragoza, Seiten 33–72 (2002), das durch Bezugnahme
in das vorliegende Dokument aufgenommen ist.
-
Löschungen
bei Fehlerkorrekturcodes sind spezifische Bits oder spezifische
Zeichenfolgen von Bits, von denen man weiß, daß sie korrumpiert sind, ohne
auf die ECC-Funktionalität zurückzugreifen. Beispielsweise
können
spezifische Bits aufgrund eines Hardwareausfalls, beispielsweise
einer fehlerhaften DRAM-Komponente, eines Verdrahtungsfehlers und/oder
dergleichen als korrumpiert identifiziert werden. Eine Einführung von
Löschungen
in den ECC-Algorithmus ist vorteilhaft, da die Positionen der gelöschten Bits
bekannt sind. Angenommen, d stellt den minimalen Abstand eines Codes
dar, v stellt die Anzahl von Fehlern dar und μ stellt die Anzahl von Löschungen
dar, die in einem empfangenen ECC-Codewort enthalten sind. Anschließend wird der
minimale Hamming-Abstand zwischen Codewörtern in den nicht-gelöschten Abschnitten
auf zumindest d–μ verringert.
Es folgt, daß die
Fehlerkorrekturfähigkeit
[(d – μ – 1)/2]
beträgt
und die folgende Beziehung aufrechterhalten wird: d > 2v + μ. Im einzelnen
zeigt diese Ungleichheit, daß es
für einen
feststehenden minimalen Abstand zweimal so „einfach" ist, eine Löschung zu korrigieren, wie
es ist, einen zufällig
positionierten Fehler zu korrigieren.
-
Bei
repräsentativen
Ausführungsbeispielen kann
der ECC-Algorithmus
einer Speichersteuerung die Decodierungsprozedur eines [36, 33,
4]-verkürzten
Reed-Solomon-Engerfassungscodes
(bei dem die Codewortlänge
36 Symbole beträgt,
die Nutzlastlänge
33 Symbole beträgt
und der Hamming-Abstand 4 Bits beträgt) über das finite Galios-Feld
(28) implementieren. Das finite Galios-Feld
definiert, daß die Symbollänge 8 Bits
beträgt.
Durch ein derartiges Anpassen des ECC-Algorithmus kann der ECC-Algorithmus
in zwei unterschiedlichen Modi arbeiten. In einem ersten Modus kann
der ECC-Algorithmus eine Einzelbyte-Korrektur durchführen, wobei
sich der Begriff „Einzelbyte" auf 8 zusammenhängende Bits
bezieht, die auf 8-Bit-Grenzen ausgerichtet sind. Ein Einzelbytefehler
bezieht sich auf jegliche Anzahl von Bits in einem Einzelbyte, die
korrumpiert sind. Fehler, die an mehr als einer Byteposition eine
Bitkorruption bewirken, werden als „Mehrbytefehler" bezeichnet, die
als nichtkorrigierbar erfaßt
werden. In dem zweiten Modus (dem Löschmodus) wird eine Byteposition (oder
Bytepositionen) in dem ECC-Codewort als eine Löschung über eine Registereinstellung
spezifiziert. Die Position kann durch einen Software- oder Firmwareprozeß als wiederholbarer
Fehler identifiziert werden, der durch einen Hardwareausfall bewirkt wird.
Da die Position des Fehlers bekannt ist, kann der ECC-Algorithmus
in dem Löschmodus
den Bytefehler, der der Löschung
zugeordnet ist, und einen anderen zufällig lokalisierten Einzelbytefehler
(oder zwei Lösch-Einzelbytefehler,
falls gewünscht)
korrigieren.
-
Unter
Bezugnahme auf die Zeichnungen zeigt 1 ein
System 100, das angepaßt
ist, um einen geeigneten ECC-Code, beispielsweise den [36, 33, 4]-verkürzten Reed-Solomon-Engerfassungscode,
gemäß repräsentativen
Ausführungsbeispielen zu
implementieren. Das System 100 weist eine Mehrzahl von
Doppelreihenspeichermodulen (DIMMs) auf, die als 110a und 110b gezeigt
sind. Zusätzliche DIMMs 110 (nicht
gezeigt) können,
falls gewünscht, verwendet
werden, wie anschließend
ausführlicher erläutert wird.
Jedes der DIMMs 110a und 110b umfaßt eine
Mehrzahl von 4 Bits breiten DRAM-Komponenten 102 (die
als DRAM0–DRAM17
bzw. DRAM18–DRAM35
gezeigt sind). Somit bilden die DIMMs 110a und 110b einen
logischen Rang 101, der eine Breite von 144 Bits aufweist.
Die DIMMs 110a und 110b sind durch einen Bus 103 (oder
mehrere Busse) mit einer Mehrzahl von Pufferchips 104a und 104b kommunikativ
gekoppelt. Die Pufferchips 104a und 104b arbeiten
parallel, um Cacheleitungen zu puffern und zwischen jeweiligen Bussen
zu verschieben. Im einzelnen kann der Bus 103 eine Breite von
144 Bits bei 250 MT/s besitzen, und der Bus 105 kann eine
Breite von 72 Bits besitzen und bei 500 MT/s arbeiten. Ferner kann
einer oder können
beide Pufferchips 104a und 104b Verzeichnismarkierungsdaten
und zugeordnete ECC-Daten modifizieren, ohne eine Kommunikation
von Cacheleitungsdaten zu erfordern, wie anschließend ausführlicher
erläutert
wird. Der Bus 105 kann durch einen Multiplexer/Demultiplexer
(MUX/DEMUX) 106 demultiplexiert werden. Eine Steuerung 108 kann über zwei
unidirektionale 144-Bit-Busse (einen für ankommende Daten und den
anderen für
ausgehende Daten) mit dem Demultiplexer 106 kommunizieren.
-
Die
Steuerung 108 kann Cacheleitungen verarbeiten, die Daten
zugeordnet sind, die in den DIMMs 110a und 110b gemäß repräsentativen
Ausführungsbeispielen
gespeichert sind. Durch ein geeignetes Verteilen von Daten über die
verschiedenen DRAM-Komponenten 102 und durch ein Verwenden eines
auf geeignete Weise angepaßten
Bytekorrektur-ECC-Algorithmus
ermöglicht
das System 100, daß eine
gesamte DRAM-Komponente 102 ausfällt, ohne den Ausfall des Speichersystems 100 zu
bewirken. Die Fehlerkorrekturfunktionalität der Steuerung 108 kann
einen ECC unter Verwendung von standardmäßigen Logikentwürfen implementieren.
Im einzelnen kann die ECC-Funktionalität der Steuerung 108 unter
Verwendung von XOR-Bäumen, Schieberegistern,
Nachschlagtabellen und/oder anderer logischer Elemente implementiert
werden. Überdies
kann die Steuerung 108 selektiv eine Löschmodus verarbeitung für Daten,
die in dem DIMM 110a gespeichert sind, unter Verwendung
des Registers 109 ermöglichen.
-
Die 2 und 3 zeigen ein Cacheleitungsformat und
ein Cacheleitungslayout für
eine Implementierung durch die Steuerung 108, um die Speicherung
von Cachedaten über
eine Mehrzahl von DRAM-Komponenten 102 gemäß repräsentativen Ausführungsbeispielen
zu ermöglichen.
Im einzelnen zeigt ein Cacheleitungsformat 200 in 2 das Cacheleitungsformat
für eine
Kommunikation von Cachedaten zu und von Prozessoren (nicht in den Zeichnungen
gezeigt), z. B. bei einer Architektur von verteilten, gemeinsam
verwendeten Speichern. Die jeweiligen Bits (von 0 bis 1.023 indexiert)
der Cacheleitung sind in eine Mehrzahl von Gruppen (die durch DATA0–DATA7 (DATEN0–DATEN7)
bezeichnet sind) aufgeteilt. Jede der Gruppen enthält 128 Bits.
-
Das
Cacheleitungslayout 300 in 3 veranschaulicht,
wie die jeweiligen Bits von Cacheleitungen, die von Prozessoren
empfangen werden, durch die Steuerung 108 mit ECC-Informationen und Verzeichnismarkierungsinformationen
in den DRAM-Komponenten 102 gespeichert werden. Die ECC-Bits
(die Redundanzinformationen) können
unter Verwendung des Reed-Solomon-Code-Algorithmus berechnet werden.
Die Verzeichnismarkierungsinformationen können gemäß einem Speicherübereinstimmungsschema
erzeugt und aktualisiert werden, um das System 100 zu befähigen, in
einer Architektur von verteilten und gemeinsam verwendeten Speichern
zu arbeiten. Das Cacheleitungslayout 300 unterteilt die
Cacheleitungsdaten, Markierungsdaten und ECC-Bits in acht Abschnitte
(als 301–308 gezeigt),
wobei jeder Abschnitt 144 Datenbits aufweist. Jeder Abschnitt umfaßt 12 ECC-Bits.
Die ECC-Bits werden verwendet, um Fehler in zwei jeweiligen Abschnitten
zu korrigieren. Beispielsweise werden die 12 ECC-Bits des Abschnitts 301 und
die 12 ECC-Bits des Abschnitts 302 verwendet, um Bytefehler
in dem ECC-Codewort, das durch beide Abschnitte 301 und 302 gebildet
ist, zu korrigieren. Ferner sind die 26 Bits von Markierungsdaten
in dem Ab schnitt 301 gespeichert. Die Cacheleitungsdatengruppen (DATA7–DATA0)
sind durch Abschnitte 301–309 gestaffelt. Wie
zuvor erwähnt
wurde, bilden die DIMMs 110a und 110b einen logischen
Rang 101, der eine Breite von 144 Bits aufweist. Das Cacheleitungslayout 300 ist
gemäß dem physischen
Layout der DIMMs 110a und 110b angepaßt. Wenn
das Cacheleitungslayout 300 auf diese Weise angepaßt ist, kann
jeder der Abschnitte 301–308 über den
logischen Rang 101 gespeichert sein.
-
Durch
Verteilen jedes der Abschnitte 301–308 über DRAM-Komponenten 102 und
durch Verwenden des erörterten
Reed-Solomon-Codes kann
eine gesamte DRAM-Komponente 102 ausfallen, ohne den Ausfall
des Speichersystems 100 zu bewirken. Im einzelnen können immer
jeweils zwei Abschnitte (z. B. Abschnitte 301 und 302),
die die 24 ECC-Bits gemeinsam verwenden, über den logischen Rang 101 gespeichert
sein. Die geradzahligen Halbbytes (d. h. die ersten vier Bits eines
Einzelbytes) des ECC-Codeworts können
während
eines ersten Buszyklus über
jeweilige 36 DRAM-Komponenten 102 des logischen Rangs 101 gespeichert werden.
Anschließend
können
während
eines zweiten Buszyklus die ungeradzahligen Halbbytes des ECC-Codeworts
unter Verwendung desselben Musters wie bei den geradzahligen Halbbytes über die
36 DRAM-Komponenten 102 gespeichert
werden. Dadurch wird jedes Einzelbyte (8 zusammenhängende Bits,
die auf 8-Bit-Grenzen ausgerichtet sind) bei einer einzigen DRAM-Komponente 102 gespeichert. Wenn
eine der DRAM-Komponenten 102 ausfällt, ist die resultierende
Datenkorruption des jeweiligen ECC-Codeworts auf ein Einzelbyte beschränkt. Somit
kann der ECC-Algorithmus die dem Hardwareausfall zugeordnete Datenkorruption
korrigieren und kann ferner einen weiteren Fehler in einem weiteren
Byte korrigieren. Dementsprechend kann die Architektur des Systems 100 und
die Implementierung der Steuerung 108 die Fehlerkorrekturfunktionalität des ECC-Algorithmus
optimieren.
-
4 zeigt ein Flußdiagramm
zum Verarbeiten von Cacheleitungen durch die Steuerung 108 gemäß repräsentativen
Ausführungsbeispielen.
Bei Schritt 401 wird eine Cacheleitung von einem Prozessor
empfangen. Bei Schritt 402 werden die Cacheleitungsdaten
in Gruppen unterteilt. Bei Schritt 403 werden Markierungsinformationen
an eine der Gruppen angehängt.
Bei Schritt 404 werden die Cachedatengruppen und die Markierungsinformationen in
eine Mehrzahl von Abschnitten unterteilt. Bei Schritt 405 werden
ECC-Bits für
jedes Paar der Abschnitte berechnet, um ECC-Codewörter zu
bilden, die aus den ECC-Bits und den jeweiligen Cachedaten und/oder
den Markierungsinformationen bestehen. Bei Schritt 406 werden
die geradzahligen Halbbytes eines ECC-Codeworts über einen logischen Rang gespeichert.
Bei Schritt 407 werden die ungeradzahligen Halbbytes des
ECC-Codeworts unter Verwendung desselben Musters über den
logischen Rang gespeichert. Bei Schritt 408 wird ein logischer Vergleich
durchgeführt,
um zu bestimmen, ob noch zusätzliche
ECC-Codewörter
zu speichern sind. Falls noch zusätzliche ECC-Codewörter zu
speichern sind, kehrt der Prozeßfluß zu Schritt 406 zurück. Falls nicht,
geht der Prozeßfluß zu Schritt 409 über, um den
Prozeßfluß zu beenden.
-
Bei
repräsentativen
Ausführungsbeispielen kann
die Steuerung 108 die Löschmoduskorrektur auf
verschiedene Abschnitte eines Speichersystems anwenden, beispielsweise
das Speichersystem 500 der 5.
Das Speichersystem 500 umfaßt eine Mehrzahl von Speicherquadranten 504a–504d zur Speicherung
und Wiedergewinnung von Daten durch eine Speichereinheit 501 mittels
der Steuerung 108. Die Speichereinheit 501 umfaßt eine
Mehrzahl von Zeitplanern 502, um einen Zugriff über Quadrantenbusse 503 zeitlich
zu planen. Die Quadrantenbusse 503-1 bis 503-4 können unter
Verwendung einer Busbreite von 72 Bits implementiert sein. Durch
Verwenden einer Busbreite von 72 Bits und durch ein geeignetes Kommunizieren
eines ECC-Codeworts in entsprechenden Zyklen wird jedes Einzelbyte
eines ECC-Codeworts über
ein entsprechendes Paar von Drähten
eines entsprechenden Qua drantenbusses 503 übertragen.
Falls Verdrahtungsausfälle,
die einem der Quadrantenbusse 503 zugeordnet sind, auf zwei
oder weniger Einzelbytes eines ECC-Codeworts beschränkt sind,
kann die Steuerung 108 den Drahtausfall bzw. die Drahtausfälle kompensieren, indem
sie den Löschmodus
und eine Identifizierung des jeweiligen Fehlermusters verwendet.
-
Ferner
kann jeder der Quadranten 504 ein Paar von Speicherpuffern 104 umfassen.
Jeder Speicherpuffer 104 ist mit einem jeweiligen DRAM-Bus (als 505-1 bis 505-8 gezeigt)
gekoppelt. Ferner sind vier logische Speicherränge (als 101-1 bis 101-32 gezeigt)
mit jedem DRAM-Bus 505 gekoppelt. Jeder DRAM-Bus 505 weist
eine Busbreite von 144 Bits auf. Durch Verwenden einer Busbreite
von 144 Bits und durch Kommunizieren von Daten in entsprechenden
Buszyklen wird jedes Einzelbyte eines ECC-Codeworts über einen
entsprechenden Satz von vier Drähten
des DRAM-Busses 505 übertragen. Falls
also ein etwaiger Satz von Drahtausfällen zwei oder weniger Einzelbytes
eines ECC-Codeworts beeinflußt,
kann die Steuerung 108 die Drahtausfälle kompensieren, indem sie
den Löschmodus
und eine Identifizierung des jeweiligen Fehlermusters verwendet.
-
Jeder
Speicherrang 101 umfaßt
eine Mehrzahl von DRAM-Komponenten 102 in
jeweiligen DIMMs 110 (siehe Erläuterung der 1). Die Steuerung 108 kann ferner
Ausfälle
von einzelnen DRAM-Komponenten 102 kompensieren, wie zuvor erläutert wurde.
-
Die
Register 109 können
identifizieren, ob der Löschmodus
auf Daten angewandt werden sollte, die von einer spezifischen Bank
(Teileinheit in einem logischen Rang 101), dem logischen
Rang 101 (Paar von DIMMs 110, auf die parallel
zugegriffen wird), dem DRAM-Bus 505, dem Quadrantenbus 503 und/oder
einer beliebigen anderen geeigneten Hardwarekomponente, je nach
der architektonischen Implementierung, wiedergewonnen werden. Die
Fähigkeit,
mehrere unabhängige Löschungen
zu spezifizieren, erhöht
die Wahrscheinlichkeit, daß mehrere wiederholbare
Ausfälle
in dem Speichersystem korrigiert werden können. Beispielsweise können zwei Löschungen
spezifiziert werden, was erlaubt, daß zwei unterschiedliche wiederholbare
Fehler, die zwei unterschiedlichen Rängen oder zwei unterschiedlichen
DRAM-Bussen usw. zugeordnet sind, korrigiert werden.
-
Ferner
kann bei dem Löschmodus
ein kleiner Prozentsatz von nicht-korrigierbaren Fehlern als korrigierbar
decodiert werden. Die Fähigkeit,
die Löschung
einer begrenzten Region des Speichersystems zu spezifizieren, verringert
die Wahrscheinlichkeit, daß nicht-korrigierbare
Fehler fälschlicherweise als
korrigierbar diagnostiziert werden. Falls beispielsweise ein Hardwarefehler
die Korruption eines Einzelbytefehlers für eine Kommunikation von ECC-Codewörtern über den
DRAM-Bus 505-1 bewirkt, kann eines der Register 109 eingestellt
sein, um das spezifische Byte der Position des ECC-Codeworts für diesen
Bus zu identifizieren. Wenn ECC-Codewörter von dem DRAM-Bus 505-1 empfangen
werden, kann der Löschmodus
auf diese ECC-Codewörter
angewandt werden, um die Datenkorruption anzugehen. Ferner kann
die Anwendung des Löschmodus
auf diese ECC-Codewörter
unabhängig
von der Verarbeitung von ECC-Codewörtern erfolgen, die von DRAM-Bussen 505-2 bis 505-8 wiedergewonnen werden.
Demgemäß ist die
erhöhte
Wahrscheinlichkeit von fehldiagnostizierten nicht-korrigierbaren Fehlern
auf einen spezifischen Teilsatz des Speichersystems beschränkt.
-
In
dem Fall, in dem mehrere Löschungen identifiziert
werden, sollten die Abschnitte des Speichersystems 500,
die jeder Löschung
entsprechen, einander nicht überlappen.
Das heißt,
daß es
nicht vorteilhaft ist, eine Löschposition,
die einem spezifischen Rang zugeordnet ist, und eine andere Löschposition,
die dem DRAM-Bus 505, der diesen Rang enthält, zugeordnet
ist, zu spezifizieren.
-
6 zeigt ein Flußdiagramm
zum Wiedergewinnen von Daten, die in einem Speichersystem gemäß repräsentativen
Ausführungsbeispielen
gespeichert sind. Bei Schritt 601 wird der logische Rang,
in dem Cacheleitungsdaten gespeichert sind, bestimmt. Bei Schritt 602 wird
die Cacheleitung als ein Satz von vier aufeinanderfolgenden ECC-Codewörtern wiedergewonnen,
die in acht aufeinanderfolgenden Datenzyklen in die Speichersteuerung
eintreten. Jedes ECC-Codewort besteht aus zwei aufeinanderfolgenden
Zyklen, wobei sich die geradzahligen Halbbytes in dem ersten Zyklus
und die ungeradzahligen Halbbytes in dem zweiten Zyklus befinden.
Bei Schritt 603 wird bestimmt, ob der Löschmodus für die wiedergewonnenen Daten über den
Wert des entsprechenden Registers bzw. der entsprechenden Register
freigegeben ist. Falls die Bestimmung wahr ist ist, geht der Prozeßfluß zu Schritt 604 über. Bei Schritt 604 wird
für jedes
entsprechende Paar von Cacheleitungsdatenabschnitten das Löschbyte,
das auf die physische Fehlfunktion zurückzuführen ist, korrigiert, ein weiterer
Bytefehler (falls vorhanden) kann korrigiert werden, und Mehrbytefehler
(falls vorhanden) können
erfaßt
werden. Falls die logische Bestimmung bei Schritt 603 falsch
ist, geht der Prozeßfluß zu Schritt 605 über. Bei
Schritt 605 kann für
jedes entsprechende Paar von Cacheleitungsdatenabschnitten ein Einzelbytefehler
(falls vorhanden) korrigiert werden, und Mehrbytefehler (falls vorhanden) können erfaßt werden.
Von beiden der Schritte 604 und 605 geht der Prozeßfluß zu Schritt 606 über. Bei Schritt 606 wird
ein logischer Vergleich durchgeführt, um
zu bestimmen, ob ein nicht-korrigierbarer Fehler (d. h. Mehrbytefehler)
erfaßt
wurde. Falls die Bestimmung falsch ist, geht der Prozeßfluß zu Schritt 607 über, wo
die Cacheleitungsdaten erneut zusammengestellt werden und die Cacheleitung
an einen geeigneten Prozessor kommuniziert wird. Falls die logische
Bestimmung bei Schritt 606 wahr ist, geht der Prozeßfluß zu Schritt 608 über, wo
der Auftretensfall eines nicht-korrigierbaren Fehlers unter Verwendung eines
geeigneten Fehlersignals kommuniziert werden kann.
-
Überdies
können
repräsentative
Ausführungsbeispiele
die ECC-Algorithmen für
eine Implementierung in Hardware gemäß der Architektur des Systems 100 optimieren.
Im einzelnen gehen auf übliche
Weise implementierte ECC-Algorithmen davon aus, daß alle Nutzlastdaten
unmittelbar verfügbar sind,
wenn die ECC-Bits berechnet werden. Wie jedoch zuvor erörtert wurde,
gewinnen repräsentative Ausführungsbeispiele
die geradzahligen Halbbytes eines Codeworts in einem ersten Buszyklus
wieder und gewinnen die ungeradzahligen Halbbytes des Codeworts
in einem anderen Buszyklus wieder (siehe Erläuterung der 6). Bei repräsentativen Ausführungsbeispielen
besteht somit eine gewisse Verzögerung,
bis alle Codewortbits verfügbar
werden. Repräsentative
Ausführungsbeispiele
können
ein Verarbeiten der ersten Gruppe von Halbbytes vorteilhafterweise
unmittelbar beginnen, ohne auf die zweite Gruppe von Halbbytes zu
warten.
-
7 zeigt ein Flußdiagramm
zum Verarbeiten von wiedergewonnenen Daten gemäß einem repräsentativen
Ausführungsbeispiel.
Bei Schritt 701 werden die geradzahligen Halbbytes eines
Codeworts wiedergewonnen. Bei Schritt 702 wird die Redundanz
teilweise berechnet, indem Kombinationen der wiedergewonnenen Bits
an XOR-Bäume
angelegt werden. Bei Schritt 703 werden die ungeradzahligen
Halbbytes wiedergewonnen. Schritt 703 kann gleichzeitig
mit der Durchführung
des Schritt 702 auftreten. Wenn die ungeradzahligen Halbbytes
wiedergewonnen werden, können
die ungeradzahligen Halbbytes an XOR-Bäume angelegt werden (Schritt 704).
Bei Schritt 705 werden die Ergebnisse des Anlegens der
geradzahligen Halbbytes und der ungeradzahligen Halbbytes an XOR-Bäume durch
eine XOR-Verknüpfung
kombiniert, um die vollständige Redundanz
zu bilden. Während
die neu berechnete Redundanz auf diese Weise erzeugt wird, kann
die wiedergewonnene Redundanz in dem ersten bzw. dem zweiten Zyklus
aus ihren geradzahligen bzw. ungeradzahligen Halbbytes zusammengestellt
werden. Die neu berechnete Redundanz und die wiedergewonnene Redundanz
werden durch eine XOR-Verknüpfung kombiniert,
um das Syndrom zu erzeugen (Schritt 706). Das Syndrom wird
anschließend
in einem von zwei Modi decodiert (Schritt 707). Falls für das ECC-Codewort
kein Löschmodus
spezifiziert wurde, wird das Syndrom decodiert, um die Position und
den Wert eines Einzelbytefehlers zu bestimmen. Falls ein Löschmodus
spezifiziert wurde, wird ein anderer Decodierungsprozeß verwendet,
um den Wert des Fehlers in der Löschposition
und die Position und den Wert eines zusätzlichen Einzelbytefehlers,
falls einer existiert, zu bestimmen.
-
Wie
zuvor erläutert
wurde, können
Pufferchips 104 Verzeichnismarkierungsdaten und zugeordnete
ECC-Daten modifizieren, ohne eine Kommunikation von Cacheleitungsdaten
zu erfordern, wie nachstehend ausführlicher erläutert wird. 8 zeigt ein Flußdiagramm,
das einer Modifizierung an Markierungsdaten gemäß repräsentativen Ausführungsbeispielen
zugeordnet ist. Bei Schritt 801 wird eine Speicheranforderung
empfangen, die Markierungsdaten gemäß einem Cachespeicherübereinstimmungsschema
modifiziert und die keine Cacheleitungsdaten modifiziert. Bei Schritt 802 gewinnt
der Puffer 104 alte Markierungsdaten und alte ECC-Daten,
die den alten Markierungsdaten zugeordnet sind, für die entsprechende
Cacheleitung wieder. Bei Schritt 803 werden die alten Markierungsdaten
und die alten ECC-Daten an XOR-Bäume
angelegt, um ECC-Zwischenergebnisdaten zu erzeugen. Bei Schritt 804 werden
die neuen Markierungsdaten an den Puffer 104 kommuniziert.
Bei Schritt 805 werden die ECC-Zwischenergebnisdaten und die neuen
Markierungsdaten gemäß dem ECC-Schema
an XOR-Bäume
angelegt, um neue ECC-Daten zu erzeugen. Bei Schritt 806 werden
die neuen ECC-Daten derart in Speicherkomponenten geschrieben, daß jedes
Einzelbyte von Daten in einer entsprechenden DRAM-Komponente gespeichert
wird. Bei Schritt 807 werden die Markierungsdaten derart
in einen Speicher geschrieben, daß jedes Einzelbyte von Daten
in einer entsprechenden DRAM-Komponente gespeichert wird.
-
9–12 zeigen
logische Darstellungen von XOR-Baumverknüpfungen,
die durch den Puffer 104 durchgeführt werden können, um
unter Verwendung von neuen Markierungsdaten, alten Markierungsdaten
und alten ECC-Daten gemäß repräsentativen Ausführungsbeispielen
für den
[36, 33, 4]-verkürzten Reed-Solomon-Engerfassungscode
neue ECC-Daten zu berechnen. Die Verknüpfungen von XOR-Bäumen 900 und 1000 der 9 und 10 arbeiten durch ein „Entfernen" des Beitrags der
ursprünglichen
oder alten Markierungsdaten aus den ECC-Daten durch ein XOR-Verknüpfen der
alten Markierungsdaten aus den alten ECC-Daten, um die ECC-Zwischendaten zu
erzeugen. Die neuen Markierungsdaten werden anschließend zu
den ECC-Daten in XOR-Bäumen 1100 und 1200 der 11 und 12 beigefügt, indem die neuen Markierungsdaten
mit den ECC-Zwischendaten XOR-verknüpft werden.
-
In
dem XOR-Baum 900 stellt jeder Ausdruck alte_Daten[] (old_data[])
das jeweilige wiedergewonnene Bit der 24 Bits von Markierungsdaten
in dem Abschnitt 301 des Cacheleitungslayouts 300 der 3 dar. Desgleichen stellt
jeder Ausdruck altes_ecc[] (old_ecc[]) das jeweilige wiedergewonnene
Bit der 12 Bits von ECC-Daten in dem Abschnitt 301 des
Cacheleitungslayouts 300 der 3 dar.
Jeder Ausdruck alte_Daten_ecc_XOR_c1[p] (old_data_ecc_XOR_c1[p])
stellt das jeweilige ECC-Zwischenergebnis dar, das durch ein XOR-Verknüpfen der
jeweiligen alte_Daten[]- und alte_ecc[]-Bits, wie gezeigt, erzeugt wird. Bei
dem XOR-Baum 1000 stellt jeder Ausdruck alte_Daten_XOR_c2[]
(old_data_XOR_c2[]) das ECC-Zwischenergebnis dar, das durch ein
XOR-Verknüpfen
der jeweiligen alte_Daten[]-Bits, wie gezeigt, erzeugt wird.
-
11 zeigt den XOR-Baum 1100,
der neue ECC-Daten berechnet, die in einen Speicher geschrieben
werden sollen. Jeder Ausdruck neue_Daten[] (new_data[]) stellt das
jeweilige Bit der 24 Bits der neuen Markierungsdaten dar, die in
einen Speicher geschrieben werden sollen. Jeder Ausdruck neue_ecc_c1[]
(new_ecc_c1[]) stellt das jeweilige Bit dar, das in die 12 Bits
von ECC-Daten in dem Abschnitt 301 des Cacheleitungslayouts 300 der 3 geschrieben werden soll.
Im einzelnen wird jeder Ausdruck neues_ecc_c1[] durch ein XOR-Verknüpfen der
alte_Daten_ecc_XOR_c1[]-Bits und der neue_Daten[]-Bits, wie gezeigt,
erzeugt. Desgleichen zeigt 12 den
XOR-Baum 1200, der die neuen ECC-Daten, die in einen Speicher
geschrieben werden sollen, berechnet. Jeder Ausdruck altes_ecc_c2[]
stellt das jeweilige Bit dar, das von den 12 Bits von ECC-Daten
in dem Abschnitt 302 des Cacheleitungslayouts 300 der 3 wiedergewonnen wird. Jeder
Ausdruck neues_ecc_c2[] stellt das jeweilige Bit dar, das in die
12 Bits von EC-Daten in dem Abschnitt 302 des Cacheleitungslayouts 300 der 3 geschrieben werden soll.
Im einzelnen wird jeder Ausdruck neues_ecc_c2[] durch ein XOR-Verknüpfen der
alte_Daten_ecc_XOR_c2[]-Bits, alte_ecc_c2[]-Bits und der neue–Daten[]-Bits,
wie gezeigt, erzeugt.
-
Andere
Ausführungsbeispiele
können
unter Verwendung von anderen ECC-Schemata als dem [36, 33, 4]-verkürzten Reed-Solomon-Engerfassungsschema
Markierungsdaten verarbeiten und neue ECC-Daten erzeugen. Beispielsweise
können andere
Ausführungsbeispiele
einer Steuerung 108 so implementieren, daß sie eine
ECC-Schema anwendet, das benachbarte Zwei-Bit-Fehler erfaßt und korrigiert. Das ECC-Schema
kann vorteilhafterweise ECC-Codewörter verwenden, die eine Breite
von 144 Bits besitzen, um eine Busausnutzung zu optimieren. Die
ECC-Codewörter
können
12 Bits von ECC-Daten enthalten. 13 und 14 zeigen XOR-Bäume 1300 und 1400,
die einem Aktualisieren von Markierungsdaten mit den zugeordneten
ECC-Daten, ohne
eine Kommunikation oder Verarbeitung der Cacheleitungsdaten zu erfordern,
zugeordnet sind. Bei dem XOR-Baum 1300 stellen
alte_Daten[28] bis alte_Daten[37] die alten ECC-Datenbits dar, und alte_Daten[0]
bis alte_Daten[25] stellen die alten Markierungsdaten eines ECC-Codeworts dar. Das ECC-Codewort,
das gerade verarbeitet wird, kann zu einer Gruppe von Codewörtern für eine Cacheleitung gehören. Die
Markierungsdaten in dem ECC-Codewort, das gerade verarbeitet wird,
können
den Cachespeicherübereinstimmungszustand
für die
Cacheleitung darstellen. Bei dem XOR-Baum 1300 wird der
Beitrag der alten Markierungsdatenbits zu dem ECC-Codewort durch
die XOR-Verknüpfungen
entfernt, um XOR-Zwischenergebnisdaten (alte_Daten_XOR[28] bis alte_Daten_XOR[37])
zu erzeugen. Bei dem XOR-Baum 1400 werden die neuen ECC-Daten
(neue_ECC[28] bis neue_ECC[37]) berechnet, indem die XOR-Verknüpfungen
an die XOR-Zwischenergebnisdaten und die neuen Markierungsdaten
(neue_Daten[0] bis neue_Daten[25]) angelegt werden.
-
Repräsentative
Ausführungsbeispiele
können
eine Anzahl von vorteilhaften Charakteristika liefern. Beispielsweise
kann die Busbreite durch Verwenden eines ECC-Algorithmus, der der
physischen Implementierung des Systems 100 entspricht,
auf einer vernünftigen
Breite gehalten werden. Durch ein derartiges Aufrechterhalten der
Breite des Busses wird die Busausnutzung erhöht, wodurch die Systemleistung
optimiert wird. Ferner können
Markierungsdaten auf effiziente Weise modifiziert werden, ohne eine
Kommunikation oder ein Verarbeiten von Cacheleitungsdaten zu erfordern.
Durch ein selektives Anwenden eines Löschmodus für den ECC-Algorithmus wird ferner die Anzahl von
korrigierbaren Fehlern, die auf Hardwareausfälle zurückzuführen sind, erhöht, und
die Wahrscheinlichkeit, daß ein
nichtkorrigierbarer Mehrbytefehler fehldiagnostiziert wird, wird
verringert. Indem gewährleistet
wird, daß jedes Einzelbyte
eines ECC-Codeworts in einer einzelnen DRAM-Komponente gespeichert
wird, ermöglichen repräsentative
Ausführungsbeispiele
ferner, daß eine gesamte
DRAM-Komponente ausfällt,
ohne den Ausfall des gesamten Speichersystems zu bewirken. Desgleichen
können
Verdrahtungsausfälle
in verschiedenen Bussen, die zwei oder weniger Einzelbytes von ECC-Codewörtern beeinflussen,
angegangen werden, um einen Ausfall des Speichersystems zu verhindern.