Malý, velký a „zelený“: životopis SSD disků

Od čipů k zařízením: hardware a firmware SSD disků typu NAND

SSD disky nejsou složitá zařízení, jakmile je vyřešena otázka paměťových čipů. Samotné čipy jsou nanášeny v „balíčcích“ na keramický povrch, obvykle jich je v jednom balíčku až osm, a jsou uspořádány na povrch desky s tištěnými spoji (PCB – printed circuit board). Komunikují s řídicím čipem, jenž zajišťuje jejich integraci do jednoho zařízení a spravuje externí rozhraní.

U tohoto typu konstrukce je fyzické provedení disku v zásadě nepodstatné. V současné době dokáže flash paměť s nejvyšší hustotou směstnat 32 GB paměti NAND na kartu MicroSD velikosti nehtu na prstu ruky – s touto hustotou je dosažení objemů srovnatelných nebo přesahujících kapacity harddisků stolních počítačů nebo notebooků triviální záležitostí a desky s tištěnými spoji mohou mít prakticky jakýkoli tvar. Skutečným oříškem jejich implementace je způsob, jakým ovladač čipy řídí, a jaké externí rozhraní používá.

Nejjednodušší možnou implementací by bylo přímé mapování. Ovladač by mapoval stránky nebo bloky flash paměti jako sektory logického disku se sekvenčním číslováním sektorů pro každý čip, předával požadavky na zápis a čtení – a to by bylo celé. Takto jednoduchý ovladač by však byl nevhodný z celé řady důvodů.

Přísloví praví: odvaha nespočívá v tom nemít strach, ale překonat jej. Harddisky se nejvíce ze všeho bojí operací vyhledávání. Kvůli rotujícím plotnám jsou latence v řádu milisekund při vyhledávání nevyhnutelné a ani v průběhu času se příliš nezlepšily. I ty nejrychlejší harddisky dokáží provést jen několik set vyhledávacích operací za sekundu, takže chod mnoha aplikací by byl právě tímto rysem limitován, pokud by nebylo dlouhých let pečlivého vývoje konstrukčních řešení a optimalizace. Každá aplikace na počítači, od renderovacích filtrů pro přehrávače médií až po souborové systémy a databázové aplikace, je vyvíjena s ohledem na minimalizaci potřeby používat vyhledávací operace a maximalizaci sekvenční povahy čtení.

U SSD disků je tomu jinak. Načtená stránka je načtená stránka – teoreticky bez ohledu na její umístění nebo pořadí za předpokladu, že čtení probíhá na jednom čipu. „Vyhledávací“ operace je elektrický signál, který se pohybuje téměř rychlostí světla, takže i obyčejné SSD disky mohou dosáhnout tisíců vyhledávacích operací za sekundu. Jenže situace je na hony vzdálená utopické představě „čti a zapisuj, co chceš, nijak na tom nezáleží.“ K úvaze se nabízí několik aspektů.
Přestože jsou rychlosti v rámci každého jednoho čipu relativně stejné, je nanejvýš výhodné rozprostřít čtení mezi jednotlivými čipy. Načíst deset bloků na jednom čipu trvá desetkrát déle, než načtení jednoho bloku na deseti různých čipech. Proto se dává přednost ovládacím schématům, jež sektory s návazným číslováním, které se často zapisují a čtou společně, rozdělí a umístí je na různé čipy.

Dalším problémem je trvanlivost zápisu. Mnoho operací zapisuje velmi často do určitých sektorů disku a i přes stále lepší odolnost zápisu v pamětích typu flash by tak velmi brzy mohl nastat problém. Kdyby každou minutu proběhlo sto tisíc cyklů zápisu, paměť by se opotřebovala ani ne za dva měsíce, přičemž lze snadno napsat operace, které daný sektor budou zapisovat častěji než jen jednou za minutu.

A konečně, je velmi žádoucí zapisovat úplné bloky. Vzhledem k tomu, že stránky mají velikost několik kilobyte a bloky jsou velké až jeden megabyte, mohou operace zapisující velmi malé objemy způsobit ukládání megabytů a trvat mnoho milisekund. Za nepříznivých podmínek by špatně řízené ukládací schéma mohlo srazit na kolena i nejrychlejší SSD disk kvůli přímému mapování, které by vytvářelo kalamitu velkých zápisů kvůli příkazům na čtení malých objemů dat na několika plně vytížených čipech. Za takových podmínek může počet vstupních a výstupních operací za sekundu (I/O operations per second – IOPS) klesnout z tisíců na desítky, což je jev známý jako díra náhodného zápisu Random Write Hole (RWH).

