PatentDe  


Dokumentenidentifikation DE102004003352A1 16.12.2004
Titel Systeme und Verfahren zum Puffern von Daten zwischen einer Übereinstimmungscachesteuerung und einem Speicher
Anmelder Hewlett-Packard Development Co., L.P., Houston, Tex., US
Erfinder Briggs, Theodore C., Plano, Tex., US
Vertreter Schoppe, Zimmermann, Stöckeler & Zinkler, 82049 Pullach
DE-Anmeldedatum 22.01.2004
DE-Aktenzeichen 102004003352
Offenlegungstag 16.12.2004
Veröffentlichungstag im Patentblatt 16.12.2004
IPC-Hauptklasse G06F 12/08
Zusammenfassung Bei einem Ausführungsbeispiel ist die Erfindung auf einn 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 (102) gespeichert wird. Wenn die Steuerung eines 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.

Beschreibung[de]

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 Syndrompolynom 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 &mgr; 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–&mgr; verringert. Es folgt, daß die Fehlerkorrekturfähigkeit [(d – &mgr; – 1)/2] beträgt und die folgende Beziehung aufrechterhalten wird: d > 2v + &mgr;. 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öschmodusverarbeitung 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 301308 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 Abschnitt 301 gespeichert. Die Cacheleitungsdatengruppen (DATA7–DATA0) sind durch Abschnitte 301309 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 301308 über den logischen Rang 101 gespeichert sein.

Durch Verteilen jedes der Abschnitte 301308 ü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 504a504d 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 Quadrantenbusses 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.

912 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.


