update/bdflush problem
Alexandr Malusek
malusek na sysel.ujf.cas.cz
Středa Srpen 6 13:15:49 CEST 1997
kubicek na mathesius.ff.cuni.cz (Petr Kubicek) writes:
> ...
> Rozhodne nejde rici, ze by UFS byl vyrazne pomalejsi, ale spis to
> opravdu bude lepsi praci s adresari.
Vase vysledky i zavery plne odpovidaji skutecnostem, ktere byly o ufs
publikovany. Doplnim nekolik skutecnosti, ktere problem snad trochu
objasni.
ufs (ze SVR4) vychazi z Berkeley Fast File Systemu (FFS). Podobne jako
ext2fs implementuje "cylinder groups" (Zhruba receno: partition je
rozdelena na nekolik cylinder groups, kazda z grup ma vlastni seznam
inodu a datovych bloku). Pri praci s ufs filesystemem je pouzivana
alokacni strategie, ktera optimalizuje sekvencni pristup:
- umistovat datove bloky souboru ve stejne grupe jako je jeho inode
- alokovat datove bloky tak, aby byl bran v uvahu "interleave" disku
Zaroven je ale potreba udrzet rovnomerne zaplnovani group, takze:
- je-li velikost souboru vetsi nez neco, datove bloky se alokuji
v jine cylinder group.
- adresar se vytvari v jine cylinder groupe nez jeho rodicovsky
adresar, pricemz se vybiraji grupy ktere maji nadprumerny pocet
volnych inodu a z tech se dale vybiraji ty, ktere adresaru maji
nejmene.
(Neni to kompletni seznam kriterii, zde nezbyva nez odkazat na
literaturu)
Kdyz se pokusite v danem adresari vytvorit napr. 1000 podadresaru, pak
hlavicka disku beha od jedne cylinder grupy ke druhe. (Schvalne si to
zkuste - daval jsem to jako ukol pri cvicenich :-). Budete prekvapen,
jak dlouho to trva v ufs a ext2fs). Tady je potreba znat parametry
disku (head seek, rotational latency), aby vyplynulo, ze se jedna o
casove velmi narocnou operaci. Navic rada techto operaci je
synchronnich, takze kontroler disku nemuze poradi zapisu
preorganizovat.
K tomu, jak to dela ext2fs bych se jeste rad vratil, ale v jinem
dopise ;-).
Co se tyce vyssiho vykonu ufs pri sekvencnim zapisu: Myslim, ze to
muze byt zpusobeno tim, ze ufs ma obvykle vetsi velikost datoveho
bloku (default je 8KB, u Linuxu mi dumpe2fs vypisuje 1 KB, ale je to
volitelne). Jak jsem jiz uvadel, Solaris pouziva kernel asynchronnous
IO - to by take mohlo trochu prispet (pokud je Linux nepouziva -
nevim).
--
Alexandr Malusek (malusek na ujf.cas.cz)
UJF AV CR
Další informace o konferenci Linux