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.