Optimalizace práce s SSD disky v Linuxu

Petr Krčmář 14. 4. 2011

SSD disky jsou moderní, tiché a rychlé. Mnozí jim prorokují skvělou budoucnost, která bude souviset se zánikem klasických rotačních disků. Zatím se ale stále jedná o novinku, která přináší do používání počítačů řadu změn a nových prvků. Co je potřeba udělat, aby nám náš nový SSD disk sloužil naplno?

Pokud jste si koupili zbrusu nový SSD disk a přinesli jste si ho nadšeně domů, měli byste před jeho zapojením do počítače znát některá specifika používání těchto zařízení. SSD disk je sice z venčí podobný klasickému disku, připojuje se ke stejnému rozhraní a z hlediska počítače se chová stejně, přesto je tu několik nenápadných „pastí“. Ty sice nejsou vidět na první ani druhý pohled, ale pokud o nich nevíte, nemusí váš disk podávat stoprocentní výkon nebo bude mít nižší životnost.

Následující řádky by vám měly tyto nové problémy objasnit a zároveň se dozvíte, jak je jednoduše a efektivně vyřešit. Nejprve se ale budeme muset seznámit trochu víc s principem SSD.

SSD jako řada bloků

SSD pracuje jinak. To asi není pro většinu z vás překvapením, přesto si musíme ujasnit některé detaily z jeho principu. Především pracuje s podstatně většími bloky než rotační disky (dále HDD). Zatímco ten dokáže přečíst a zapsat samostatně kterýkoliv sektor (obvykle 512 B, nověji 4096 B), SSD disky pracují s podstatně většími bloky, které bývají velké 512 KB.

Pokud jste někdy pracovali s paměťmi typu EPROM nebo EEPROM, znáte jejich největší nevýhodu – daly se mazat jen jako celek. Zapisování probíhalo po bitech, ale pokud jste chtěli něco vymazat, museli jste čip vystavit ultrafialovému záření (EPROM) nebo většímu napětí (EEPROM) a paměť se vymazala celá. Pak mohl nastat nový zápis.

Podobným způsobem fungují i dnešní SSD disky, jen se nepracuje s celou pamětí, ale s už zmíněnými bloky. Pokud je blok prázdný, je možné do něj libovolně zapisovat. Pokud je ale třeba něco „přepsat“, musí se celý blok načíst do mezipaměti, resetovat a poté znovu s úpravou zapsat.

Interní práce s velkými bloky dat přináší problémy i při čtení. Pokud se totiž načítaná data nacházejí na dvou sousedních blocích, je třeba přečíst oba bloky a počítači předat třeba jen žádaných několik set bajtů. Efektivita celé práce se tak zhoršuje, protože kvůli několika kilobajtům musel disk uvnitř přečíst třeba i megabajt dat.

Většina problémů s SSD disky vychází právě z tohoto principu. Existují ovšem postupy, které snižují dopad různých problémů na minimum.

Zarovnání oddílu

Při pořízení nového SSD disku je třeba vytvořit na něm správně oddíly. To je potřeba udělat tak, aby geometrie oddílů odpovídala geometrii disku. Tedy aby jednotlivé bloky zapadaly do fyzických bloků, se kterými pracuje interně disk.

Přestože při použití LBA se již nepoužívá adresování pomocí cylindrů, hlaviček a sektorů, Linux stále tuto adresaci interně používá. U klasických rotačních disků se pomocí cylindrů volí radiální pozice nosiče hlav, označením hlavy se vybírá plotna a sektor pak určuje axiální polohu hlavy při čtení. Toto už u SSD nemá žádný praktický význam, my toho ovšem využijeme pro správné vytvoření oddílu.

Našim cílem je zajistit, aby oddíl ležel na celých násobcích velikosti interních SSD bloků. Při práci s fdiskem proto zvolíme, aby oddíly měly 32 sektorů na stopu a počítalo se se 32 diskovými hlavičkami.

# fdisk -S 32 -H 32 /dev/sda

Jeden cylindr tak bude mít 1024 bajtů, a protože fdisk rozděluje disky v násobcích 512 cylindrů, budou nám vycházet ideálně velké bloky. Poté si vytvořte oddíly tak, jak jste zvyklí.

