21
« kdy: 15. 12. 2020, 15:58:30 »
Mam rozpracovan napad na blokovou SSD cache, tak bych se podelil o myslenky v zajmu o feedback.
Nekteri z nas pouzivaj radeji klasicke filesystemy (ext4), at uz kvuli opravitelnosti, znamemu chovani nebo z jineho duvodu, ale kdyz se me nasbirali desitky TB dat, tak je to ponekud pomalejsi - all-SSD reseni jeste porad neprichazi do uvahy, takze zustava cesta vylepseni vykonu skrze pouziti SSD - jako cache.
Cteci cesta - v SSD se drzi sparse file hlavniho HDD uloziste (na blokove urovni) - s tim ze kdyz je to hit, tak to vraci data rychle ze SSD. Urceni toho, co se ma cachovat trocha pripomina princip jako u prvnich SSD, ktere snoopovali prenaseny obsah - a kdyz se jednalo o casto zapisovanou fat-ku tak delali wear levelling. Ja tady pocitam s tim, ze ta mezivrstva dekoduje strukturu FS do urcite miry, takze vi ktere bloky patri k inode tables a bitmapam, a pak taky muzu jit dal - zapinovat do SSD rovnou i soubory adresaru, nebo malych souboru, pripadne urciteho podadresare (hot pracovni data), nebo v pripade potreby i casti vetsich souboru - napr. meta+thumbnaily z DNG/cDNG nebo metadata/audiotrack z muxovanych video souboru.
Zapisova cesta by mohla jit pres klasicky ssd journal, s opozdenym vyprazdnovanim, coz je spis separatni tema/projekt (resp. tohle by melo bcache zvladat obstojne).
Prvni realizaci planuji skrze userspace - takze se nabizi sitove blokove protokoly (NBD, iSCSI), do kterych muzu vlozit svuj man-in-the-middle processing. Hledal jsem userspace block device, ale je to jen zamaskovane NBD - userspace server. Uzivatelske rizeni pinovani by byla CLI utilita, komunikujici s tim cachovacim jadrem, snooping by bezel zatim vyhradne pro dekodovani EXT4, s tim ze nektere souborove udalosti by zadnimi vratky dostaval skrze iNotify. Pozdeji implementace muze presunout to jadro do kernelu, at odpadne zbytecne kopirovani (bavime se o vyssich stovkach MB/s - co by dal klasicke hdd raid pole). Jeste by se to dalo vylepsit presunem me cache pod LVM a MD vrstvu, takze zapinovany by zustal i cely stripe, ktery obsahuje castecne menici se data, takze by to snizilo rezii pro read-modify-write.
Mam za to, ze nic takoveho neexistuje, a konkurencni LVM cache, bcache, EnhanceIO neumi presne to, co ja chci - resi spis genericky cachovani, ale aplikacne specificky, napr. pro obsah, kterym disponuje programator ci video-editor se to nehodi.
Co si o tom myslite? Kdo ma zajem naprogramovat neco podobneho? At uz jako skolni praci, nebo placene?