Transcript ppt - curs

Managementul memoriei flash
-Algoritmul Rejuvenator, TrueFFS și Dual pool-
Profesor îndrumător: Ștefan Stăncescu
Student: Toma Oana-Mădălina
Memoria flash
Memoria flash este o memorie electronică cu
acces aleator. Ea este nevolatilă, se poate
șterge și reprograma.
Se folosește pentru dispozitivele mobile, cum
sunt telefoanele, camerele digitale și
dispozitivele cu senzori.
Memoria flash este populară printe aceste
dispositive datorită dimensiunilor mici, greutății
scăzute, consumului redus de energie,
rezistenței sporite la șocuri și citirea rapidă.
Dezavantajele memoriei flash
Memoriile flash moștenesc probleme de
rezistentă. Este esential ca aceste probleme de
bază să fie rezolvate pentru ca memoria flash
NAND să-și poată materializa potențialul la
memorarea pe scală largă. Aceste probleme
sunt rezolvate de algoritmii de wear leveling.
În prezent se lucrează cu algoritmi de wear
leveling deoarece, fără această implementare
durata medie de viață a unei memorii flash este
de 0,55 ore, iar folosind algoritmii se ajunge la o
durată de viață de aproximativ 50 de ani.
Organizarea memoriei flash
Memoria flash NAND este organizată ca o
matrice de blocuri. Un bloc cuprinde de la 32 la
64 pagini, unde pagina este cea mai mica
unitate pentru operațiile de scriere și citire.
Memoria flash NAND are două variante numite
SLC (Single Level Cell) și MLC (Multi Level
Cell). Dispozitivele SLC stochează un bit pe
celula în timp ce MLC stochează mai mult de un
bit pe celulă.
Caracteristicile stocării pe memorii
flash
Acces uniform la latența de citire: În discurile magnetice
convenționale, timpul de acces este dominat de timpul
necesar capătului de citire să găseasca calea necesară
(timp de explorare) urmat de rotația întarziată pentru
găsirea sectorului (latența de rotație). Timpul de citire a
unui bloc aleator de pe un disc magnetic depinde în
primul rând de locația fizică a datelor.
Acces la citirea și scrierea asimetrică: În discurile
magnetice convenționale, timpii de citire și scriere pentru
o anumită locație sunt aproximativ aceeași. Operațiile de
citire și scriere sunt făcute la nivel de pagina în timp ce
operațiile de ștergere sunt făcute la nivel de block. Acest
lucru duce la asimetrie pentru latența operațiilor de citire
și scriere.
Uzura block-urilor: Frecvent operația de ștergere a
blocului reduce durata de viață a memoriei flash. Pentru
o memorie flash SLC numărul limitat de ștergeri este în
jur de 100K și pentru o memorie flash MLC este în jur de
10K.
Colectorul de gunoi: Fiecare pagină în memoria flash se
află într-una din cele trei stări: validă, invalidă și curătă.
Paginile valide conțin date care mai sunt înca valide.
Paginile invalide vor fi șterse la următoarea colectare
de gunoi. Pagini curate sunt acelea care sunt în curs de
ștergere și pot primi noi date în ele. Când numărul
paginilor goale din dispozitivul cu memorie flash este
redus, procesul de colectare de gunoi este declanșat.
Colectarea de gunoi corectează paginile invalide prin
ștergerea lor
Mutarea datelor în cazul ștergerilor la nivel de block
Amplificarea de scriere: În cazul hard disk-urilor,
cererile de scriere făcute de utilizator se potrivesc cu
scrierile fizice ale dispozitivului actual. În cazul SSDurilor, activitățile de wear leveling și colectarea de
gunoi duc la rescrierea datelor utilizatorului într-o altă
parte fără vreo cerere de scriere propriu-zisă.
Fenomenul este numit amplificarea scrierilor și este
definit prin următoarea relație:
Amplificarea scrierii= (Numărul actual de
pagini)/(Numărul paginilor scrise de utilizator)
Matricea de translație flash (FTL): Multe SSD-uri cu
performante ridicate au o matrice de translație flash,
pentru administrarea memoriei flash. FTL, ascunde
organizarea interna a memoriei flash NAND și prezintă
un dispozitiv block matricii sistemului de fișiere. FTL
mapează spațiul de adrese logice pentru locațiile fizice
din memoria flash.
Algoritmul de wear leveling
Un algoritm de wear leveling urmărește ieșirea
din uz a block-urilor diferite ale memoriei flash.
Un block se spune că este ieșit din uz când a
fost șters de numărul maxim de ori.
Definesc durata de viață a memoriei flash ca
numărul de update-uri care poate fi executat
până când primul block este scos din uz.
Principalul scop al oricărui algoritm de wear
leveling este să crească durata de viață a
memoriei flash prin prevenirea ajungerii fiecărui
block la limita.
Hot data vs. Cold data
Datele care sunt updatate mai des sunt definite
ca hot data, în timp ce datele care rămân relativ
nemodificate sunt definite sub numele de cold
data. Optimizarea plasării datelor hot și cold în
memoria flash presupune darea unei importanțe
extreme numărului limitat de cicluri de ștergere
pentru block-urile flash.
Importanța scrierii datelor hot pe block-uri
diferite
Organizarea algoritmilor de wear
leveling
Wear leveling dinamic: Algoritmi realizeaza wear
leveling-ul prin reutilizarea block-urilor cu cel mai mic
număr de ștergeri. Totuși acești algoritmi nu încearcă
să mute datele cold care pot rămâne pentru totdeauna
în câteva block-uri.
Wear leveling static: Spre deosebire de algoritmii de
wear leveling dinamic, algoritmii de wear leveling static
încearca să mute datele cold pe block-uri utilizate mai
mult pentru a facilita răspândirea rapidă a uzurii.
Totuși, mutarea datelor cold în jur fără cereri de update
duce la depășiri.
Principalii algoritmi descriși
Rejuvenator este un algoritm static de wear
leveling. Este important operațiile care folosesc
multe resurse pentru mutarea datelor cold să fie
făcute optim și să nu creeze depașiri excesive.
Rejuvenator-ul este un algoritm de wear leveling
care scalează memoria flash de capacități mari
și garantează cererile de performanță pentru
centrele de stocare.
Numesc algoritmul de wear leveling Rejuvenator
deoarece previne blocurile să atingă durata de
viață rapid și le ține tinere.
Principalii algoritmi
Algoritmul TrueFFS
Mecanismul TrueFFS de wear leveling mapează
unitățile șterse virtual într-un lanț de unități șterse fizic.
Dacă nu există unități fizice libere în fondul comun, se
produce întoarcerea, operație în care harta fiecărei
unitați șterse virtual este schimbată cu una din lanțul de
unități fizice. Datele valide din lanț sunt copiate pe o
singură unitate fizică și unitățile fizice din lanț sunt
eliberate. Acest lucru garantează o distribuire uniformă a
numărului de ștergeri pe block-urile de stocare dinamică
a datelor.
Se bazează pe periodicitate și procedeul round robin
Principalii algoritmi
Algoritmul dual pool
Un algoritm cu stare dublă menține două
stări pentru block-uri-hot și cold. Block-urile sunt
inițial alocate aleator stărilor hot și cold. Apoi pe
măsură ce se termină update-urile starea
asociată devine stabilă .
Dacă block-urile asociate stării hot sunt șterse
peste un prag sigur conținutul este mutat în cele
mai puțin utilizate block-uri din starea cold.
Dezavantaj: timpul pentru asocierea stărilor
Dezavantaje
Pe lângă wear leveling, alte mecanisme cum sunt colectorul de
gunoi și harta block-urilor fizice logice pot afecta performanțele și
durata de viață a memoriei flash.
Tabelele de mapare sunt păstrate în RAM. Nivelul tehnicilor de
mapare consumă o cantitate enormă de memorie deoarece conține
informație de mapare despre fiecare pagină. S-a propus utilizarea
unei scheme hibride de mapare pentru a beneficia de performanța la
nivel de mapare a paginilor și pentru a eficientiza utilizarea spațiului
la nivel de mapare a block-urilor.
Toate schemele de mapare hibridă folosesc un set de block-uri
înregistrate pentru a reține update-urile și pentru a le scrie blockurile de date corespunzătoare. Block-urile înregistrate sunt mapate
la nivel de pagină în timp ce block-urile de date sunt mapate la nivel
de block.
DFTL stochează o porțiune a tabelului pentru maparea paginilor și
restul tabelelor în memoria flash însăși. Acest procedeu reduce
cerințele de memorie pentru tabelul de mapare la nivel de pagină.
Algoritmul Rejuvenator
Se păstrează o mapare la nivel de pagină pentru
stocarea block-urilor cu date hot și o mapare la nivel de
block-uri pentru block-urile care stochează date cold.
Identificarea datelor hot și cold este o parte integrantă a
Rejuvenator-ului. Pentru idetificare se utilizează o
fereastră simplă bazată pe scheme ce conțin contor
pentru a determina care adrese logice sunt hot.
Dimensiunea ferestrei este fixa și acoperă adresele
logice care sunt accesate în trecutul apropiat. În orice
moment adresele logice care au valori mari ale
contorului în fereastră sunt considerate hot.
Descrierea algoritmului
Rejuvenator-ul menține τ liste de block-uri. Diferența dintre numărul
maxim de ștergeri al fiecărui block și numărul minim de ștergeri al
fiecărui block este mai mică sau egală cu pragul τ. Fiecărui block îi
este asociat numărul listei egal cu numărul ștergerilor sale. Câteva
liste pot fi goale. Inițial tuturor block-urilor le este asociată lista cu
numarul 0. Pe măsură ce block-urile sunt updatate vor fi promovate
la liste cu număr mai mare. Notez numărul minim de ștergeri cu
win_wear și numărul maxim de ștergeri cu max_wear. Fie diferența
dintre max_wear și min_wear notată cu diff. Fiecare bloc poate avea
trei tipuri de pagini: valide, invalide sau curate.
Fie m o valoare intermediară între min_wear și min_wear + (τ-1).
Block-urile care au contorul între min_wear și min_wear+ (m-1) sunt
folosite pentru stocarea datelor hot și block-urile care aparțin listelor
cu număr ridicat sunt folosite pentru a stoca date cold.
Algoritmii Rejuvenator
ALGORITMUL 1
Eveniment= Cererea de scriere in LBA (Logical
Block Address)
Dacă LBA are o hartă pagină atunci
Dacă LBA este cald atunci
Scrie într-o pagină dintr-o listă cu
număr mic
Updatează harta pagină
Altfel
Scrie pagina într-o listă cu număr
mare (sau într-un block înregistrat)
Updatează harta block-urilor
Altfel dacă LBA este cald atunci
Scrie într-o
pagină dintr-o
listă cu
număr mic
Invalidează
(datele) fiecărei
harți block
asociate
Updatează
harta paginilor
Altfel dacă LBA este cold atunci
Scrie pe o
pagină dintr-o
listă cu număr
mare (sau block
înregistrat)
Updatează harta block-urilor
Sfarșit
ALGORITMUL 2: . Mutarea datelor
Dacă Numărul de block-uri șterse în listele cu
număr mic < TL atunci
Mută datele block-urilor din
lista cu numărul între
min_wear și min_wear la
block-urile din listele cu
număr mare
Colectează gunoiul blockurilor din lista cu numărul
între min_wear și
min_wear+(τ-1)
Dacă Numărul de block-uri șterse din lista cu număr
mare <TH atunci
Mută datele block-urilor din lista cu
numarul min_wear la block-urile din lista
cu număr mic
Colectează gunoiul block-urilor din lista cu numerele
între min_wear și min_wear+(τ-1)
Sfârșit
Descriere Algoritm 1
Algoritmul 1 încearcă să stocheze
blocurile hot de date în liste numerotate
între min_wear și min_wear + (m-1).
Acestea sunt block-urile care au fost
șterse de un număr mic de ori și au o
rezistentă mai bună. De acum, numerele
listelor vor fi date de la min_wear la
min_wear+ (m-1), pentru listele cu numere
mici, și de la min_wear la min_wear + (τ1), pentru listele cu numere mari.
Dacă o singură pagină într-un block care a
fost mapată la nivel de block devine hot
Prima opțiune este de a schimba maparea fiecărei pagini
din block în mapare la nivel de pagină. Cea de-a doua
opțiune este să se schimbe maparea doar pentru pagina
hot din mapare la nivel block în mapare la nivel pagină și
să se lase restul block-ului mapat la nivel block.
Pentru ultima opțiune:
Aceasta lasă block-ul fragmentat datorită corespondenței
paginilor fizice cu paginile hot care mai conțin date
invalide. Această fragmentare este înca acceptată
fiindcă evită maparea la nivel pagină nenecesară. În
acest experiment s-a gasit o fragmentare mai mică de
0.001% a întregii capacitați memoriei flash.
Dacă o singură pagină într-un block care a
fost mapată la nivel de block devine hot
Când o pagină hot dintr-o listă cu număr mic este
updatată, o nouă pagină aparținând block-ului listelor de
număr mic va fi utilizată. Acest lucru este făcut pentru a
reține datele hot în block-uri din asociate listelor cu
număr mic. Când update-ul este făcut paginilor asociate
listelor cu numere mici și este identificat un block cold.Se
verifică maparea block-urilor din LBA. Întrucât LBA are
deja o mapare la nivel de pagini, pagina
corespunzătoare mapării block-urilor fizice va fi goală
sau invalidă. Datele sunt scrise pe pagina
corespunzătoare în block-ul fizic mapat (dacă pagina
fizică este liberă) sau într-un block înregistrat (dacă
pagina fizică este marcată ca invalidă sau nu este
liberă). Dacă nu este niciun block mapat asociat cu LBA,
acesta va fi scris într-unul din block-urile goale
aparținând listelor cu număr mare deci datele cold sunt
plasate în mai multe block-uri utilizate.
Dacă o singură pagină într-un block care a
fost mapată la nivel de block devine hot
Similar când o pagina din block-ul aparținând unei liste cu număr
mare este updatată, dacă ea conține date cold, este stocată într-un
block nou cu liste numerotate cu număr mare. Întrucât aceste blockuri sunt mapate, update-urile trebuie să se facă în block-uri
înregistrate. Unui block înregistrat îi poate fi asociat orice block de
date. Block-urile de date și block-urile înregistrate sunt îmbinate la
colectarea de gunoi. Această schemă este folosită numai pentru
block-urile de date cold care au un număr foarte mic de update-uri.
Astfel numărul cerut al block-urilor înregistrate este mic. Un potențial
dezavantaj al schemei este faptul că block-urile înregistrate conțin
date hot rămân valide, mare parte dintre ele. În timpul colectării de
gunoi, pot exista multe operații scumpe de îmbinare completă între
paginile valide ale unui block înregistrat și block-urile de date
asociate lor. În cadrul acestor operații este nevoie ca datele să fie
copiate pe un block curățat și apoi block-urile de date și cele
înregistrate sunt șterse.
Colectarea de gunoi
Colectarea de gunoi este facută începând de la
block-urile listelor cu număr redus și apoi
ajungând până la listele cu număr mare.
Motivele din spatele acestui process sunt două:
Primul motiv este datorat block-urilor listelor cu
număr mic care stochează datele hot, ele tind să
aibă mai multe pagini invalide. Definesc
curățarea eficientă a block-urilor cu formula:
Colectarea de gunoi
Dacă eficiența curațării unui block este mare,
atunci mai puține pagini trebuie copiate înainte
de ștergerea block-ului. Block-urile din listele cu
număr mic au o eficienta mai mare a curățării
deoarece stochează date hot. Al doilea motiv
pentru colectarea de gunoi de la lista cu număr
mic este acela că block-urile acestui tip de liste
au număr mai mic de ștergeri. Colectarea de
gunoi implică operații de ștergere așa că este
totdeauna mai bine să realizeze colectarea de
gunoi mai întâi pentru block-urile cu număr mic
de ștergeri.
Avantajele Wear leveling-ului
static
Wear leveling-ul static mută datele cold din block-uri cu
număr mic de ștergeri în block-uri cu număr mai mare de
ștergeri. Se eliberează astfel mai puține block-uri uzate
care pot fi folosite pentru stocarea datelor cold. De
asemenea împrăștie ulterior uzura block-urilor.
Rejuvenator-ul realizează acest lucru într-un mod bine
determinat și numai când este necesar. Mutarea datelor
cold este de obicei făcută schimbând datele cold ale
unui block (cu număr mic de ștergeri) cu datele altui
block cu număr mare de ștergeri. În cadrul Rejuvenatorului acest proceseu este făcut sistematic.
Operațiile algoritmului Rejuvenator pot fi vizualizate întro fereastră de mutare unde dimensiunea ferestrei este τ
ca în figura 1.
Figure 1 Funcționarea algoritmului Rejuvenator [30]
Adaptarea parametrului τ
Aspectul cheie al Rejuvenator-ului este că
parametrul τ este ajustat potrivit duratei de viața
a block-urilor. Valoarea acestui parametru poate
fi mare la început, când block-urile sunt departe
de atingerea duratei lor de viață. Pe măsură ce
block-urile se apropie de durata de viață τ se
decrementează. Către sfârșitul duratei de viață a
memoriei flash valoarea lui τ este foarte mică.
Pentru a-și atinge scopul se adoptă două
metode de decrementare a valorii lui τ.
Adaptarea parametrului τ
Figure 2 Decrementarea liniara a lui τ
Figure 3 Decrementarea neliniara a lui τ
Decrementarea liniară
Notez diferența dintre 100K (numărul maxim
de ștergeri pe care un block o poate suporta)
și max_wear (numărul maxim de ștergeri
existent pentru block-urile din memorie) cu
life_diff. Pe măsură ce block-urile sunt folosite,
valoarea lui τ este r% din life_diff. Pentru
realizarea experimentului se va seta valoarea
lui r la 10%. Pe măsură ce valoarea lui
max_wear crește, valoarea lui life_diff scade
liniar și la fel și valoarea lui τ. Figura 2
ilustreaza modelul de descreștere a valorii lui τ
în schema liniară.
Decrementarea neliniară:
1.
Decrementarea liniară uniformă reduce
valoarea lui τ cu r% de fiecare atunci când
decrementarea este declanșată. Dacă este
nevoie de un control mai eficient, valoarea lui τ
trebuie modificată neliniar adică,
decrementarea lui τ trebuie făcută inițial mai
lent și mai rapid către sfârșit. Figura 3
ilustrează această schemă. Se alege curba din
figura 3 și i se setează valoarea pantei, curbei
corespunzătoare valorii life_diff, ca τ. Se poate
vedea că rata de descreștere a lui τ este mult
mai abruptă la sfârșitul duratei de viață.
Adaptarea parametrului m
Ajustarea a lui m ajută la reducerea migrării
datelor. Când valoarea lui m este incrementată
sau decrementată, tipul de mapare a block-urilor
(la nivel de block sau la nivel de pagină) nu este
schimbat imediat. Maparea este schimbată la
tipul relevant doar la primirea cererilor de scriere
după incrementarea sau decrementarea
parametrului m. Din această cauză o parte din
block-uri asociate listelor numerotate cu numere
mici vor rămâne mapate la nivel de block-uri.
Problemă este rezolvată în timpul wear levelingului static și operațiunilor de colectare de gunoi.
Comparatia algoritmilor
Figure 4 Numărul de cereri de scriere realizate înainte ca primul block sa atingă durata de
Comparatia algoritmilor
Figure 7 Distribuția numărului de ștergeri pe block-uri
Vă mulțumesc!
Intrebări?