NOR vs NAND: So You Think You Know the Music?

Quelli di voi che hanno passato anche la minima quantità di tempo a cercare approfondimenti sulle tecnologie di archiviazione embedded lo sanno: il sottospazio di Internet dedicato a questo particolare argomento è inondato di brevi articoli che confrontano le tecnologie flash NOR e NAND. Alcuni sono molto ben scritti e genuinamente illuminanti. Ma troppo spesso, il puro accumulo di contenuti insipidi, secchi e senza contesto vi lascia a desiderare di più. A meno che, forse, non ci sia niente di più? A meno che questi pochi pezzi di materiale abbondantemente ripetuto non siano tutto quello che c’è da sapere? Noi non la pensiamo così.

Questo terzo articolo della nostra serie di introduzione (Vedi parte 1 e parte 2) sull’archiviazione flash è la nostra versione personale del classico “NOR contro NAND”. Una versione che, si spera, eleverà la vostra comprensione di queste tecnologie di archiviazione diffuse e vi aiuterà a prendere decisioni di progettazione migliori. Detto questo, questo articolo non è un testo didattico, autoconclusivo e introduttivo. È più un complemento alla solita introduzione, che copre aspetti delle tecnologie NOR e NAND flash che, a nostro avviso, sono troppo spesso ignorati. Se siete completamente nuovi alle tecnologie NOR e NAND flash, potreste prima voler passare attraverso materiale più neutrale come gli articoli di Wikipedia sullo stesso argomento. D’altra parte, se avete già una vasta conoscenza di queste tecnologie, potreste comunque trovare informazioni utili (anche, forse, sorprendenti) in questo articolo.

Oltre i numeri

La tabella 1 è un confronto fianco a fianco delle tecnologie NOR e NAND flash basato su varie metriche di performance. Anche se questi numeri possono variare significativamente tra i dispositivi reali, sono plausibili e possono servire come un valido riferimento.

NOR NAND
Write Throughput 1 MB/s 10 MB/s
Lettura 40 MB/s 30 MB/s
Erase Throughput 0.1 MB/s 300 MB/s
Erase-Write Throughput 100 KB/s 10 MB/s
Granularità di lettura Byte Pagina (4KiB tipico)
Granularità di scrittura Byte (tipico) Pagina (4 KiB tipico)
Granularità di cancellazione Block (64 KiB tipico) Block (256 KiB tipico)
Consumo di energia di scrittura 1uJ/byte 10nJ/byte
Consumo di energia in lettura 1nJ/byte 1nJ/byte
Consumo di energia in cancellazione 600nJ/byte 0.2nJ/byte

Tabella 1. Caratteristiche plausibili di NOR e NAND flash

Ma per quanto utili siano, i numeri senza una corretta interpretazione sono privi di significato, se non addirittura fuorvianti. I numeri delle prestazioni grezze fanno un buon marketing perché sono facilmente dichiarati e compresi (almeno superficialmente), ma non portano molte informazioni rilevanti dal punto di vista della progettazione delle applicazioni.

Illustriamo ciò che intendiamo con un esempio concreto: le prestazioni di scrittura. La tabella 1 suggerisce che la scrittura è molto più veloce su NAND che su NOR. In effetti, questa è un’affermazione speciosa che riaffiora troppo spesso. Certo, c’è del vero in essa. Ma è anche assolutamente riduttiva e apre la strada a cattive decisioni di design. Diamo un’occhiata più da vicino.

Il flash NOR permette accessi in scrittura a livello di byte. La NAND, invece, ha una granularità di scrittura molto più grossolana. Su NAND flash, i dati possono essere scritti solo in pagine, tipicamente 4 KiB alla volta per NAND SLC (8 KiB o più per NAND MLC). Nel caso di un piccolo accesso di scrittura (diciamo 512 byte), un’intera pagina deve essere caricata in RAM, modificata e riscritta. Alla fine, vengono scritti più dati di quelli effettivamente modificati. Questo fenomeno è comunemente chiamato amplificazione della scrittura. Nel nostro esempio (molto plausibile), l’amplificazione di scrittura è 8 (4 KiB di pagina/512 byte di accesso). Dato un carico di lavoro dominato da accessi così piccoli, il throughput di scrittura effettivo subirebbe un calo di 8 volte. Questo è un bel po’. Ma c’è di più.

