Atmiņa ar kļūdu labošanu

Atmiņa ar kļūdu labošanu (angļu: error-correcting code - ECC) ir tāda veida datoratmiņa, kas var konstatēt un izlabot atmiņā notiekošus n bitu datu bojājumus. Atmiņu ar kļūdu labošanu izmanto lielākajā daļā datoru, kuros datu bojājumi nekādā ziņā nav pieļaujami, piemēram, ražošanas vadības lietojumos, izšķirīgi svarīgās datubāzēs vai infrastruktūras kešatmiņās.

Parasti atmiņa ar kļūdu labošanu uztur atmiņas sistēmas neuzņēmību pret viena bita kļūdām: dati, kas tiek nolasīti no katra vārda, vienmēr ir tādi paši kā tajā ierakstītie dati, pat ja viens no faktiski saglabātajiem bitiem ir apvērsts nepareizā stāvoklī. Vairums atmiņu bez kļūdu labošanas nespēj konstatēt kļūdas, lai gan dažas atmiņas bez kļūdu labošanas, bet ar paritātes atbalstu ļauj konstatēt, taču ne labot kļūdas.

 
Parasti divrindu atmiņas moduļiem (DIMM) ar kļūdu labošanu ir deviņas atmiņas mikroshēmas katrā pusē — par vienu vairāk nekā divrindu atmiņas moduļiem bez kļūdu labošanas (dažos moduļos var būt 5 vai 18).[1]

Kļūdu labošana pasargā no neatrastiem atmiņas datu bojājumiem, un to izmanto datoros, kuros šādi bojājumi nav pieļaujami, piemēram, dažos zinātniskos un finansiālos datošanas lietojumos vai datņu serveros. Turklāt kļūdu labošana samazina avāriju skaitu, kas sevišķi nav pieļaujamas daudzlietotāju serveru lietojumos un maksimālās pieejamības sistēmās.

Elektriskie vai magnētiskie traucējumi datorsistēmā var izraisīt viena dinamiskās brīvpiekļuves atmiņas (DRAM) bita patvaļīgu apvēršanos pretējā stāvoklī. Sākotnēji tika uzskatīts, ka to lielākoties izraisa mikroshēmu montāžas materiāla sārņu izdalītās alfa daļiņas, taču pētījumi liecina, ka vairums vienreizējo vieglkļūdu dinamiskās brīvpiekļuves atmiņas mikroshēmās notiek fona starojuma dēļ — galvenokārt tie ir neitroni no sekundārā kosmiskā starojuma, kas var mainīt vienas vai vairāku atmiņas šūnu saturu vai traucēt shēmas, kas šajās mikroshēmās tiek izmantotas nolasīšanai vai ierakstīšanai.[2] Tādējādi kļūdu īpatsvars strauji palielinās, pieaugot augstumam, piemēram, salīdzinājumā ar jūras līmeni 1,5 km augstumā neitronu plūsmas ātrums ir 3,5 reizes lielāks un 10–12 km (pasažieru lidmašīnu lidojuma) augstumā — 300 reižu lielāks.[3] Tas nozīmē, ka sistēmām, kas darbojas lielā augstumā, ir jāparedz īpašs drošums.

Piemēram, 1997. gadā palaistajā kosmiskajā lidaparātā Cassini-Huygens bija divi vienādi lidojuma parametru reģistratori — katram bija 2,5 gigabiti atmiņas sērijveida dinamiskās brīvpiekļuves atmiņas mikroshēmu formā. Izmantojot iebūvētās kļūdu konstatēšanas un labošanas funkcijas, kosmiskā lidaparāta inženiertehniskā telemetrija informēja par (izlabojamu) viena bita uz vārdu kļūdu skaitu un (neizlabojamu) divu bitu uz vārdu kļūdu skaitu. Pirmajos 2,5 lidojuma gados kosmiskais lidaparāts informēja par gandrīz nemainīgu viena bita kļūdu daudzumu — aptuveni 280 kļūdu dienā, taču 1997. gada 6. novembrī, pirmajā mēnesī kosmosā, kļūdu skaits šajā vienā dienā pieauga vairāk nekā četras reizes. Tas tikai saistīts ar Saules uzliesmojumu, ko konstatēja Zemes mākslīgais pavadonis GOES 9.[4]