Situaci s RWH může ještě více zhoršit další problém s implementací SSD disků: nedostatečná komunikace s operačním systémem (OS). Když operační systémy „smažou“ soubory, nezapisují ve skutečnosti do příslušných sektorů nuly, ale jen data prohlásí za smazaná a jdou dál. Tento přístup je nesrovnatelně rychlejší, ale pro SSD disky představuje problém. Má-li dojít k zápisu do původní oblasti smazaného souboru, SSD žárlivě střeží svá bezcenná „smazaná“ data, a provede proto zbytečný cyklus čtení-úprava-zápis (read-modify-write – RMW). Jak disk stárne, jsou všechny dostupné sektory zaplněny útržky smazaných souborů a jeho výkonnost se může dramaticky snížit.

Z toho je zřejmé, že na algoritmu pro alokaci čtení a zápisů velmi záleží. Některé úpravy byly relativně snadné – rozdělení bloků systematicky napříč čipy, něco jako RAID 0 pro čipy NAND, byla téměř bez námahy provedená, byť nedokonalá, náprava pro vyvážení zátěže jednotlivých čipů.

Jiné úpravy byly složitější. Pokud jde o vyvážení zátěže zápisů, byla vyvinuta celá řada schémat, jak vyrovnávat zátěž při zapisování na různé bloky a tyto postupy se postupem času ještě skvělým způsobem zdokonalily, takže nyní je velmi obtížné opotřebovat SSD disk, pokud na tom nemáte chorobný zájem.
Tato schémata pracují obvykle tak, že sledují počty zápisů do každého bloku, a pokud by blok již mohl selhat, přemapují logické sektory takového bloku na nové bloky podle potřeby, ať již v rámci jiných bloků v daném svazku, nebo z rezerv nealokovaných bloků, které jsou pro tento účel vyhrazeny. Stačil jeden gigabyte NAND paměti navíc a jeden logický blok lze nyní zapisovat každou sekundu po celá léta, aniž by došlo k poruše. Trvalo však dlouho, než se tato schémata vyvinula.

Nejtvrdším oříškem je však problém díry náhodného zápisu (RWH – Random Write Hole). Byla navržena nejrůznější schémata, ale všechna se točí kolem jedné věci: když přijde velký počet malých zápisů, měly by pokud možno skončit v jednom bloku. Mezi dvě schémata řešení RWH, která jsou koncepčně nejzajímavější, je schéma přemapování podsektorů (Subsector Remap) společnosti Intel a řešení nCache společnosti Sandisk, přičemž obě volí značně odlišné přístupy.

Jak překonat RWH

Systém společnosti Intel shromažďuje malé zápisy v násobcích velikosti stránky do jednoho bloku a pak přepíše mapovací tabulku sektorů, aby se stránky spojily dohromady do jednoho logického sektoru, přestože se fyzicky nacházejí na více fyzických blocích. Ve výsledku skončí sektory, do nichž se zápisy akumulovaly, rozsekané na kousky v různých částech disku a fragmentované pro umožnění rychlejších zápisů. Vzhledem k tomu, že čtení probíhá po stránkách, na fragmentaci příliš nezáleží.

Toto schéma narazilo na problém hned při první implementaci. V průběhu času se sektory fragmentují stále více a tato fragmentace může přežít i malé soubory, které byly původně zapisovány. Jak se fragmentace stupňuje, mohou sekvenční zápisy začít vyžadovat zápis více bloků na jeden sektor spolu s cykly čtení na jejich potvrzení. Algoritmus pro řešení fragmentace byl slabý a neúčinný, takže se fragmenty hromadily. Disk X25-M se ve výsledku mohl zpomalit až na rychlost harddisku stolního počítače nebo notebooku a protože přemapování probíhalo interně, neexistoval žádný způsob, jak jej nefragmentovat.

Tyto problémy byly vyřešeny – nový firmware opravil potíže s fragmentací a nyní je disk X25-M v provedení G1 a G2 pravděpodobně nejlepším řešením pro SSD disk jako náhrady za harddisk, které je na trhu k dispozici. Řešení však přesto není úplné.

