Zvlastni (jednoduchy) problem s ext3

Jan Kara jack na suse.cz
Úterý Říjen 2 15:01:12 CEST 2007


  Ahoj,

> mam dva stroje jeden amd64 a druhy amd32. Na obou bezi debian stable.
> Udelal jsem patititon ext3 a v ni mam adresar s (bohuzel) 2 miliony
> souboru. Stejne operace "rm adresar/ -rf", "chown root:root adr/ -R"
> trvaji na jednom stroji s amd64 nekolik hodin a na amd32 minutu.
> Posilam vystup "tune2fs -l /dev/md4", lisi se take dir_index, ale
> to jsou jen nejake bstromy, ktere by naopak meli urychlovat ;).
> Kdyz postvu strace na tentyz proces rm nebo chown na obou strojich
> na amd64 bezi jednotky za sekundu, na druhem stovky-tisice/s.
> 
> Nedomnivam se, ze by zpomaloval procesor, ale spise nejaky parametr
> ext3 nebo nejake jine kontroly systemu. Hdparm -t dava na amd64
> 66 MB/sec na amd32 51 MB/sec. Na obou je sw raid1 (md) nad ide/sata
> disky.
  Problem je v dir_index. Ono ta feature neni tak jednoznacne skvela,
jak by se zdalo :). Jak jste vyse poznamenal, tak dir_index vytvari v
adresari stromy adresarovych polozek, takze operace jako 'lookup' je na
velkych adresarich radove rychlejsi. Ale je to prave na ukor operaci
pracujicich na celem adresari. Kdyz mate totiz normalni adresare, tak
poradi adresarovych polozek je obvykle stejne jako poradi inodu na
disku. Zatimco kdyz mate stromy, tak je poradi polozek abecedni (popr.
podle hashe) a s poradim inodu nema nic spolecneho. Takze pak operace
jako 'ls -l' nebo 'rm -r', ktere potrebuji cist i inody je ctou v
nahodnem poradi a disk seekuje jako zbesily...
  Mno, reseni je tezke - idealne by filesystem pres readdir() mohl
vracet adresarove polozky serazene podle inode-number, ale pro velke
adresare je to neunosne (navic vznikaji problemy s operacemi typu
seekdir() a telldir(), od kterych POSIX vyzaduje urcite chovani). Resit
se to samozrejme da i v aplikacich, ale to chovani se trochu lisi
filesystem od filesystemu a kdo by vsechny ty utility opravoval, ze...

								Honza



Další informace o konferenci Linux