RAM: Technologie, Fehlerkorrektur, CAS

Von Robert

Fehlerkorrekturmechanismen

Im Ram sind nur Nullen und Einsen gespeichert, da ein Computer nur diese verarbeiten kann. Was wäre nun, wenn eine oder sogar mehrere Speichereinträge Fehlerhaft wären, d.h. z.B. anstatt einer Null eine Eins enthalten. Es gibt Anwendungen, da fällt dies nicht weiter ins Gewicht, zum Beispiel Bildbearbeitung oder Videobearbeitung bzw. en-/decodierung. Wäre hier ein Eintrag im Ram fehlerhaft, so hätte evtl. ein Pixel eine andere Farbe. Im Prinzip nicht weiter schlimm. Anders sieht es z.B. bei Datenbank-Anwendungen aus. Eine falsche Zahl in einer Datenbank, kann für ein Unternehmen schwerwiegende Konsequenzen haben (wenn man mal den schlimmsten Fall annimmt),
Wie kommt es zu diesen Fehlern? Fehler gibt es überall, oft ist es schwer zu sagen, wodurch sie entstehen. Eine Möglichkeit ist das "umkippen" von einzelnen Bits, d.h. der Wert ändert sich (0->1 oder 1->0), dieses umkippen wird z.B. durch kosmische Strahlung oder andere Hintergrundstrahlung hervorgerufen, passiert aber sehr selten. Besonders wenn man den Rechner mindestens ein mal am Tag bootet sollten solche Fehler nicht auftreten. Außerdem ist die Fehleranfälligkeit proportional zur Ramgrösse, d.h. um so mehr Ram man eingebaut hat, desto größer ist die Möglichkeit für diese Einzelbit-Fehler, die im Betrieb auftreten.
Ein Richtwert ist etwa 1 umkippendes Bit pro 1GB Ram pro 24h, aber man bemerkt diese Fehler nicht, da sie natürlich auch in einem Bereich passieren können, in dem keine Daten abgelegt sind. Wie schon angesprochen sind diese Fehler nur ein Problem bei Servern, die hohe Uptimes haben und sehr viel Ram.
Eine andere Fehlerquelle sind natürlich defekte Speichermodule, gegen diese Fehler gibt es kein Mittel, man sollte den Ram tauschen.
Gegen umkippende Bits gibt es mittlerweile Mechanismen um die kritischen Daten zu schützen:

Parity

Parity ist eine Technik , die in der Lage ist Single Bit Fehler zu erkennen und zu melden. Es gibt FPM und EDO Ram mit Parity.

ECC

ECC heißt Error Correction Code und findet bei den neueren SDRam und DDRam Modulen Anwendung. ECC kann Single Bit Fehler erkennen und im Vorteil zu Parity Modulen, diese auch korrigieren. Double Bit Fehler kann ECC erkennen aber nicht beheben. Die korrekte Bezeichnung für diese Art von ECC wäre eigentlich SEC ECC (Singel Error Coorrection - ECC).

Man erkennt Parity bzw. ECC module daran, dass die Anzahl der Memory Chips auf dem Modul ganzzahlig durch 3 oder 5 zu teilen ist.
Laut Crucial senkt ECC die Performance um ca. 2%, da ja für die Verifizierung der Daten bzw. der Fehlererkennung extra Zeit notwendig ist. Man muss hier abwägen, ob man die extra Sicherheit auf Kosten der Performance benötigt oder nicht. Für den Heimgebrauch braucht man im Allgemeinen kein Parity oder ECC.

Chipkill