Ujistěte se ještě, že první oddíl začíná na sektoru dělitelném číslem 512. Fdisk se vás při tvorbě oddílu na první sektor zeptá, ale můžete to ověřit i zpětně ve výpisu:

# fdisk -lu /dev/sda

Zarovnání souborového systému

Když máme správně zarovnány oddíly, je čas vytvořit si souborový systém. Pro něj platí stejná pravidla a problémy, o jakých jsme už mluvili. Dnes se běžně pracuje s 4KB sektory, ale SSD disk pracuje vždy s 512 KB bloky. Mohli bychom sice sektory jednoduše zvětšit na 512 KB, ale tím bychom neuvěřitelně plýtvali místem, protože každý soubor by pak měl nejméně 512 KB a jeho velikost by se vždy pohybovala v násobcích této hodnoty.

Výhodnější je, dodržet opět pravidlo o násobcích a vytvořit souborový systém tak, aby se „vešel“ do připravených bloků. Při tvorbě souborového systému tedy postupujeme takto:

# mke2fs -t ext4 -E stripe-width=128 /dev/sda1

Jelikož souborový systém ext4 používá standardně 4KB sektory, dosáhneme zarovnání na 512KB, což je kýžený stav. Některé nové distribuce už s SSD disky pracují, takže toto zarovnání provedou samy. Pokud ale budete využívat služeb standardního instalátoru, ověřte si, zda touto schopností už vládne.

TRIM a klesající výkon

O problematice TRIM jsem už psal v článcích Proč u SSD disků používáním klesá výkon a SSD disky ničí důkazní materiály a špatně mažou soubory, proto jen stručně. Už víme, že SSD disk nedokáže přímo přepisovat data, ale musí mazat celé bloky. To je časově poměrně náročná záležitost. Je proto výhodné, když má disk „v zásobě“ prázdné bloky, do kterých může přímo psát.

Těchto bloků ale s použitím disku neustále ubývá, neboť disk nemá žádné informace o tom, které soubory jsou na souborovém systému označené jako smazané. Souborové systémy totiž kvůli úspoře času data skutečně nemažou, ale jen si poznamenají, že bloky jsou volné a bude je možno v budoucnu využít. Z hlediska disku jsou tyto neužitečné bloky stále plné dat a není možné s nimi manipulovat.

Vzniklo proto rozšíření ATA protokolu zvané TRIM, které dovoluje operačnímu systému, aby disk informoval o tom, že konkrétní bloky už považuje za nepotřebné a disk si je může „smazat do zásoby“. Když pak přijde požadavek na další zápis či změnu dat, disk má prostor, kam může vše rychle zapsat a zapamatovat si, že nová data leží na novém místě.

Pro podporu TRIM v Linuxu je potřeba mít jádro 2.6.33 (únor 2010) a pokud i váš disk TRIM umí, mělo by být možné jej aktivovat. Do /etc/fstab je třeba k příslušnému řádku přidat parametr discard. Řádek pak bude vypadat asi takto:

/dev/sda1 / ext4    discard,defaults 0 1

Po restartu se můžete podívat, zda má systém TRIM aktivní. Stačí prohlédnout výstup hdparm a hledat hvězdičku před příslušným řádkem:

# hdparm -I /dev/sda|grep TRIM
*   Data Set Management TRIM supported

Nikdy ale není na škodu ověřit pro jistotu funkčnost reálným testem. Postup je jednoduchý: vytvoříme si soubor, přečteme si nízkoúrovňově příslušné sektory na disku, pak soubor smažeme a přečteme si sektory znovu. Pokud data skutečně z disku zmizela (výstupem druhého čtení jsou nuly), pak TRIM zafungoval a disk nepotřebný sektor promazal.

Zjištění počátečního sektoru (položka begin_LBA) souboru:

# hdparm --fibmap testovacisoubor

Přečtení dat z příslušného místa disku:

# hdparm --read-sector [doplňte zjištěnou adresu] /dev/sda

