TRIM voor gevorderden

Door: | 24 februari 2010 11:02

How To

In Computer!Totaal nummer 4/2010 hebben we vijf SSD’s met ondersteuning voor TRIM getest. Omwille van de eenvoud zijn we in de test uitgegaan van locaties als plaats waar een SSD gegevens kan opslaan. Eigenlijk worden hier zogenaamde ‘pages’ en ‘blocks’ voor gebruikt. In dit artikel gaan we dieper in op de werking van pages, blocks en de relatie met TRIM.

TRIM is een commando dat ervoor zorgt dat een SSD optimale schrijfprestaties behoudt. De werking van TRIM is pas echt te begrijpen als u de opbouw van een SSD kent. Een SSD slaat informatie op in ‘pages’, die weer zijn gegroepeerd in een ‘block’. Om deze begrippen te snappen, moet u eerst even stilstaan bij de samenstelling van de Multi Level Cell (MLC) SSD’s zoals die in Computer!Totaal 4/2010 getest zijn. Een MLC-SSD bestaat uit miljarden geheugencellen die elk meerdere bits kunnen opslaan. Een geordende verzameling van deze cellen wordt een page genoemd en is de kleinste eenheid om een bestand op te slaan of terug te lezen in een SSD. Een page heeft doorgaans een omvang van 4 KB. Slaat u dus een bestand op van 1 KB, dan neemt dit bestand 4 KB in beslag op de SSD.

Blocks

Een block is een belangrijke eenheid voor een SSD, omdat dit de kleinste verzameling van ‘pages’ is die een SSD moet inlezen om gegevens te kunnen verwijderen. Een block bestaat uit 128 van deze pages en heeft een omvang van 512 KB. Nu is het zo dat een SSD werkt als een x-aantal geheugenmodules in een RAID-opstelling. Dit betekent dat een bestand over meerdere geheugenmodules is verspreid voor maximale leessnelheid. Windows ‘praat’ met de SSD via Logical Block Addressing (LBA), en houdt bij welke blocks in gebruik en welke beschikbaar zijn. Omdat een SSD met pages werkt, moet de SSD-controller de LBA-opdrachten omzetten. De Windows-opdracht om een bestand te overschrijven wordt door een SSD (indien mogelijk) vertaalt naar wegschrijven op een lege page. Zijn er geen lege pages, dan moeten er eerst pages worden leeggemaakt.

Vertraging bij schrijven

Er treedt een probleem op wanneer er onvoldoende lege pages beschikbaar zijn om een bestand op te slaan, terwijl er volgens de index van Windows meer dan voldoende ruimte beschikbaar is. Het is immers zo dat een bestand nooit daadwerkelijk gewist wordt wanneer daar de opdracht toe gegeven wordt. Dit gebeurt pas wanneer de ruimte die het betreffende bestand in neemt wordt overschreven door nieuwe data. Een probleem hierbij is dat een SSD pages welke delen van bestanden bevatten die niet langer in gebruik zijn niet rechtstreeks kan overschrijven. Een SSD moet eerst blocks inlezen en deze in zijn eigen cachegeheugen plaatsen, omdat gegevens alleen daar verwijderd kunnen worden. In het cachegeheugen worden de betreffende pages geleegd en dan wordt het hele block met lege pages teruggezet op de SSD, waarna deze pages beschikbaar zijn voor nieuwe gegevens. Dit vertraagd het schrijfproces met een factor drie of meer.

TRIM

De reddende engel voor deze situaties is TRIM. Dit is een commando dat Window 7 meestuurt naar de SSD tijdens een wisactie. Dit commando informeert de controller van de SSD welke pages daadwerkelijk verwijderd kunnen worden en zet de SSD aan het werk door blocks in te lezen en de pages die gevuld zijn met bestanden (en die volgens Windows overschreven mogen worden) te legen. Op deze manier blijft een SSD in optimale conditie door voldoende lege pages in voorraad te hebben en kan een schrijfopdracht altijd optimaal uitgevoerd worden. We laten u stap voor stap zien wat er gebeurt als een SSD bestanden schrijft en verwijdert en hoe TRIM ervoor zorgt dat er altijd voldoende pages vrij zijn.

1. Lege SSD

Stelt u zich voor dat we een SSD hebben met een opslagcapaciteit van precies 1 block. Een leeg block van 512 KB op het SSD bestaat uit 128 lege pages van 4 KB.

2. Bestand wegschrijven

We willen een bestand wegschrijven van 12 KB, daarmee worden 3 pages gevuld van 4 KB (blauw).

3. Nog een bestand wegschrijven

We willen daarna nog een bestand van 8 KB wegschrijven (paars). In totaal hebben we 20 KB in gebruik genomen. We hebben dus nog 512 KB – 20 KB = 492 KB vrij, oftewel nog 123 vrije pages.

4. Bestand wissen

We gaan nu het bestand van 8 KB wissen (paars). Volgens Windows heeft ons SSD nog 512 KB - 12 KB = 500 KB beschikbaar. Ons SSD registreert echter nog steeds 123 lege pages en 2 pages met gegevens die verwijderd mogen worden.

5. Bestand wegschrijven

We schrijven nu 4 KB weg (groen). De twee pages die informatie bevatten met ‘te verwijderen gegevens’ worden overgeslagen door het SSD. Eerst worden de lege pages gevuld.

6. TRIM aan het werk

Bij ondersteuning voor TRIM stuurt Windows 7 het TRIM-commando mee bij een wisactie. Hierdoor weet de controller van de SSD dat deze data daadwerkelijk verwijderd kan worden. Wanneer de SSD een tijdje niks meer te doen heeft zal de SSD het complete block van 512 KB waarvan een gedeelte door het TRIM-commando is aangewezen als verwijderen verplaatsen naar het cachegeheugen. Hier zal het door het TRIM-commando verwijderde bestand (paars) daadwerkelijk worden verwijderd.

7. Pages worden verwijdert

Nu kunnen de 2 pages geleegd worden en het hele block weer teruggezet worden. U kunt zich wellicht voorstellen wanneer u een bestand van 10 MB gaat wissen, we in totaal 2560 pages moeten wissen. Als die vervolgens ook nog over verschillende blocks zijn verdeeld, dan moet heel veel data ingelezen worden. Ook al bevat een block slechts 4 KB van het bestand, toch moet 512 KB ingelezen worden om het gedeelte van 4 KB te wissen. TRIM zorgt ervoor dat dit gebeurt op momenten wanneer u de SSD niet gebruikt.

8. Ruimte weer vrij

Nu zijn de 2 pages pas weer klaar om opnieuw beschreven te worden.

9. Bestand wegschrijven naar vrije ruimte

Als nu een bestand van 12 KB weggeschreven wordt, zijn er genoeg pages vrij om het bestand (oranje) weg te schrijven.