Pastāvēja bažas, ka līdz ar tālāku dinamiskās brīvpiekļuves atmiņas blīvuma palielināšanos un tādējādi komponentu samazināšanos uz mikroshēmām, vienlaikus krītoties darba spriegumam, šāds starojums biežāk ietekmēs dinamiskās brīvpiekļuves atmiņas mikroshēmas, tāpēc ka zemākas enerģijas daļiņas spēs mainīt atmiņas šūnas stāvokli. No otras puses, mazākas šūnas veido mazākus mērķus, un pāreja uz silīcija izolatora un tamlīdzīgām tehnoloģijām var padarīt atsevišķas šūnas mazāk uzņēmīgas un tādējādi neitralizēt vai pat apgriezt šo tendenci.

Priekšrocības un trūkumi

labot šo sadaļu

Pastāv kompromiss starp aizsardzību pret neparastu datu zudumu un augstākām izmaksām.

Atmiņai ar kļūdu labošanu parasti ir augstāka cena nekā atmiņai bez kļūdu labošanas, jo atmiņas moduļu ar kļūdu labošanu ražošanai ir vajadzīga papildu aparatūra, kā arī atmiņas ar kļūdu labošanu un ar to saistītās sistēmas aparatūras ražošanas apjomi ir mazāki. Arī sistēmplates, mikroshēmojumi un procesori, kas ir saderīgi ar kļūdu labošanu, var būt dārgāki.

Sistēmplašu ražotāju atbalsts kļūdu labošanai atšķiras, tāpēc ar kļūdu labošanu nesaderīga sistēmplate var vienkārši nepazīt atmiņu ar kļūdu labošanu. Vairums sistēmplašu un procesoru, kas paredzēti mazāk svarīgiem lietojumiem, nav izstrādāti saderībai ar kļūdu labošanu, tāpēc to cena var būt zemāka. Dažas kļūdu labošanai pielāgotas sistēmplates un procesori ir saderīgi ar nebuferētu (nereģistrētu) kļūdu labošanu, bet darbojas ar atmiņu bez kļūdu labošanas arī; sistēmas aparātprogrammatūra nodrošina kļūdu labošanas funkcijas, ja ir uzstādīta atmiņa ar kļūdu labošanu.

Atkarībā no lietojuma un izpildījuma dažās sistēmās kļūdu labošana var samazināt atmiņas darbības ātrumu par 2–3 procentiem, jo atmiņas ar kļūdu labošanu kontrolleriem ir vajadzīgs papildu laiks kļūdu pārbaudei, tomēr modernajās sistēmās kļūdu labošanas pārbaude ir integrēta centrālajā procesorā, neradot piekļuves atmiņai papildu kavēšanos, kamēr nav konstatētas kļūdas.

Kļūdu labošanas shēmu dēļ ar kļūdu labošanu saderīga atmiņa var veicināt papildu enerģijas patēriņu.[5]

  1. Fischer Werner. «RAM Revealed». Skatīts: 19.12.2020.
  2. Eugene Normand. «Single Event Upset at Ground Level», 2013. gada oktobris. Arhivēts no oriģināla, laiks: 21.10.2013. Skatīts: 19.12.2020.
  3. Sparsh Mittal, Jeffrey S. Vetter. «A Survey of Techniques for Modeling and Improving Reliability of Computing Systems», 2015. gada aprīlis.
  4. Gary M. Swift and Steven M. Guertin. «In-Flight Observations of Multiple-Bit Upset in DRAMs». Skatīts: 19.12.2020..
  5. «ECCPLOIT: ECC MEMORY VULNERABLE TO ROWHAMMER ATTACKS AFTER ALL».