Opravdu pomalý SSD disk

jjrsk

  • *****
  • 707
    • Zobrazit profil
Re:Opravdu pomalý SSD disk
« Odpověď #30 kdy: 11. 03. 2025, 08:47:29 »
...
Po tom kopírování zpátky to už bude kontinuálně zapsané, ideálně rozložené na všechny čipy a odstraní se všechny "díry" a diskontinuity po předchozím GC, když se na původním filesystému modifikovaly soubory.....
ehm ...

SSD ti nikdy nikam nic kontinualne nezapise, protoze jako prvni prepise bunku ktera ma nejnizsi citac. A jakym zpusobem jsou ty bunky rozhazeny ty nemas naprosto zadnou moznost zjistit.

Pokud je SSD vicemene plne, tak ma jen dve moznosti. Neustale osoupavat ty zbyvajici bunky. Nebo setrvale presunovat data. Coz pochopitelne vede k tragickym vykonum.

Specielne, kdyz bezna velikost ty bunky je MB a vic ... zatimco vetsina fs se drzi 512B per sektor.






CPU

  • *****
  • 1 040
    • Zobrazit profil
    • E-mail
Re:Opravdu pomalý SSD disk
« Odpověď #31 kdy: 11. 03. 2025, 11:28:33 »
Specielne, kdyz bezna velikost ty bunky je MB a vic ... zatimco vetsina fs se drzi 512B per sektor.

Máš pravdu, ale seběhnou se na tebe křiklouni...

Velikost nejmenší zapisovací buňky je 4-16kB = SSD umí zapsat nejméně 4-16kB a to i při změně 512B sektoru.
To je nejmenší blok, který řadič umí zapsat.
Ale - ošoupávací mapa - tedy to, v jakém je ten blok stavu, je skutečně často poměrně velký.

Příklad:
Mám 2TB SSD = 2 147 483 648 B
                   To je: 536 870 bloků o velikosti 4 kB!

Pokud bych pro každý takový blok uchovával nezbytné informace jako:
- ECC
- stav opotřebení
- poslední změna
- kam byl přemapován (SSD má náhradní buňky)
...

No tak bych spotřeboval poměrně významnou část kapacity jen na ukládání informací o těchto blocích. A jak by se to vlezlo do paměti toho řadiče???

Dovedete si představit, že před zápisem každého 4kB bloku by se muselo uskutečnit čtení z SSD, která buňka je nejméně ošoupaná a po zapsání toho 4kB bloku tyto hodnoty změnit?

Bloky pro zhodnocení stavu opotřebení tak jsou opravdu poměrně velké.
A další důležitá věc, funguje to na principu zásobníku a je za tím logika, ne že ne.
« Poslední změna: 11. 03. 2025, 11:30:13 od CPU »

RDa

  • *****
  • 2 899
    • Zobrazit profil
    • E-mail
Re:Opravdu pomalý SSD disk
« Odpověď #32 kdy: 11. 03. 2025, 13:50:06 »
Specielne, kdyz bezna velikost ty bunky je MB a vic ... zatimco vetsina fs se drzi 512B per sektor.

Máš pravdu, ale seběhnou se na tebe křiklouni...

Velikost nejmenší zapisovací buňky je 4-16kB = SSD umí zapsat nejméně 4-16kB a to i při změně 512B sektoru.
To je nejmenší blok, který řadič umí zapsat.
Ale - ošoupávací mapa - tedy to, v jakém je ten blok stavu, je skutečně často poměrně velký.

Příklad:
Mám 2TB SSD = 2 147 483 648 B
                   To je: 536 870 bloků o velikosti 4 kB!

Takhle se to nedela.. typicky se hraje na Erase units (EU), coz je 512K - 1MiB - 2MiB, ktere jsou prvni urovni.
V kazdem EU jsou pak zapisovany data stylem COW sekvencne. Takze staci sledovat pocet resetovani tech EU.

Chce to nastudovat trocha vic o FTL (existuje na to spousta paperu), nez brat za fakt, ze to je udelano, jak vas napadne.

Re:Opravdu pomalý SSD disk
« Odpověď #33 kdy: 12. 03. 2025, 01:48:23 »
Ale ad ty nuly.
Máte i nemáte pravdu.
Také jsem si *myslel*, že se nuly při formátování nezapisují (klasický pomalý formát), resp. že se nezapisují na SSD, protože je vše komprimované a optimalizované..[/b]

