Artikel over de werking van ECC-geheugen

Real World Technologies - en dan specifiek David T. Wang - is in de wereld gedoken van ECC-geheugen. ECC staat hierbij voor Error Correcting Code en is bedoeld zoals de naam al aangeeft om fouten te corrigeren welke meestal worden veroorzaakt door elektronische ruis in de geheugenreepjes. Het artikel zal uit twee delen bestaan, dit eerste deel zal zich voornamelijk toespitsen op de basis van ECC, namelijk foutdetectie, -locatie en -correctie.

De makkelijkste en eenvoudigste manier om fouten te ontdekken is met behulp van een paritybit. Naar gelang van de rekensom over de eerste acht bits komt er in de paritybit een één of een nul te staan. Wanneer de gegevens uit de eerste acht bits weer worden berekend en de uitkomst niet overeen komt met de paritybit heb je te maken met een fout. Het manco van dit systeem is natuurlijk dat er toch een fout in de gegevens aanwezig is, maar de uitkomst niet verschillend is aan de paritybit. Verder is het niet mogelijk om aan te wijzen door welke bit de fout veroorzaakt wordt, waardoor een correctie een omslagachtige procedure kan aannemen. Het voordeel is echter wel dat het systeem makkelijk en relatief snel is. Vandaar dat we deze manier van foutdetectie voornamelijk terugvinden in cache-geheugen.

NEC 4Mb cache-geheugen

De volgende stap is om met behulp van algoritmes fouten te ontdekken en te verbeteren. Hierbij is men begonnen met SEC ECC, wat staat voor Single-bit Error Correction Error Correcting Code en ook bekend staat als Hamming-codes. Het simpelste foutalgoritme is SEC ECC, waarbij er een controlebit wordt toegepast op talloze andere bits (N). Hierbij geldt dat wanneer N<32, de opslagkosten hoger uitvallen dan bij een 8:1 paritybit. Dat is niet het geval wanneer N>32. Voor alle ECC-algoritmes geldt dat zij voor hun foutdetectie gebruikmaken van hetzelfde principe als bij de paritybit. Het verschil echter is nu is de rangschikking van de paritybit. Er wordt namelijk een redundante controleopstelling toegepast, waardoor het mogelijk is om een fout in een enkele bit waar te nemen. Door deze waarneming en door het feit dat het binaire systeem gebruik maakt van twee waarden, is het ook mogelijk meteen de fout te corrigeren.

De foutcontrole is mogelijk door de lay-out van een bepaalde datastroom op te slaan in een langere codeword. Dankzij het Hamming-verschil van drie, is er namelijk altijd minimaal een afwijking van drie bits tussen de verschillende SEC ECC-codewords. Hierdoor kan er een fout van één enkele bit worden gecorrigeerd, echter het nadeel is wanneer er twee fouten aanwezig zijn, deze niet van elkaar kunnen worden onderscheiden. Dit wel mogelijk wanneer SECDED ECC - Single bit Error Correction, Double bit Error Detection - wordt aangewend. Hier wordt in plaats van een Hamming-verschil van drie, een Hamming-verschil van vier gehanteerd. Echter het is alleen mogelijk om de twee foute bits te ontdekken, niet te corrigeren. Voor een gedetailleerde uitleg verwijzen we naar de uitleg van de schrijver.

Met de komst van steeds kleinere ontwerpen van DRAM-circuits is de kans op multi-bitfouten steeds groter geworden. Vandaar de noodzaak om gebruik te gaan maken van multi-bitfoutdetectie en -correctie. Onderzoek heeft uitgewezen dat multi-bitfouten voornamelijk veroorzaakt worden door een energieke neutron of een hardwarematige fout in het DRAM-geheugen. Het resultaat hiervan is, is dat deze fouten bij elkaar plaatsvinden en dat de detectie hiervan zich ook daarop kan gaan focussen. De achtergrond van het toegepaste algoritme is iets te complex om daar gedetailleerd op in te gaan. De auteur heeft echter wel een verwijzing voor de geïnteresseerde lezers.

