23.2.15

Flash paměti

Flash paměti


Historie pamětí uchovávající hodnotu po odpojení napájení začíná pamětí typu EPROM. Ta umožňovala zápis dat elektrickou cestou a pro její vymazání bylo potřeba čip nasvítit ultrafialovým světlem, čímž došlo k vymazání celé paměti. Logicky se tato metoda zrovna moc nehodila pro běžné použití jako záznamové medium s velkým množstvím zápisů/přepisů.
Jako první zástupce flash paměti můžeme považovat Simultaneously Eraseble EEPROM - zkráceně SE-EEPROM. Tuto technologii v roce 1980 předvedl vývojový tým profesora Fujio Masuko, dnešní název flash paměť však tyto čipy dostaly až později, pravděpodobně při představení roku 1984 na IEEE konferenci, kde ohromila na svou dobu vysokou rychlostí mazání oproti tehdy známé EEPROM - vylepšené verzi EPROM - proto zmiňovaný název “flash”. Kromě rychlosti spočívá výhoda hlavně v použití jen jednoho tranzistoru pro uložení informace o velikosti jednoho bitu - toho je docíleno zapojením tranzistorů odpovídající negovanému součinu (NAND).



Obr 1


Profesor Masuoka a jeho první 256kilobitový (256 kb = 32 kB) flash čip představený na konferenci IEEE


I přes poměrně dlouhé období po které je technologie flash pamětí známá, trvalo poměrně dlouho, než se na trhu objevila zařízení o nějaké rozumné kapacitě a zároveň kompaktnějších rozměrů. Dostatečné hustoty integrace se dosáhlo až koncem 90. let minulého století, kdy se začaly objevovat první, klasické, dnes tolik známé a používané flashdisky. Postupným dalším vývojem, integrací a vylepšováním flash technologií se nyní do popředí dostávají solid state drive, alias SSD.

Jak to celé funguje?


Základem je SLC (single level cell) paměťová buňka, jejíž funkce je založená na principu MOSFET tranzistoru, jenom je zde plovoucí hradlo mezi bránou a substrátem, které je izolováno pomocí oxidu křemíku a umožní nám uchování náboje - za běžných okolností po mnoho let. Pokud plovoucí hradlo uchovává náboj, pak snižuje účinek napětí na bráně (control gate - CG) což zásadním způsobem mění prahové napětí. Při čtení buňky je na bránu (CG) přivedeno prahové napětí. V závislosti na přítomnosti nebo nepřítomnosti náboje na plovoucím hradle pak dojde ke vzniku logické jedničky (vodivé spojení) nebo nuly (nevodivé spojení) mezi vstupem a výstupem paměťové buňky.
 
Obr 2

Jak je vidět, SLC uchovává na jednu paměťovou buňku jedinou logickou hodnotu - buď 1 nebo 0 - tedy jeden bit. Nicméně toto řešení není úplně ideální, protože pro dosažení velkých kapacit je potřeba mnoho paměťových buněk, tím pádem mnoho materiálu pro výrobu a tím nám roste cena. Velmi známým a problematickým je pak omezený počet zápisu jedné takové buňky. Každým zápisem dojde k poškození izolační vrstvy, což má za následek jeho postupnou degradaci a tím pádem stále snižující se rozdíly napětí mezi logickou jedničkou a nulou, až nakonec dojde k tak nízkému rozdílu, že již není možné buňku použít.

SLC (single level cell)


Pro zápis každého bitu použijeme jedné paměťové buňky.

Charakteristika

Menší opotřebovávání buněk (~100 000 zápisů)
Hlavní důvod hraje zejména velký rozdíl mezi potenciály napětí mezi jednotlivými hodnotami. Tím pádem i poměrně velké časové období pro opotřebení izolační vrstvy natolik, že výrazný rozdíl mezi potenciály logické 1 a 0 začne být příliš malý.

Malá kapacita oproti MLC nebo 3BPC technologii.


MLC (multilevel cell)


Velikost náboje v plovoucím hradle nám zároveň mění úroveň prahového napětí. To znamená, že pokud máme na plovoucím hradle vetší náboj, pak vetší napětí na bráně je potřeba pro překonání. To samé ovšem platí pro menší náboje. Z toho vyplývá možnost užití různých napěťových úrovní a tím pádem i uložení více bitu na jednu paměťovou buňku.


