SK

Problémy SSD

Výhody SSD pamäťových médií sú známe snáď každému – vysoké rýchlosti čítania a zápisu, takmer neexistujúca prístupová doba, nízka spotreba, žiadne pohyblivé časti... SSD však majú aj pár nevýhod, o niekoľkých si povieme v krátkom článku.

Garbage Collection

Typickým problémom všetkých dnešných SSD je zníženie ich výkonu po určitej dobe používania. Tento problém je spojený so samotnými základmi fungovania SSD a ich stavby. Prvý krát na to upozornili redaktori serveru PCPerspective, keď objavili radikálne zníženie výkonu u SSD od Intel-u po určitej dobe používania. Intel už odvtedy vydal aktualizáciu firmware, ktorá tento problém rieši.
Prečo k nemu dochádza si vysvetlíme na malom príklade.

SSD pozostávajú z pamäťových buniek tvorených 4kB stránkami usporiadanými v 512kB blokoch. Zatiaľ čo čítať a zapisovať sa dá každá veľkosť dát - teda od najmenších 4kB, pri prepise to tak nie je. Mazanie je možné realizovať iba nad celým, 512kB blokom.

Ak je teda blok prázdny (stav nového SSD), dáta sa zapisujú rýchlo - takou rýchlosťou, ako udáva výrobca v špecifikáciách. Akonáhle sa však SSD začne používať, dáta sa zapisujú, presúvajú, mažú a teda v niektorých blokoch ostávajú "neplatné" dáta - dáta ktoré sa z operačného systému vidia ako zmazané, no v pamäťovej bunke sú stále prítomné až do ich prepísania. V súčasnosti totiž operačné systémy pracujú s SSD rovnako ako s HDD - teda dáta skutočne nemažú, iba ich označia ako neplatné a je možné ich prepísať novými a zatiaľ čo u HDD nie je problém prepísať aj najmenšiu pamäťovú časť, u SSD treba prepisovať celý blok. Výnimku tvorí nový Windows 7, ktorý automaticky vypína súčasti ako defragmentácia a Windows ReadyBoost).

Ak sa teraz majú zapísať do bloku čiastočne obsadeného neplatnými údajmi nové údaje (ktorých veľkosť je väčšia ako voľné miesto popri neplatných), musia sa najprv premazať tie neplatné. Ale keďže mazať sa dá iba celý blok, musí sa táto operácia vykonať nad 512kB pamäťovým priestorom. Do vyrovnávacej pamäte sa načíta obsah celého bloku, tu sa vymažú neplatné dáta a pridajú sa zapisované, a toto sa zapíše späť do bloku. Ako je zrejmé - proces načítaj-uprav-zapíš trvá podstatne dlhšie ako proces zapíš do prázdneho bloku na novom SSD.

Uvediem malý, veľmi zjednodušený príklad opisovanej situácie.
Predstavme si, že máme SSD s kapacitou 8 pamäťových buniek, napríklad po 4kB, teda spolu 32kB. Z SSD sa dá čítať rýchlosťou 4kB/s a zapisovať 2kB/s. Sú to nereálne a veľmi zjednodušené parametre, ale pre náš účel postačia.
Situácia nového SSD, 8 prázdnych buniek:



Užívateľ teraz chce zapísať napríklad textový súbor o veľkosti 8kB, operačný systém vyšle požiadavku, radič SSD ju spracuje a zapíše textový súbor do prvých dvoch buniek:



Keďže boli bunky voľné, zápis prebehol štandardnou rýchlosťou 2kB/s, čo znamená 8kB dát za 4 sekundy.

Ako ďalšiu vec chce užívateľ zapísať fotografiu o veľkosti 20kB. 20/4kB=5, zaplní sa teda 5 ďalších buniek:



Zápis opäť do prázdnych buniek plnou rýchlosťou 2kB/s, teda 20kB za 10 sekúnd.

Teraz sa rozhodol užívateľ že textový súbor už nepotrebuje a teda ho vymaže. Operačný systém vyšle príkaz na mazanie súboru, ale dáta sa nevymažú, iba označia ako neplatné a fyzicky sú stále prítomné.



