LTH - LUNDS TEKNISKA HÖGSKOLA Hantering av begränsat antal skrivningar på Solid State diskar Filip Nilsson 2015-12-07
Sammanfattning På senare år har utvecklingen för SSD (Solid State Drive) enheter kommit väldigt långt. Detta har lett till att de blir alltmer vanliga och ersätter HDD (Hard Disc Drive) enheter hos många. De flesta vet dock inte hur en SSD fungerar. Syftet med denna rapport är att undersöka på vilket sätt en SSD är begränsad, vad detta beror på, och hur det hanteras. För att kunna förstå hur en SSD-enhet fungerar jämförs SSD-tekniken med HDD-tekniken. Det rapporten kommer fram till är att en SSD-enhet slits ut p.g.a. många skrivning/raderings cykler då detta är en tung operation för en SSD. För att hantera detta finns det flera olika funktioner som samarbetar och underlättar bördan för enheten. 1
Inledning Syftet med denna rapport är att visa och förklara det slitage och åldrande som en SSD (Solid State Drive) utsätts för och hur det påverkar enheten. För att kunna förstå hur en SSD slits och hur de blir svårare att använda med tiden behöver man först förstå vad en SSD är och hur den är uppbyggd. En SSD är ett sekundärminne, det är alltså en variant av en hårddisk (HDD - Hard Disc Drive). En SSD och en HDD utför samma uppgifter vilket är att lagra stora mängder data trots detta är det mycket som skiljer dem åt.. För att förstå hur en SSD fungerar är det lättaste att jämföra den med en HDD och visa hur de skiljer sig åt när de ska lagra data. Bild 1: Insidan av en HDD. En SSD är betydligt snabbare än en HDD och en av anledningarna är att en den inte består av några rörliga delar. På bild 1 kan man se insidan av en hårddisk, där ser man en läsarm och ett antal skivor. Skivornas uppgift är att förvara data som skrivs dit med hjälp av läshuvudet. Varje skiva är uppdelad i sektorer, kluster och spår(se bild 2). När processorn behöver information från hårddisken så måste skivorna snurra till sektorn där rätt data lagrats och armen måste sedan flytta sig till rätt spår på skivan och därefter läsa av platsen med hjälp av magnetism. Även om detta går otroligt fort så är det en väldigt kostsam process jämfört med läsning av register, cache och ramminnen som är menat att användas som korttidslagring. Beroende på var datan finns lagrad på hårddisken varierar tiden det tar då skivorna behöver snurra till de olika platserna. Bild 2: Överblick av datalagring på en HDD. 2
En SSD har som sagt inga rörliga delar utan är uppbyggd av en mängd NAND-flashminnen som även används i t.ex. mobiltelefoner. Dessa minnen består av en mängd mindre celler (Se bild 3) där ettor och nollor sparas som data. Namnet NAND (Not And) kommer från att strukturen i minnet är liknande den logiska operationen NAND. Bild 3: En NAND Flash cell. En av anledningarna att en SSD är så mycket snabbare än en HDD är att den har lika snabb tillgång till sina olika lagringsplatser. Alltså kvittar det var enheten lagrar datan, för oavsett var den är lagrad så tar det lika långt tid att hämta. Dock så varierar det för en HDD, detta p.g.a. att de fysiska delarna måste förflytta sig till rätt plats för att kunna göra en avläsning. Om man tittar på jämförelsen (se bild 4) där man testar att göra några slumpmässiga läsningar på en SSD och en HDD, så ser man att en HDD har vissa intervall där inget nyttigt arbete utförs. Under dessa intervall väntar den på att de fysiska delarna ska hitta datan. Bild 4: Jämförelse av SSD och HDD vid slumpmässig läsningar. En SSD må vara snabbare men till skillnad från en HDD så kan den inte manipulera en enskild cell. Detta p.ga att en SSD andvänder NAND strukturen som bara tillåter att man skriver data på en hel rad åt gången (Se "NAND page" bild 3). 3
Diskussion Trots alla Fördelar som SSD har, så har flashminnen (som SSD använder sig av) en stor nackdel. Denna är att flashminnen endast klarar av ett begränsat antal interaktioner. Varje cell har bara ett visst antal raderings/skrivnings cykler den kan hantera innan den blir opålitlig. Att läsa data har en liten inverkan men den är så pass liten jämfört med hur cellen påverkas av en radering/skrivning. För att förstå slitaget måste man dyka ännu djupare i hur en SSD är uppbyggd, närmare bestämt hur cellerna i NAND-flashminnet är uppbyggda. De två vanligaste lösningarna som används i cellerna är antingen SLC (Single-Level Cell) transistorer eller MLC(Multi-Level Cell) transistorer. Skillnaden mellan dessa två transistorer som man kan höra på namnen är att de antingen har en laddningsnivå eller flera. Dessa laddningsnivåer används för att representera ettor och nollor. SLC transistorn som endast har en nivå av laddning kan representera antingen ett eller noll d.v.s. oladdad eller laddad. Men en MLC transistor som kan ha flera olika laddningar kan då representera ett par olika värden. Om man t.ex. säger att en transistor kan hantera 4 olika värden så kan den representera följande: 00, 01, 10 och 11. Detta gör att man kan lagra större mängd data med färre antal celler med hjälp av MLC transistorer. Dock så blir avläsningsprocessen av cellerna mer komplicerad och därmed långsammare än om man använder sig av SLC transistorer. Allstå blir det dyrare att använda sig av SLC transistorer då det kräver mer hårdvara per megabyte och därmed är det vanligast att sådana SSD-enheter hittas i serverhallar och dylikt och MLC enheter hos privatpersoner. När en SSD-enhet är oanvänd så innehåller ingen av cellerna någon laddning och när en cell inte har någon laddning så tolkas detta som att cellen har värdet 1. Men när en cell innehåller en laddning så har den värdet 0. Detta gäller då för en enhet som använder SLC transistorer men principen är densamma för MLC transistorer bara då att det finns två ytterligare laddningsnivåer. Att ladda en oladdad cell (därmed ändra värdet från 1 till 0) är en lätt operation. Men däremot att göra tvärtom, att ta bort laddningen från en laddad cell är betydligt svårare. Att göra detta kräver mycket spänning, och då är det lätt att kringliggande celler påverkas trots att det inte är meningen. Det finns sätt att förhindra detta från att ske men detta kräver väldigt mycket av de närliggande cellerna och riskerar att skada dem. Man använder därför en annan metod, istället för att radera enstaka rader och skriva till samma rad igen så raderar man och skriver tillbaka ett helt block istället. Ett block är en uppsättning av väldigt många rader, och antalet rader ett block innehåller varierar beroende på vilken tillverkare som gjort enheten. Detta gör då att man slipper använda de metoder som kan skada cellerna för att alla cellerna ska sättas till samma värde. Därefter är det bara att skriva tillbaka datan men med den önskade ändringen. Detta leder till en längre livslängd på cellerna. För varje skrivning till en SSD vet vi nu att man måste radera hela block för att få skriva ifall det inte finns någon annan ledig plats. Varje cell har dessutom bara ett begränsat antal skrivningar. Detta p.g.a. att varje gång man ändrar laddningen hos en cell så slits den på så sätt att lite laddning blir kvar i materialet som transistorn är gjord av. Detta gör att resistansen i materialet hos transistorn ändras vilket leder till att laddningen man försöker ge en cell inte blir den man förväntar sig. Detta kan försvåra avläsningen av varje cell då man måste kunna urskilja de olika laddningsnivåerna för att veta vilken data som finns lagrad. Detta slitage är då värre hos enheter som använder MLC transistorer då de behöver skilja på flera olika nivåer. Enheter som använder SLC transistorer behöver dock bara läsa mellan två olika nivåer och är därmed lättare att läsa av. Om man använder sig av SLC transistorer är gränsen för antal gånger man kan radera informationen hos ett block ca. hundra tusen (Enligt Gokul 4
Soundararajan [2]). Men på en enhet som använder MLC så kan gränsen vara så låg som mellan fem och tiotusen gånger per block. När ett block passerar denna gräns kan det bli så pass slitet att det inte är i tillräckligt bra skick att lagra data på, detta block markeras då som oanvändbart och därmed minskas lagringskapaciteten hos enheten. För att minska påverkan av detta problem finns det än mängd olika funktioner som samarbetar och dessa sköts av en kontrollenhet som finns i en SSD. Två av dessa funktioner är Garbage Collection och Wear Leveling. Garbage Collection funktionens uppgift är att helt radera data som inte längre används. Detta underlättar då när man ska skriva ny data, då slipper man att radera innan man ska skriva för det är redan gjort av Garbage Collection funktionen. Denna funktionen gör sitt arbete när inte enheten är upptagen med tyngre operationer. Den andra funktionen Wear Levelings uppgift är att fördela slitaget jämnt över NAND-minnena. Detta görs så att det inte är en plats som skrivs på oftare än andra så att denna plats blir utsliten. Tack vare alla funktioner i kontrollenheten ökar livslängden hos en SSD. Det hjälper då även att ha större lagringskapacitet på sin SSD-enhet då det ökar antalet celler som kan sprida ut belastningen på. Tack vare den snabba utvecklingen som skett under de senaste åren är detta problem inte lika allvarligt längre. Då man förbättrat de olika funktioner som kan förlänga livslängden hos cellerna. Även om man har en SSD som använder sig av MLC transistorer så kan den räcka 5 år och längre men en vanlig HDD kanske inte ens räcker så länge trots att den är förskonad från detta problem [1]. 5
Referenser [1] Hutchinson, R 2012, 'Solid-state revolution: in-depth on how SSDs really work', ars technica, 4 june, (pp. 1-6.) http://arstechnica.com/information-technology/2012/06/inside-the-ssd-revolution-how-solid-statedisks-really-work/1/ [2] Soundararajan, G., Prabhakaran, V., Balakrishnan, M., & Wobber, T. (2010, February). Extending SSD Lifetimes with Disk-Based Write Caches. In FAST(Vol. 10, pp. 101-114). https://www.usenix.org/legacy/event/fast10/tech/full_papers/soundararajan.pdf 6