Prima che i dati possano essere scritti, un file system (o un database) deve prima trovarli. Il processo di ricerca può essere più o meno efficiente a seconda del file system e della quantità di cache disponibile, tra gli altri fattori. Tuttavia, ogni accesso in scrittura viene tipicamente con la sua parte di accessi in lettura corrispondenti. Su NOR flash, gli accessi in lettura sono molto veloci. Sono caratterizzati da una latenza prossima allo zero e da un throughput molto elevato. La cosa più importante è che gli accessi in lettura vengono eseguiti a livello di byte. Questo è particolarmente vantaggioso per il processo di ricerca dei dati perché le strutture interne dei file system tendono ad essere fatte di piccoli pezzi di dati sparsi.

D’altra parte, gli accessi in lettura casuale su NAND flash sono significativamente più lenti. E proprio come gli accessi in scrittura, vengono eseguiti a livello di pagina. Per i piccoli accessi, questo porta ad una certa quantità di spreco, poiché un’intera pagina deve essere caricata comunque. Questo overhead aggiuntivo, chiamato amplificazione della lettura, limita le prestazioni di scrittura su NAND, qualcosa che non è immediatamente ovvio quando si guarda la Tabella 1.

Mettendo tutto insieme, vediamo che le rispettive prestazioni nette di scrittura (cioè tenendo conto dell’amplificazione di lettura/scrittura e dell’overhead di ricerca) delle tecnologie NOR e NAND non sono così diverse come i numeri delle prestazioni grezze sembrano indicare. La cosa più importante è che rende chiaro che una valutazione completa delle prestazioni non può essere fatta senza prendere in considerazione i modelli di accesso delle applicazioni, comprese le dimensioni e la distribuzione degli accessi nell’intero set di dati.

L’erba è verde, il cielo è blu, NOR è per il codice, NAND è per i dati

C’è una tenace idea sbagliata che si sente di tanto in tanto e che la NOR flash è per il codice mentre la NAND flash è per i dati. È vero che la NOR flash è più comunemente usata della NAND flash per la memorizzazione del codice. Ci sono due ragioni principali per questo. In primo luogo, la granularità di accesso a livello di byte permette l’esecuzione del codice sul posto, che è un vantaggio indiscutibile per i piccoli sistemi embedded. In secondo luogo, per firmware di piccole e medie dimensioni (diciamo sotto i 64Mbits), NOR ha semplicemente più senso dal punto di vista economico, dato che i più piccoli dispositivi NAND disponibili sono significativamente più costosi.

Detto questo, molti dei nostri clienti usano NOR flash per lo stoccaggio dei dati. E per una buona ragione. Nel caso di applicazioni ad alta intensità di lettura, NOR offre un throughput significativamente più elevato rispetto a NAND. Anche per applicazioni con pesanti carichi di lavoro in scrittura, NOR può essere una scelta ragionevole. Grazie all’accesso a livello di byte e all’alto throughput di lettura, NOR è particolarmente adatto a carichi di lavoro dominati da piccoli accessi casuali in scrittura. Fino ad un punto in cui le prestazioni nette di scrittura possono avvicinarsi (a volte anche superare) quelle ottenute su NAND flash. Questo è particolarmente rilevante per i piccoli set di dati, dove l’argomento economico si somma per far pendere definitivamente la bilancia a favore della NOR flash.

Vuoi di più?

Quello che abbiamo coperto in questo articolo è appena la punta dell’iceberg. Speriamo, però, di aver mostrato come le tecnologie NOR e NAND flash differiscano dal punto di vista della progettazione delle applicazioni e come i numeri grezzi delle prestazioni possano essere interpretati per prendere decisioni di progettazione migliori.

Se volete saperne di più sulle tecnologie NOR e NAND flash, sulla valutazione delle prestazioni e su altri argomenti avanzati relativi allo storage, il manuale utente di TREEspan contiene una grande quantità di informazioni, sia generali che specifiche per il TREEspan File System (TSFS).

Se volete leggere di più

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.