Ďalšia požiadavka od užívateľa je na uloženie PDF súboru o veľkosti 12kB. Predtým zo svojho SSD „zmazal“ textový súbor, a teda má dostatok miesta na uloženie nového PDF-ka. Operačný systém vyšle pokyn na zápis 12kB veľkého súboru, radič SSD tento pokyn spracuje. Zistí ale, že má k dispozícií iba jednu voľnú 4kB bunku a dve bunky s neplatnými dátami. Musí teda tieto neplatné dáta zmazať/prepísať. A tu nastáva problém – mazať/prepisovať sa dá iba celý blok, nie samostatné bunky. Teraz sa musí celý blok načítať do pamäte cache, tu sa odstránia neplatné dáta zo zmazaného textového súboru, doplnia sa platné dáta z PDF súboru a toto všetko sa zapíše späť do pamäťových buniek bloku:



Keby boli bunky voľné, alebo by bolo možné ich priamo prepisovať, celý proces by trval 12kB/2kB/s = 6 sekúnd. Keďže sa však musí vykonať oveľa zložitejšia operácia, trvá jednoduché ukladanie súboru teraz oveľa dlhšie – čítanie celého bloku 32kB / 4kB/s = 8 sekúnd, + zápis 32kB / 2kB/s = 16 sekúnd, teda spolu 24 sekúnd. A to sme ešte nerátali čas potrebný na operácie v cache pamäti.

Tento problém sa niekedy rieši aj tak, že sa všetky nové dáta jednoducho zapisujú do nových, prázdnych blokov s plnou rýchlosťou, no po čase aj tento spôsob narazí na limity kapacity SSD. Vtedy aj pri napr. 70% obsadení SSD začnú rýchlosti zápisu výrazne klesať. Nutné je teda iné riešenie.

Tým riešením je tzv. "Garbage Collection", alebo v doslovnom preklade "zbieranie odpadkov". Tento proces, ktorý má na starosti procesor (radič) SSD, aktívne vyhľadáva a odstraňuje nepotrebné dáta v blokoch, ktoré môžu neskôr spomaľovať rýchlosti zápisu. Toto sa deje v čase, keď nie je SSD v záťaži, teda keď sa aktívne nepoužíva.

Práve túto technológiu teraz začína implementovať napríklad firma OCZ v spolupráci s výrobcom SSD radičov Indilix. Pre všetky série SSD OCZ Vertex prinesie nový firmware funkciu Garbage Collection. Na serveri HotHardware previedli aj test tejto funkcie:



Na grafe vľavo je vidno priebeh rýchlosti čítania a zápisu na novom SSD, vpravo je stav po určitej dobe používania. Ako je zrejmé - rýchlosti výrazne klesajú.

Po aplikovaní nového firmware sa však situácia po niekoľkých minútach nečinnosti začínala zlepšovať, pričom po dlhšej dobe (cca hodina) sa rýchlosti takmer úplne obnovili na stav nového SSD:



Ako je z týchto prvých testov vidno, Garbage Collection skutočne funguje a má svoje opodstatnenie. Pokým operačné systémy a firware SSD nezačnú podporovať príkaz TRIM, bude to jediná z technológií na ochranu pred spomaľovaním SSD.

TRIM, Wear levelling

Príkaz TRIM, ktorý funguje napr. v operačnom systéme Windows 7 a u SSD ktoré to budú tiež podporovať (po aktualizácii firmware), bude pri pokyne operačného systému o zmazanie dát tieto dáta skutočne mazať, a nie iba označovať za neplatné. V podstate tak prečíta do cache všetky dáta z bloku, vymaže tie neplatné a zapíše platné späť. Blok tak bude pripravený na priamy zápis, bez nutnosti vykonávať proces načítaj-uprav-zapíš pri pokyne na zápis dát.
Prečo k nemu dochádza si vysvetlíme na malom príklade.


Realizácia príkazu TRIM

Aj keď TRIM zmierňuje tento problém, nerieši ho úplne. Napríklad pri ukladaní zmien v dokumente bude stále nutné vykonať celý proces načítaj-uprav-zapíš.
Ak ste vlastníkom SSD, určite čo najskôr spravte upgrade na chystaný Windows 7 a sledujte či a kedy výrobca vášho SSD vydá aktualizáciu pre podporu príkazu TRIM.

Ďalší z problémov SSD je ich životnosť. Každá NAND pamäťová bunka má svoj životný cyklus, ktorý pozostáva z určitého počtu zápisov do nej, kým sa neznehodnotí do takej miery, že sa stane nefunkčnou. Tento problém tu vždy bol a vždy aj bude. Riešiť sa (zatiaľ) nedá nijak, dá sa jedine „obchádzať“ - predlžovať životnosť celého SSD – a to pomocou Wear Levelling-u.

