Hoe werkt een SSD?

Inhoudsopgave
  1. 1. Inleiding
  2. 2. Flashgeheugen (NAND)
  3. 3. SLC, MLC, TLC en QLC
  4. 4. De achilleshiel: pages en blocks
  5. 5. Controller: de SSD-trukendoos
  6. 6. DRAM-cache
  7. 7. Encryptie en compressie
  8. 8. De toekomst

Controller: de SSD-trukendoos

Het flashgeheugen dat aan de basis staat van ssd’s heeft dus gunstige karakteristieken, zoals het feit dat de gegevens bewaard blijven zonder continue spanning, en de veel lagere toegangstijd ten opzichte van ronddraaiende platter, maar ook een aantal nukken. De belangrijkste taak van de ssd-controller, letterlijk de processor die de ssd aanstuurt, is dan ook om zo slim mogelijk om deze minder gunstige eigenschappen heen te werken. De trukendoos van een ssd-controller heeft ruwweg twee doelen: de levensduur van het flashgeheugen verlengen en de snelheden ervan verhogen.

De meest voor de hand liggende truc die specifiek voor ssd’s wordt toegepast, lost het herschrijfprobleem waar we het zojuist over hadden goeddeels op. Het trim-commando, dat in de scsi-standaard de meer beschrijvende naam ‘unmap’ heeft, laat de ssd expliciet weten wanneer een bestand in het OS wordt verwijderd, zodat de betreffende pages ook daadwerkelijk kunnen worden gewist. Ondersteuning hiervoor zit sinds Windows 7 in het besturingssysteem van Microsoft, en sinds 2011 ook in macOS. Nu is het trim-commando slechts een deel van de oplossing. Door het fysiek wissen van verwijderde gegevens ontstaan weliswaar gaten, maar die blijven doorgaans verspreid over de hele ssd. Wil de ssd iets met zo’n ‘echt lege’ page, dan moet er dus alsnog een heel block worden herschreven. Aanvullend wordt daarom een techniek toegepast die garbage collection wordt genoemd: het zo efficiënt mogelijk verzamelen van gegevens die nog courant zijn, door blocks opnieuw in te delen als er zich ‘gewiste data’ in een block bevindt. Aan het einde van die herindeling blijven volledig lege blocks over, die dus op volle snelheid kunnen worden beschreven als er nieuwe schrijfopdrachten binnenkomen.


Links worden vier pages geschreven naar een block. In het midden worden die vier pages bewerkt (en dus herschreven) en worden nog eens vier nieuwe pages geschreven. Rechts zie je dat de eerste vier pages, die nu niet meer nodig zijn, pas kunnen worden vrijgemaakt als alle pages die bewaard moeten blijven zijn verplaatst naar een ander block.

Afvalstoffenheffing: de levensduur

De vuilnisophaaldienst van de ssd klinkt als de beste uitvinding sinds het gesneden brood, maar ook deze techniek is niet zonder nadelen. Voor de snelheid zou het ideaal zijn als de ssd op elk rustmoment aan de slag ging met deze herindelingen, maar dat conflicteert met een andere minder fijne karakteristiek van flashgeheugen die we eerder beschreven, namelijk dat het slechts een eindig aantal keren kan worden beschreven. Bij dit fenomeen spreken we over het aantal program/erase cycles, oftewel het aantal keren dat een geheugencel kan worden geprogrammeerd (naar 0) en gereset (naar 1). Toen slc nog de standaard was en er slechts één bit per cel werd opgeslagen, waardoor er slechts twee spanningsniveaus hoeven te kunnen worden onderscheiden om de inhoud van een cel te bepalen, kon een cel makkelijk honderdduizend keer opnieuw worden beschreven. Dat was ruim voldoende om in de praktijk geen problemen te veroorzaken.