Po smazání souboru pro jistotu ještě vyprázdněte cache pomocí příkazu sync a chvíli počkejte (stačí pár sekund). Poté by měl být výstup prázdný – data jsou zlikvidována.

Méně zápisů a vyšší výkon

Často skloňovanou nevýhodou SSD disků je omezený počet zápisů, který dokáží snést. Tato vlastnost je stále dokola omílána a je jakýmsi tajemným zaklínadlem všech, kteří brojí proti nasazení SSD. Faktem je, že starší MLC čipy vydržely jen asi 10 000 zapisovacích cyklů, lepší SLC pak 100 000. Dnešní SSD disky ale vydrží až 5 milionů zápisů.

Disky navíc používají takzvaný wear leveling, což je technika, při kterém se fyzické sektory interně mapují na logické, tedy ty, které vidí operační systém. To umožňuje disku rovnoměrně přenášet zátěž na všechny buňky na disku. I když tedy stokrát přepíšeme jeden sektor, interně se bude místo zápisu stále měnit a disk si bude pamatovat, kde leží aktuální data. Ve skutečnosti tak nepřepíšeme jediný bajt. Životnost disků je tak poměrně vysoká.

Příklad: Mějme dnešní běžný disk s kapacitou 64 GB a dvěma miliony bezproblémových zápisů. Pokud bychom na takový disk trvale hrnuli data rychlostí 80 MB za sekundu, trvalo by dosažení jeho funkčního limitu 50 let (zdroj). I kdyby byla reálně tato hodnota pětkrát nebo desetkrát nižší, stále ještě jsme daleko od chvíle, kdy bychom se měli začít obávat. Navíc nikdo nepřepisuje trvale disk několik let v kuse.

Přesto existuje několik metod, které nám pomohou množství zápisů na disk snížit. Krátce si ještě popíšeme některé z nich a přidáme i pár rad k vyššímu výkonu.

Parametr noatime

Za normálních okolností si souborový systém poznamenává časy posledních přístupů k souborům. Výrazně ušetříme SSD práci, pokud tuto funkci vypneme. Do /etc/fstab stačí připsat parametr  noatime:

/dev/sda1 / ext4    discard,defaults,noatime 0 1

Přemístění /tmp do paměti

Největší pohyby na disku se odehrávají v adresáři /tmp, kam si jednotlivé aplikace odkládají dočasné soubory. Běžně se jedná o data, která mají platnost několik sekund a je proto zbytečné, aby se skutečně ukládala na disk. Můžeme tedy vytvořit ramdisk, který do adresáře připojíme. Opět stačí upravit  /etc/fstab:

none    /tmp    tmpfs   nodev,nosuid,noatime,size=512M,mode=1777 0 0

Všimněte si, že součástí řádku je i velikost. Jedná se o maximální velikost takto vytvořeného ramdisku. Nemusíte se bát, že by ramdisk automaticky ukousl zvolenou velikost. Je to jen ochrana proti přeplnění.

Přemístění cache Firefoxu do paměti

Pokud používáte webový prohlížeč Firefox, můžete disku výrazně ušetřit práci tím, že cache prohlížeče přemístíte do adresáře /tmp, který jsme si už namapovali do ramdisku. Dočasné soubory tak budou v dočasném adresáři a nebudou zbytečně často přepisovány na disku.

Pro tuto změnu vstupte do pokročilé konfigurace na URL about:config a vytvořte nový klíč browser.cache.disk.parent_directory s hodnotou /tmp. Pokud máte v počítači více uživatelů, proveďte tuto změnu u každého z nich zvlášť.

Vypnutí výtahu

Ve standardním režimu používá jádro k optimalizaci práce s diskem takzvaný elevator (česky výtah). Ten řadí požadavky za sebe tak, aby dokázal obsloužit co nejefektivněji plochu disku ve správném pořadí (jako výtah patra pěkně po sobě). V případě rotujících disků s relativně vysokou dobou vystavení hlaviček to má smysl, u SSD disků je to ale zbytečné, protože u nich je jedno, v jakém pořadí s daty pracujeme. V takovém případě jen elevator snižuje výkon a nepřináší žádnou výhodu. Vypneme ho proto pomocí zavaděče (čtěte článek o ovládánu Grub 2) tak, že jádru předáme parametr  elevator=noop.

