Cei dintre voi care au petrecut chiar și cel mai mic timp căutând informații despre tehnologiile de stocare încorporate știu acest lucru: subspațiul internetului dedicat acestui subiect special este inundat de articole scurte care compară tehnologiile flash NOR și NAND. Unele sunt foarte bine scrise și cu adevărat lămuritoare. Dar, de prea multe ori, simpla acumulare de conținut fad, sec și lipsit de context te lasă cu dorința de mai mult. Dacă nu cumva, poate, nu există nimic mai mult? Doar dacă nu cumva aceste câteva fragmente de material repetat din abundență reprezintă tot ceea ce este de știut? Noi nu credem acest lucru.
Acest al treilea articol din seria noastră de introducere (Vedeți partea 1 și partea 2) despre stocarea flash este propria noastră versiune a clasicului „NOR versus NAND”. O versiune care, sperăm, vă va ridica nivelul de înțelegere a acestor tehnologii de stocare larg răspândite și vă va ajuta să luați decizii de proiectare mai bune. Acestea fiind spuse, acest articol nu este un text didactic, de sine stătător, introductiv. Este mai degrabă o completare a introducerii obișnuite, acoperind aspecte ale tehnologiilor flash NOR și NAND care, în opinia noastră, sunt prea des ignorate. Dacă sunteți complet nou în ceea ce privește tehnologiile flash NOR și NAND, este posibil să doriți mai întâi să parcurgeți un material mai neutru, cum ar fi articolele din Wikipedia pe aceeași temă. Pe de altă parte, dacă aveți deja cunoștințe extinse despre aceste tehnologii, este posibil să găsiți în continuare informații utile (chiar, poate, surprinzătoare) în acest articol.
Dincolo de numere
Tabelul 1 este o comparație alăturată a tehnologiilor NOR și NAND flash, bazată pe diverși parametri de performanță. Deși aceste cifre pot varia semnificativ între dispozitivele reale, ele sunt plauzibile și pot servi drept referință valoroasă.
NOR | NAND | ||
---|---|---|---|
Write Throughput | 1 MB/s | 10 MB/s | |
Read Throughput | 40 MB/s | 30 MB/s | |
Erase Throughput | 0.1 MB/s | 300 MB/s | |
Erase-Write Throughput | 100 KB/s | 10 MB/s | |
Read Granularity | Byte | Page (4KiB tipic) | |
Granularitate de scriere | Byte (tipic) | Pagină (4 KiB tipic) | |
Granularitate de ștergere | Bloc (64 KiB tipic) | Bloc (256 KiB tipic) | |
Consum de energie la scriere | 1uJ/byte | 10nJ/byte | |
Consum de energie de citire | 1nJ/byte | 1nJ/byte | |
Consum de energie de ștergere | Consum de energie de ștergere | 600nJ/byte | 0.2nJ/byte |
Tabelul 1. Caracteristici plauzibile ale flash-urilor NOR și NAND
Dar, oricât de utile ar fi, cifrele fără o interpretare adecvată sunt lipsite de sens, dacă nu chiar înșelătoare. Numerele brute de performanță sunt bune pentru marketing, deoarece sunt ușor de enunțat și de înțeles (cel puțin la suprafață), dar nu conțin prea multe informații relevante din perspectiva proiectării aplicațiilor.
Lasă-ne să ilustrăm ce vrem să spunem printr-un exemplu concret: performanțele de scriere. Tabelul 1 sugerează că scrierea este mult mai rapidă pe NAND decât pe NOR. De fapt, aceasta este o afirmație speculativă care reapare mult prea des. Sigur, există un oarecare adevăr în ea. Dar este, de asemenea, complet reductivă și deschide calea unor decizii de proiectare greșite. Să aruncăm o privire mai atentă.
NOR flash permite accese de scriere la nivel de octet. NAND, pe de altă parte, are o granularitate de scriere mult mai grosieră. Pe flash NAND, datele pot fi scrise numai în pagini, de obicei 4 KiB la un moment dat pentru NAND SLC (8 KiB sau mai mult pentru NAND MLC). În cazul unui acces mic de scriere (să zicem 512 octeți), o pagină întreagă trebuie să fie încărcată în RAM, modificată și rescrisă. În cele din urmă, se scriu mai multe date decât cele modificate efectiv. Acest fenomen este denumit în mod obișnuit amplificare a scrierii. În exemplul nostru (foarte plauzibil), amplificarea la scriere este de 8 (4 KiB pagină/512 octeți de acces). Având în vedere un volum de lucru dominat de astfel de accese mici, debitul efectiv de scriere ar suferi o scădere de 8 ori mai mare. Acest lucru este destul de mult. Dar mai este și altceva.
Înainte ca datele să poată fi scrise, un sistem de fișiere (sau o bază de date) trebuie mai întâi să le găsească. Procesul de căutare poate fi mai mult sau mai puțin eficient în funcție de sistemul de fișiere și de cantitatea de memorie cache disponibilă, printre alți factori. Totuși, fiecare acces de scriere vine de obicei cu partea sa de accese de citire corespunzătoare. Pe NOR flash, accesele de citire sunt foarte rapide. Ele se caracterizează printr-o latență aproape de zero și un debit foarte ridicat. Cel mai important, accesele de citire sunt efectuate la nivel de octet. Acest lucru este deosebit de benefic pentru procesul de căutare a datelor, deoarece structurile interne ale sistemelor de fișiere tind să fie alcătuite din bucăți mici și dispersate de date.
Pe de altă parte, accesele de citire aleatoare pe NAND flash sunt semnificativ mai lente. Și, la fel ca și accesele la scriere, acestea sunt efectuate la nivel de pagină. Pentru accesările mici, acest lucru duce la o anumită cantitate de risipă, deoarece oricum trebuie încărcată o pagină întreagă. Această supraîncărcare suplimentară, denumită amplificare la citire, limitează performanțele de scriere pe NAND, lucru care nu este imediat evident atunci când se analizează tabelul 1.
Punând totul cap la cap, observăm că performanțele nete de scriere respective (adică luând în considerare amplificarea la citire/scriere și supraîncărcarea de căutare) ale tehnologiilor NOR și NAND nu sunt atât de mult diferite pe cât par să indice cifrele de performanță brute la prima vedere. Cel mai important, acest lucru arată clar că nu se poate face o evaluare completă a performanțelor fără a lua în considerare modelele de acces ale aplicației, inclusiv dimensiunea și distribuția accesului pe întregul set de date.
Grass is Green, Sky is Blue, NOR Is For Code, NAND Is For Data
Există o concepție greșită tenace pe care o auzim din când în când, în sensul că flash-ul NOR este pentru cod, în timp ce flash-ul NAND este pentru date. Este adevărat că NOR flash este mai frecvent utilizat decât NAND flash pentru stocarea codurilor. Există două motive principale pentru acest lucru. În primul rând, granularitatea accesului la nivel de octet permite executarea codului pe loc, ceea ce reprezintă un avantaj incontestabil pentru sistemele încorporate de mici dimensiuni. În al doilea rând, pentru firmware-uri de dimensiuni mici și medii (să zicem sub 64Mbits), NOR pur și simplu are mai mult sens din punct de vedere economic, deoarece cele mai mici dispozitive NAND disponibile sunt semnificativ mai scumpe.
Acesta fiind spus, mulți dintre clienții noștri folosesc NOR flash pentru stocarea datelor. Și pentru un motiv întemeiat. În cazul aplicațiilor cu citire intensivă, NOR oferă un debit semnificativ mai mare decât NAND. Chiar și în cazul aplicațiilor cu sarcini de lucru grele de scriere, NOR poate fi o alegere rezonabilă. Cu un acces la nivel de octet și un debit de citire ridicat, NOR este deosebit de potrivit pentru sarcinile de lucru dominate de accese aleatorii mici la scriere. Până la un punct în care performanțele nete de scriere se pot apropia (uneori chiar depăși) de cele obținute pe NAND flash. Acest lucru este deosebit de relevant în special pentru seturile de date mici, unde argumentul economic se adună pentru a înclina definitiv balanța în favoarea flash-ului NOR.
Vrei mai mult?
Ce am acoperit în acest articol este abia vârful icebergului. Sperăm totuși că am arătat cum diferă tehnologiile NOR și NAND flash din perspectiva proiectării aplicațiilor și cum pot fi interpretate cifrele brute de performanță pentru a lua decizii de proiectare mai bune.
Dacă doriți să citiți mai multe despre tehnologiile NOR și NAND flash, evaluarea performanțelor și alte subiecte avansate legate de stocare, Manualul utilizatorului TREEspan conține o multitudine de informații, atât generale, cât și specifice sistemului de fișiere TREEspan (TSFS).
.