szupergyors ls -laR

Sziasztok!

Olyan linuxos fájlrendszerre vagy kernelbeállításra vagy egyéb megoldásra lenne szükségem, ami az ls -laR -t nagyon gyorssá teszi tízezer könyvtárra és egy egymillió fájlra (nem egyenletes eloszlásban). Az optimális megoldás futásideje összemérhető kéne, hogy legyen azzal az idővel, amit az ls -laR hatására a kernel lemezolvasással tölt, de seekelés nélkül, tehát mondjuk max 10 másodperc.

Úgy sejtem, hogy az ls -laR -ből az -l kapcsoló a lassú, mert az minden fájlra hív egy stat()-ot, és mivel az egyes fájlok inode-jai nincsenek közel egymáshoz a lemezen (legalábbis ext3-on, ext4-en és reiserfs-en), ezért minden egyes stat()-hoz seekelni kell, ezért lassú. Az inode-ok szekvenciális egymás mellé pakolásával az ls -laR sokat gyorsulhatna. Van ilyen fájlrendszer vagy beállítás?

Kösz:

pts

Hozzászólások

gyors diszk, sok ram a file cache-nek első körben

Nincs lehetőségem változtatni a hardveren. De ha 10-szeresére gyorsítanám a diszket, akkor sem végezne 10 másodperc alatt ext3-an, ext4-en vagy reiserfs-en. Olyan szoftveres megoldást keresek, ami nem seekel minden stat()-nál.

Mit értesz az alatt, hogy sok ram a file cache-nek? Van elég RAM a gépben, és én szíves-örömest adnék neki annyi RAM-ot, amennyi csak kell neki ahhoz, hogy az inode-ok mindig a fizikai memóriában maradjanak, tehát sose kelljen a diszkhez fordulni egy stat() miatt. De mit és hogyan kell beállítani, hogy ez történjen? Az önmagában nem jó megoldás, hogy tegyek még több RAM-ot a gépbe, mert akármennyit is teszek, néhány DVD image átmásolása után az összes RAM-ot betöti a cache, és az inode-ok kikerülnek a fizikai memóriából. Én azt szeretném, hogy az inode maradjon bent örökre (pontosabban umountig vagy az inode törléséig).

"Úgy sejtem, hogy az ls -laR -ből az -l kapcsoló a lassú, mert az minden fájlra hív egy stat()-ot, és mivel az egyes fájlok inode-jai nincsenek közel egymáshoz a lemezen (legalábbis ext3-on, ext4-en és reiserfs-en), ezért minden egyes stat()-hoz seekelni kell, ezért lassú."

$ touch foo bar
$ strace -o 1 ls foo bar
$ strace -o 2 ls -l foo bar
$ vimdiff 1 2

Mihez kellene ez?

--
Fontos feladatot soha ne bizz olyan gepre, amit egyedul is fel tudsz emelni!

Állítólag az ntfs és az xfs is tud "file change log" -ot, de egyetlen olyan backup programot vagy tool-t nem láttam ami kiolvasná ezt.