System plików z kroniką XFS
Tu zawarty jest opis systemu plików z kroniką XFS, opracowanego przez firmę Silicon Graphics Inc. (SGI) na potrzeby systemu operacyjnego IRIX, a następnie udostępnionego w roku 2000 społeczności linuksowej i reszcie świata jako oprogramowanie open source.
Trochę historii
Najbardziej interesujący jest fakt, że system był wykorzystywany w środowiskach produkcyjnych od 1994 roku, działając na każdej stacji roboczej SGI w tysiacąch instalacji na całym swiecie. Ponieważ system plików ma historie dłuższą nawet od historii standardowego linuksowego systemu plików ext2, wybór systemu XFS czy to na użytek prywatny, czy też jako systemu produkcyjnego jest stosunkowo bezpieczną inwestycją. Stabilność i historia systemu plików to ważny czynnik wpływający na decyzje o zastosowaniu systemu plików w każdym środowisku, zwłaszcza w przypadku systemów produkcyjnych lub akademickich. Co prawda wdrożenie systemu plików XFS w systemie Linux może potencjalnie spowodować problemy — systemowy kod obsługi systemów plików i woluminów logicznych różni sie całkowicie od kodu XFS. Jednakże tysiące zadowolonych użytkowników i administratorów daje poczucie zaufania do kodu systemu XFS, jego potencjalnie wysokiej wydajnosci i krótkich czasów przeładowania (i przywracania do stanu spójnego).
Firma Silicon Graphics zadebiutowała na poczatku lat osiemdziesiatych jako producent stacji roboczych wielkosci pralki automatycznej. W stacjach tych kładziono nacisk na wysokowydajne przetwarzanie potokowe grafiki o dużej rozdzielczości. Przy takim nacisku na efektywność przetwarzania grafiki potrzebny był wysokowydajny system plików, umożliwiający przechowywanie efektów obróbki graficznej. Pierwszy własny system plików firmy SGI nosił nazwę EFS i był w zasadzie opartą na koncepcji obszarów wersją uniksowego systemu Berkley Fast File System (FFS). W wyniku wzrostu pojemnosci i wydajnosci dysków twardych SGI zdecydowała sie na implementacje nowego systemu plików, XFS, rozszerzonego w stosunku do poprzednika o funkcję kroniki i eliminujacego wiele ograniczeń systemów FFS i EFS, takich jak wstepna alokacja i-wezłów systemu plików.
Firma SGI opracowując system plików XFS brała pod uwagę nastepujace kwestie:
wysoka przepustowość strumieni audio i wideo
obsługę dużych plików wymaganych przy przetwarzaniu sekwencji wideo i pracy z programami graficznymi
zdolność do przechowywania gigantycznych ilosci danych
obsługę dużej liczby plików (a tym samym obsługę dużych katalogów)
Premierowe wydanie systemu plików XFS miało miejsce w roku 1994 przy okazji wydania systemu operacyjnego IRIX 5.3 — od tej pory system XFS był stale rozszerzany i ulepszany.
Opis
System plików XFS jest wysokowydajnym systemem plików z kroniką, którego od konkurentów odróżniają pewne istotne cechy.
Oto niektóre z głównych przyczyn wyższości systemu XFS:
System XFS był od dawna wykorzystywany w różnych systemach komputerowych, jest wiec gruntownie przetestowany.
System XFS obsługuje (przez umieszczenie ich w specjalnym obszarze systemu plików) pliki udostepniane w czasie rzeczywistym.
System XFS udostepnia obsługe rozszerzonych list kontroli dostepu do plików i katalogów.
System XFS korzysta z zaawansowanych algorytmów wyszukiwania plików i katalogów oraz alokacji przestrzeni dyskowej.
Przechowywanie danych w systemie plików XFS
System plików XFS to w pełni 64-bitowy system plików złożony z trzech podstawowych obszarów:
sekcji danych, w której przechowywane sa własciwe dane i metadane systemu plików;
dziennika, w którym rejestrowane sa transakcje opisujace zmiany metadanych systemu plików (dziennik jest zwykle podczas normalnego działania systemu plików zapisywany sekwencyjnie; odczyt nastepuje podczas montowania systemu XFS);
opcjonalnej sekcji czasu rzeczywistego (ang. real-time), służącej do przechowywania danych plików wymagąjacych ciągłych, szybkich operacji WE-WY .
Sekcja danych systemu plików XFS jest podzielona na grupy alokacji. Grupy alokacji są niewidocznymi dla użytkowników, rozłącznymi podzbiorami przestrzeni dyskowej, dostępnej w sekcji danych systemu plików XFS. Odpowiadają koncepcji grup cylindrów, zastosowanej w systemie FFS. Grupy alokacji dzielą system plików XFS na niezależne pule przestrzeni dyskowej o rozmiarach od 0,5 do 4 GB.
Organizacja systemu plików XFS na dysku.
Każda grupa alokacji utrzymuje własne struktury danych zarządzajace wolnym miejscem, i-węzłami oraz blokami zajętymi w ramach grupy alokacji. Takie podejście ma szereg zalet, miedzy innymi:
Grupy alokacji mogą korzystać z wzglednych wskaźników bloków i i-węzłów, co pozwala zaoszczedzić miejsce w wewnetrznych strukturach danych grup alokacji.
Alokacja przestrzeni wewnatrz grupy alokacji tworzy kolejny poziom pośredni w mechaniźmie alokacji odwołań do bloków, zwieksząjac potencjalny rozmiar systemu plików XFS w porównaniu do systemów zmuszonych do utrzymywania jawnych i bezwzględnych wskazników bloków.
Utrzymywanie struktur danych, takich jak superbloki, dla każdej grupy alokacji zwieksza wydajność przez redukcję opóznień blokad i umożliwia równoległą (współbieżną) obsługę operacji przydziału i dostepu do bloków w różnych grupach alokacji.
Podział systemu plików na pewną liczbę grup alokacji, z których każda utrzymuje własne struktury danych, ułatwia zmiany rozmiaru systemu plików. Zmiany te polegają na prostym dodaniu do systemu plików nowych grup alokacji. W uproszczeniu procesu zwiekszania rozmiaru systemu plików pomagają również inne zaawansowane funkcje systemu plików XFS, takie jak np. dynamiczna alokacja i-wezłów.
Jednym z założeń techniki grup cylindrów, wprowadzonej w systemie FFS, było promowanie koncepcji skupienia dysku (ang. disk locality), polegającej na przydzielaniu bloków danych przynależących do tego samego pliku czy katalogu w tej samej grupie cylindrów. Mechanizm taki pozwala zmniejszyć narzuty czasowe zwiazane z koniecznością wielokrotnego przesuwania głowic podczas dostepu do pliku. Rozmiar grup alokacji, stosowany w systemie XFS, redukuje prawdopodobieństwo umieszczenia kolejnych bloków danych pliku czy katalogu w bezposrednim sąsiedztwie, w zamian wprowadzono wiec pojecie skupienia logicznego (ang. logical locality), polegającego na optymalnym w ramach grupy alokacji rozmieszczeniu wszystkich obszarów dyskowych przypisanych do danego pliku.
Aby zwiększyc wydajność operacji przydziału przestrzeni dyskowej do plików, system XFS w miejsce metody alokacji pojedynczych bloków stosuje model alokacji oparty na obszarach (ang. extents). Obszary są szeregami przylegających do siebie wolnych bloków dyskowych, alokowanych wspólnie. Struktury danych, identyfikujące lokalizację dyskową plików i katalogów w systemach plików opartych na alokacji, przechowują (zamiast ciagu bloków i wskaźników bloków pośrednich) początkowe położenie pierwszego bloku obszaru i jego długość. Rysunek prezentuje różnice pomiedzy alokacją opartą na blokach a alokacją całych obszarów.
Zastosowanie modelu alokacji obszarów pomaga zachować główny cel koncepcji skupienia dysku, a ponadto:
daje wyższą wydajność operacji przydziału w porównaniu z operacjami przydziału wielu pojedynczych bloków;
daje wyższą wydajność odczytu danych pliku, ponieważ bloki mogą być odczytywane bezposrednio po sobie, bez konieczności odszukiwania kolejnych bloków na całej powierzchni dysku; zwiekszenie wydajności operacji odczytu zwiększa z kolei współbieżność operacji dostępu do wielu plików w grupie alokacji lub w całym systemie plików;
redukuje rozmiar struktur danych niezbędnych do przechowywania informacji o przestrzeni dyskowej przydzielonej do pliku, zwiekszając wydajność i redukując łączny rozmiar metadanych systemu plików;
redukuje liczbe operacji wyszukiwania wymaganych podczas odczytu istniejącego pliku; odczyt pojedynczego obszaru jest szybszy niż odczyt wielu osobnych wskazników bloków;
redukuje fragmentację plików, zwiekszając szanse zmieszczenia wszystkich danych zwiazanych z danym plikiem w ciagłym obszarze dysku.
System plików XFS korzysta też z zaawansowanego mechanizmu przydziału opóźnionego, stosowanego podczas zapisu plików na dysk. Algorytm ten umożliwia systemowi XFS optymalizację alokacji obszarów dla nowych i aktualizowanych plików.
Dzieki redukcji liczby osobnych operacji zapisu w systemie plików osiągnięto również zwiększenie wydajności tych operacji.
Poza korzystaniem z koncepcji obszarów, system XFS stosuje podczas tworzenia katalogu pewne heurystyki, mające na celu dalsze zwiększenie wydajnosci. Każdy nowy katalog tworzony w systemie plików XFS jest umieszczany w innej grupie alokacji niż jego katalog nadrzędny, a dla przyszłych elementów katalogu rezerwowana jest pewna ilość ciągłej przestrzeni dyskowej. System XFS próbuje również alokować i-wezły plików i obszary w bezposrednim sąsiedztwie dyskowego obszaru katalogu, w którym pliki te zostały założone.
Podobnie jak każdy inny linuksowy system plików, metadane związane z każdym z plików i katalogów systemu plików utrzymywane sa w systemie XFS w strukturach zwanych i-węzłami. Jednakże system XFS alokuje i-węzły w miare potrzeby (dynamicznie), nie marnując czasu na wstepną alokację i-węzłów podczas zakładania systemu plików. Zmniejsza to ilość zajętego miejsca, zajmowanego przez i-węzły nie istniejących jeszcze plików i katalogów. Co ważniejsze, dzieki takiemu podejsciu zwiększana jest elastyczność systemu plików XFS, nie jest on bowiem ograniczony do konkretnej liczby plików i katalogów. Każdy system XFS może zawierać dowolną liczbę plików i katalogów, ograniczoną jedynie iloscią dostepnego miejsca i przestrzenią adresową 64-bitowych wewnetrznych struktur danych. Ułatwia to znacznie operacje rozszerzania istniejących systemów plików XFS, odpada bowiem konieczność wykonywania żmudnych prób w rodzaju wykonywania kopii danych, zwiększania rozmiaru systemu plików i przywracania danych z kopii zapasowej.
Do systemu plików mogą być w prosty sposób dodawane nowe grupy alokacji — operacje takie wymagają jedynie niewielkich zmian metadanych systemu plików, nie jest bowiem konieczna wstępna alokacja i-węzłów, a większość struktur danych, odnoszących się do nowych grup alokacji, przechowywanych jest wewnątrz tychże grup. Jedynym rzeczywistym ograniczeniem zwiększania rozmiaru systemu plików XFS jest to, że nowe grupy alokacji muszą mieć ten sam rozmiar, co grupy alokacji utworzone podczas zakładania systemu plików.
Rozmiar bloków logicznych, wykorzystywanych przez system XFS (podobnie jak w przypadku innych nowoczesnych systemów plików), waha sie od 512 bajtów do 64 kB. W połączeniu z 64-bitowymi strukturami danych daje to maksymalny rozmiar systemu plików wynoszący 18 petabajtów (18 milionów gigabajtów) przy maksymalnym rozmiarze pliku wynoszącym 9 petabajtów. Co prawda system operacyjny Linux ogranicza rozmiar obsługiwanych urządzen blokowych w znacznie wiekszym stopniu, ale w momencie, w którym z jądra Linuksa usuniete zostaną te ograniczenia, system plików XFS bedzie już gotów do wykorzystania nowych możliwości.
Specjalne cechy systemu XFS
System plików XFS obsługuje wewnętrznie tzw. rzadkie pliki (ang. sparse files), będące plikami o dużych rozmiarach zawierającymi stosunkowo niewielkie ilosci danych. Dane te moga być zapisywane do dowolnego miejsca pliku rzadkiego, bez konieczności przydzielania z góry większej ilości miejsca niż jest to potrzebne do przechowywania danych pliku (poza pewną niewielką ilością metadanych systemu plików). Mimo że rozmiar plików rzadkich zwracany przez system plików jest zawsze ich rozmiarem maksymalnym, bloki danych są do niego przydzielane dopiero podczas zapisu danych w pliku — odczyt niezapisanego wcześniej fragmentu pliku da w wyniku blok wypełniony zerami. Pliki rzadkie świetnie nadają się do niektórych baz danych i innych dużych, podzielonych na rekordy plików; aplikacje korzystające z plików rzadkich mają dostęp do znacznej przestrzeni adresowej, nie marnując przy okazji przestrzeni dyskowej, której jeszcze nie wykorzystują. Pojęcie logicznego rozmiaru pliku rzadkiego i metody alokacji bloków w takim pliku dobrze ilustruje rysunek.
Alokacja bloków w pliku rzadkim.
Na wydajność systemu plików XFS pozytywny wpływ ma nie tylko implementacja koncepcji grup alokacji i metody alokacji opartej na obszarach; system XFS przewyższa inne systemy plików również dzieki przechowywaniu metadanych systemu plików w węzłach zrównoważonych drzew binarnych (B+drzew).
System XFS wykorzystuje B+drzewa do:
Zarządzania dynamicznie alokowanymi i-węzłami. I-węzły są przydzielane wewnątrz każdej grupy alokacji w zestawach po 64 i-węzły, a B+drzewo odwzorowuje zarówno ich położenie, jak i to, które i-wezły z danego zestawu są zajęte.
Śledzenia położenia wolnych obszarów (B+drzewa zastepuja tu mapy bitowe stosowane w tradycyjnych systemach plików). System XFS wykorzystuje parę B+drzew do odwzorowywania stanu przydziału obszarów w ramach każdej grupy alokacji; jedno z drzew jest indeksowane blokami początkowymi każdego z obszarów (co pomaga w minimalizacji fragmentacji podczas przydzielania obszarów), drugie indeksowane jest rozmiarem każdego z obszarów (przydatnym podczas szybkiego wyszukiwania wolnych obszarów o określonych rozmiarach).
Indeksowania nazw wpisów katalogów (w miejsce liniowego przeszukiwania katalogów stosowanego w tradycyjnych systemach plików). Ponieważ nazwy plików mają zmienną długość (od 1 do 256 znaków), B+drzewa przechowujące nazwy wpisów katalogu wykorzystują jako klucze indeksujące 4-bajtowe skróty nazw plików. Korzystanie z kluczy o ustalonym rozmiarze wprowadza jednak niekiedy (w wyniku kolizji skrótów kluczy) konieczność dwukrotnego przeszukania drzewa.
Odwzorowywania przydziału obszarów do pliku, dzięki czemu zwiększana jest liczba bezpośrednich wpisów obszarów przechowywana w pojedynczym i-węźle.
Jeżeli weźmiemy pod uwagę fakt, że głównym zadaniem stacji roboczych firmy SGI było efektywne przetwarzanie strumieni multimedialnych, wymagania co do wydajności systemu plików XFS nie bedą specjalnie zaskakujące. Jednakże poza wspólnymi dla wszystkich nowoczesnych systemów plików cechami zwiekszającymi wydajność, takimi jak alokacja obszarów, dynamiczny przydział i-wezłów i szerokie wykorzystanie B+drzew, system XFS posiada pewne szczególne cechy, zapewniające mu wydajność wymaganą przez zaawansowane aplikacje multimedialne. Najbardziej interesująca z tych cech jest unikalna zdolność tworzenia podwoluminów czasu rzeczywistego (ang. real-time volumes), zapewniających utrzymanie tzw. GRIO (Guaranted Ratio I/O), czyli gwarantowanej przepustowości operacji wejścia-wyjścia.
Woluminy te przeznaczone są na użytek plików wymagających przesyłania z ustaloną szybkoscią transmisji. Podwoluminy czasu rzeczywistego systemu XFS to fragmenty systemu plików, przechowujące wyłącznie dane plików przetwarzanych w czasie rzeczywistym. Wszystkie metadane związane z tymi plikami przechowywane są w głównej części systemu plików. Wskazanie, że dany plik wymaga operacji czasu rzeczywistego, odbywa sie za pośrednictwem wywołania funkcji ioctl podczas tworzenia pliku.
Istniejące pliki mogą zostać skopiowane do obszaru czasu rzeczywistego za pośrednictwem polecenia xfs_rtcp, które automatycznie nadaje plikom atrybuty plików przetwarzanych w czasie rzeczywistym. Podwoluminy czasu rzeczywistego systemu plików XFS korzystają z odmiennej strategii przydziału bloków, zoptymalizowanej pod kątem szybkiej alokacji i minimalnej fragmentacji. Metoda ta nie jest tak sprawna, jak metoda stosowana w standardowych obszarach systemu plików XFS, gwarantuje jednak szybką alokacje i minimalne narzuty związane z przesunęciami głowic podczas dostepu do pliku.
Podsumowanie
System XFS to wysokowydajny system plików, korzystający z wyrafinowanych algorytmów, struktur danych i zaawansowanych funkcji heurystycznych. Gruntowne przetestowanie i wieloletnia historia systemu jako podstawowego systemu plików stacji roboczych firmy SGI wskazuje, że system ten jest jednym z poważniejszych kandydatów dla środowisk kontrolowanych przez system operacyjny Linux.