Een manier om multi-bitfoutdetectie en -correctie uit te voeren is het Bossen b-adjacent Error Correction Algorithm. Dit algoritme maakt ook gebruik van een paritybit zoals het SEC ECC-algoritme, maar met een fundamenteel verschil. Er worden namelijk N/2-paritybitsets gebruikt, waarbij de set bestaat uit aangrenzende bitwaarden (01,), (2,3) en (63,64). N staat voor het aantal te controleren bits. Bij een veld van 64 te controleren bits ontstaan er 32 sets van twee aangrenzende waarden die elk uit vier elementen kunnen bestaan. Deze elementen zijn (0,1), (1,0), (1,1) en (0,0) en hierbij is een enkele foutcorrectiebit in het Galouis-veld gelijk aan de twee aangrenzende correctiebits in het binaire veld. Dit vormt samen de onderstaande matrices. Voor een uitgebreidere uitleg van de werking van het Bossen-algoritme, wordt door de auteur hier en hier verder op ingegaan.

ECC Bossen-algoritme (klein)
Klik op het plaatje voor een uitvergroting

Een nadeel van de hiervoor besproken algoritmen is dat er enige vertraging optreedt in de verwerking van de gegevens, deze vertraging kan nu net fataal zijn bij gebruik in een kritiek real-timesysteem. Vandaar dat er ook nog andere methoden zijn ontwikkeld die ervoor moeten zorgen dat geen fouten optreden in de gegevensstroom. Een van deze technieken is, bit steering waarbij er gebruik wordt gemaakt van fysiek nabij gelegen gegevenbits. De waarden hiervan worden verder gestuurd naar verschillende ECC-words, welke worden toegepast bij ontdekking van een of meerdere corrupte bits. In dat geval wordt de waarde van de ECC-word overgestuurd en kan het systeem zonder enige vertraging weer verder.

Het grote nadeel van bit steering is echter wel incompatibiliteit met moderne geheugentechnieken. Aangezien deze voornamelijk gebruik maken van synchrone gegevensoverdracht. Een mogelijke oplossing hiervoor kan bijvoorbeeld het moment van versturen van gegevens naar het ECC-word te verschuiven. Door dit pas uit te voeren wanneer de data in de geheugencontroller is beland, kan de synchronisatie van datatransport tussen DRAM-chips en geheugencontroller intact blijven.

Twee andere manieren die wel in combinatie met nieuwere geheugentechnologieën kunnen worden toegepast zijn chipkill en memory scrubbing. Chipkill hanteert het principe van tolerantie. Hierbij wordt getolereerd dat er een geheugenfout ontstaat op systeemlevel, maar er wordt wel voor gezorgd dat de fout niet doorwerkt door de juiste waarde over de corrupte heen te kopiëren. Dit kan in een aantal manieren worden toegepast. Zo kunnen er redundante geheugenchips of langere ECC-words - waardoor er betere foutcorrectie mogelijk is - worden gebruikt als parity. Verder werd de eerste generatie van de chipkill-technologie in gespecialiseerde DRAM-geheugenchips geïmplementeerd, terwijl tegenwoordig de techniek naar de geheugencontroller is verplaatst en toegepast wordt in combinatie met standaard ECC-geheugen.

Samsung 512MB ECC DDR DIMM

Tenslotte is er ook nog de techniek van memory scrubbing. Waar er hiervoor van wordt uitgegaan van het principe dat aangrenzende bits te corrigeren zijn en multi-bitfouten die niet bij elkaar in de buurt voortkomen, niet, gaat memory scrubbing een stapje verder. Er wordt namelijk continue een constante leesactie uitgevoerd door de geheugencontroller in het foutcorrectiecircuit en de ingelezen gegevens worden dan weer teruggezet in het geheugen. Hierdoor wordt elke corrupte bit gecorrigeerd en 'scrubbed'. Deze manier vraagt echter flink wat stroom en bandbreedte, vandaar dat deze techniek alleen wordt toegepast in high-end servers waar er een grote mate van nauwkeurigheid is vereist en wordt verwacht.

