Az ECC memória ( angolul hibajavító kódmemória , memória hibajavítással) egy olyan számítógépes memória , amely automatikusan felismeri és kijavítja a memóriabitek spontán változásait (hibáit). A hibajavítást nem támogató memória nem ECC- nek minősül .
A hibajavító memória általában egyetlen gépszóban képes egybites változtatásokat korrigálni . Ez azt jelenti, hogy egy gépi szó memóriából történő kiolvasásakor ugyanaz az érték lesz beolvasva, mint amit korábban írtunk, még akkor is, ha az írás és az olvasás közötti intervallumban egy bit véletlenül megváltozott (például kozmikus sugarak hatására ). A közönséges memória általában nem tudja megállapítani, hogy hiba történt-e, bár bizonyos típusú paritásellenőrző memória képes megállapítani, ha hiba történt, de nem tudja kijavítani.
Hibajavító memóriát a legtöbb olyan számítógépen használnak, ahol fontos az üzemidő, beleértve a legtöbb szervert is. Ahhoz, hogy a memória hibajavító módban működjön, a RAM-vezérlő támogatása szükséges, amely lehet a lapkakészlet szerves része, vagy a számítási magokkal integrált lapkán található rendszerbe ágyazva.
A legalapvetőbb hibajavító algoritmus a Hamming kódon alapul . Vannak azonban más algoritmusok is, amelyek több hibát is kijavíthatnak.
A gyakorlatban a DDR* SDRAM ECC memóriát széles körben használják SECDED osztálykóddal rendelkező szervereknél (egyszeri hibajavítás és kettős hibaészlelés). A memóriamodulokon minden 8 chiphez egy további chip kerül hozzáadásra, amely 8 bites méretű ECC kódokat tárol minden 64 bites főmemória után [2] .
Valamint ECC adatvédelmi sémák alkalmazhatók a mikroprocesszorokba épített memóriára: cache memória, regiszterfájl. Néha a vezérlést is hozzáadják a számítási áramkörökhöz.
A számítógépes rendszeren belüli elektromágneses interferencia spontán módon megváltoztathatja a számítógép memóriacellájának állapotát . Ennek a változásnak a leggyakoribb oka a kozmikus sugarakból származó neutronok [3] . Ezért a számítógépes rendszerek hibaaránya a magasság növekedésével nő . Így a neutronfluxus 3,5-szer nagyobb 1,5 km magasságban és 300-szor nagyobb 10-12 km magasságban (tipikus utasszállító repülőgép repülési magasság), mint tengerszinten [4] . Ezért a nagy magasságban működő rendszerek nagyobb védelmet igényelnek.
Például a Cassini-Huygens űrszondának két egyforma felvevője van, amelyek mindegyike 2,5 gigabit memóriát tartalmaz. A repülés első 2,5 évében nagyjából állandó számú hibát rögzítettek minden nap: körülbelül napi 280 hibát. Egy napon belül (1997. november 6-án) azonban a hibák száma megnégyszereződött. Feltételezések szerint ez egy geomágneses vihar [5] (egyben protonvihar ) miatt történt, amelyet a GOES 9 műhold [6] rögzített .
Aggodalomra ad okot, hogy a memóriamodulok kisebb fizikai mérete felé mutató tendencia a hibaarány növekedéséhez vezet, mivel az alacsonyabb energiájú részecskék képesek lesznek megváltoztatni a bitet [4] . Másrészt a memória kompakt mérete csökkenti annak esélyét, hogy részecskék kerüljenek bele. Ezenkívül az olyan technológiákra való átállás, mint a szilícium a szigetelőn , stabilabbá teheti a memóriát [7] .
Egy nagyszámú Google -szerveren végzett tanulmány kimutatta, hogy a hibák száma 25 000 és 70 000 között lehet milliárd eszközóránként ( angolul eszközóra ) megabitonként (azaz 2,5-7,0 × 10 -11 hiba/bitóra) [ 8] .
A probléma egyik megoldása a paritás – egy extra bit használata, amely rögzíti a fennmaradó bitek paritását. Ez a megközelítés lehetővé teszi a hibák észlelését, de nem teszi lehetővé azok javítását, így hiba észlelése esetén csak a program végrehajtását szakíthatja meg.
Megbízhatóbb megközelítés az, amely hibajavító kódokat használ . A leggyakrabban használt hibajavító kód a Hamming-kód . A modern számítógépekben használt hibajavító memória legtöbb típusa képes kijavítani egy 64 bites gépszó egyetlen bites hibáját, és egyetlen 64 bites szóban észleli, de nem javítja a kétbites hibát [9] .
A hibajavítás leghatékonyabb módja a várható hibák típusától függ. Gyakran feltételezik, hogy a különböző bitek változása egymástól függetlenül történik, ebben az esetben egy szóban elhanyagolható a két hiba valószínűsége. Ez a feltételezés azonban nem érvényes a modern számítógépekre. A Chipkill ( IBM ) hibajavító technológia lehetővé teszi számos hiba kijavítását, beleértve azt is, ha a teljes memóriachip megsérül . A bithiba-függetlenséget nem feltételező egyéb memóriajavító technológiák közé tartozik az Extended ECC ( Sun Microsystems ), a Chipspare ( Hewlett-Packard ) és az SDDC ( Intel ).
Sok régebbi rendszer csak azokat a hibákat jelentette, amelyeket nem lehetett javítani, és nem jelentette a javított hibákat. A modern rendszerek rögzítik a javítható hibákat (CE, eng. javítható hibák ) és a nem javítható (UE, eng. uncorrectable errors ) hibákat is. Ez lehetővé teszi a sérült memória időben történő cseréjét: annak ellenére, hogy a helyrehozhatatlan hibák hiányában kijavított hibák nagy száma nem befolyásolja a memória megfelelő működését, ez azt jelezheti, hogy ennél a memóriamodulnál a javíthatatlan hiba előfordulásának valószínűsége a hibák száma a jövőben növekedni fog [10] .
A hibajavító memória megvéd a számítógépes rendszer memóriasérülés miatti helytelen működésétől, és csökkenti a végzetes rendszerhiba valószínűségét. Az ilyen memória azonban többe kerül; a hibajavító memóriát támogató alaplap , lapkakészlet és processzor is drágább lehet, ezért az ilyen memóriát általában csak olyan rendszerekben használják, amelyek kritikusak a zökkenőmentes és megfelelő működéshez, mint például fájlszerver , tudományos és pénzügyi alkalmazások.
Az összegek ellenőrzéséhez gyakran szükség van a memóriavezérlő egy extra ciklusára. A számlálást, ECC ellenőrzést és hibajavítást megvalósító további logika logikai erőforrásokat és időt igényel, hogy működjön akár magában a memóriavezérlőben, akár a CPU és a memóriavezérlő közötti interfészben [11] . Ezért a hibajavító memória az alkalmazástól függően 2-3%-kal lassabb, mint a hagyományos memória [12] .
A dinamikus véletlen hozzáférésű memória (DRAM) típusai | |
---|---|
aszinkron | |
Szinkron | |
Grafikus | |
Rambus | |
Memória modulok |