Diegenen onder u die ook maar de geringste hoeveelheid tijd hebben besteed aan het zoeken naar inzichten in embedded opslagtechnologieën, weten dit: de subruimte van het internet die aan dit specifieke onderwerp is gewijd, wordt overspoeld met korte artikelen waarin NOR- en NAND-flashtechnologieën worden vergeleken. Sommige zijn zeer goed geschreven en werkelijk verhelderend. Maar al te vaak laat de opeenstapeling van nietszeggende, droge, contextloze inhoud je achter met de wens naar meer. Tenzij, misschien, er niets meer is? Tenzij deze paar stukjes van overvloedig herhaald materiaal alles is wat er te weten valt? Wij denken van niet.
Dit derde artikel van onze introductie serie (Zie deel 1 en deel 2) over flash opslag is onze eigen versie van de “NOR versus NAND” klassieker. Een versie die, hopelijk, uw begrip van deze wijdverspreide opslagtechnologieën zal verhogen en u zal helpen betere ontwerpbeslissingen te nemen. Dit gezegd zijnde, dit artikel is geen didactische, op zichzelf staande, inleidende tekst. Het is meer een aanvulling op de gebruikelijke inleiding, waarbij aspecten van NOR en NAND flash technologieën worden behandeld die, naar onze mening, te vaak worden genegeerd. Als NOR- en NAND-flashtechnologieën helemaal nieuw voor u zijn, kunt u misschien beter eerst wat neutraler materiaal doornemen, zoals Wikipedia’s artikelen over hetzelfde onderwerp. Aan de andere kant, als u al uitgebreide kennis van deze technologieën heeft, kunt u nog steeds nuttige (zelfs, misschien, verrassende) stukjes informatie in dit artikel vinden.
Beyond Numbers
Tabel 1 is een vergelijking naast elkaar van de NOR en NAND flash technologieën op basis van verschillende prestatiecijfers. Hoewel deze cijfers aanzienlijk kunnen verschillen tussen de werkelijke apparaten, zijn ze aannemelijk en kunnen ze dienen als een waardevolle referentie.
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 typical) |
Write Granularity | Byte (typisch) | Page (4 KiB typisch) |
Erase Granularity | Block (64 KiB typisch) | Blok (256 KiB typisch) |
Energieverbruik bij schrijven | 1uJ/byte | 10nJ/byte |
Energieverbruik lezen | 1nJ/byte | 1nJ/byte |
Erase-energieverbruik | 600nJ/byte | 0.2nJ/byte |
Tabel 1. Aannemelijke NOR en NAND flash karakteristieken
Maar hoe nuttig ze ook zijn, getallen zonder een juiste interpretatie zijn betekenisloos, zo niet ronduit misleidend. Ruwe prestatiecijfers zijn goed voor de marketing omdat ze gemakkelijk kunnen worden genoemd en begrepen (althans oppervlakkig), maar ze bevatten niet veel relevante informatie vanuit het oogpunt van een toepassingsontwerp.
Laten we met een concreet voorbeeld illustreren wat we bedoelen: schrijfprestaties. Tabel 1 suggereert dat schrijven op NAND veel sneller is dan op NOR. In feite is dit een speculatieve bewering die maar al te vaak de kop opsteekt. Zeker, er zit een kern van waarheid in. Maar het is ook een volstrekt reductieve bewering die de weg vrijmaakt voor slechte ontwerpbeslissingen. Laten we eens wat beter kijken.
NOR flash staat schrijftoegang op byte-niveau toe. NAND, daarentegen, heeft een veel grovere schrijf granulariteit. Op NAND flash kunnen gegevens alleen in pagina’s worden geschreven, meestal 4 KiB per keer voor NAND SLC (8 KiB of meer voor NAND MLC). In het geval van een kleine schrijftoegang (zeg 512 bytes) moet een hele pagina in RAM worden geladen, gewijzigd en teruggeschreven. Uiteindelijk worden er meer gegevens geschreven dan er daadwerkelijk worden gewijzigd. Dit verschijnsel wordt doorgaans schrijfversterking genoemd. In ons (zeer aannemelijke) voorbeeld is de schrijfversterking 8 (4 KiB pagina/512 byte toegang). Bij een werkbelasting die door zulke kleine toegangen wordt gedomineerd, zou de effectieve schrijfdoorvoer met een factor 8 afnemen. Dat is heel wat. Maar er is meer.
Voordat gegevens kunnen worden geschreven, moet een bestandssysteem (of database) ze eerst vinden. Het opzoekproces kan meer of minder efficiënt zijn, afhankelijk van het bestandssysteem en de hoeveelheid beschikbare cache, naast andere factoren. Toch gaat elke schrijftoegang meestal gepaard met zijn deel aan overeenkomstige leestoegang. Op NOR flash zijn leestoegangsbewerkingen zeer snel. Ze worden gekenmerkt door een latentietijd van bijna nul en een zeer hoge verwerkingscapaciteit. Het belangrijkste is dat leestoegang wordt uitgevoerd op byte-niveau. Dit is met name gunstig voor het opzoekproces van gegevens, omdat de interne structuren van bestandssystemen meestal bestaan uit kleine en verspreide stukjes gegevens.
Aan de andere kant zijn willekeurige leestoegangsvormen op NAND-flash aanzienlijk langzamer. En net als schrijftoegang worden ze uitgevoerd op paginaniveau. Voor kleine toegangspunten leidt dit tot een zekere verspilling, omdat toch een hele pagina moet worden geladen. Deze extra overhead, leesversterking genoemd, beperkt de schrijfprestaties op NAND, iets wat niet meteen opvalt als we naar tabel 1 kijken.
Als we alles bij elkaar nemen, zien we dat de respectieve netto schrijfprestaties (d.w.z. rekening houdend met lees-/schrijfversterking en lookup-overhead) van NOR- en NAND-technologieën niet zo sterk verschillen als de ruwe prestatiecijfers op het eerste gezicht lijken aan te geven. Het belangrijkste is dat het duidelijk maakt dat een grondige beoordeling van de prestaties niet mogelijk is zonder rekening te houden met de toegangspatronen van de toepassing, inclusief de grootte en de verdeling van de toegang over de hele dataset.
Gras is groen, lucht is blauw, NOR is voor code, NAND is voor data
Er bestaat een hardnekkige misvatting die we af en toe horen, namelijk dat NOR flash voor code is en NAND flash voor data. Het is waar dat NOR flash vaker wordt gebruikt dan NAND flash voor de opslag van code. Daar zijn twee hoofdredenen voor. Ten eerste maakt de granulariteit van de toegang op byte-niveau het mogelijk om code ter plaatse uit te voeren, wat een onbetwistbaar voordeel is voor kleine ingebedde systemen. Ten tweede is NOR voor kleine tot middelgrote firmware (bijvoorbeeld minder dan 64 Mbits) economisch gezien gewoon zinvoller, omdat de kleinste beschikbare NAND-apparaten aanzienlijk duurder zijn.
Dat gezegd hebbende, gebruiken veel van onze klanten NOR flash voor gegevensopslag. En dat heeft een goede reden. In het geval van leesintensieve toepassingen biedt NOR een aanzienlijk hogere doorvoer dan NAND. Zelfs voor toepassingen met zware schrijfbelastingen kan NOR een redelijke keuze zijn. Met toegang op byte-niveau en een hoge leesdoorvoer is NOR bijzonder geschikt voor werklasten die worden gedomineerd door kleine, willekeurige schrijftoegang. Tot op een punt waar de netto schrijfprestaties die van NAND-flash kunnen benaderen (soms zelfs overtreffen). Dit is vooral relevant voor kleine datasets, waar het economische argument optelt om de balans definitief te doen doorslaan in het voordeel van NOR flash.
Wil je meer?
Wat we in dit artikel hebben behandeld is nauwelijks het topje van de ijsberg. Hopelijk hebben we laten zien hoe NOR- en NAND-flashtechnologieën verschillen vanuit een toepassingsontwerpperspectief en hoe ruwe prestatiecijfers kunnen worden geïnterpreteerd om betere ontwerpbeslissingen te nemen.
Als u meer wilt lezen over NOR- en NAND-flashtechnologieën, prestatiebeoordeling en andere geavanceerde opslaggerelateerde onderwerpen, bevat de TREEspan gebruikershandleiding een schat aan informatie, zowel algemeen als specifiek voor het TREEspan File System (TSFS).