Door Jeroen P Hira

28-12-2003 • 19:58

22

Bron: Real World Technologies

Reacties (22)

22
22
19
7
0
1
Wijzig sortering
Ik begrijp niet alles wat in het verhaal staat, maar de binaire ECC in computers doet me denken aan de quarternaire ECC in het DNA.

Het DNA is ook berekend op foutjes, alleen heeft het veeeel meer corrigerende capaciteiten.
- Dubbele genetische code - van Pa en van Ma - Dit verkleint de kanzen voor een blijvende mutatie in het kwadraat. Aardappeljunk zegt dit al. Voor DNA is dit niet genoeg, want nog veel mensen krijgen kanker, en mensen zonder deze bescherming, hebben 100% kans op kanker.

- DNA repareer-enzymen als "DNA polymerase"en "P53" maken de kans op een mutatie nog eens 100 keer kleiner.
- de cel sterft bij een mislukte DNAreparatie.

Bakterieën kunnen veel minder goed repareren, en gebruiken deze tekortkoming om snel te muteren ;-)

Naar mijn weten zijn er geen parity-bits of iets dergelijks in het DNA aanwezig. Hoe een cel dan toch weet hoe het DNA gerepareerd moet worden is mij een raadsel.

[beetje offtopic, maar ontopic kan ik er niets over zeggen]
Anoniem: 87819 @Seejay29 december 2003 00:34
Je hebt meerdere triplets die coderen voor een bepaald aminozuur, op die manier heb je ook nog een level van robuustheid erbij.
Maar ECC code is het niet echt nee. Wel de meest efficiente codering mogelijk gegeven de input naar schijnt.
Wel mooi dat niet meteen je hele lichaam het begeeft als er een foutje in het DNA is gekomen. :) Maar goed, miljarden jaren evolutie tegen enkele 10tallen jaren research..
Zou je tradionele constructies zoals RAID niet kunnen gebruiken voor geheugen?
Als je het bijvoorbeeld driedubbel mirrored dan weet je (bijna) zeker dat er geen fouten ontstaan.. En als er fouten optreden kan je dat met enorme zekerheid detecteren (A!=B!=C)
Oke, het is duur. Maar voor kritieke realtime systemen lijkt me dat geen probleem.
Ik denk dat dat wel te doen is, maar de ondersteuning van de chipsets is er niet voor.
De ECC mode lijkt wel wat op een RAID 5 array, hiermee wordt het falen van een enkele chip vermeden doordat er een extra geheugenchip op de module is togevoegd. Dit is veel makkelijker te implementeren, omdat de chipset er gewoon voor kan kiezen om het wel of niet te doen. Voor een RAID 1 constructie moet je perse meerdere van dezelfde modules hebben om geen problemen met timing enzo te krijgen.

Maar misschien is het wel mogelijk. Bijv door een nForce chiptset iets te verbouwen.Die heeft toch al twee onafhankelijke geheugenkanalen. Maar dan moet de ECC er toch bij, want anders weet je niet welke module er in de fout is gegaan, want RAID 1 beschermd namelijke tegen dataloss door he uitvallen van een gehele harde schijf, maar kan bij verschil in data tussen de verschillende schijfen niet zien welke schijf de juiste data bevat.
RAID werkt volgens mij toch anders ............

De parity is er dan alleen voor reconstructie van data, als er een bit compleet is weggevallen, niet als de waarde veranderd.
Voor ECC maakt het niets uit of de data verloren gaat door het wegvallen van een chip/hd/bit of door het foutief doorsturen ervan.