Vypnout žurnál nebo ne?

Mnoho uživatelů se při pořízení SSD zabývá otázkou žurnálování. Na mnoha fórech se také můžete dočíst, že ext4 je kvůli žurnálu pro SSD nevhodný a je lepší použít starší ext2. Stále ovšem platí, že při vypnutí žurnálu se vystavujete riziku poškození souborového systému v případě, že dojde k náhlému výpadku. V nejhorším případě tak můžete přijít o data.

Odpověď na otázku není možné dát bez toho, aniž bychom věděli, jak moc je žurnálování náročné a kolik přidělává disku práci. Jaderný vývojář Ted Tso před časem provedl reálné testy, podle kterých i při tak velké akce, jakou je překlad jádra, nezvyšuje žurnál množství zápisů více než o několik procent. Nejnáročnější byl během měření proces make clean, při kterém se počet zápisů zdvojnásobil. Je to ale logické – jde o pouhé mazání souborů a samotné smazání je tak malá operace, že je datově stejně nenáročná jako zápis do žurnálu. V relativních číslech jde tedy sice o nárůst o polovinu, ale z velmi malého čísla (místo 4 MB se zapsalo 7 MB).

Z měření tedy plyne, že zátěž způsobovaná žurnálem není při běžné práci nijak dramatická a není důvod se jí příliš zabývat. Je výhodnější oželet několik zapsaných kilobajtů navíc než přijít o bezpečí, které nám žurnál nabízí.

Ohodnoťte jako ve škole:

Průměrná známka 1,33

Našli jste v článku chybu?
Zasílat nově přidané názory e-mailem
DigiZone.cz: Druhá anglická liga pro Digi TV

Druhá anglická liga pro Digi TV

120na80.cz: Zjistěte, zda je vaše klíště infikované

Zjistěte, zda je vaše klíště infikované

Podnikatel.cz: Když už je sexy, tak ať taky funguje

Když už je sexy, tak ať taky funguje

120na80.cz: Tady se vaří padělané léky

Tady se vaří padělané léky

DigiZone.cz: Mafra varuje před stíháním za pomluvu

Mafra varuje před stíháním za pomluvu

Vitalia.cz: Ministerstvo: tyto příbory jsou nebezpečné

Ministerstvo: tyto příbory jsou nebezpečné

Lupa.cz: Kam si doma dáte internet věcí? Na polici?

Kam si doma dáte internet věcí? Na polici?

Podnikatel.cz: Konečně vývar. Skoro jako od Steva Jobse

Konečně vývar. Skoro jako od Steva Jobse

DigiZone.cz: Změní se veřejnoprávní status ČT?

Změní se veřejnoprávní status ČT?

Lupa.cz: Přenos hokeje padal kvůli útoku, tvrdí O2

Přenos hokeje padal kvůli útoku, tvrdí O2

Vitalia.cz: Taky ji kupujete? Je šizená

Taky ji kupujete? Je šizená

Vitalia.cz: Před, nebo po snídani? Kdy je lepší čistit si zuby

Před, nebo po snídani? Kdy je lepší čistit si zuby

120na80.cz: Jak si udržet zdravou vaginu

Jak si udržet zdravou vaginu

DigiZone.cz: Šlágr TV dostala pokutu 100 000 Kč

Šlágr TV dostala pokutu 100 000 Kč

Vitalia.cz: Mražené ryby z Makra byly falšované

Mražené ryby z Makra byly falšované

Vitalia.cz: 7 nemocí očí, které musíte léčit včas

7 nemocí očí, které musíte léčit včas

Podnikatel.cz: Heureka pod Rockaway? Tohle musí splnit

Heureka pod Rockaway? Tohle musí splnit

120na80.cz: Poznáte, který z léků je pravý?

Poznáte, který z léků je pravý?

120na80.cz: Co jí dělá? Sklerotizaci

Co jí dělá? Sklerotizaci

Podnikatel.cz: Alza radí e-shopům, jak opustit Heureku

Alza radí e-shopům, jak opustit Heureku