Anspruch[de]
  1. System zum Verarbeiten von Speichertransaktionsanforderungen, das folgende Merkmale aufweist:

    eine Steuerung (108) zum Speichern und Wiedergewinnen von Cacheleitungen in einer und von einer Mehrzahl von Speicherkomponenten (102) durch zumindest einen Bus; und

    einen Puffer (104), der mit der Steuerung (108) und dem zumindest einen Bus kommunikativ gekoppelt ist;

    wobei die Steuerung (108) Cacheleitungen in eine Mehrzahl von Abschnitten formatiert, ein Fehlerkorrekturcodeschema (ECC-Schema) implementiert, um einen Einzelbytefehler in einem ECC-Codewort für Paare der Mehrzahl von Abschnitten zu korrigieren, jeweilige Paare der Mehrzahl von Abschnitten derart speichert, daß jedes Einzelbyte der jeweiligen Paare der Mehrzahl von Abschnitten in einer einzigen der Mehrzahl von Speicherkomponenten (102) gespeichert ist;

    wobei, wenn die Steuerung (108) eine Speichertransaktionsanforderung verarbeitet, die Markierungsdaten modifiziert, ohne Cacheleitungsdaten zu modifizieren, (i) die Steuerung (108) neue Markierungsdaten an den Puffer (104) kommuniziert und (ii) der Puffer (104) unter Verwendung vorheriger ECC-Daten, vorheriger Markierungsdaten und der neuen Markierungsdaten neue ECC-Daten berechnet, ohne eine Kommunikation von Cacheleitungsdaten zu erfordern.
  2. System gemäß Anspruch 1, bei dem zumindest ein Bus eine Busbreite aufweist und das ECC-Codewort eine Codewortlänge aufweist, die größer ist als die Busbreite.
  3. System gemäß Anspruch 2, bei dem die Codewortlänge zweimal so lang ist wie die Busbreite.
  4. System gemäß Anspruch 3, bei dem die Busbreite 144 Bits und die Codewortlänge 288 Bits betragen.
  5. System gemäß einem der Ansprüche 1 bis 4, bei dem jede der Speicherkomponenten (102) eine Bitbreite von vier Bits aufweist.
  6. System gemäß einem der Ansprüche 1 bis 5, bei dem die Mehrzahl von Speicherkomponenten (102) in einer Mehrzahl von Doppelreihenspeichermodulen (DIMMs) befindlich ist, die einen logischen Rang bilden, der eine Bitbreite aufweist, die gleich der Hälfte einer Länge des ECC-Codeworts ist.
  7. System gemäß Anspruch 6, bei dem die Steuerung (108) Paare der Mehrzahl von Abschnitten über den logischen Rang speichert.
  8. System gemäß einem der Ansprüche 1 bis 7, bei dem die Steuerung (108) ferner wirksam ist, um ein Löschbyte in einem zweiten Modus eines ECC-Betriebs zu korrigieren.
  9. System gemäß einem der Ansprüche 1 bis 8, bei dem die Speicherkomponenten (102) DRAM-Speicherkomponenten sind.
  10. System zum Verarbeiten von Speichertransaktionsanforderungen, das folgende Merkmale aufweist:

    eine Steuereinrichtung (108) zum Speichern und Wiedergewinnen von Cacheleitungen in und von einer Mehrzahl von Speicherkomponenten (102) durch zumindest einen Bus; und

    eine Puffereinrichtung (104) zum Puffern von Daten von der Mehrzahl von Speicherkomponenten (102), die mit der Steuerung (108) und dem zumindest einen Bus kommunikativ gekoppelt ist;

    wobei die Steuereinrichtung Cacheleitungen in eine Mehrzahl von Abschnitten formatiert, ein Fehlerkorrekturcodeschema (ECC-Schema) implementiert, um einen Einzelbytefehler in einem ECC-Codewort für Paare der Mehrzahl von Abschnitten zu korrigieren, jeweilige Paare der Mehrzahl von Abschnitten derart speichert, daß jedes Einzelbyte der jeweiligen Paare der Mehrzahl von Abschnitten in einer einzigen der Mehrzahl von Speicherkomponenten (102) gespeichert ist;

    wobei, wenn die Steuereinrichtung eine Speichertransaktionsanforderung verarbeitet, die Markierungsdaten modifiziert, ohne Cacheleitungsdaten zu modifizieren, (i) die Steuereinrichtung neue Markierungsdaten an den Puffer (104) kommuniziert und (ii) der Puffer (104) unter Verwendung vorheriger ECC-Daten, vorheriger Markierungsdaten und der neuen Markierungsdaten neue ECC-Daten berechnet, ohne eine Kommunikation von Cacheleitungsdaten zu erfordern.
  11. System gemäß Anspruch 10, bei dem zumindest ein Bus eine Busbreite aufweist und das ECC-Codewort eine Codewortlänge aufweist, die größer ist als die Busbreite.
  12. System gemäß Anspruch 11, bei dem die Codewortlänge zweimal so lang ist wie die Busbreite.
  13. System gemäß Anspruch 12, bei dem die Busbreite 144 Bits und die Codewortlänge 288 Bits betragen.
  14. System gemäß einem der Ansprüche 10 bis 13, bei dem jede der Speicherkomponenten (102) eine Bitbreite von vier Bits aufweist.
  15. System gemäß einem der Ansprüche 10 bis 14, bei dem die Mehrzahl von Speicherkomponenten (102) in einer Mehrzahl von Doppelreihenspeichermodulen (DIMMs) befindlich ist, die einen logischen Rang bilden, der eine Bitbreite aufweist, die gleich der Hälfte einer Länge des ECC-Codeworts ist.
  16. System gemäß Anspruch 15, bei dem die Steuerung (108) Paare der Mehrzahl von Abschnitten über den logischen Rang speichert.
  17. System gemäß einem der Ansprüche 10 bis 16, bei dem die Steuerung (108) ferner wirksam ist, um ein Löschbyte in einem zweiten Modus eines ECC-Betriebs zu korrigieren.
  18. System gemäß einem der Ansprüche 10 bis 17, bei dem die Speicherkomponenten (102) DRAM-Speicherkomponenten sind.
  19. Verfahren zum Betreiben eines Speichersystems, das folgende Schritte umfaßt:

    Verarbeiten von Cacheleitungsdaten und Markierungsdaten durch eine Steuerung (108), die in einer Mehrzahl von Datenabschnitten gespeichert werden sollen, wobei jedes Paar der Mehrzahl von Datenabschnitten ein Fehlerkorrekturcodewort (ECC-Codewort) bildet, das eine Korrektur eines Einzelbytefehlers in dem ECC-Codewort ermöglicht;

    Speichern jedes Paares der Mehrzahl von Datenabschnitten über eine Mehrzahl von Speicherkomponenten (102), derart, daß jedes Einzelbyte jedes Paars in einer einzigen der Mehrzahl von Speicherkomponenten (102) gespeichert wird;

    Empfangen einer Speicheranforderungstransaktion, die Markierungsdaten, die der Mehrzahl von Datenabschnitten zugeordnet sind, modifiziert und die die Cacheleitungsdaten nicht modifiziert; und

    Berechnen, ansprechend auf das Empfangen, neuer ECC-Daten unter Verwendung vorheriger ECC-Daten, vorheriger Markierungsdaten und neuer Markierungsdaten, ohne eine Kommunikation von Cacheleitungsdaten zu erfordern.
  20. Verfahren gemäß Anspruch 19, bei dem das Berechnen durch einen Puffer (104) zwischen der Steuerung (108) und der Mehrzahl von Speicherkomponenten (102) durchgeführt wird.
Es folgen 10 Blatt Zeichnungen






IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com