Of het nu voor HDs, ram of CDs gebruikt wordt maakt niet zoveel uit. Wat CDs betreft is het zelfs nog een stuk moeilijker. Bij een kras op de CD treden direct een hele reeks fouten op, dus de ECC moet toch al vrij goed zijn om die te kunnen opvangen ;-)
Dat kan en gebeurt ook wel, alleen niet voor alleen geheugen. Toepassingen die namelijk zo kritiek zijn dat ze dit vereisen stellen meestal net zo hoge eisen aan de processor, waardoor het noodzakelijk is om het hele systeem (inclusief processor, geheugencontroller etc.) redundant uit te voeren en niet alleen het geheugen. Voorbeelden waar dit gebruikt wordt zijn o.a. ruimtevaart, kernenergiecentrales en ik geloof ook F16 vliegtuigen, maar dat weet ik niet zeker.
Dubbel-uitvoeren is niet genoeg (volgens mij), het wordt drievoudig uitgevoerd. Als een systeem het niet met de andere twee eens is, weet je tenminste welke systeem kapot is.
Beide gebeurt: met drie of meer weet je met een bepaalde kans wat goed is, met twee weet je dat niet maar je weet wel OF het goed is. Als er genoeg tijd is om de waarde opnieuw te lezen is dit voldoende.
Compaq heeft inderdaat servers waarin geheugenbanken als raid 5 (4 dimms) met 1 hot spare dus in totaal 5 dimms uitgeleverd worden
Rone Moderator Tweaking 29 december 2003 07:34
Uit het artikel:
Hierbij geldt dat wanneer N<32, de opslagkosten hoger uitvallen dan bij een 8:1 paritybit. Dat is niet het geval wanneer N>32.
OK, en wat als N=32 ? :)

Zomaar een vraagje...
Waarschijlijk zijn de opslagkosten dan evenhoog voor beide methoden :)
Anoniem: 4106 @Rone29 december 2003 16:52
Het artikel vind ik hier vrij onduidelijk in. Voor SEC ECC geldt dat het aantal controlebits gelijk is aan de log2(N) + 1. Voor N=32 zou dit dus 6 controlebits opleveren, terwijl het 8:1 schema slechts 4 bits nodig heeft. Waar komen die andere twee bits vandaan?
ECC staat hierbij voor Error Correcting Memory
Staat ECC niet voor Error Correcting Code (zoals trouwens wat verder vermeld in het artikel)?

Leuke matrices trouwens :D
Ik dacht altijd Error Correction Control maarrrr... ik denk dat die Memory er niet in thuis hoortt....
Nee, nee en nog eens nee. :) Het staat voor "Error Correction Coding"
jullie hebben het in de verste verte niet eens goed

ecc staat voor Environmental Chemical Corporation

kijk maar hier www.ecc.net :P
Anoniem: 45353 @SCRAP29 december 2003 07:18
joh.. ik dacht dat het 'error checking & correcting' was
Het manco van dit systeem is natuurlijk dat er toch een fout in de gegevens aanwezig is, maar de uitkomst niet verschillend is aan de paritybit.
Ik neem aan dat hiermee bedoeld wordt dat er ook fouten kunnen optreden die niet worden gedetecteerd m.b.v. 1 paritybit. Dit gebeurt echter alleen als er minimaal 2 bits fout zijn. Stel dat de kans op een fout in 1 bit 1/1000 is, dan is de kans dat er 2 bits fout zijn 1/1000000, vele malen kleiner dus, dus om hier nou van een manco te spreken vind ik niet echt op zijn plaats.
Stel dat de kans op een fout in 1 bit 1/1000 is, dan is de kans dat er 2 bits fout zijn 1/1000000
Klopt wel voor ongecorreleerde fouten, maar geldt natuurlijk niet altijd in de praktijk. Afhankelijk van de oorzaak van die ene fout zal de kans op een andere fout in bvb diezelfde byte toch wel vrij groot kunnen zijn. En dan is het natuurlijk wel handig om meerdere fouten te kunnen detecteren (en verbeteren)
Je detecteert met één bit parity alleen oneven bit-fouten dus 1, 3, 5, etc.

Op dit item kan niet meer gereageerd worden.