next up previous contents
Next: Efektywność Up: ReiserFS Previous: Podstawy   Spis rzeczy

Subsections

Budowa

Struktura partycji

W ReiserFS najważniejszą częścią systemu jest pojedyncze drzewo służące do indeksowania bloków dyskowych. Używaną do tego celu strukturą jest tzw. drzewo ,,tańczące'' (dancing tree), bardzo podobne do B+ drzewa (na którym oparta była wersja 3 systemu).

Podobnie jak w B+ drzewie dane w drzewie ,,tańczącym'' zapisane są wyłącznie w liściach (wersja 4 w przeciwieństwie do poprzedniczki jest pod tym względem konsekwentna), w węzłach znajdują się wyłącznie klucze. To co odróżnia obie struktury to brak ścisłych wymagań co do liczby pozycji w węzłach wewnętrznych dla tej drugiej (nie jest wymagana zajętość co najmniej 50% pozycji). Jak twierdzi autor systemu zmiana struktury danych ma zapewnić wzrost wydajności, kosztem być może nieco większej zajętości przestrzeni dyskowej.

Strukturę drzewa ilustruje następujący rysunek:

\resizebox{0.9 \textwidth}{!}{\includegraphics{pawcio-obrazki/tree.ps}}

Struktura bloków

Bloki dyskowe w przypadku ReiserFS mogą mieć wielkość od 1 do 64kb. Domyślną wartością jest 4kb (głównie ze względu na mechanizmy buforujące Linuxa), jednak jak wynika z testów zmiana wielkości bloku nie ma większego wpływu zarówno na wydajność działania systemu jak również na efektywność wykorzystania przestrzeni dyskowej.

Każdy obiekt (item) zapisany w strukturze drzewa ma następującą postać:

\resizebox{0.9 \textwidth}{!}{\includegraphics{pawcio-obrazki/item.ps}}

Struktura bloku w ReiserFS jest następująca:

Przedziały bloków dyskowych

W wersji 4 wprowadzono wreszcie pojęcie przedziału bloków dyskowych (extent) obecne od długiego czasu w innych systemach plików (XFS, JFS, VxFS).

Dzięki temu ma zostać znacznie poprawiona efektywność obsługi dużych plików (z czym wersja 3 miała poważne problemy).

Zarządzanie wolną przestrzenią dyskową

ReiserFS do zarządzania wolną przestrzenią dyskową posługuje się mapami bitowymi zajętości bloków dyskowych. Wyszukiwanie wolnego obszaru rozpoczyna się od lewego sąsiada w drzewie i odbywa się w tym samym kierunku, w którym było wykonywane przy ostatniej operacji.

Kronikowanie

W wersji 4 ReiserFS zrezygnowano ze zwykłego dziennika zmian, który jest najczęściej stosowanym rozwiązaniem w innych systemach (Ext3, NTFS, XFS, JFS, VxFS) i zastosowano rozwiązanie hybrydowe oparte na pewnych elementach systemu WAFL (Write Anywhere File Layout filesystem), zapewniające łatwy sposób odzyskania pełnej spójności danych na dysku w przypadku załamania się systemu.

Sposób działania WAFL opiszemy zakładając, że chcemy dokonać w jednej atomowej trasakcji, zapisu do dwóch plików. W tym celu wyszukujemy wpisy opowiadające tym plikom. Zapisujemy zlecone bloki w wolnej obszarze dysku, a następnie kopiujemy bloki, w których znajdują się wskaźniki na nadpisane części, przed zapisem aktualizując odpowiednie wskaźniki. Podążając w ten sposób w górę drzewa dojdziemy do sytuacji gdy wystarczy zmiana pojedynczego wskaźnika w celu zatwierdzenia zmian na dysku (być może będzie trzeba zmienić wskaźnik korzenia drzewa systemu plików w superbloku na której znajduje się partycja).

Podejście, które zastosowano ostatecznie w ReiserFS jest podejściem hybrydowym. Cześć operacji wykonywanych jest jak to opisano powyżej, część jest odnotowywana w dzienniku w celu późniejszego zatwierdzenia (dziennik ma postać listy jednokierunkowej do której wskaźnik znajduje się w superbloku).


next up previous contents
Next: Efektywność Up: ReiserFS Previous: Podstawy   Spis rzeczy
Elżbieta Krępska 2004-01-19