Wear levelling je technika, ktorá po určitom čase presúva údaje z jednej pamäťovej bunky na ďalšiu. Ak určitá bunka obsahuje zapísané dáta s ktorými sa „nehýbe“ a do okolitých sa opakovane zapisuje, počet zápisov logicky stúpne u ostatných a u jednej s pevnými dátami ostáva konštantný. Aby sa tento počet vyrovnával, presunú sa dáta z menej používanej bunky na viac používanú – tej sa nateraz zastaví počet zápisov, zatiaľ čo pôvodná bunka sa začne využívať na nové prepisovanie. Ideálne by tak všetky bunky mali byť rovnako „staré“.

Takto sa záťaž prepisovania buniek rozloží postupne na celé pamäťové médium a nehrozí tak, že napríklad oblasť buniek na „začiatku“ SSD bude namáhaná prepismi viac ako zvyšok.
Pokiaľ napríklad klasické pevné disky HDD pri požiadavke z operačného systému na zápis na začiatok platne tieto dáta skutočne na začiatok aj zapisuje, a to aj opakovane a bez ovplyvnenia životnosti, u SSD to je práve naopak – dáta sa zapíšu vždy na iné miesto, aby sa „nevypaľovali“ stále tie isté bunky.

Jedným z „vedľajších účinkov“ Wear levelling-u je to, že okrem radiča nevie nikto, kde sa práve tie ktoré dáta nachádzajú. Zatiaľ čo na klasickom pevnom disku HDD vieme presne identifikovať umiestnenie určitých dát, u SSD sa vďaka Wear levelling-u postupne presúvajú.

Aj napriek použitiu wear levelling-u sa skôr či neskôr určité bunky stanú nefunkčnými. A keďže je u NAND čipov v SSD obmedzenie, že mazať/prepisovať sa dá iba celý, 512kB veľký blok, poškodením jednej aj 4kB veľkej stránky stratíme ihneď 512kB priestoru.
Počas „morálneho“ životného cyklu SSD tento jav možno nespozorujeme, keďže výrobcovia nechávajú určitú kapacitu skrytú ako záložnú práve pre tento prípad, neskôr by sa však objavilo postupné zmenšovanie kapacity.

Záver

Tento článok berte iba ako malé nahliadnutie na to, čo sa skutočne v SSD deje a aké sú hlavné problémy tejto technológie. Ak sa objavia iné, zaujímavé témy, určite sa im v redakcii povenujeme.
Pre záujemcov môžem ešte na záver odporučiť jednu videoprezentáciu, ktorá pojednáva práve o SSD a tiež o záchrane dát z nich. Celá je uložená na serveri Youtube a má 6 častí. Pre tých, ktorým angličtina nerobí problém, to bude určite prospešne strávená hodinka...a aspoň si oddýchnete od všetkých tých funny videí :-)



(za tip a konzultáciu ohľadom témy ďakujem Snake-ovi)

