De LBA scrambler komt niet in je OS, maar in de firmware van je SSD.
Dan heb ik het verkeerd begrepen. Echter, ik begrijp het nog steeds niet helemaal.
Want... waarom dan een losse LBA scrambler? De FTL is toch al het onderdeel dat logische LBA omzet naar fysieke NAND? Dan kun je daar toch de algoritmen veranderen om dit efficiënter te doen en minder fragmentie te creëren? Tenzij het inderdaad niets meer dan een proof-of-concept is zoals diederikhu hierboven stelt.
Nu al wordt de plek waar de host naar wilt schrijven, niet meer gevolgd. De SSD kan er voor kiezen om naar fysieke plek X te schrijven en bij eenzelfde write request iets later op precies dezelfde plek (LBA) kan de SSD besluiten om deze write elders te schrijven. Dat is de hele functie van de FTL. De SSD slaat niet meer op wat de host opdraagt, maar past zelf intelligentie toe. Dat heeft een historie; een overzicht voor de liefhebbers:
In het stenen tijdperk
Vroeger werd de leeskop van de hardeschijf direct aangestuurd. Sommigen kennen nog wel het C/S/H (Cylinder, Sector, Head) wat je in het BIOS moest instellen voor schijven onder de 4GB. Dit stamt af van het tijdperk waarbij de software direct de hardware aanstuurde. De software moest hierdoor weten hoe de hardware werkte.
Omdat softwarefabrikanten en hardwarefabrikanten niet dezelfde zijn, zie je dat de twee werelden op zichzelf zijn gaan groeien. Hardwarefabrikanten voeren tweaks uit om tekortkomingen in software te adresseren. Dat wil je eigenlijk voorkomen, een hardwareapparaat dient een zuivere functie te hebben en geen software-specifieke tweaks.
LBA: virtuele opslag
De volgende stap was om storage te
virtualiseren. Om niet langer de software op te dragen met het probleem hoe data moet worden opgeslagen op de hardware, maar dat de hardware dit zelf afhandelt. Dit is
LBA - Logical Block Addressing. Dit betekent dat een opslagapparaat virtueel gezien wordt als een reeks van sectoren die geteld worden vanaf LBA0 (de eerste sector) tot LBA<groot getal> (de laatste sector). Lineair dus. Dit betekent dat de software gewoon naar LBA345 kan schrijven, en het opslagapparaat zelf weet wat het moet doen. Het krijgt dus extra intelligentie en er bestaat een formele gestandaardiseerde relatie tussen software en opslagapparaat.
Bij hardeschijven zien we dat LBA direct gekoppeld wordt aan een fysieke locatie. De software weet dus niet exact waar op de platter de data wordt geschreven, enkel de LBA locatie. Maar elke LBA betekent wel precies dezelfde plek.
Extra complexiteit: LBA wordt gevirtualiseerd
En juist dat is weer veranderd sinds de komst van 2e generatie SSDs, met
Write Remapping (sinds Intel X25-M). De reden hiervoor is dat Windows en andere operating systems optimalisaties hebben ingebouwd voor hardeschijven en dat random writes op een SSD naar een bestaande locatie heel traag zijn. Om de tekortkomingen van NAND flashgeheugen te verzachten, werd extra complexiteit gecreëerd met een
Flash Translation Layer (FTL) die voortaan de locatie van de data gaat onthouden. LBA345 betekent niet meer automatisch, NAND plek X. Met de FTL betekent LBA345 alleen iets als deze in de
mapping tables voorkomt. Zo niet, dan probeert het geeneens van de NAND te lezen en stuurt het gewoon nullen terug. De SSD onthoudt dus alleen wat de host
denkt opgeslagen te hebben, en via TRIM kan de host ook aangeven dat bepaalde opgeslagen data vergeten mag worden;
dereferenced met een deftig woord.
De toekomst.... gone awry
De verkeerde weg is om steeds meer complexiteit in de SSD te stoppen. Sandforce begon met compressie (dat kan nog) maar ook met de-duplicatie. Dat laatste betekent dat er naast de mapping tables voor de FTL, nog een extra tabel moet worden onthouden: de deduplication table. Als één van beide corruptie zou vertonen, kun je niet meer bij je data. Ook kun je veel firmware bugs en issues verwachten door al deze complexiteit. Dat hebben we natuurlijk gezien bij Sandforce; extreem veel uitval. Hedendaags valt het mee omdat de bugs er onderhand wel uit zijn. Maar dit is dus de verkeerde weg....
En Samsung die met zijn RAPID-software een superonveilige RAM write-back creëert. En de klanten vinden het allemaal prachtig. Maar dit is natuurlijk gekkigheid. Zo kan ik ook tegen 2GB/s schrijven naar een floppydisk, zij het heel kort.
Bovendien, als er al dit sooft functionaliteit zou bestaan, zou dit in het operating system moeten worden gebouwd. Zo kun je onder BSD met het geavanceerde ZFS filesystem ook writes gaan bufferen wat in de vele gigabytes kan lopen. Maar dan doen je het op de veilige en juiste manier.
De toekomst.... done right
De juiste weg is om complexiteit te verbannen, niet om zaken juist nog complexer te maken. Zo heeft het mijn voorkeur om 'pure' NAND aan te sturen met software. Mapping tables en al die meuk wordt dan ook softwarematig gedaan. Zowel in Linux als in *BSD zijn hier drivers voor. Het voordeel is dat je pure NAND chipjes kunt aansturen, en zo de hele SSD controller onderuit haalt. Het nadeel, is dat je niet zomaar cross-OS compatibility hebt; het andere OS ondersteunt misschien helemaal geen puur NAND (Windows) of stuurt deze NAND op een heel andere manier aan die niet compatible is (Linux/BSD).
De juiste weg is ook om een oplossing te verzinnen voor de veroorzaker van complexiteit: de beperking van NAND dat het alleen kan worden overschreven als de hele erase block gewist en opnieuw geprogrammeerd wordt. Dat is traag en dat is de reden dat complexiteit is toegevoegd om SSDs toch snel te maken. Als we afstappen van NAND en naar iets als Phase-Change Memory (PCM) gaan, dan heeft dat inherente voordelen. De FTL kan dan worden afgeschaft en opslagapparaten gaan dan vrijwel nooit meer stuk, net als DRAM geheugen en processoren.
Ook kun je tmpfs gebruiken. Dit is een automatische RAMdisk die van grootte verandert afhankelijk van hoeveel RAM er op dat moment vrij is. Onder Windows bestaat deze functionaliteit niet. Je hebt alleen third party RAM-disks die virtuele LBA storage aanbieden. Dat is niet erg sexy, en ook flink trager dan een
native RAM filesystem. Tmpfs is dus een filesystem voor RAM-storage. Dat zou bijvoorbeeld iets zijn voor WinRAR, Photoshop (scratch disk) en meer van dit soort apps die tijdelijk data moeten schrijven. Waarom zou je dat naar je disk doen als het ook naar RAM kan? Je dondert de gegevens toch weer weg zodra je klaar bent.
Kortom, ik zie liever innovaties op softwareniveau in het Operating System, dan dat hardwarefabrikanten opslag steeds maar complexer maken en met alle gevolgen voor de betrouwbaarheid. Dat hebben we bij SSDs gezien; terwijl door het gebrek aan mechanische onderdelen SSDs juist alle potentie hebben om flink betrouwbaarder te zijn dan mechanische hardeschijven.
[Reactie gewijzigd door Verwijderd op 22 juli 2024 14:50]