Ik ben nog geen controller tegengekomen die wear-levelling toepast op niet-vrije sectoren.
Het is een kleine moeite om blocks die nog redelijk 'vers' zijn tov. andere blocks even te swappen met wat vermoeidere blocks. Dit hoef je niet agressief te doen en is een relatief kleine moeite firmware-wise. Aangezien alle controller firmware proprietary is kan ik dit niet verifieren natuurlijk, maar het lijkt me sterk als dit niet geimplementeerd is. Zou dit niet zo zijn, dan zouden gebruikers die hun schijf altijd 90% vol hebben met statische data en de laaatste 10% gebruiken als scratchpad in no-time een dode schijf hebben.
En hoe je die write-amplification berekent is mij een beetje een raadsel.
De write-amplification is (data die je naar de flash schrijft / data die de host schrijft) en dat heeft dus niets te maken met de verhouding van 20'000/18250, omdat die waarde niets zegt over het soort geheugen wat je gebruikt.
Heel simpel: Hitachi garandeert blijkbaar dat je voor elk block waar 20000 writes voor staan, je daadwerkelijk 18250 writes kunt doen. dat betekent dat de overgebleven 1750 writes verloren gaan aan write amplification. De SSD heeft dus een gemiddelde write amplification/overhead over zijn levensduur van 1.1x.
Als ik een enkele bit verander die weggeschreven moet worden kan die write-amplification een factor 512x1024x8 zijn bij sectoren van 512 kB groot.
Je schrijft bijna per 4KB (default cluster size in gros operating systems), en een flash page is over het algemeen ook 4KB. Je kunt prima per page schrijven, alleen het wissen is 'duur'. wordt case scenario is dan ook gewoon dat je per sector write van het OS een read-erase-write moet doen. That's it. De firmware is dan weer zo slim om meerdere writes op te sparen en deze samen in een eerder ge-erased block te schrijven, de LBA's te remappen en klaar. Het oude block wordt ondertussen als vrij gemarkeerd en gewist, klaar voor de volgende cached write.
Die write-amplification hangt ook nog eens heel erg veel af van het gebruikte OS (caching), het filesysteem (blocksize) en de toepassing (random access zoals voor databases of sequentieel gebruik).
Bij het schrijven van 1 grote file zal de write-amplification aardig de 1 benaderen, maar voor andere toepassingen zal die factor een stuk groter zijn.
Het is niet zo interessant om dit op OS-niveau te bekijken. de SSD controller werkt tussen fysieke storage en SATA protocol, en meer gaat hij er niet van weten. Dat een SSD bij flinke random writes wel eens sneller kan slijten dat zal altijd zo blijven, maar door genoeg overcapaciteit en/of agressieve block recombining (garbage collection)
garandeert Hitachi dus een write amplification factor van 1.1, resulterend in een 7.3PB aan writes over zijn levensduur. No matter the load.
Nog een andere eigenschap van MLC-flash: [...]
We zitten, net als bij HDD's overigens, al lang op het punt dat de technologie zelf zo onbetrouwbaar is dat er flinke bakken ECC tegenaan gegooid moet worden om uberhaupt de data nog correct terug te lezen.
Wear levelling op bitniveau zou trouwens achterlijk duur zijn, omdat je dan elke te schrijven sector moet gaan vergelijken met het slijtpatroon van elke achtse van alle pages op de SSD. Dat is gekkenwerk.
Dan liever nog deduplication op sectorniveau implementeren trouwens.
Kortom, het noemen van de hoeveelheid data die je zou kunnen schrijven is echt een onzin-parameter die totaal niet praktisch is.
Nogmaals, Hitachi garandeert dmv overcapaciteit, wear levelling, write combining, caching etc en menig vernuftige algoritmes gewoon dat je die hoeveelheid data echt kunt schrijven. Het zijn enterprise-schijven, dus ze kunnen het ook gewoon niet maken om niet uit te gaan van worst-case scenario.
[Reactie gewijzigd door P5ycho op 23 juli 2024 23:07]