Druhé řešení je jednodušší a přímější. Nové SSD disky Sandisk pro netbooky se vyznačují řešením problému s RWH známým jako nCache, které není hardwarové, ani nepředstavuje vyspělý nový software, ale jde o softwarovou mezipaměť pro zápis (software write buffer). Malá část disku (u 64 GB verze je to 320 MB) je vyhrazena jako zóna pro nCache. Když se nahromadí malé zápisy, slučují se k zápisu do nCache, která se vyprazdňuje v okamžicích nečinnosti. Přemapovávací tabulka se vymaže do původního nefragmentovaného stavu. Čísla u tohoto řešení však mluví sama za sebe: zatímco nCache je možné zaplnit během intenzivních zápisů během jedné nebo dvou minut, její vyčištění může trvat až půl hodiny. I když tento systém může umožnit okamžité prudké zvýšení výkonnosti stolních počítačů nebo netbooků, neumožní průběžné vysoké úrovně zápisů, k jakým je navrženo řešení přemapování sektorů od Intelu.

Některá opatření pro předcházení problémům s RWH se dějí na obecné úrovni počítačového odvětví. Poslední verze specifikací rozhraní ATA umožňuje příkaz zvaný „TRIM“, jenž SSD diskům řekne, že data byla vymazána. I když data na disku zůstanou, SSD ví, že nejsou potřebná, a při jejich částečném přepisování nebude spouštět cyklus RMW (přečíst-změnit-zapsat). Výkonnost s příkazem TRIM je téměř stejně dobrá u starších i nových disků. Ve Windows 7 je podpora TRIM nativní a podporu ve Windows Vista a Windows XP je možné přidat pouze pro SSD disky značky Intel. Ostatní výrobci SSD disků vyvinuli SSD disky s podporou TRIM pro Windows 7, ale žádný nemá podporu TRIM pod dřívějšími operačními systémy. Brzy se však Windows 7 stanou nejrozšířenějším systémem mezi uživateli a tato konkrétní úprava tak bude všudypřítomná.

Zatím se však zdá, že SSD disky jsou prazvláštně pronásledovány množstvím chyb při jejich uvádění. Od prvních problémů s životností, přes skandál s ovladačem JMicron, slabinu jádra u OCZ až po tři kola vylepšování firmwaru u Intelu – uvádění SSD disků nebylo stabilní, jako bývají při uvádění nové harddisky. Důvodem je pravděpodobně novost a složitost operací, které probíhají ve firmwaru kvůli zvyšování výkonnosti a které se časem zmírní. V současné době by však složitostmi spojenými s ukládáním dat do pamětí typu NAND bylo možné vydláždit celé Silicon Valley.

5 komentářů: „Malý, velký a „zelený“: životopis SSD disků

  • Pingback: Jablickari.cz

  • avatar
    25. 01. 2010 (13:33)
    Trvalý odkaz

    A jak je to s podporou TRIM v Mac OS X?

  • avatar
    25. 01. 2010 (14:33)
    Trvalý odkaz

    A jak je to s podporou TRIM v Mac OS X?

  • avatar
    25. 01. 2010 (21:47)
    Trvalý odkaz

    pro Vláďu Janečka:
    Podle toho co se píše v tomhle článku není zapsání nul do volného místa disku činnost, který by řešila problém, který má řešit TRIM. Už se trošku ztrácím v těch názvech. Asi se to jmenuje read-modify-write.
    Jak jsem pochopil, tak pomocí TRIM systém řekne disku, že data v daném sektoru už nejsou potřeba a že je disk nemusí číst a modifikovat, že je může rovnou zapsat.

  • avatar
    25. 01. 2010 (22:47)
    Trvalý odkaz

    pro Vláďu Janečka:
    Podle toho co se píše v tomhle článku není zapsání nul do volného místa disku činnost, který by řešila problém, který má řešit TRIM. Už se trošku ztrácím v těch názvech. Asi se to jmenuje read-modify-write.
    Jak jsem pochopil, tak pomocí TRIM systém řekne disku, že data v daném sektoru už nejsou potřeba a že je disk nemusí číst a modifikovat, že je může rovnou zapsat.

Komentáře nejsou povoleny.