Chipkill eine Verbesserung des SEC ECC, genaugenommen spricht man von "Chipkill correct ECC" Chipkill ist in der Lage auch Multi-Bit Fehler zu erkennen und zu korrigieren. Eine Studie von IBM hat Festgestellt, dass SEC ECC nicht mehr Zeitgemäß ist. Parity, die älteste der drei Technologien, wurde für Speichermodulgrößen von 32 MB entwickelt, damals waren 32 MB extrem viel. Vergleicht man nun ein 32 MB Modul mit Parity mit einem 1 GB Modul mit SEC ECC, so ergeben sich nach 3 Jahren Dauerbetrieb von 10.000 Systemen ca. 700 Ausfälle mit 32 MB Parity und ca. 900 Ausfälle mit 1 GB SEC ECC. Diese hohe Anzahl ist nicht akzeptabel und Chipkill wurde eingeführt. Chipkill reduziert die Anzahl der Ausfälle durch nicht korrigierbare Speicherfehler bei 10.000 Systemen mit 1GB Chipkill Modulen in drei Jahren Dauerbetrieb auf 6 Ausfälle. Wenn man bedenkt, das in den Ausfallzahlen auch die Ausfälle auf Grund komplett defekter Module einfließt, so kann sich das Ergebnis von Chipkill wirklich sehen lassen, denn die nicht korrigierbaren Fehler im Betrieb reduzieren sich auf ein absolutes Minimum.



Bei all diesen tollen Techniken darf man natürlich nicht vergessen zu erwähnen, dass es nicht genügt sich Ram mit Parity, ECC oder Chipkill zu kaufen um in den Genuss der Fehlersicherhet zu kommen. Das Mainboard und das Bios müssen diese Techniken auch unterstüzen, damit man sie nutzen kann. Hier sollte man vorher klären, ob das Mainboard die jeweiligen Funktionen bietet.


Refresh

DRAM muss zum Erhalt des Speicherinhalts immer wieder ausgelesen und neu geschrieben werden. Diesen Auffrischungsvorgang nennt man "Refresh". Standard SDRAM-Speicher braucht alle 64ms eine solche Auffrischung. Der Refresh besteht darin, dass der Lese-/Schreib- verstärker ("Sense Amp") die Speicherzeilen ausliest und wieder neu schreibt. Ein Taktsignal mit einer Takt-Periode von 15.6µs sorgt dafür, dass nach 64ms exakt 4096 Zeilen neu geschrieben wurde. Dieser Vorgang wird als "4K-Refresh" bezeichnet und wird bei allen 16-, 64- und 128MBit-SDRAM verwendet. Erst ab 256MBit SDRAMs legt man einen Zahn zu und füllt in 64ms 8192 Zeilen neu auf ("8K-Refresh"). Dies geschieht mit einer Takt-Periode von 7.8µs. Der Chipsatz muss den Refresh nicht regelmässig alle 15.6µs senden. Es reicht aus, wenn kurz vor Ablauf der 64ms 4096 Refresh-Befehle hintereinander gegeben werden. Dieser Vorgang wird auch "Burst-Refresh" genannt.


RAS und CAS

CAS steht beim Speicher für Column Address Strobe. Das ist die Signalleitung für die Spaltenadressen - DRAM‘s arbeiten nämlich mit einer Marix-Addressierung über Spalten (Columns) und Zeilen (Rows). Die zugehörige Latenz beschreibt also die Anzahl von Speichertaktzyklen, die bis zu einer validen Spaltenadressierung vergehen. Bei den Latenzen existieren mehrere, die CAS (Column Address Strobe) Latenz, die RAS zu CAS Latenz und die RAS (Row Address Strobe) Latenz, weiteres existiert auch noch das RAS Precharge Timing. Column und Row Address bedeuten die Addressierung von Zeile und Spalte innerhalb des Speichers.

Für diese Adressierungen sind Pausenzyklen nötig, hierbei gibt es 2 verschiedene in jedem besseren System-BIOS zur Auswahl: 2 und 3 Pausenzyklen. 2 Zyklen sind schneller als 3, und je nach höherer Taktfrequenz des Speichers haben die Latenzen größere Auswirkung.

Ein weiteres Kriterium ist die Taktperiode, welche in Nanosekunden (ns) angegeben wird. Taktperiode und Taktfrequenz sind eng miteinander verknüpfte Größen und stellen im Prinzip sogar dasselbe dar. Ein Speicher mit einer Zugriffszeit von 8ns ist "offiziell" für 100MHz geeignet. Ein Speicher mit einer Zugriffszeit von 7.5ns ist für 133MHz geeignet, Ein 7.0ns Speicher für 143MHz, ein 6.0ns Speicher wäre bereits für 166MHz geeignet und so weiter. Die dazu benutze einfache Formel lautet "1 / Takt * 1000 = Zugriffszeit", oder "1 / Zugriffszeit * 1000 = Takt". In der Praxis kann ein SDRAM jedoch auch auf tieferen Zugriffszeiten (d.h. mit mehr Takt) betrieben werden als auf dem Chip aufgedruckt ist.