Nejspíš jsme se nepochopili úplně. Já to komentoval z hlediska toho, že když se posílají z hosta nuly, tak to neznamená, že na SSD skončí na úrovni těch NANDů také nuly. Ano, sice přepíšu většinu bloků jinými daty, udělám hromadu zápisů z hosta, naplním celou FTL mapu.
Nešlo ani o to, že bych v tu chvíli řešil případný dedup, ale zmíněný scrambling, který je používaný na většině SSD (možná mimo prvních full SLC). Je to forma pre-processingu dat, aby se minimalizovaly chyby spojené s opakujícími se krátkými vzory (např. samé nuly) při zápisu a čtení z těch NANDů.
Takže data se zapíšou do SLC cache a před zápisem do těch finálních vícestavových buňek se zakódují. Buď nějakým speciálním klíčem, co se uloží bokem, nebo použitím nějakého přirozeně se měnícího klíče z existujících údajů. Např. složený např. z logické adresy, fyzické adresy a počtu zápisů do daného bloku. Tím se pak XORují všechna data.
Při čtení se zas naopak relativně jednoduše dekódují.

Jinak ten SECURE ERASE příkaz pokud je někde dokumentovaný od výrobce, tak má často jen napsáno, že krom toho smazání uvede bloky do "továrního" stavu. Což může to znamenat oboje - jak tohle "zašumění", tak i opravdové faktické vynulování (nebo vyjedničkování :) ) bloků.
Jak jsem psal, tak bude hlavně záležet jak budou v konkrétním kontroléru a firmware implementované tyhle dva příkazy. Např. hdparm -I vypíše i odhadovanou dobu ERASE i ERASE ENHANCED celého SSD. U některých modelů je to stejná doba, např. 2 min, ale viděl jsem i Samsungy, co třeba hlásily 2 min pro ERASE a 40 min pak pro ERASE ENHANCED.

Každopádně je to, jak zmiňujete. Veřejně přístupné informace o konkrétních modelech jsou od výrobců vcelku mizivé, a taky mě kolikrát zajímalo, co je tam reálně zapsáno. Vcelku logicky z hosta se nic zjistit nedá, protože i po běžném trimování prostě při čtení z LBA, která nemá platný záznam v FTL mapě, ten firmware vždycky vrací nuly.
Takže jediná šance je to nejspíš relativně komplikovaně přečíst na HW úrovni. I když nejspíš budou existovat i speciální firemní nástroje, nebo firmware.

Re:Opravdu pomalý SSD disk
« Odpověď #34 kdy: 12. 03. 2025, 01:55:23 »
SSD ti nikdy nikam nic kontinualne nezapise, protoze jako prvni prepise bunku ktera ma nejnizsi citac. A jakym zpusobem jsou ty bunky rozhazeny ty nemas naprosto zadnou moznost zjistit.

Pokud je SSD vicemene plne, tak ma jen dve moznosti. Neustale osoupavat ty zbyvajici bunky. Nebo setrvale presunovat data. Coz pochopitelne vede k tragickym vykonum.

Specielne, kdyz bezna velikost ty bunky je MB a vic ... zatimco vetsina fs se drzi 512B per sektor.

To je jasné, že ty konkrétní fyzické adresy samozřejmě přímo neovlivníš. Já jsem spíš myslel víceméně kontinuální zápis z hlediska LBA a pořadí celých souborů při kopírování zpět ze zálohy po jejich předchozím kompletním smazání a TRIMu.
Ano fyzická alokace záleží na spoustě faktorů. Bere se v potaz např. seznam vadných bloků (i s nějakými výchozími záznamy už z fabriky), nějaký optimální proklad pro paralelizaci, tak i zmíněné informace o počtu zápisů, kvůli wear levelingu .. plus tam bude celá řada dalších a většinou proprietárních optimalizací.
U té logické alokace to také není nutně zcela lineární a určitě hraje roli konkrétní file systém a jeho nastavení (jinak se bude chovat ext4, XFS s alokačními skupinami a třeba ZFS).

Nicméně přes tohle všechno tímhle celým procesem po určité době standardního používání výrazně defragmentuješ jak filesystém, tak i fyzické uložení. Při kopírování na prázdné SSD v podstatě při foldingu/GC budou brát celé volné bloky bez potřeby dalších RMW cyklů. A jak jsem už říkal, udělá se v rámci možností víceméně optimální proklad. Také pak na konci kopírování zbyde v porovnání s výchozím stavem typicky daleko vyšší počet celých volných bloků, což může u některých modelů ovlivnit i velikost dynamické SLC cache.
Proklad je jeden ze znatelných problémů, který třeba řeší výzkumníci ze Samsungu. Po nějaké době používání, kdy se zvýší fragmentace a ty sekvenční části souboru jsou pak nerovnoměrně rozložené mezi čipy (jsou tam hotspoty), se prodlužují latence při čtení.

