Root » Servers » » Harde schijf » » SSD » » Data organisatie
Solid State Disk
Werking: datastrukturen
SSD werking
De klassieke, ouderwetse harde schijven hebben een organisatie in cylinders, heads en sectoren (CHS) en de kleinst adresseerbaar element is een sector van 512 bytes.

Een Solid State Disk gebruikt een andere data-organisatie dat niet minder complex is, en rekening houdt met de eigenschappen van het gebruikte geheugen.

-

-

Data organisatie

De huidige geheugens werken met “sectoren” van 4k. Dit is het kleinst adresseerbaar element van de geheugenbank (pagina). Een aantal pages (meestal 512) vormt een blok.

Men kan een volledige pagina lezen, of een blanco pagina schrijven. Een pagina herschrijven is niet mogelijk, alle pagina's van dat blok moeten eerst gewist worden. Vr het wissen worden de blok-pagina's die informatie bevatten tijdelijk in de cache opgeslagen. Daarom: als een pagina herschreven moet worden, wordt de huidige pagina ongeldig gemaakt en op een vrije pagina weggeschreven (herschrijven gebeurt dus nooit).

De SSD gebruiken een “wear levelling” algoritme, officieel om slijtage te beperken door bestanden die vaak weggeschreven worden iedere keer op een andere plaats te schrijven.

