vrijdag 6 oktober 2017

Hoe werkt een SSD?

Een klassieke harde schijf bestaat uit een reeks draaiende magnetische schijven en een arm. Aan deze arm zijn lees- en schrijfkoppen bevestigd, die naar de verschillende locaties op een harde schijf worden gebracht om data te schrijven of lezen. Doordat de koppen in lijn moeten zijn met een bepaald gebied op de schijf om de correcte data uit te lezen, is er een zekere wachttijd.
Bovendien kan het zijn dat de nodige info zich op verschillende plaatsen op de schijf bevindt. In dat geval moet de drive meermaals wachten tot de schijven in de juiste positie zijn gedraaid. Wanneer een schijf zich in een lage-energiestatus bevindt, kan het enkele seconden duren alvorens de schijf weer op volle snelheid draait.

Geen toekomst

Toen de eerste harde schijven op de markt kwamen, was het onmiddellijk duidelijk dat de technologie onmogelijk de snelheid waaraan CPU’s draaien, kunnen evenaren. De vertragingen van HDD’s worden in milliseconden gemeten, terwijl een processor wachttijden heeft van slechts enkele nanoseconden. In een milliseconde past maar liefst een miljoen nanoseconden; een HDD komt nog niet eens in de buurt van de snelheid van CPU’s.
Fabrikanten proberen dat probleem van de baan te helpen door dunnere schijven te gebruiken, geheugencaches te implementeren en hogere draaisnelheden te introduceren. De Western Digital VelociRaptor, één van de snelste harde schijven voor consumenten en haalt 10.000 omwentelingen per minuut. Schijven voor bedrijven draaien aan een maximum snelheid van 15.000 omwentelingen per minuut, maar kunnen nog steeds de snelheid van CPU’s niet evenaren. Fabrikanten richten daarom hun aandacht op een andere technologie: de SSD.

NAND-roosters

Zoals de naam al doet vermoeden, heeft een solid state drive geen bewegende onderdelen. Data wordt bij een SSD opgeslagen in verschillende NAND-geheugencellen, die op hun beurt uit floating gate transistors bestaan. Elektronen worden in de floating gate van de transistors bewaard en hoeven niet regelmatig ververst te worden. Dit maakt van NAND flash non-volatile geheugen.
De NAND-geheugencellen worden in roostervorm aan elkaar gekoppeld. Het volledige rooster wordt een blok genoemd en de verschillende rijen van het rooster de pagina’s. Een pagina heeft meestal een grootte van 2K, 4K, 8K, of 16K en een blok bestaat uit 128 tot 256 pagina’s. De grootte van een blok varieert hierdoor tussen de 256 KB en 4MB.

Bits per cel

Uiteraard kan je bij SSD’s net zo goed vertragingen opmeten. Eén van de bepalende factoren voor deze vertragingen is de hoeveelheid bits per cel de SSD gebruikt. Een single-level cell (SLC) ondervindt minder vertraging dan een SSD met meerdere bits per cel. Hierbij is met name de schrijfsnelheid een stuk trager. Een typische triple-level-cell (TLC) SSD leest data vier keer zo traag als een SLC. Wanneer je de schrijfsnelheden vergelijkt, zie je dat de TLC SSD zes keer zo traag is.
Bij een SLC SSD moet de controller slechts nakijken of de waarde 0 of 1  is. Wanneer je de hoeveelheid bits in een cel verhoogt, neemt de hoeveelheid mogelijke waardes exponentieel toe. Zo kan een MLC SSD vier waardes hebben per cel: 00, 01, 10, of 11. Een TLC SSD heeft daarentegen 8 waardes per cel. Om deze waardes te achterhalen, moet de controller een erg precieze voltage gebruiken. De waardes liggen immers dichter bij elkaar.

Lawine-effect

Doordat een SSD geen bewegende onderdelen heeft, kan het erg snel data schrijven naar een lege drive. Het overschrijven van data gebeurt echter een stuk trager. Dit komt doordat het uitlezen en schrijven van data op paginaniveau kan gebeuren. Om één pagina data te verwijderen, dien je echter het volledige blok te wissen. Er moet immers een hoge spanning worden aangebracht om gegevens te wissen, waardoor ook de cellen rond de bedoelde cel onder spanning komen te staan.
Dit mechanisme heeft tot gevolg dat wanneer je een bestaande pagina wilt updaten, het volledige blok naar het geheugen gekopieerd moet worden. Het blok wordt hierna van de SSD verwijderd, waarna de gekopieerde content en de geüpdatete pagina naar het lege blok geschreven kunnen worden.
Kort samengevat zal er dus voor één data-update een hoop data geschreven moeten worden. Dit wordt in het vakjargon write amplification genoemd. Wanneer je bijvoorbeeld een aanpassing doet aan een bestand van 4 KB zal het volledige blok herschreven moeten worden. Afhankelijk van het aantal pagina’s in het blok en de grootte van de pagina’s kan er tot 4 MB aan data geschreven moeten worden.