Obr 3

Charakteristika

Dvojnásobné zvýšení kapacity
Výhody jsou zcela zjevné - při použití čipu o velikosti 16 GB SLC dostaneme při použití MLC  najednou již dvojnásobnou velikost - 32 MB paměťové kapacity.

Rapidní snížení životnosti (~10 000 zápisů)
Rapidní snížení životnosti oproti SLC. Příčina spočívá v meších rozdílech potenciálů bázového napětí pro možnosti určení logické hodnoty a tím pádem daleko dříve se dostaneme vlivem opotřebení izolační vrstvy na hodnoty, které již není možně od sebe bezpečně rozeznat.

Zhoršení rozpoznávání logických hodnot = větší chybovost
Se zmiňovaným rozdělením a přiblížením úrovně jednotlivých logických stavů, se zvyšuje pravděpodobnost chybného přečtení hodnoty. Je proto potřeba využívat kvalitních oprav a kontroly dat.

Zhoršení rychlosti čtení i zápisu
nutnost testování buňky různými logickými hodnotami a několika násobné čtení (až 4x)

eMLC (Enterprise Multi-level cell)

jedná se o MLC buňky, u kterých byly provedeny dílčí úpravy pro zvýšení spolehlivosti, rychlosti a životnosti (~50 000 zápisů)

3BPC (3 bit per cell)

Uložení třech bitů na jednu paměťovou buňku

Shodné s předchozím - pokud znovu rozdělíme úrovně na dvě další napětí, získáme již prostor pro uložení 3 bitů, nicméně za cenu ještě větší chybovosti.


Obr 4


Charakteristika

Další navýšení kapacity - 3-násobek SLC a 2-násobek MLC - při užití 16 GB čipu, získáme 64 GB dat pro uložení

Další degradace výkonu kvůli dalšímu zhoršení rozpoznávání logických hodnot, větší chybovost oproti MLC a zároveň následuje další snížení výdrže paměťových buněk schopných uchovat 3BPC hodnoty.

NAND/NOR flash

U flash pamětí se standardní paměťové buňky zapojují dvěma možnými způsoby - NAND a NOR - podle toho je pojmenováváme NAND flash a NOR flash.

Zapojením vice paměťových buňek do celku získáme další vlastnosti vyplývající ze zapojení

Společnou vlastností zapojení je, že je vždy potřeba paměť vymazat před jejím zápisem, protože není možné paměť přepsat. Pro uložení nové hodnoty je potřeba nejdříve paměťové buňky nastavit do výchozího stavu (NOR - 1, NAND - 0)

NOR flash

U NOR flash pamětí je jeden konec zapojen na zem a druhý přímo na bytový výstup - NOR brány Diky tomuto zapojení můžeme adresovat jednotlivé bity pro čtení a zápis (nikoliv však výmaz). Pokud chceme zapisovat data, je potřeba provést nejprve výmaz celého NOR bloku.

 
Obr 5

Ve výchozím stavu je se zapojení jeví jako 1, programováním (zapísem) měníme stav na 0.

Výhody
možnost čtení jednotlivých bitu v paměti, stejně jako jejich naprogramovaní
velmi vysoká rychlost čtení (přístup na každé místo v paměti je konstantní)
nedochazí k chybám při čtení
Nevýhody
pro výmaz je potřeba smazat celý blok
Použití
NOR flash se používá všude tam, kde nedochází k velkému počtu změn nebo zápisu a je požadováno čtení jednotlivých bitu z paměti. Nejčastěji jsou to tedy paměti v telefonech a jiných embeded systémech, kde je procesoru umožněno číst samotné instrukce přímým adresováním jednotlivých bitů paměti.

NAND flash

Zapojeni jako NAND brána. Více přechodů je zapojeno v serii a pouze pokud všechny členy serie obsahuji 1 na hradle pak, dostaneme logickou 0 ve výsledku.


Obr 6


Výhody
díky menšímu množství vodičů je paměť méně náročná na výrobu a je možné dosáhnout vyšších integrací (větší kapacity na čipu)
funguje jako blokové zařízení, což vyhovuje užití jako paměťové medium

