prosessorer
Det er slett ikke sikkert at CPU-en din alltid regner riktig
Google har oppdaget dette med nyere prosessorer i dataanlegg med svært stor skala.
I det daglige kan man gå ut fra at når du ber en datamaskin – enten det er en PC, server, smartmobil eller noe annet med relativt kraftig prosessor – om å utføre et regnestykke, så returnerer den det korrekte svaret. Prosessorleverandørene har lang erfaring med å teste og luke ut eventuelle feil av denne typen, så det hører til sjeldenhetene at det oppdages designfeil i CPU-er som resulterer i at prosessoren regner feil.
Vi snakker da ikke om sårbarheter som Spectre og Meltdown, som er ille nok, men som i utgangspunktet ikke påvirker resultatene av prosessorenes utregninger.
Noen historiske tilfeller
Pentium FDIV-feilen, som rammet de tidligste utgavene av Intels Pentium-prosessorer, er nok den mest kjente. Den ble oppdaget i 1994 og forårsaket at prosessorene en sjelden gang returnerte feilaktige, binære flyttallsresultater ved divisjon av visse nummerpar med høy presisjon.
Noen år senere, i 1997, ble det funnet en annen flyttallsrelatert feil i prosessorfamiliene Pentium Pro og Pentium II. Den ble kalt for «Dan-0411» etter personen som først oppdaget den og datoen den ble oppdaget på. Feilen oppstod i forbindelse med konvertering mellom heltall og flyttall, dersom det 80-bit store flyttallet ikke fikk plass i heltallsformatet på 16 eller 32 bit.
Mens Pentium FDIV-feilen førte til tilbakekalling av prosessorene, oppstod Dan-0411-feilen så sjelden at den etter alt å dømme ikke fikk noen store konsekvenser.
Intel er ikke alene om ha gjort slike feil. I mars 2001 ble det oppdaget en feil i Suns UltraSparc III-prosessor, også den i forbindelse med flyttallsoperasjoner. Sun kom etter hvert med en feilfiks som koblet ut funksjonen som forsøker å gjette hvilken instruksjon som er den neste i rekken («prefetching»). Dette skal ha ført til et ytelsestap på inntil 5 prosent.
Nybegynnerfeil og bakgrunnsstråling
Det finnes også andre tilfeller hvor prosessorer kan komme med det som for noen framstår som uventede resultater, men som egentlig er helt etter boka. Dette gjelder også i forbindelse med ganske ordinær regning med flyttall, noe vi har dekket her:
Hvorfor datamaskinen din ikke alltid oppgir at 0,1 + 0,2 = 0,3
Er man riktig uheldig, kan CPU-en eller tilknyttede minnebrikker bli truffet av ioniserende stråling. Dette kan eksempelvis føre til at bitverdier blir endret. Men det skal mye til for at slike feil oppstår i konvensjonelle datamaskiner under normale forhold på jorden. Dagens kvantedatamaskiner er derimot ganske følsomme for bakgrunnsstrålingen.
Har oppdaget helt nye feil
Moderne CPU-er er svært komplekse. De har langt mer innebygget funksjonalitet enn det som var vanlig for bare noen år siden, noe som er mulig fordi komponentene tar stadig mindre plass i brikkene.
Samtidig har datamaskiner blitt tatt i bruk i en skala som var utenkelig for bare et par tiår siden, blant annet hos teknologigiganter som Facebook og Google.
I det siste har aktører som disse registrert CPU-relaterte regnefeil i et større omfang enn det som en tidligere har kunnet vente. Det dreier seg gjerne om sporadiske feil som oppstår lenge etter at datamaskinen har blitt tatt i bruk, og de berører ofte enkeltkjerner framfor hele CPU-en.
Slike feil ble omtalt av Google-forskeren Peter Hochschild i et foredrag under HotOS 2021-konferansen nylig. Foredraget kan sees nedenfor. En tilhørende forskningsrapport er tilgjengelig her. Begge deler er også omtalt av The Register.
Merkuriale kjerner
Hochschild beskriver dette som kjerner som ikke adlyder instruksjoner. Google kaller dette for merkuriale kjerner, altså uforutsigbare. Feilene skyldes lokale silisiumdefekter og oppstår ofte bare i forbindelse med visse beregninger, og ofte under visse forhold, inkludert klokkehastighet og temperatur. Feilene er ofte gjentakende, men de skjer vilkårlig.
I en forskningsrapport skriver Hochschild og hans kolleger at feilene ikke blir oppdaget under produksjonstesting, at de ikke alltid kan utbedres ved hjelp av mikrokodeoppdateringer og at feilene er «lydløse», det vil si at det eneste symptomet på dem er feilberegninger.
– Merkuriale kjerner er ekstremt sjeldne, men i store serverflåter kan vi observere forstyrrelsene de skaper ofte nok til å anse dem som et tydelig problem – ett som vil kreve samarbeid mellom maskinvaredesignere, prosessorleverandører og systemprogramvarearkitekter, heter det i rapporten.
Kan forårsake store datatap
I videoen nevner Hochschild eksempler på hva som kan skje når slike feil oppstår. De kan for eksempel få prosesser eller operativsystemkjernen til å krasje, og de kan forårsake at beregninger gir feil svar.
– Uoppdaget feilkalkulering kan føre til datatap. Tenk deg for eksempel korrumpering av krypteringsnøkler eller lagringsmetadata. Slike feil er «korrumperingsforsterkere» som kan ødelegge store mengder med data, forteller Hochschild.
– Én av våre CPU-kjerner korrumperte kryptering. Den gjorde det på en slik måte at bare denne kjernen kunne dekryptere det den hadde kryptert på feil måte.
Peker på flere årsaker
Forskerne skriver at selv om de kjenner til noe av årsakene til at CPU-kjernene har blitt mer «porøse», kan de bare spekulere om andre. Men mistanken går mot stadig økt CPU-skala og -kompleksitet, komponenter i nanometerstørrelse, nye teknikker som stablede lag i mikrobrikkene samt at CPU-er gradvis er i ferd med å bli samlinger av separate akseleratorer rundt en delt registerfil.
– Det eneste som er bra med situasjonen, er at dersom du kan finne de defekte CPU-en, kan du fjerne dem, sier Hochschild.
Han beskriver i videoen metoder som Google har tatt i bruk for å finne CPU-ene som forårsaker feil, samt noen tiltak som kan redusere konsekvensene av feilene. Flere detaljer finnes i rapporten.