Skrivet av Glyph:
---
På ett lite annat tema. Varför kör inte diskarna med någon bättre felkod än än uråldrig CRC, SHA1 t ex? Är det av prestandaskäl? Eller har jag legat gömd under en sten för länge så det faktiskt har hängt något på detta område de senaste åren?
Idag har snurrdiskarna väldigt mycket bättre system än 'simpel' CRC - det är Reed-Solomo-kodning och LDPC på motsvarande 9% av den synliga datamängden i redudans. Detta är inget som en användare ser något alls av.
Men gränssnittet utåt via SATA/IDE m.m så meddelas det som ett CRC-fel när hela den egentliga felrättnings-infrastrukturen har misslyckats med att felrätta och idag så är det alltid minst 8 st 512-bytessektorer i rad som skiter sig samtidigt när det skiter sig då den egentliga sektorstorleken ligger på 4 KByte internt i disken (det gjordes ett skifte runt 2010 hos alla disktillverkare och man övergav 512-bytessektorn internt och bara emulerar det istället från 4 KB sektorer)
Det är samma sak med läsfel på en BR/DVD-skiva - det kallas CRC-fel i programmet när det inte kan läsa men det är väldigt omfattande nivåer av felrättning bakom en sådan skiva med RS-kod interleavat i ett par omgångar och i BR har man dessutom Vinterbi-faltningsavkodare för att öka signal/brusförhållandet ytterligare några snäpp när man har svårlästa partier på skivan (igengrisade med fingeravtryck, repor etc.)
En enstaka oupptäckt bitomslag förekommer inte i en dataström från en modern hårddisk, DVD eller en bandbackup - antingen är det korrekt eller så är det minst 4 kB data som skiter sig på en gång och då med trummor och trumpeter som talar om att det har skitit sig (CRC-fel, IO-fel etc.). När man anger 1 bit fel per 1*10^14 bitar data så handlar det i verkligheten om 1 felaktig 4KB-sektor av 1*10^14 antal lästa korrekta 4 kB-sektorer.
I bandbackup brukar man ange risken för fel ligger på 1 bit per 1*10^14 bitar (och här är det också antalet sektorer som räknas precis som med HD eftersom felen alltid kommer i hela sektorer - inte bitvis) medans risken för ett _oupptäckt_ fel ligger på 1 bit per 1*10^24 korrekta bitar - dvs. sannolikheten är 10 miljarder gånger mindre att man skulle få en 'silent' error som ej upptäcks vid avläsning än att man skulle få ett läsfel med varningsrutor och felhantering.
Hårddiskars och bandbackuppers felrättning har följt varandra över åren och det var väldigt länge sedan som hela kontrollen sköttes av en enda CRC-summa på varje sektor - man får gå till floppydiskar och gamla ST506-diskar för att hitta så simpel felkontroll.
Det betyder att Hårddiskar, Bandbackupper, Optisk media vid läsning rättar massor av fel hela tiden vid normal användning, tusentals till hundratusentals fel i sekunden konstant haglande. Detta gäller också SSD och när det börja tappa prestanda vid läsning så är det indikation att Viterbi/LDPC-algoritmen måste köras allt fler och fler varv innan korrekt data dyker upp och gjorde man inte detta så skulle man få massiva mängder med bittfel redan på enstaka kB läsning.
För att illustrera lite hur det kan se ut så tar jag exempel från DVD hur det kan se ut:
Detta är tagen från en DVD+RW-skiva skriven 2004, datakvalitén är excellent trots att skiva är bra bit över 10 år gammal när denna test gjordes (2015) - en nypressad DVD från butiken ser inte mycket bättre än vad den här gör. - det ironiska är att DVD+/-RW skivor ansågs som opålitliga per default runt 2005... man brukar ange att PIE inte bör vara mer än 80 och PIF över 4 direkt efter när skivan är nybränd om den är tänkt för långtids arkivförvaring - DVD+RW uppfyller detta villkor med råge, 10 år senare
Sedan en klassisk DVD-R med mörkblå/lila färglager skriven från ungefär samma tid som DVD+RW-skivan (det är en av de sämre i min samling - riktigt så illa är det inte på de flesta DVD+/-R med 'färg' från samma tidpunkt) - och det ironiska var att de ansågs mycket mer pålitliga än DVD+/-RW...
Bittfelsantalet är ungefär 1000 ggr högre för DVD-R-skivan än DVD+RW-skivan efter typ 13 års lagring och illustrerar egentligen båda ändarna av skalan när mediat är som bäst och när media är som sämst precis innan det börja ge läsproblem och allt långsammare avläsning (dvs. skivan varvar ned)
Båda skivorna är fortfarande läsbara med högsta hastighet utan nedvarvning på en bra DVD-läsare/brännare med helt felfri data.
CD/DVD Läsare av den här typen brukar minska hastigheten på rotationen när PIF går över 1200-1500 (max nivå för garanterat mindre än 32 fel på data ut efter rättning i första lagrets felrättning) och/eller PIE mer än 32 (max 32 fel in för att datat skall vara rättningsbart till 0 fel i andra lagret felrättning, BluRay har dubblat beloppen på båda) - då vid lägre hastighet brukar '(fas)bruset' minska och dekodrarna kan börja läsa igen.
(Hårddiskarna har idag ganska snarlika avancerade felrättningsmetoder som man använder på DVD/BR med flera nivåer RS-kodning och nu senare LDPC-kodning)
DVD-R i andra bilden kan nog anses vara på gränsen av sin livstid men fortfarande på 'rätt' sida då varvtalet inte sjönk när man gjorde en genomläsning. Om DVD-R(W) skivor tappar varvtal när man läser/testar med max avläsningshastighet - då oftast i slutet, så är det en indikation att skivan bör brännas om eller vart fall skapa en image-kopia (ISO) som sekundärkopia på denna då inom några år kan den bli problematisk att läsa. DVD+RW däremot (första bilden) - den håller många år till i förvaring.
Dvs. vid avläsning med maxhastighet på DVD:n och det ser ut liknande
så kan man somna om i vart fall 5 år till för skivorna utan att oroa sig
medans:
så bör man nog fundera på att bränna om skivan eller vart fall ta en iso-image av denna inom ett par år i alla fall.
De sista två testerna går att göra med alla DVD-läsare, medans de två första bilderna ovan går bara att göra med vissa brännare med vissa serier av media-chip i sig (optiarc, mediatech och vissa TSST efter att hacka i registret)
---
Alla mer tätpackade media som CD/DVD/BR-skivor, magnetband, hårddiskar, flashminnen - all media bokstavligen - alla dessa har mer eller mindre hög nivå med bitfel vid avläsning innan processning och felrättning.
Ja, undantag är nog just Floppydisk och ST506-diskar och gamla 9-spårs band (de hade faktiskt paritet) där ett bitfel ger CRC-error om det inte gick att läsa med flera omläsningsförsök (vilket också är en form av felrättning) - redan på QIC40 och QIC80-backupbandmaskinerna som kom i slutet av 80-talet så förstod man att man var tvungen att ha felrättning - närmare bestämt så var 3 sektorer av 32 sektorer Reed-Solomo-kod för att man skulle kunna förlora vilken som helst (och i vissa fall upp till 3) av de 32 sektorerna och ändå felrätta innehållet korrekt. På den tiden räknade man att det var 1 fel per 1*10^4 lästa bitar när bandet var i slutet av sin livstid. - och det har egentligen inte ändrat sig speciellt mycket sedan dess även på modern media inklusive blu-ray och inuti Hårddiskar räknar man fortfarande med 1 fel per 1*10^4 lästa bitar i designen.
----
Det finns en anledning till varför man kör med ECC/RS/LDPC är att dessa system är väldigt mycket bättre på att hitta fel över längre strängar med data. CRC har ju svagheten att det är ganska många kombinationer av bit-korruption som kan ge samma CRC-summa som en rätt sekvens och risken är större ju längre sträng, medans en RS/LDPC-kodning så är det mer åt Sha5-hållet att det är ganska glest mellan (teoretiska) kombinationer som kan ge 'krockar' med samma 'summa' och misstolka som korrekt data.
Svagheterna om man misstänker/har erfarit bitswap ligger snarare på minnesfel i diskkontrollern, i överföringen (DMA) som 'bara' skyddas med CRC, minnesfel i datorn mm. och därav pratet om ECC-minne i burken.
Det finns en media/minnesform som inte har den omfattade minnesskydd med felrättning och att automagiskt meddela läsproblem som skrivits ovan - gamla FLASH-minne, SD-minne och många USB-minne (och även väldigt många Flash-baserade embedded-minnen i utrustning - några har säkert hört om Nexus 7 och brickning vid uppdatering till senare version av Firmware, det är typisk flash-relaterat problem när felrättningen inte längre räcker till på chipnivå)
Förvisso finns det en viss felrättning lokalt på Nand-flashen-chipet (Vinterbi/LDCP) men dessa har ingen kanal att meddela uppåt till överliggande lager när det skiter sig - därför kan en SD-minne leverera korrupt data utan att det finns något i HW som reagerar på det...