CL2 und CL3

Die Angabe 2-2-2 (CAS, RAS to CAS, RAS) oder CL2 (CAS Latency) weist bei pc133 schon auf sehr guten Speicher hin. Muss man aber beim Overclocking auf 140, 150 oder mehr MHz auf 3-2-2, 2-3-2, 3-3-2 oder gar 3-3-3 herabsetzen geht sehr viel Performance verloren, das gesamte System kann um bis zu 10% verlangsamt werden. Hier beginnt High-Quality SDRAM zu greifen. Er soll die Möglichkeit bieten extrem hoch zu takten und den Speicher dennoch auf 2-2-2 betreiben zu können.


Speicher-Burst

Nach dem Lesezugriff auf ein Speicherfeld ist der Inhalt der kompletten Speicherzelle immer noch in den Sense Amps gepuffert. Das gilt aber auch für alle anderen Speicherbausteine der aktiven Reihe eines Speichermoduls, da ja alle diese Chips dieselben Befehle und Adressen erhalten. Daher ist die Anzahl der Sense Amps eine wichtige Grösse für Speichermodule, und wird als "Page Size" bezeichnet. Je nach Speicherorganisation beträgt die Grösse des Puffers durch die Sense Amps 2, 4, 8 oder 16KByte.
Dieser Puffer wird im sog. Burst-Modus ausgenutzt: Werden aus der gleichen Zeile des Speicherfeldes Daten angefordert, kann der Speicher ohne erneute Adressierung mit nur einem Taktschritt ausgegeben werden. Die Burst-Länge entspricht dabei maximal der Anzahl der Spalten des Speicherfeldes. Die PC-SDRAM-Spezifikation verlangt als mögliche Burst-Längen jedoch nur 1, 2 oder 4 Daten.

Die Breite der Cache-Line des L2-Caches von Pentium-Prozessoren beträgt 32 Bytes. Das entspricht dem Vierfachen der Speicherbusbreite von 64Bit. Intel Chipsätze arbeiten daher mit einer Burst Length von 4. Weil der AMD Athlon aber mit doppelt so langen Cache-Lines arbeitet wie der Pentium, fordert z.B. der AMD Irongate-Chipsatz (AMD 750) immer die Daten aus 8 Spalten einer Zeile gleichzeitig an, was eine Burst-Length von 8 ermöglicht.

Das ist aber noch nicht notwendigerweise das Ende des optimierten Zugriffs. Möchte man beim nächsten Lesezugriff Daten aus einer bereits adressierten Speicherzeile haben ("Page Hit"), so fällt nur noch die CAS-Latency an Wartezeit an, da keine Zeilen-Adressübergabe mehr nötig ist, es fällt also keine RAS-to-CAS-Delay an.
Wenn rechtzeitig vor dem Ende eines Bursts eine neue Spaltenadress empfangen wird, kann sich der nächste Burst lückenlos anschliessen.

Werden jedoch Daten aus einer anderen Speicherzeile angefordert ("Page Miss"), so müssen die Sense Amps den aktuell gepufferten Inhalt zurückschreiben, da der Inhalt bei Lesevorgang gelöscht wird. Die für den Rückschreibvorgang benötigte Zeit wird auch "RAS Precharge Time" ("t_RP") genannt.

Nur wärend des Bursts erreicht SDRAM seine maximale Übertragungsrate. Denn nur wenn wirklich bei jedem Taktschritt ein Datenwort übertragen wird, stimmt die Rechnung von 8Byte x 100MHz = 800MB/s. für z.B. PC100-SDRAM. Fallen Latenzzeiten an, sinkt logischerweise auch die maximale Transferrate. Es gibt aber Tricks der Chipsätze, mit denen diese Latenzzeiten umgangen oder möglichst vermieden werden können.