Nevýhody
větší náchylnost na chyby a stím související problematičtější čtení dat
pomalejší zápis - nedají se programovat jednotlivé bity samostatně
je potřeba “resetovat” celý blok před zápisem

Použití
NAND díky možnostem minimalizace díky své menšímu množství propjení, jednoduchosti a přesto i nadále solidní rychlosti zápisu/čtení jsou využívány v klasických flash zařízeních tak jak je známe - USB flashdiscich, SSD discích atd, nejřastěji v kombinací s MLC technologí použití paměťové buňky.

Problémy flash pamětí a jejich řešení

Pokud vycházíme z podstaty zapojení a principů fungování uložení informace v flash pamětech, dostáváme několik negativních efektů, které se snažíme odstranit, nebo alespoň redukovat. Největší problémy jsou pak svázané primárně s limitní velikostí počtu přepisů paměťové buňky a nutností výmazu buněk před samotným zápisem.


Wear level (Rovnoměrné opotřebení)
jeden z problémů souvisejících s opotřebováním je zajištění pokud možno co nejrovnoměrnějšího opotřebovávání všech buněk. Díky tomu si disk získá svoji maximální kapacitu po co nejdelší časový úsek.

Pro dosažení rovnoměrného opotřebení firmware disku postupně jednotlivé buňky rovnoměrně střídá, tak aby pokud možno všechny byly opotřebovávané stejně. Samotný wear leveling má 3 možné druhy:
1) žádný - žádná optimalizace se nekoná

2) dynamický - optimalizace probíhá pouze napříč prázdným místem. Jsou střídany jen prázdné buňky, obsazené se nechávají tak jak jsou.

3) statický - snaží se o rovnoměrné využití všech buněk napříč celým paměťovým médiem. Pro tento způsob je potřeba přesunovat data na jiná místa na disku a uvolněná místa pak “rovnoměrně opotřebit”


Garbage collection
Rozdíly mezi minimální velikostí dat pro zápis (stránka) a minimální velikostí pro výmaz (blok) způsobují po výmazu (respketive označení jako smazaných) volné místo, které ale nemůže být uvolněno, protože smazat je možné pouze celý blok. Proto jsou data přesunuta na nový, prázdný blok a celý blok je smazán. Pro správnou funkčnost je však potřeba udržovat volné místo na na disku.


Obr 7


TRIM
SATA příkaz řeší problém komunikace mezi řadičem a OS způsobený rozdílností fuknce SSD disku a standardního HDD. Pokud chceme smazat nějaká alokovaná data, ta nejsou fyzicky smazaná (změněna na 0), ale pouze označena jako smazaná v tabulce řadiče a na samotném disku zůstávají v nezměněné podobě. Vzhledem k tomu, že flash paměť je potřeba před samotným zápisem vymazat, vzniká problameatická situace, kdy je potřeba nejprve data vymazat a následně je znovu zapsat - tedy provedení zápisu jakoby dvakrát, což znamená zpomalení zápisu. To není zrovna efektivní, proto byl definován příkaz TRIM, který v případě nečinnosti disku “nuluje” takto označená data. Tento příkaz je podporován od Windows 7 a u Linuxu od jádra 2.6.33.


Write Amplification

Jeden z negativních efektů souborového systému. Disk umí zapisovat pouze po celých stránkách, a pokud není stránka plně využita, dojde k jejímu doplnění a uložení. Takže pokud chceme uložit 13 kB  dat a máme stránky velikosti 512 kB, finální množství uložených dat je 512 kB a prostor není plnohodnotně využit. Klasické moderní disky často však reálně zapisují více dat, než ve skutečnosti obdržely od operačního systému. Lepších výsledků je možné dosáhnout díky větší cache určené pro přípravu dat spolu s pokročilými algoritmy pro optimalizaci, případně kompresi (například SandForce od Intelu).

Write apmplification je číselná hodnota vypočítaná poměrem dat reálně zapsaných na disk a množstvím dat obdržených od operačního systému.



Spare area

náhradní prostor s paritními informacemi sloužící jako náhrada v případě nečitelnosti obsahu buňky či v případě špatného zápisu dat.


Použitá literatura



Wikipedia.org - Write apmplification
Wikipedia.org - Flash memory




Žádné komentáře: