K napsání této reakce mě přimněl sousední blog, na kterém Martina Mikalu napadlo použít flash paměti jako přídavnou cache k pevným diskům. Moje reakce v diskusi se nakonec
rozrostla natolik, že jsem se ji rozhodl napsat jako samostatný blogpost.
Rozhodně není mým cílem článeček nebo jeho autora shazovat. No, ony podobné myšlenky napadají asi každého (včetně mě), ale když se nad tím zamyslíte, zjistíte, že by navrhovaná flashcache tolik výhod nepřinesla.
Jednak jsou dnešní disky velmi rychlé a zrovna paměť typu flash by nepřinesla zásadní zlepšení. Běžný disk dokáže dnes číst a zapisovat rychlostí v řádu desítek megabajtů za sekundu. Běžné paměťové karty a standardní média s flash pamětí se k této hranici přibližují a řekněmě, že se dokaží dostat na podobná čísla. Zásadní změnu v rychlosti by tak naše flashcache nepřinesla.
Můžeme ovšem argumentovat tím, že bychom mohli využít jiný typ paměti, který by nabídnul vyšší rychlosti. Otázka ovšem zní: Proč cpát paměť k disku, když ji můžeme stejně dobře použít jako systémovou paměť?
V každém případě ale dnešní počítače mají diskové cache až až, tedy v podobě běžné RAM. Linux například dynamicky alokuje volnou paměť jako cache pro disky, takže já mám v tuhle chvílí několik stovek megabajtů jako diskovou cache. Pokud uvážíme, že běžný uživatel má dnes v počítači třeba gigabajt paměti, máme cache habaděj.
Navíc taková cache má řadu výhod. Jednak může systém lépe vyhodnotit, co si v ní má podržet, proto je taková vyrovnávací paměť „chytřejší“. Cache u disku má přeci jen o datech velmi omezené informace.
Navíc konkrétně v Linux (jako jádro) může ve své cache dělat různá harakiri. Pokud například zjistí, že je potřeba spustit binárku, která je zrovna v cache (alespoň část), nepřesouvá si ji po paměti, ale rovnou si příslušné bloky přeoznačí z cache na systémovou paměť a rovnou spouští. Navíc pokud aplikaci ukončíte, máte zase paměť navíc, kterou můžete opět realokovat jako vyrovnávací.
Nevím, jak to dějají MS Windows, ale řekl bych, že podobně. Kapacity vyrovnávacích paměti umístěných přímo na discích se zastavili na několika megabajtech. Dnes by přeci nebyl problém dát na disk 256 MB paměti, která by se chovala jako cache. Ale výrobci (stejně jako teď vy) tuší, že by to nepřineslo zásadní zlepšení.
Proč cpát paměť k disku, když ji můžeme stejně dobře použít jako systémovou paměť?
Těch důvodů je více. Tak třeba následující příklad:
Zapíšete na stopu 1
Zapíšete na stopu 10
Zapíšete na stopu 1
Zapíšete na stopu 10
Zapíšete na stopu 1
...
Pokud disk má interní cache, tak si to teoreticky může ukládat do cache a pak najednou zapsat na 1. stopu a na 10 -- Hlavičky nebudou lítat sem a tam. Krom toho, pokud nepoužíváte koudel (http://www.kouwell.com.tw/) ale nějaké kvalitní SCSI nebo SATA řadiče, tak na sobě mají taky cache a třeba u hw raidu to má zajisté své opodstatnění.
[1] To přece nic neřeší. Když budu mít data v RAM, tak k nim budu mít ještě rychlejší přístup. A pokud to bude cache, tak je mi jedno, že to drží bez napájení.
[2] Totéž přece řeší systém. Není důvod, proč by měl posílat příkazy disku v náhodném pořadí. Má přece write cache a může si to libovolně třídit (a taky to dělá).
musim se zastat p. Krcmare, SSD disky nejsou to, za co se vydavaji:
1) nejsou cache pred HDD, jsou nahrada za HDD
2) sandisk nikde nepropaguje dva dulezite parametry - predpokladanou zivotnost pri nasazeni jako systemovy disk a predevsim cenu (v soucasne nabidce stoji ATA disk module cca 1.000 Kc/GB)
3) soucasne Windows (mozna i ostatni OS) zapisuji na disk jako dive, za puldne poklidne prace mam celkem 150.000 za pisu na disk - kdyz vezmu v potaz, ze sice pouzivaji rozprostreny zapis, presto neverim, ze SSD vydrzi dele nez pul roku nebo max. rok
kde to ma smysl?
a) pro nekoho, kdo musim to nej (nejdrazsi, nejvic k nicemu apod.)
b) do zvlastnich aplikaci s ohledem na minimalni spotrebu, maximalni odolnost proti mechanickemu poskozeni pri zachovani podminky minimalizovaneho poctu zapisu - specialni nastroje do terenu apod.
jako cache pred disk ma smysl pouze staticka RAM o kapacite radove desitky az stovky MB, s vlastni logikou (ridi si cteni a zapis na disk, vuci systemu vystupuje jako HDD) a zalohovanim napajeni
a jeste drobnost - veskere skvele vysledky dosahuje sandisk srovnanim se "spickovym hdd" s 4200 rpm, coz je pochopitelne z marketingoveho hlediska - bohuzel se najde hodne lidi, co na to skoci (OT: viz. pradlo jeste belejsi - kamarad, co prodaval praci prasky do obchodaku tvrdi, ze ve vsech pytlich vsech znacek a provedeni je ten stejny obsah, jen se to jinak jmenuje a jinak stoji, pouze pri uvadeni jeste lepsiho prasku na par mesicu pozmeni slozeni, aby to skutecne o neco lepe pralo, casem to zas vysumi, jen vyssi cena zustane)
Flash je výrazně rychlejší než disk, když přijde na čtení nesouvislých bloků. Konkrétně u notebooků je s tím celkem problém. Dále write cache je sice fajn, ale flash je permanentní, což operační paměť není. Tedy není problém zapsat soubor na disk, a mít jistotu, že tam už zůstane (byť ve flash memory). U notebooků to může eliminovat velké procento požadavků na roztočení HDD.
[5]: aha, a napadlo vas, ze pouziti RAM pro write-back cache prinasi netrivialni problemy pri vypadku napajeni nebo padu systemu?
Navic, vase srovnani rychlosti flash a hdd je vice nez usmevne, nekolik ms, ktere hdd potrebuje pro seek jsou dost dramatickou penaltou. Stacilo by se podivat, jaka je rychlost random cteni a random zapisu u hdd a u flash. A mozna taky porovnat, jak casto system skutecne linearne cte data a jak casto dela v podstate random cteni. Trochu mi to pripomina jisty cesky server o noteboocich, kde jsou schopni tvrdit, ze cteni z disku rychlosti 100MB/s je horsi prumer.
Jen ještě pro jistotu objasním svůj názor, aby nedocházelo k omylům. Netvrdím, že flash paměť místo disku je nesmysl, nebo že nevychází v některých parametrech lépe. Jen tvrdím, že navrhovaný řetězec
procesor - RAM - flash - disk
by nepřinesl zásadní výkonnostní výhodu proti klasickému
procesor - RAM - disk
A nezkusil jste o tom zapremyslet trosku jinak? Zkuste opustit hloupou predstavu klasicke cache.
Co si zkusit predstavit nasledujici scenar: Jadro Linuxu, moduly, zakladni binarky, skripty, nejpouzivanejsi knihovny (treba i pro Gnome/KDE a napr. i Firefox, zelazi na uzivateli/distribuci,mozna i cely OS) budou ulozeny ve flashi. Zbytek (uzivatelska data, min pouzivane programy,swap) na plotnach. Mate? A nemate pocit, ze zrovna toto by start systemu a prvni spusteni programu(hodne kratkych nahodnych cteni) mohlo NEKOLIKANASOBNE zrychlit? A myslim, ze presne o tohle tvurcum jde, ne o to suplovat cache v RAM. Zivotonost takoveho reseni si asi take spocitate (myslim, ze to o cem jsem psal nebudete milionkrat updatovat....).
Chce to jen trochu fantazie.
no zrovna kernel s moduly neni dobry priklad protoze na ext[23] obraz jadra nebude na 99% fragmentovan a moduly si muzete vrazit do initrd...
a jestli se vam zrychli system si muzete vyzkouset hned ted, staci si namountovat najekej flashdisk
rychly seek, spotreba a hlucnost nemechanickych pameti ma neco do sebe, ale me se nelibi integrace do jednoho pouzdra spolu s diskem tam nevidim zadne vyhody oproti instalaci s hdd a flash zvlast....
ale nenazyvejme to cache, protoze to cache neni, je to dalsi disk s jinymi parametry...
[20]
Mate pravdu, nazyvat to cache je hloupost (ale tak to nazval autor, ja bych tomu take tak nerikal).
No dobre, chytate me za slovo. Ano, u kernelu, ktery ma par mega se to opravdu neprojevi. Ano, moduly si muzu dat do initrd, ale co vim, vetsina distribuci to nedela. Ale jakmile se zacnou provadet skripty, startovat sluzby (ktere si zacnou nahravat knihovny), spustite WM, tak uz to smysl ma. Proste verim tomu, ze spusteni KDE a nasledne spusteni Firefoxu/Thunderbirda proste bude podstatne rychlejsi. Ale mate pravdu, nezkousel jsem to, i kdyz by se to celkem dobre udelat dalo.
Nevidite vyhody? A jake vidite nevyhody? Rikate instalace flash zvlast. Jakou mate moznost toto udelat? Koupit na kolene vyrobeny IDE/CF adapter, ktery stoji skoro stejne jako ta vlastni flasha. To navic moc lidi to neudela (mate to vy?). Ale kdyz se to stane standardni soucasti disku, velmi rychle se to rozsiri. A take verim tomu, ze takto integrovana flasha muze byt rychlejsi. Proc? Protoze na rozdil od CF mate vic mista a muzete pouzit vic cipu (treba mensich,cimz se muze i snizit cena) a paralelizovat je. Mimochodem, zkuste si zapojit CF na IDE a podivat, jestli pojede v DMA modu. Nechci na to dat krk, ale myslim, ze toto neni u CF v IDE modu podporovano. Jednou jsem to zkousel a radic, ktery obycejny disk pripojil v UDMA modu, CF od Sandisku a Lexaru pripojil v PIO. Mohla to byt sice vec radice, ale spis bych tipoval ty CF. Pak je vyhoda integrovaneho reseni zrejma. Nebo vite jeste o nejake moznosti jak pripojit flash? USB bych neuvazoval, ma vetsi latence nez IDE.
Takhle velka nonvolatilni cache rozhodne vyznam ma, konec koncu na lepsich raid kartach najdete napr. 256MB cache.
Nicmene to je reseni uplne mimo to, o cem se tu diskutuje. U pristupu k jednomu disku nema flash cache zadny velky vyznam, pridani klasicke RAM tam udelaji mnohem lepsi praci diky inteligentni sprave cache v operacnim systemu, nonvolatilnost tam ma male vyuziti (na "normalni" pouziti staci libovolny slusny journalovaci souborovy system a kdyz uz pozadujeme nejakou spolehlivost, tak UPS za ctvrtinu ceny urcite splni svoje).
hlavni nevyhodu spolecne montaze vidim v tom, ze driv nebo pozdeji narazim na velikost bud hdd nebo flash a budu muset vymenit oboje i kdyz mi to druhe bude zatim stacit.... ;)
co se tyka DMA, redukce ktere pouzivam nemaji zapojeny DMA pid, ale nove CF karty DMA umi a se spravnou redukci BY meli fungovat, kazdopadne v DMA funguji flash IDE disky (gg: fastflashdisk)
Flash paměť předřazená disku je nesmysl:
- Podle organizace flash pamětí, cacheování jednoho sektoru znamená vymazání a opětovné naflashování typicky 64 kB dat se ztrátou 1 zápisového cyklu na tento blok. Tato operace je zdaleka nejpomalejší funkcí flash paměti. U SRAM je čtení i zápis stejně dlouhé.
- Cache jsou často write-only - data se po chvíli bez použití zahodí. To znamená, že většina operací nad flash bude z těch nejpomalejších.
- Cache má vysoký tok dat - u celodenně vytíženého PC proběhne diskovou cache terabyty dat denně. Při 1GB flash cache by to znamenalo nejméně 1000 úplných přepisů denně, ovšem vzhledem k předchozímu spíš mnohem víc.
- Trvanlivost flash je typicky 100000 zápisů. Při praktických testech flash pamětí jako swap byla její životnost 0,5-1 rok. Zátěž při použití jako disková cache bude vyšší. Odhaduji životnost max. 1 měsíc. Provozní náklady 1000Kč/měsíc nejsou zajímave.
- Flash paměti jsou řádově pomalejší než SRAM, a to zejména při zápisu. K čemu je systém, který občas nestihne ukládá do cache rychlostí, kterou čte z disku. Rychlé flash paměti jsou drahé nebo mají omezenou kapacitu, nižší počet cyklů, pomalejší zápis.
- Při aplikaci předchozího by se proto vyplatilo vždy z disku číst 64kB dat. Takový požadavek však ignoruje geometrii disku i rozložení dat (řadič disku nic neví of souborovém systému).
- Vypnutí napájení v nepředvídatelném okamžiku může znamenat ztrátu celéko 64kB bloku. Tomu lze zabránit rekuperační jednotkou napojenou na motor, která setrvačností ploten dokáže vyrobit dostatek proudu na dopsání bloku, ovšem za cenu pevného spojení s diskem (technologie samotná je ve většině disků již přítomna a slouží k parkování hlaviček).
Při použití flash jako náhrady disku tyto výhrady neplatí: Jeden blok paměti udržuje konkrétní soubor, nemusí se aktualizovat podle právě prošlých dat. Flash disky obsahují mikrokontroler, který rozprostírá zápis. Tento mikrokontroler by šel použít i u cache, ale došlo by k dalšímu zpomalení zápisu. I přesto bych u flash disků příliš swap nezatěžoval.
No, Windows Vista maji v sobe podporu pridavne flash cache, na kterou si cachuji casto pouzivane DLL. V realu je pak prace se systemem rychlejsi. Technicke detaily neznam, ale kolega, ktery to zkousel potvrdil viditelne zrychleni spousteni aplikaci ergo to ma vyznam. Z meho pohledu je divne si zablokovavat nechat "cucet" z pocitace USB 1 klicenku jen pro nastaveni pameti, ale reseni s integraci dovnitr (je mi uplne jedno zda na disk, motherboard, ci kamkoliv jinam, hlavne schovat a neblokovat stabilne vnejsi USB port) se pry pripravuji.
Pri poctu pametovych slotu na motherboardu a cene pameti mi pripadne pridani flash jako rozumny napad. Neresim jakkoliv to zni bizardne, pokud to viditelne zrychli cely system, ma vyznam o tom premyslet.
Pomatení smyslů... Uvědomte si že máte v počítači velmi pravděpodobně procesor, který reálně využívá asi dvě procenta svého výkonu a pamět, která není schopná loadovat data z procesoru ani desetinou jeho rychlosti (v idealním případě). Tak proč sakra u takových pleček řešíte jestli budete mít o pár nanosekund lepší přístupový čas na disk??? BTW. co se týká cachování, tak opravdu nechápu na co přidávat u běžného počítače k disku větší cache než 16MB, kterou dnes SATA disky běžně nabízejí. Co se týče realného využití L2 chachovacích systémů u disků. Tak se týká pouze obřích low level raidových systémů, ktereé obsluhují paralalelně až tisíce disků, tam má chachování smysl kvůli optimalizaci využití přístupového pásma a kvůli možnému selhání disku, ať už jde o selhání fatalní, nebo například chvilkový pokles napájecího proudu. Pak má obrovská cache smysl, ale ve výsledku se stejně jedná o RAM paměť I/O kontroléru, který toto diskové pole ovládá.
Pokud použijeme SSD jako další disk a nainstalujeme na něj systém, nikdo mě nevymluví, že počítač nebude rychleji startovat, otevírat okna a celkově se systém zrychlí!!!
Porovnejte si přístupovou dobu HDD a SSD.
Našlapanej 10-ti tis. otáčkový Raptor se nedostane pod 4,5 ms (čtení), normální HDD 7200ot/s SATA se pak nedostane pod 8ms. Zatím co SSD má přístupovou dobu za 0,2ms!!
Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. GNU/Linuxem a Unixem obecně se zabývá již více než deset let a věnuje se především jeho nasazení v počítačových sítích a bezpečnostní politice. Zde bloguje o Root.cz, Linuxu, internetu a světě kolem sebe.
Přečteno 78 128×
Přečteno 76 347×
Přečteno 57 137×
Přečteno 54 443×
Přečteno 48 250×