Ještě jen k terminologií (aspoň jak ji používám já).
chip -> die -> plane -> block -> page (subpage) -> cell
Nejmenší část s daty je cell.
Nejmenší část pro čtení je page (někdy i subpage, jak to pojmenovávají někteří výrobci, když je SSD přepnuté do režimu kompatibility, kde použitá menší než nativní page), mívá třeba 4-16 Kb.
Jak zmiňuje RDa, tak nejmenší část která se dá přeprogramovat je blok, který má něco jako 64 nebo 128 stránek (což je asi ten 1 MB, co jsi psal).

Jinak filesystém pak má dneska spíš 4kB velikost bloku (clusteru u NTFS), ne 512B.

Což mě vede ještě k jedné věci, která mi přijde, že tu občas v diskuzích trochu zapadá. V praktickém používání hraje velkou roli i optimalizace na úrovni blokové vrstvy a IO scheduleru. Ten například standardně spojuje krátké requesty podle jejich LBA. A to až do maximální délky requestu, co podporuje HW. Tzn. když tam bude v nějakém čas. intervalu hromada kratších write requestů (např. 4k bloky fs) s vzestupným adresováním, bude se to spojovat až do 1M requestů, co se pak následně budou posílat do disku. Jinak ještě tohle logicky nejde dělat, když ty zápisy neprochází přes page cache, tzn. např. režimy s direct nebo sync.
Podobně jdou spojovat i nekontinuální čtení nebo zápisy do jedné operace s pomocí scatter-gather listů, což pak třeba hardwarově podporují některé novější NVMe disky.
« Poslední změna: 12. 03. 2025, 01:58:35 od Michal Šmucr »


RDa

  • *****
  • 2 899
    • Zobrazit profil
    • E-mail
Re:Opravdu pomalý SSD disk
« Odpověď #35 kdy: 12. 03. 2025, 06:14:30 »
Ještě jen k terminologií (aspoň jak ji používám já).
chip -> die -> plane -> block -> page (subpage) -> cell

Melo by to byt s prohozenym block->plane v teto logicke hierarchii.
Protoze BLOCK jde mazat, ale PLANE (u MLC) jen programovat.
SLC cache je v podstate omezeni se na zapis jen do prvni plane.

Re:Opravdu pomalý SSD disk
« Odpověď #36 kdy: 12. 03. 2025, 12:56:16 »
Ještě jen k terminologií (aspoň jak ji používám já).
chip -> die -> plane -> block -> page (subpage) -> cell

Melo by to byt s prohozenym block->plane v teto logicke hierarchii.
Protoze BLOCK jde mazat, ale PLANE (u MLC) jen programovat.
SLC cache je v podstate omezeni se na zapis jen do prvni plane.

Já myslel spíš tu klasicky používanou hierarchii podle konstrukce NAND čipů a velikosti jednotlivých částí od největšího do nejmenšího a kde jsou v die např. dvě až čtyři plane, v každé z nich je mnoho bloků, v který jsou page atd.