Vuilnis

Indien je data wilt schrijven en er geen vrije pagina’s beschikbaar zijn, zal de SSD scannen naar pagina’s die gemarkeerd zijn voor verwijdering, maar nog niet verwijderd zijn. De data kan daarna worden geschreven naar de net gewiste pagina. Hierdoor zal een SSD trager worden na verloop van tijd. Een drive die bijna vol is, zal immers regelmatig het scan- en verwijdermechanisme moeten doorlopen.
Garbage collection is een achtergrondproces dat deze vertragingen voor een stuk moet wegwerken. Tijdens rustige periodes zal het proces op zoek gaan naar oude pagina’s die verwijderd mogen worden. Het zal de goede pagina’s van een blok kopiëren naar een andere blok en het oude blok volledig wissen. Op deze manier zijn er weer pagina’s vrij om beschreven te worden.

Slijtage

Een tweede proces dat zorgt voor minder vertragingen heet TRIM. Dit commando laat besturingssystemen toe om tegen een SSD te zeggen dat bepaalde data niet herschreven moet worden wanneer een volgend blok wordt gewist. Dit verlaagt de hoeveelheid data dat door de drive geschreven moet worden en verlengt de levensduur van een SSD. Schrijf- en leesopdrachten beschadigingen flash immers.
De bovengenoemde slijtage van flash wordt tegengegaan door een proces dat wear leveling heet. Dit mechanisme zorgt er immers voor dat bepaalde NAND-blokken niet vaker worden beschreven en gewist dan andere blokken. Jammer genoeg heeft dit eveneens write amplification tot gevolg. Een goed algoritme zal dan ook een evenwicht tussen beide problemen zoeken.

Controller

Omwille van bovenstaande problemen en mechanismes hebben SSD’s een gesofisticeerde controller. Vaak maakt de controller gebruik van een DDR3-geheugenpool om de NAND’s te managen. Single level cell-caches fungeren dan weer als buffer en verbeteren de prestaties van de drive. Bovendien is de controller via parallelle geheugenkanalen verbonden met het NAND-geheugen, waardoor het aan load balancing kan doen.
De details over SSD-controllers zijn jammer genoeg in een hoop mysterie gehuld. De kwaliteit van controller bepaald immers voor een groot stuk de snelheid van de drive en fabrikanten staan niet te springen om hun geheimen met de concurrentie te delen.

Toekomst

NAND flash biedt een grote verbetering ten opzichte van harde schijven, maar heeft ook zijn nadelen. Zo blijft de prijs van gigabyte een stuk hoger dan wat we gewend zijn van harde schijven. Bovendien is het erg moeilijk om de nodes van een SSD te verkleinen. De meeste hardware verbetert wanneer je de node verkleint; NAND wordt fragieler.
Fabrikanten bekijken verschillende nieuwe technologieën die de fakkel van NAND SSD’s kan overnemen. De 3D XPoint van Intel – beter bekend als Intel Optane – is één van de potentiele uitdagers van NAND flash en momenteel de enige alternatieve technologie op de markt. Waarschijnlijk zullen Optane SSD’s soortgelijk presteren als NAND flash drives als het gaat om sequentiële taken, maar een stuk beter presteren wanneer de wachtrijen van de drives laag zijn. Ook is de vertraging van de drives ongeveer half zo lang als bij NAND flash en heeft de technologie een beter uithoudingsvermogen. Optane-schijven kunnen 30 keer per dag volledig gelezen en beschreven worden, terwijl NAND flash deze taak maar 10 keer per dag kunnen uitvoeren.
Voorlopig is Optane nog te duur om een echte uitdager te zijn van NAND-technologie. De komende 4 tot 5 jaar blijven de klassieke SSD’s aan de top, waarna Optane rijp genoeg is om de technologie te vervangen.

Geen opmerkingen:

Een reactie posten