In theorie neemt het aantal p/e-cycles dat een geheugencel aankan, echter met een drastische tien keer per extra bit af. Volgens die logica kan een mlc-cel nog tienduizend keer mee, een tlc-cel slechts duizend, en houdt een qlc-cel ermee op na honderd keer te zijn beschreven. In de praktijk valt dat door verbeteringen bij zowel productie als aansturing gelukkig mee: moderne tlc-chips kunnen zo’n drieduizend p/e-cycles doorstaan, een qlc-chip ongeveer duizend. Zelfs dat is mogelijkerwijs nog aan de pessimistische kant. Toen we in 2013 de proef op de som namen met een van Samsungs eerste tlc-ssd’s, duurde het immers al drieduizend cycles voordat er onherstelbare fouten optraden.

Naast het voorkomen van onnodige writes is het tevens van belang dat de geheugencellen gelijkmatig verslijten. Een ssd-controller zal nieuwe schrijfopdrachten daarom bij voorkeur onderbrengen in delen van het flashgeheugen die nog relatief weinig zijn gebruikt, een techniek die wear leveling wordt genoemd. Zo wordt de levensduur van de ssd als geheel gemaximaliseerd. Het zou immers zonde zijn als een ssd onbruikbaar wordt door enkele kapotte geheugencellen terwijl andere cellen nog maar op een kwart van hun levensduur zitten.

Al deze zaken – wear leveling, garbage collection en het gegeven dat data uitsluitend per block kunnen worden gewist – zorgen ervoor dat een ssd meer schrijfacties uitvoert dan je besturingssysteem ernaartoe stuurt. Het verschil daartussen wordt gevangen in de WAF, de write amplification factor. Bij typisch gebruik ligt die factor rond de 3. Hier ontstaat de interessante paradox waarbinnen een ssd-controller opereert: meer schrijven vermindert in de basis de levensduur van een ssd, maar gelijkmatig schrijven en slim herindelen – waarvoor schrijfacties nodig zijn – verlengen die levensduur juist.

Zelfs als de levensduur van flashcellen normaal verdeeld is, zullen er uitschieters en maandagmorgenmodellen tussen de miljoenen geheugencellen in de gemiddelde ssd zitten. Om vroege defecten op te vangen, wordt flashgeheugen standaard met reservecellen uitgerust. Afhankelijk van het exacte type geheugen en de fabrikant gaat het om enkele procenten tot rond de tien procent extra bits per page of block. Als een geheugencel om welke reden dan ook niet meer bruikbaar is, kunnen de back-upcellen als plaatsvervanger dienen. Het plaatsen van meer geheugencellen dan strikt noodzakelijk, in jargon overprovisioning, wordt ook op een hoger niveau toegepast. Veel ssd’s worden bijvoorbeeld verkocht met een capaciteit van 480 of 500 GB, terwijl er fysiek 512 GB flashgeheugen aanwezig is. Strikt genomen gaat het bij dat laatste getal zelfs om GiB, oftewel veelvouden van 1024, waardoor er per definitie meer capaciteit aanwezig is dan er aan het OS wordt gepresenteerd. Bij zakelijke ssd’s wordt vaak zelfs nog veel meer geheugen achtergehouden.


Een voorbeeld van een ssd waarbij additionele overprovisioning wordt toegepast.

Overprovisioning biedt als het ware ademruimte aan de ssd-controller voor het uitvoeren van alle besproken trucs. Zelfs als de ssd vol is kan er bijvoorbeeld naar lege pagina’s in het achtergehouden flash worden geschreven, of naar het niet-dynamische deel van de slc-cache. Daarnaast kunnen defecten bij de reguliere flashchips worden opgevangen, een proces dat we reallocation noemen. Daarom is de toename van het aantal reallocated sectors, zoals je die in de SMART-gegevens kunt uitlezen via software als CrystalDiskInfo, doorgaans een indicatie dat je ssd richting het einde van zijn levensduur gaat. Je kunt overigens relatief simpel zelf (extra) overprovisioning toepassen, door slechts een deel van je ssd te partitioneren.

Advertentie
0