Sterownik do ext3 pojawił się w jądrze 2.4.16. System plików ext3 jest domyślnym systemem plików dla obecnej dystrubucji Linux RedHat.
W ext3 dziennik tworzony i zarządzany przez JBD trzymany jest w inode, czyli po prostu w pliku. Domyślnie jest to plik .journal w katalogu głównym. Od wersji 0.9.5 ext3 umożliwia trzymanie dziennika na dowolnym innym urządzeniu blokowym. Można znacznie zwiększyć wydajność systemu plików przenosząc dziennik na partycje na innym dysku, bądź testować działanie ext3 trzymając dziennik w ramdysku. Dzięki takiemu sposóbowi trzymania dziennika zachowujemy dużą kompatybilność z ext2.
Większość systemów plików z dziennikowaniem przechowuje w dzienniku tylko różnice pomiędzy blokami danych do zapisania i tymi, które są zapisane na dysku (listę bajtów do zmiany), co nazywamy dziennikowaniem logicznym (logical journaling). JBD robi to inaczej. W dzienniku przechowywane są całe zmienione bloki. Takie podejście nazywa się dziennikowanie fizycznym (physical journaling). Mogłoby się wydawać, że zmniejsza to wydajność systemu ze względu na dużą ilość danych przesyłanych na dysk. Jednak pozwala to połączenie w pamięci kilku operacji na bloku zmniejszając ilość operacji zapisu na dysku. Również fakt, że w pamięci znajdują się gotowe do zrzucenia bloki zmniejsza nakład obliczeniowy procesora.
Wykorzystanie JBD przez ext3 dokonuje się na tej zasadzie, że sterownik ext3 przed zapisaniem czegoś na dysk informuje o tym JBD i czeka na zezwolenie na zapis.
System plików ext3 dostarcza trzy różne poziomy dziennikowania:
Poziom journal jest najbezpieczniejszy ze względu na ryzyko utraty danych, a jednocześnie najwolniejszy. Zmniejszenie wydajności spowodowane jest tym, że aby zatwierdzić jakąkolwiek zmianę na dysku potrzeba dwóch operacji zapisu, najpierw do dziennika a dopiero później rzeczywiste dane. Jednak w wielu sytuacjach minimalizacja możliwości utraty danych jest dużo ważniejsza. Tak wysoki poziom dziennikowania dostarcza tylko ext3.
Poziom ordered jest domyślnym poziomem dziennikowania w systemie plików ext3. Operacje zapisu danych i metadanych układane są w transakcje, kiedy przyjdzie czas na zapisanie nowych metadanych, najpierw zapisywane są dane, a później metadane. Dzięki temu, że metadane są zapisywane na dysk dopiero po zakończeniu operacji zapisu danych, nie jest możliwe by metadane wskazywały na niezapisane jeszcze na dysku dane. Czekanie na zapis wszystkich danych na dysk zmniejsza nieznacznie wydajność systemu plików, jednak w porównaniu z ext2 jest to zmiana marginalna.
Writeback jest poziomem z dziennikowaniem tylko metadanych, a co za tym idzie poziomem mającym najmniejsze straty wydajności. Jednocześnie przez to, że zapis danych i metadanych przebiega asynchronicznie mogą się pojawić po awarii niespójności. Na przykład metadane mogą wskazywać na bloki, które były w trakcie zapisywania gdy system uległ awarii. Taki poziom dziennikowania (bez dziennikowania danych) jest zaimplementowany w większości pozostałych systemów plików z dziennikowaniem.
Struktura pliku katalogu:
Bloki 0 do 511 to bloki indeksów, kolejne bloki są tradycyjnymi blokami przechowującymi wpisy katalogów. W blokach indeksów przechowywane są wpisy postaci:
klucz : wskaźnik do bloku
Klucz jest generowany na podstawie nazwy funkcją haszującą, najbardziej znaczący bit to flaga kolizji. Wskaźnik wskazuje zależnie od wysokości drzewa indeksowania na kolejny blok indeksu (1-511) bądź na blok z wpisami katalogowymi. Pierwszy blok indeksowy zawiera dodatkowo nagłówek, w którym określony jest typ indeksowania, wersja funkcji haszującej, ilość poziomów indeksowania.
Operacja szukania wpisu w katalogu polega na obliczeniu funkcji haszującej i schodząc w dół drzewa według wskaźników dojść do bloku zawierającego poszukiwany wpis. Dalsze wyszukiwanie odbywa się tak jak w bloku katalogu bez indeksowania. Operacja zapisu przebiega podobnie, z tym że potrzebny jest mechanizm rozwiązywania kolizji (przepełnienia bloku z wpisami katalogowymi):
W obecnej implementacji uwzględniony jest tylko jeden poziom indeksowania. Pozwala to na trzymanie w katalogu około 90 000 wpisów. Dołączenie kolejnego poziomu umożliwiłoby zapis 50 milionów plików.
Czas utworzenia plików | ||
Ilość plików | Indeksowany | Normalny |
10 0000 | 1s | 23s |
50 0000 | 7s | 9m31s |
90 0000 | 13s | 33m18s |