Veaparandusega mälu

Veaparandusega mälu ehk ECC-mälu (ingl. k. Error-correcting code memory, lühidalt ECC memory) on teatud tüüpi arvuti andmete säilitamise seade, mis leiab ja parandab mälus tekkinud vigu. 
ECC-mällu on integreeritud veaparandusloogika ning selle kiibil olev algoritm parandab ühebitiseid vigu käigult: andmed, mis loetakse igast sõnast on alati samad nagu andmed, mis sinna kirjutatud olid, isegi siis, kui üks või rohkem salvestatud bitte on ümber pööratud valesse olekusse. Andmete parandus toimub kiibis endas ilma märgatavate viivituste või latentsusajata, samal ajal protsessorist sõltumata.
Suurem osa veatõrjekoodita mäludest ei suuda tekkinud vigu avastada, kuid leidub ka paarsustoega ECC-ta mälusid, mis leiavad küll vead, kuid ei paranda neid.
Emaplaat ja protsessor peavad toetama ECC-veaparandust, muidu töötavad ECC-moodulid ilma veaparanduseta.

Erinevused

DIMM-il (ingl. k. Dual in-line Memory Module) on alati peal mingi arv mälukiipe. Individuaalsed kiibid võivad kasutada nelja (x4), kaheksat (x8) või 16 (x16) biti laiust andmesiini. Signaalirajad mälukontrolleris on otse mälukiipidega ühendatud (puhverdamata DIMM-idel), kuid x4 kiibid on siinkohal kasutud – neid saab kasutada vaid koos puhverdatud kiipidega.
Mälupiirkonnal, mis on unikaalselt adresseeritav vaid mälukontrolleri poolt, on 64 biti laiune (veaparanduseta) andmesiin ning süsteemidel, mis toetavad ECC-d, lisatakse veaparanduseks 8 bitti, mis teeb andmesiini 72 bitti laiaks. ECC-ta mälumoodulitel on kaheksa x8 kiipi (koosneb kaheksast füüsilisest kiibist) ning ECC-ga mälumoodulil on neid üheksa. x4 (4 biti laiune) DIMM koosneks aga 16 füüsilisest kiibist ning kui tegu on veaparandusega mälumooduliga, siis oleks kiipe 18 (16 bitis andmed, kahes bitis veaparandusinfo).

Vigade tüübid

Ühebitine mälu viga on andmete viga serveri väljundis või toodangus ning vigade säilimine võib anda suurt mõju serveri jõudlusele. Mälus esineb kahte tüüpi ühebitiseid vigu: riistvaralised (ing. k. hard error) ja tarkvaralised (ing. k. soft error) vead.
Riistvaralised vead võivad tekkida näiteks liigse temperatuuri muutumise, pingestressi või füüsilise stressi tekitamisest mälu osadele.
Tarkvaralised vead tekivad, kui andmed kirjutatakse või loetakse erinevalt, kui algselt kavatsetud – näiteks pinge muutumine emaplaadil, kosmiline kiirgus või radioaktiivsus võivad tekitada muutusi mälu bittides. Kuna bitid säilitavad oma programmeeritud väärtuse elektrilise laengu kujul, siis seda tüüpi häired võivad muuta mälu biti laengut, tekitades nendes vea. Serverites võivad seda tüüpi vead tekkida andmekandjates, protsessori tuumas, läbi võrguühenduse ning erinevat tüüpi mälus.
Vea tagajärg sõltub süsteemist. Süsteemides, kus ECC puudub, võib rike viia kokku jooksmiseni või isegi andmete hävinguni. Suurtes tootmiskohtades on mälus tekkinud vead põhilised riistvaralised põhjused masinate kokku jooksmisel. Mäluvead võivad tekitada ka turvariske. Serverites ja muudes arvutitest sõltuvates töökohtades, kus andmete hävimine ja süsteemirike peab igal juhul välditud olema (nt. finantssektor, teadustööd), eelistatakse seetõttu tihti kasutada ECC-mälu.

Vahemälu

Paljud protsessorid kasutavad veaparanduskoode kiibil oleva vahemälu jaoks, kaasa arvatud Intel Itaniumi, AMD Athloni ja Opteroni protsessorid.
Alates aastast 2006 on EDC/ECC ja ECC/ECC kaks kõige levinumat vahemälu vigate kaitseviise kasutusel kommertsmikroprotsessorites. EDC/ECC kasutab vea leidmise koodi (EDC, ingl. k. Error Detection Code) esimese taseme vahemälu puhul. Kui viga on leitud, siis andmed taastatakse ECC-kaitstud teise taseme vahemälustt. ECC/ECC kasutab ECC-kaitstud esimese taseme ja ECC-kaitstud teise taseme vahemälu. Protsessorid, mis rakendavad EDC/ECC-d, kirjutavad alati info teise taseme vahemällu, kasutades write-through tehnikat (vahemälus kutsub iga muudatus esile sünkroonse andmete uuendamise põhimälus). Seetõttu vea leidmisel esimese taseme vahemälust lugemise ajal on andmete koopia alati teisest tasemest kättesaadaval.

Puhvermälu

Puhvermälu kasutab tehnoloogiat, mis on tihti paaris, aga mitte otse seotud, ECC-mäluga. Puhvermälul on "puhver", mis asub RAM-i ja süsteemi mälu kontrolleri vahel ning vähendab mälukontrolleri koormust.
Puhverdamata mälu korral pöördub mälukontroller otse mälupankade juurde. Puhverdatud ECC-mälu puhul aga suheldakse kõigepealt puhvermäluga ning alles seejärel pöördutakse mälupankade poole. Seetõttu võtavad juhised umbes ühe protsessori takti rohkem aega, kuid koormus protsessori mälukontrollerile on seeläbi väiksem. Puhvermälu tagab, et üheaegselt saab kasutada rohkem mälumooduleid, kui see tavaliselt võimalik oleks.
Kuigi ECC RAM ei ole alati puhverdatud, siis peaaegu kõik puhvermälud on ECC-d. Põhjuseks on, et süsteemid, mis kasutavad suurt mälumahtu, peavad peaaegu alati stabiilsust väga tähtsaks.