Jak na ty noční odpovědi koukám teď, tak jsem tam udělal chybu (oh my, chtělo by to po sobě líp číst :( ). Měl jsem tam samozřejmě napsat, že programovat (write) jdou i čisté, smazané page, ale mazat pak jde jen celý blok. Což pak při změně vynucuje ty RMW cykly při nutnosti změny dat v rámci jedné page.

Ale určitě tam při popisu některých operací můžou být i jiné vazby. Třeba u některých modelů se zhusta využívá možnosti paralelního provádění více operací R, P, E na všech plane v die současně jedním příkazem (operuje to typicky se stejným blok offsetem v rámci plane).
Stejně jako některé modely popsané v paperech pak používají i něco, čemu říkají superblok (skupina bloků v rámci všech plane, které mají stejné ID - relativní umístění v plane) a superpage (všechny stránky se stejným relativním umístěním v blokách, co tvoří superblok). Což pak používají na paralelizaci, tak i na další paritní data v rámci těchhle skupin.
Viz. příloha a celý dokument na https://arxiv.org/pdf/1711.11427 (sekce 1.1 Flash Memory Organization)

jjrsk

  • *****
  • 707
    • Zobrazit profil
Re:Opravdu pomalý SSD disk
« Odpověď #37 kdy: 12. 03. 2025, 18:02:08 »
Jenze ono je uplne jedno jak je to SSDcko udelany uvnitr. Problem je uz drahne let rozbita storage pipeline.

Proste prisel buh a rekl budiz disketa .... a od ty doby ma vsechno clustery a sektory. A pak se mezi to vymejslej ruzny fejky a konverze, ktery to rozbijej cim dal vic.

Jen kdyz vemes disk vs ssd, tak tu mas hnedle 3x3 faily. Prvni fail je v tom, ze ten disk/ssd fejkuje svoje usporadani. Widle cislo dve ti do toho hodi raid, kterej pouziva nejakou velikost stripe, ale fyzicky vyuziva nejakou velikost bloku nafejkovanou tim diskem. A treti widle ti do toho hodi fs, kterej opet pouziva nejakou svoji velikost bloku, ale vzadu pouziva bud ten stripe nebo tu nafejkovanou velikost z toho disku.

Pak to muzes vynasobit 3x na tema zarovnani, kdy ty fekovany data z disku nesedej na jeho fyzicky rozdeleni, nesedi na to ani stripe a nesedi na to fs.

A aby to jakoze aspon obcas nejak fungovalo, tak se vymejslej prave takovy veci jako trim. Misto aby se odstranilo to fejkovani.

Mimochodem, disky v polich jsou specificky prave predevsim tim, ze maji vsechny tyhle frikulinsky funkce vypnuty, a vsechno si ridi prave pole.

RDa

  • *****
  • 2 899
    • Zobrazit profil
    • E-mail
Re:Opravdu pomalý SSD disk
« Odpověď #38 kdy: 12. 03. 2025, 22:58:32 »
Stejně jako některé modely popsané v paperech pak používají i něco, čemu říkají superblok (skupina bloků v rámci všech plane, které mají stejné ID - relativní umístění v plane) a superpage (všechny stránky se stejným relativním umístěním v blokách, co tvoří superblok).

Tak moje pojeti bloku co se maze bylo tedy "superblock", co se maze (tj skrze vsechny planes). Programuje se pak urcita "page" prislusejici k bloku (ktery to je plane je pak implicitni - ono treba cislovani bloku je sekvencni - kdyz ma cip 2048 bloku na 2-bit MLC, tak sude bloky jsou v jedne plane, a liche bloky jsou v druhe plane).

Tak mozna takle tedy: package -> channel -> die -> E:superblock -> block(@plane) -> W:page -> byte

Paralelizace je mozna klasicky na urovni die. A ted nekdo tohle schema udelejte s V-NAND (a treba zaroven na QLC)

(ty 2/3/4 planes si predstav jako vsechny n-te bity nejake mlc/tlc/qlc bunky .. kazda dalsi plane ma polovicni uroven naboje co se programuje.. ale maze se vsechno)

RDa

  • *****
  • 2 899
    • Zobrazit profil
    • E-mail
Re:Opravdu pomalý SSD disk
« Odpověď #39 kdy: 12. 03. 2025, 23:03:39 »
Mimochodem, disky v polich jsou specificky prave predevsim tim, ze maji vsechny tyhle frikulinsky funkce vypnuty, a vsechno si ridi prave pole.

Keep dreaming. Disky v polich jsou obycejne blokove zarizeni.
Ano, nekdy jde o host-managed (zoned storage), ale samotna zona taky prochazi skrze FTL a nemas sanci zjistit na ktere lokaci ve flash je.

Takovej tupej disk, co mu muzete prepisovat jeden sektor dokola a tim ho znicit byl naposledy v dobe USB flashek bez FTL, a nektere prvni mala flash media to fotaku, kde se o wear levelling staral uzivatel - jakmile byla karta plna, tak ji vyndal, zkopiroval a smazal.

Re:Opravdu pomalý SSD disk
« Odpověď #40 kdy: 14. 03. 2025, 14:13:30 »
Me napadla dalsi vec, kterou jsem praktikoval u mych ssd disku. Proste jsem mu vytvoril prazdny oddil cca 8-32GB, aby ssd radic nemusel pri zaplneni nebo pri nepouzivani fstrim ( a to jak v cronu nebo mountnute s discard ) prepisovat nekolikanasobne vice bloku.

Re:Opravdu pomalý SSD disk
« Odpověď #41 kdy: 14. 03. 2025, 14:40:51 »
A aby to jakoze aspon obcas nejak fungovalo, tak se vymejslej prave takovy veci jako trim. Misto aby se odstranilo to fejkovani.
myslim ze FTL primo v disku ma i nejake vyhody - blokova vrstva kde te skoro nezajima co je pod tim a das si na to jaky fs chces neni tak spatny napad. To o cem mluvis je treba ubi a ubifs v linuxu (drive treba jffs2) a myslim ze zadna velka vyhra to neni. treba s prichodem MLC nejakou dobu trvalo nez do UBI pridali podporu MLC a jelo se zatim v SLC rezimu s polovinou kapacity, tezko by to realne stihalo s vyvojem jaka v tehle oblasti je a i ta slozitost porad roste a prostor pro chyby je tam velka.