Door Willem de Moor

Redacteur

Moderne ssd-controllers

Wat gebeurt er onder de motorkap?

11-12-2021 • 06:00

17

Singlepage-opmaak

Nand-snelheid

Een aspect waar we het nog niet over gehad hebben, is de snelheid van de nand-interface. Elke nand-chip heeft een maximale snelheid waarmee data verwerkt kan worden, en die ligt momenteel op ongeveer 1600MT/s. Nand wordt onder meer via de Onfi-specificatie geklassificeerd, maar Samsung en Kioxia (het voormalig Toshiba, dat samen met WD/Sandisk nand produceert) hanteren Toggle-nand. De gangbaarste standaarden voor moderne ssd's zijn Onfi 4.0 met maximaal 800MT/s, Onfi 4.1 tot 1200MT/s, Onfi 4.2 tot 1600MT/s en voor de toekomst Onfi 5.0 (sinds mei 2021) voor snelheden tot 2400MT/s. Onder de Onfi-specificatie kunnen overigens weer verschillende varianten vallen: NV-DDR2, NV-DDR3 en NV-DDR4. NV-DDR3 is de gangbaarste; NV-DDR2 is zo oud dat je het niet meer tegenkomt, en NV-DDR4 is vooralsnog voor zuinige toepassingen bedoeld. Samsungs en Toshiba's Toggle-nand-varianten halen inmiddels 2000MT/s. Een controller voor derden ondersteunt vaak een sloot aan standaarden, niet alleen Onfi- en Toggle-nand, maar ook de verschillende smaken van slc mlc, tlc en qlc, al zijn die eerste twee tegenwoordig zeldzaam.

Huidige nand-snelheden

De snelheden die een controller ondersteunt, zijn natuurlijk slechts één deel van het verhaal. Ook het nand moet de hoge snelheden ondersteunen die een controller mogelijk maakt. Het gangbare 3d-nand wordt sneller naarmate meer laagjes gestapeld worden.

De huidige generatie tlc-nand die je in drives terugvindt, haalt 1200MT/s of, in het geval van Microns 176-laags-3d-nand en SK Hynix' zevendegeneratie-nand, tot 1600MT/s. De joint venture tussen Kioxia en WD gaat met BiCS6 naar 2000MT/s, net als Samsung met V7 van zijn V-nand.

Fabrikant Snelheid Lagen
Kioxia (+WD) BiCS6 2000MT/s 162
Micron Gen5 1600MT/s 176
Samsung V7 2000MT/s 176
SK Hynix V7 1600MT/s 176

Als we dat voor het gemak vertalen naar het ruwweg equivalente MB/s, dan kan een enkele nand-chip dus 1600MB/s verwerken. Dat is bij lange na niet snel genoeg voor NVMe-drives met PCIe Gen4 x4-interfaces; die halen immers snelheden tot 7000MB/s. De oplossing is parallelisme; data wordt gelijktijdig naar verschillende nand-devices geschreven, waardoor hogere snelheden mogelijk zijn. Een vierkanaalscontroller (met vier CE's) kan met het snelste nand 4x 1600MT/s, of 6400MT/s, omgerekend slechts 1600MB/s halen. Daar kan eventueel nog wat compressie van data helpen, maar een vierkanaalscontroller is in de regel dus niet snel genoeg voor high-end Gen4 x4-ssd's. Een achtkanaalscontroller (met acht CE's) is dat wel. Die kan immers theoretisch 12.800MT/s per kanaal halen, of 9600MT/s als iets conservatiever nand van 1200MT/s gebruikt wordt. Dat is goed voor 12.800MB/s.

Het nand in de ssd's wordt in de regel als tlc-nand gebruikt, maar vrijwel alle (high-end) controllers kunnen ook een deel van de capaciteit gebruiken als slc-nand. Omdat slc slechts twee spanningsniveaus gebruikt, kan een page veel sneller worden gelezen. Dat komt doordat het veel minder nauw let wat de exacte spanning is die van een streng wordt uitgelezen, terwijl dat met tlc-nand veel nauwkeuriger moet gebeuren. Tlc-nand gebruikt immers acht spanningsniveaus en met een werkspanning van 1,2V of 0,9V moet dat in kleine spanningen opgedeeld worden. Het correct meten van de spanning, met verschillen van slechts een paar tiende volt, duurt dan langer. Ook het schrijven naar slc-nand is sneller, aangezien ook hier veel minder precies een spanning in de cel gepompt moet worden. Met qlc-nand zijn de ladingsverschillen nog kleiner en zal er dus nog preciezer met spanningsniveaus gewerkt moeten worden. De vereiste hogere precisie is dus de belangrijkste reden dat qlc langzamer is dan tlc, terwijl die hogere precisie ook sneller niet meer behaald kan worden door versleten nand. Daarom ligt ook de levensduur van qlc-geheugen lager.

De hoeveelheid als slc gebruikt nand is bij de meeste fabrikanten niet alleen afhankelijk van de capaciteit van de ssd, maar kan ook nog dynamisch worden toegewezen om rekening te houden met lege ruimte op de drive. Aangezien voor elke gigabyte slc-cache drie gigabyte tlc-opslagcapaciteit wordt opgeofferd, kun je op een steeds vollere drive steeds minder cache inzetten.

Een volle drive heeft ook minder ruimte om met pages en blocks te schuiven voor garbage collection en andere huishoudelijke taken. De controller moet dan immers steeds harder zoeken naar lege ruimte en de datatabel steeds vaker raadplegen om plaats te vinden. Dat is nog een reden waarom vollere drives minder goed presteren dan lege drives.

Hoe beter een drive met variabelen als lege ruimte en garbage collection kan omgaan, en hoe beter het schrijven over de cellen wordt verdeeld, hoe langer een drive het kan uithouden. Slc-nand is daar het best in, omdat er minder lang geprogrammeerd hoeft te worden, terwijl tlc en qlc misschien harder slijten door hun langere programmeertijden. Goede wear levelling en voldoende overprovisioning, meer nand-capaciteit inbouwen dan voor de gebruiker zichtbaar is, kan de levensduur optimaliseren.

Fabrikanten geven dan ook niet alleen drie of vijf jaar garantie op hun ssd's, maar ook een total bytes written-indicatie. Dat is de verwachte hoeveelheid data die je naar de drive kunt schrijven, uitgedrukt in terabytes. Je kunt tbw ook omrekenen naar drive writes per day, door de tbw-waarde te delen door het product van de garantieperiode in dagen en de capaciteit. Uiteraard kun je zo ook uitrekenen hoeveel data je dagelijks naar je drive kunt schrijven voordat je redelijkerwijs onherstelbare fouten kunt verwachten. Meestal is dat in de ordegrootte van vele gigabytes per dag bij normaal gebruik. Een rekenvoorbeeld: je ssd heeft een capaciteit van 1TB en een levensduur van 300tbw. Bij een garantie van vijf jaar levert dat 300tbw gedeeld door 1825 dagen is 0,164 drive-writes per dag op. Je zou dan dus elke dag 164GB naar de ssd kunnen schrijven gedurende zijn levensduur.