Registered, buffered und un-buffered

Alle herkömmlichen Module sind un-buffered, das ist also der "Normal-Zustand" und braucht nich weiter erklärt zu werden. Nun gibt es allerdings zwei weitere Begriffe, nämlich buffered und Registered.

Buffered

Bei Modulen vor der Zeit des SDRam‘s , gibt es neben den normalen un-buffered Modulen auch noch so genannte buffered Module, diese haben einen Puffer (buffer) mit auf dem Ram Modul , der dabei hilft die große Anzahl von Signalen zwischen zu puffern, damit eine Fehlerfreie Abarbeitung möglich ist.

Registered

Ab einführung von SDRam und damit auch für DDRam der Fall, gibt es keine Puffer mehr auf den Modulen, sondern Register, deshalb spricht man Registered Ram. Dieses Register verzögert alle Tranaktionen um einen Taktzyklus, hat aber den selben Zweck der Puffer bei buffered Modulen, nämlich einen Fehlerärmeren Betrieb zu gewährleisten.
Registered Module erkennt man den kleinen Zusatzchips auf dem Modul.



Beide Techniken , Buffered und Registered, sind ähnlich wie die Fehlerkorrekturmechanismen für den Servermarkt entwickelt worden, da hier höhere Anforderungen gestellt werden. Bei den großen Ram Mengen , die man in Servern findet ist das Datenaufkommen sehr groß und man benötigt diese Techniken um die Fehleranfälligkeit zu reduzieren. Ebenfalls gilt , dass diese Art von Ram auch die Systemperformance erniedriegt, da ja Informationen erst Zwischengespeichert werden, bevor sie endgültig im Ram abgelegt werden.

Genau wie bei ECC z.B. gilt auch hier wieder, der Ram muss zum Mainboard passen. Es gibt Mainboards die benötigen Registered Ram um zu funktionieren, und es gibt Mainboards die benötigen kein Registered Ram um zu funktionieren. Bis auf einige Ausnahmen gilt hierbei jedoch, dass die Module nicht falsch eingebaut werden können, d.h. in Mainbaord für Registered Ram kann man keinen un-buffered Ram einbauen, und umgekerht, aber es gibt einige Ausnahmen, wo die trozdem möglich ist, fragwürdig ist, ob das System dann überhaupt, und wenn ja, stabil, läuft. Ein Beispiel wären z.B. die Low-Cost Sockel A Dual Mainboards. Die Hersteller geben hier meist an, dass Registered Ram benutzt werden soll, un-buffered jedoch bis zu einer speichergröße von insgesamt 1,5 oder 2 GB noch funktionieren würde.


Cache

Ein Cache ist ein relativ kleiner Hochgeschwindigkeitsspeicher, üblicherweise SRAM, der häufig benötigte Daten zwischen der CPU und dem Hauptspeicher puffert. Die CPU kann auf Daten im Cache sehr viel schneller zugreifen als auf Daten aus dem Hauptspeicher. Ein kleiner Cache-Speicher kann daher die Performance eines Computers ohne große zusätzliche Kosten erheblich verbessern. Bei Cache wird - je nach Position des Speichers im Datenstrom - zwischen verschiedenen Levels unterschieden.

Level-0-Cache

Entkoppelt den Datenstrom der unterschiedlichen Recheneinheiten innerhalb der CPU. Seine Größe liegt bei etwa 1 Byte bis 128 Byte.

Level-1-Cache

Entkoppelt den Datenstrom innerhalb der CPU von der Außenwelt, Größe von wenigen Bytes (128) bis zu mehreren kBytes.

Level 2 Cache

Entkoppelt den Datenstrom der CPU vom Memory Bus, an dem der Hauptspeicher angeschlossen ist. Größe von 256 kBytes bis zu mehreren MegaBytes.

Level 3 Cache

Entkoppelt ggf. bei Mehrprozessorsystemen den separaten Systembus vom Memory Bus.

 


 

Vielleicht auch interessant:


Über den Autor

Robert programmiert Webanwendungen in ASP, kennt sich bestens im IRC und mit Eggdrops aus und schreibt auch darüber Artikel auf planet-rcs.de

Feedback