ECC-minnet som feilet
For en stund tilbake fikk en av mine kolleger helt ufrivillig en leksjon i hva kombinasjonen av dårlig kundebehandling og manglende systemforståelse kan lede til. Han hadde en tjeneste som var såpass viktig at de hadde bestilt tjenermaskinvare som den kjørte på - deriblant ECC-minne.
ECC betyr Error Correcting Code, og litt forenklet kan vi forestille oss det som minne med dobbelt paritet: en paritetsbit for hver byte, og en paritetsbit for alle n»te bits i en blokk med minne - dvs en paritetsbit for alle LSB i hver byte osv. Da har man en matriselignende layout av bits, med paritet både kolonne- og radvist. Hver minnebit er med i to paritetsbits, og hvert par av paritetsbit deler maksimalt en enkelt bit. Det er da mulig ikke bare å detektere at det er bitfeil - som man kan med vanlig paritetsminne. Man kan i tillegg også bestemme posisjonen som har feil verdi, og dermed kan man korrigere den. Som en bonus er man også sikret deteksjon av alle dobbeltfeil.
Bitfeil i minnet er en del av livets realiteter. Det kan skyldes en så uunngålig ting som at kosmisk stråling har fått inn en fulltreffer på den delen av en minnebrikke der en bit lagres. Normalt er raten lav, og den druker i de fleste systemens iboende ustabilitet. Selvfølgelig kan også bitfeil skyldes at det er feil på minnebrikken, og det er ikke ignorerbart.
Om du ønsker å ha maksimal oppetid og stabilitet, er ECC-minne en god ide. Dessuten kan man formodentlig anta at hovedkort og systemer med ECC-minne også har høyere kvalitet forøvrig. Det er i hvert fall lov å håpe.
Min kollega kjøpte altså ECC-minne til tjeneren med den kritiske tjenesten. Etter en tids bruk ble det konstatert repeterende minnefeil på et bestemt punkt. Han samlet all informasjon som han visste support ville trenge og ringte dem. En av livets merksnodigheter er at jo større en organisasjon blir, jo mer frustrerende er det generelt å forsøke å kommunisere med deres supportavdeling, og dette var en av de aller største og formodentlig mest seriøse. Men min kollega fikk bakoversveis da han fikk beskjed at den modellen skiftet de ikke minne på, fordi den hadde ECC-minne, som korrigerer feilene, og dermed er ikke minne-feil noe problem.
Dette er et så blantant overtramp på tanken bak og forståelse av redundans at det er verd å analysere det. ECC-minne har innebygget redundans, nærmere bestemt en slags N+1-redundans selv om konseptet ikke helt passer. I det øyeblikket et redundant system får en feil, reduseres redundansen. Det er ikke en sikring mot feil, det er en galgenfrist du har kjøpt deg og som løper fra feilen har oppstått. Det gir deg litt mer tid til å fikse den uten at tjenesten rammes. Litt forenklet: systemet kan rammes av feil, men redundansen sikrer at tjenesten ikke rammes. Dersom du er så dumdristig å kjøre videre, kjører du uten eller med redusert redundans. Treffes du av enda en feil risikerer du at også tjenesten feiler.
Så lenge feilene oppstår med lav rate, sporadisk og på tilfeldig steder uten noe mønster, er det ikke grunn til å bytte minnet - det var denne feilkorrigeringen du kjøpte ECC-minne for. Dersom feilene kommer på samme sted og kanskje med økende hyppighet, så vet du at det er minnet i seg selv som er problemet, og det må byttes.
Det er som med reservedekket til bilen. Når du har punktert, er det reservedekket som lar deg kunne kjøre videre. Men samtidig kjører du nå videre uten redundans, og bør reparere dekket (reetablere redundansen) snarest råd.