Maar wear levelling is eigenlijk een automatisch gevolg van het systeem dat gebruikt wordt om bestanden te schrijven. De wis-opdrachten moeten beperkt worden. Pas als er geen vrije pages meer zijn (alle pagina's zijn beschreven of ongeldig) wordt een blok gewist (meestal de blok met de meeste ongeldige pagina's: dan bekom je ook meer vrije pagina's na het wissen van de blok). Dit gebeurt volledig transparant voor het systeem: windows denkt nog altijd dat het bestand op een bepaalde plaats staat, maar de software op de SSD heeft het bestand op een andere plaats weggeschreven. Dit verplaatsen gebeurt bij iedere schrijfopdracht, maar een wisopdracht (van een volledig blok) is enkel nodig als er geen vrije pagina's meer zijn.

Ten gevolge van write amplification resulteren enkelvoudige schrijfopdrachten in meerdere opdrachten op NAND-niveau.

Op deze schijf werd er 18.9 GB aan data geschreven. Op NAND-niveau werd er echter 129GB geschreven, wat een heel hoge write amplification waarde is.

Deze gegevens zijn afkomstig van de harde schijf die in mijn server gebruikt wordt, en waarvan de smart parameters online opvraagbaar zijn.

De reden is eenvoudig: de inhoud van geheugencellen kan niet gewijzigd worden: de cellen moeten per pagina gewist worden waarbij de nog "geldige" gegevens verhuisd moeten worden naar een andere pagina. Daardoor komt de fysische lokatie van de gegevens niet meer overeen met wat de computer denkt. Deze adresvertalingstabellen moeten ook opgeslagen worden op de schijf,... Beide faktoren zorgen voor de write amplifacation.

Voor een harde schijf van 60GB betekent dit dat alle geheugencellen minstens tweemaal geschreven werden. Als we uitgaan van 10.000 schrijfopdrachten, dan is 0.02% van de capaciteit opgebruikt na 408 werkuren. De schijf zou dus 2.000.000 uren meegaan, of... 234 jaren.

SSD verschillen in de manier waarop data geschreven wordt (ingebouwde controller en firmware). Bij de betere exemplaren wordt er automatisch blokken gewist en data verplaatst van zodra het aantal vrije blokken dreigt uitgeput te geraken. Daarmee kan men een deadlock voorkomen: er zijn geen pagina's meer beschikbaar en het systeem moet wachten tot een blok gewist is (het wissen en herschrijven van een blok kan gemakkelijk meer dan een seconde duren). Dit is een typisch fenomeen bij computers die SSD van de oude technologie gebruiken: het systeen is eerst supersnel, maar dan plots (na een paar dagen of weken intensief werken) blokkert de computer gedurende een paar seconden. Dan werkt het systeem weer normaal, om weer vast te lopen gedurende een paar seconden. Hoe meer het systeen naar de harde schijf schrijft, hoe vaker dat er gewacht moet worden totdat een blok vrijkomt.

Overigens is deze plotse en forse vertraging enkel merkbaar bij operating systems die veel schrijven (zoals windows vista en in mindere mate XP). Ook bij zware disk-toepassingen (bijvoorbeeld batch verwerking van een reeks foto's) valt de vertraging goed op: de schrijfsnelheid valt terug tot 1% van zijn nominale waarde gedurende een paar seconden (en dit een paar keer achter elkaar).

Vertraging bij volle schijf

Zoals bij klassieke harde schijven gaan de prestaties drastisch achteruit als de harde schijf bijna vol is. Bij een SSD zelfs meer dan bij een HDD:
  • Bij een klassieke harde schijf (HDD) is dat omdat de nog vrije sectoren her en der verspreid liggen en het lezen en schrijven weinig efficient gebeurt. Een defragmentatie kan hier zeker helpen, maar een bijna volle harde schijf betekent ook dat de verschillende bestanden soms ver van elkaar zitten en kopbewegingen noodzakelijk maken. Lezen en schrijven aan het begin (lage bloknummer) gaat veel sneller dan aan het einde (hoge bloknummer), want de gegevens worden van de buitenkant (hoge lineaire snelheid van de schijf ten opzichte van de kop) naar de binnenkant (lagere lineaire snelheid) geschreven.
  • Bij een solid state disk (SSD) gaan de prestaties ook achteruit omdat er vaker en vaker een blok gewist moet worden. Er zijn maar weinig vrije pagina's over en de ongeldige pagina's die opnieuw gebruikt mogen worden zijn over de volledige schijf verspreid, wat betekent dat bij het wissen van een blok je maar weinig vrije pagina's bekomt en binnenkort opnieuw een blok moet wissen. De SSD is bijna constant bezig blokken te wissen.
Een SSD met een grotere capaciteit is theoretisch beter, omdat de wear levelling algoritmen de schrijfopdrachten over meer pagina's kunnen spreiden: hoe meer vrije ruimte er op een SSD overblijft, hoe trager dat ie zal verslijten (dit is natuurlijk enkel het geval indien er relatief veel schrijfopdrachten gebeuren). Een gedeelte van de beschikbare capaciteit wordt trouwens opzij gelegd als reserve om de schrijfopdrachten voldoende vlot te laten verlopen, zelfs met een schijf die bijna vol is. Een SSD van 128GB heeft in de praktijk slechts 120GB beschikbaar (dit staat trouwens ook op de schijf: 120GB en geen 128GB).

Defragmentatie?

Tijdens het normaal gebruik raken de bestanden gefragmenteerd (stukken die bij een bestand horen worden op de eerst vrije plaats geschreven). Zelfs directories raken gefragmenteerd. Bij een harde schijf worden bestanden daardoor veel trager gelezen en geschreven: het bestand bestaat uit fragmenten die op verschillende plaatsen gezocht moeten worden. De kop van de harde schijf moet veel beweginen uitvoeren om alle stukken te lezen (trashing). Bij klassieke harde schijven loont het zeker de moeite regelmatig te defragmenteren.

Bij SSD treed er ook fragmentatie op, maar het snelheidsverlies is niet zo groot. Natuurlijk gaat het lezen van een groot bestand dat uit n fragment bestaat sneller dan het lezen van hetzelfde bestand dat uit duizenden stukken bestaat. Het lezen van een bestand uit n enkel fragment gebeurt met n enkel DMA opdracht, terwijl voor het lezen van ieder fragment een apart opdracht (vaak PIO) gegeven moet worden (overhead). DMA (direct memory access) is zeer snel, maar enkel geschikt voor grote blokken. Bij het werken met kleine blokken wordt vaak het eenvoudigere PIO (programmed input output) gebruikt.

Defragmentatie (zoals windows het ziet) komt niet overeen met wat er fysich op het SSD geheugen gebeurt. Bij SSD gebeurt er altijd fragmentatie, dit is onvermijdelijk, zelfs al schrijft windows de gegevens keurig achter elkaar. Er is geen overeenkomst met de datastruktuur van een klassieke harde schijf (indeling in sectoren en tracks, dat vertaald wordt in blokken) en de datastruktuur van SSD (ingedeeld in pagina's die blokken vormen). Als windows een harde schijf defragmenteert, dan zitten de bestanden mooi bij elkaar (logisch gezien, en ook fysisch bij HDD), maar niet bij SSD (de pagina's worden her en der geschreven op vrije plaatsen). Na een windows-“defragmentatie” is de SSD meer gefragmenteerd dan voordien (en er zijn meestal geen vrije pagina's over). Windows 7 (die van het bestaan van SSD op de hoogte is) zal weigeren een SSD te defragmenteren, en met goede redenen!

Hier komt FAT-32 (en exFAT)!

Een kenmerk van FAT-32 is dat er weinig overhead is bij het schrijven van bestanden omdat er weinig meta-data opgeslagen wordt. Meta data is alle bestandsinformatie die niet bij de data (inhoud) horen: aanmaakdatum, eigendomsrechten, attributes. Bij FAT is de metadata die aan een bestand gekoppeld wordt zeer beperkt (enkel een paar attributes). FAT is een eenvoudig filesystem met enkel een file allocation table, directories en bestanden. De weinige meta-data van een bestand wordt in de directory opgeslagen.

Meer informatie over exFAT is hier te vinden.

Links to relevant pages - Liens vers d'autres pages au contenu similaire - Links naar gelijkaardige pagina's