Comments (19)
Snake
Päť hviezdičiek :) neni o čom :)
matelkoxxl
fakt vyborne citanie!pridavam sa ku snake-ovi 5* :-)
prepelica
jo vyborne citanicko...o tychto problemoch som inac vobec nevedel :)
misak007
uz som o tom cital davnejsie, no toto je len jeden problem s ktorym sa stretava SSD, je ich viac a vacsinu ak nie vsetky riesi az Win7.. no pravdou je, ze toto jeden z tych podstatnejsich
sedgar
tiež sa pripájam - konečne chápem v čom je problém :D. Viete niekto, prečo je tam podmienka mazania iba 512kB? mne práve táto hodnota nejde do hlavy... zvlášť, keď priamo SSD nevyrába len jeden výrobca! Aký problém by bol nastaviť mazanie tiež na 4kB? Alebo že by sa čakalo na umelú "novú" generáciu SSD?
baqq
mas to vysvetlene hned na zaciatku toho clanku...
Snake
nemusí to byť nutne 512KB, v dnešnej dobe je to skôr 2MiB+ ;)
sedgar
No ono to tam práve vysvetlené nieje. Je popísaná štruktúra SSD - 4kB stránky 512kB bloky, čítanie/zápis je možný po 4kB stránkach, mazanie po 512kB blokoch... Nieje však uvedený dôvod prečo je to tak.
Snake
nikto nevie (priznám sa že ani ja :) ) proste je to tak navrhnuté.
AmOK
5* a ked bude pokracovanie, tak urcite nebudem jediny, kto sa potesi. Len tak dalej. ;)
misak007
niesom si isty, len myslim ze tento problem pochadza z fyzikalnej podstaty. Konstrukcne maju tieto disky viacurovnove pamatove bunky teda MLC. Su sice pomalsie ako SLC. Ale vyrobcov momentalne zaujima vyssia kapacita na ukor rychlosti. Je to lacnejsie robit MLC. a aj vacsiu kapacitu pri rovnakej cene. pamatove chipy maju okrem riadiaceho tzv plavajuce hradlo, tym sa lisia od standardnych tranzistorov. tym ze jedna pamatova bunka si musi pamatat niekolko bitov (2,3,4). A v celej bunke sa neda proste len jeden prepisat, daju sa prepisat len vsetky naraz, resp vymazat. Z istej ovladatelnej roviny, teda 512kB sektor. Prve disky ktore vosli do predaja boli na urovni 256kB.. Cim viac urovni budu mat bunky MLC tym vyssia bude narocnost na radič a vyrovnavaciu pamat. A tu je riesenie. nevenovat sa tymto "ovladatelnym" sektorom ale vymakat radice a vyrovnavacie pamate. Cim budu tieto dva chipy rychlejsie tym sa zvysi aj rychlost disku. je to urcite lacnejsie a vlastne jedine mozne riesenie pokial chcete disk z MLC :). mozno sa raz budu vyrabat niejake "raptory" na baze SLC a to budu dela ale zase male kapacity a vacsie rozmery. Ale netreba amt strach ze urovne MLC cipov porastu do nekonecna, dalsia fyzika :) teraz si jedna bunka musi zapamatat vlastne 16 rozlicnych stavov teda je problem s prestnostou zapisovania dat. mozu sa rusit navzajom :) tak sa radsej venujte radicom a vyrovanavacim pamatiam. :)
sedgar
hmmm zaujímavé... to by ale znamenalo, že SLC tento problém nemajú? Neviem, myslím ale že je to problém spoločný pre všetky - SLC aj MLC. To čo spomínaš je množstvo bitov, ktoré je schopná uložiť jedna bunka... Niečo som našiel na wikine - flash memory block erasure - kde je len stručne poznamenané, že SSD pre zápis a čítanie využívajú random-access. Pre mazanie/prepis sa ale random-access nevyužíva... Takže drobnosť navyše ale "múdry" som stoho rovnako ;)
sedgar
Podľa wikiny tento príkaz okrem W7 obsahuje aj linux od jadra 2.6.28 (25.12.2008)
misak007
no, ked si bunka pamata viac udajov a chces nieco zmazat musis ju celu resetovat a nas5 zapisat data ktore tam boli a tie ktore chces pridat.. ak ma mlc viac levelov musis aj tak zmazat vsetky.. ak mas slc tak vzdy mazes len jeden level ktory ma... cize problem tam je ale v mensom rozsahu....
Snake
nie, SLC s MLC nema v tomto pripade s tym nic spolocne, mas cell, z toho mas wordline, a z toho mas blok, mozes mazat len bloky, ci uz je to MLC alebo SLC. Rozdiel je akurat, kolko page robi blok
misak007
okey, ale spomalenie dochadza vlastne na radici a cache, lebo bunky mlc maju radovo vyssiu kapacitu ako bunky slc.. cize radic musis preniest tie vacsie data a ulozit ich a nas5 zapisat. Zober si priklad ze mas 512kB blok z mlc ktory mazes, a teraz keby tie bunky boli slc nedosahovali by 512kB, mozno 128alebo menej.... a tym padom by sa proces zrychlil lebo netreba prenasat velky objem dat, cize sme o5 tam kde sme boli, pri radici a cache... cize mlc a slc sa moc nelisia, pracuju aj na rovnakom principe len mlc este samotna bunka ma vyssiu kapacitu a to ju spomaluje... ale ekonomicky sa viac oplati vyrabat...
Snake
Mišo, netrep :), tie bloky nemaju 512KB, maju 2MB+nejaké drobné. Rýchlosť v tomto prípade nemá s tým nič, lebo MLC majú takú, a SLC takú, takže to neporovnávajme
misak007
:D dobre...
C1cOo
fakt dobry clanok, cakam na dalsie podobne O:)
Add new comment
TOPlist