System plików XFS
Trzy generacje uniksowych systemów plików:
- v7/sysv/coherent/minix
- ffs/ext2
- vxfs/journalfs/xfs/reiserfs
Cechy systemów plików trzeciej generacji:
- kronikowanie (journaling)
- elastyczne struktury dla metadanych
- dynamiczna alokacja i-węzłów
- extenty
Ograniczenia starszych systemów plików
- małe rozmiary plików (2GB)
- małe rozmiary systemów plików (8GB)
- statycznie alokowane metadane
- długi czas naprawy
- spadek wydajności w działaniu na dużych katalogach
XFS - Własności
Rozmiar bloku
W XFS-ie rozmiar bloku może wynosić od 512 bajtów do 64KB.
Grupy alokacji
XFS jest w pełni 64 bitowym systemem plików. Wszystkie globalne liczniki w systemie, adres bloku a także numery i-węzła są 64-bitowe. Aby uniknąć wymuszenia skalowania wszystkich struktur danych w XFS do 64 bitów cały system plików jest podzielony na tzw. grupy alokacji (Allocation Groups). Jest to coś podobnego do grup cylindrów z FFS, ale służy do skalowalności i zrównoleglenia, a nie do położenia na dysku.
Grupy alokacji utrzymują rozmiar struktur danych XFS-u w zasięgu w jakim mogą na nich operować efektywnie nie dzieląc systemu plików na nienadające się do zarządzania kawałki. Rozmiar grupy alokacji standardowo waha się od 0.5 do 4 GB. Każda grupa alokacji posiada swoje własne struktury danych do zarządzania wolnym obszarem oraz i-węzłami znajdującymi się w jej granicach. Dzielenie systemu plików na grupy alokacji ogranicza rozmiar prywatnych struktur danych używanych do śledzenia wolnego obszaru i i-węzłów, a także umożliwia stosowanie 32-bitowych wskaźników zamiast 64-bitowych. Podobnie jak ograniczenia nałożone na rozmiar grupy alokcji pozwala to na utrzymanie struktur danych każdej grupy alokacji w optymalnym rozmiarze.
Grupy alokacji są bardzo rzadko wykorzystywane do określenia położenia na dysku. W szczególności są zdecydowanie za duże aby używać ich w takim kontekście. Zamiast tego nawiązujemy lokalność między poszczególnymi plikami i katalogami. Podobnie jak w FFS, za każdym razem gdy nowy katalog jest tworzony umieszczamy go w innej grupie alokacji niż jego rodzica. Gdy już mamy katalog, staramy się zbierać i-węzły w tym katalogu i bloki dla tych i-węzłów blisko katalogu. To umożliwia trzymanie katalogów małych plików blisko siebie na dysku. Dla dużych plików natomiast próbujemy zaalokować extenty początkowo blisko i-węzła a potem w pobliżu istniejącego bloku w pliku, który jest najbliższy offsetowi w pliku dla którego alokujemy obszar. To oznacza, że bloki będą alokowane w pobliżu ostatniego bloku w pliku dla zapisu sekwencyjnego oraz w pobliżu bloków w środku pliku dla procesów piszących po ,,dziurach''. Jednak pliki ani katalogi nie są ograniczone do alokowania obszarów tylko w obrębie jednako bloku alokacji. Podczas gdy struktury utrzymywane wewnątrz grupy alokacji używają adresów relatywnych względem niej, pliki i foldery są globalnymi strukturami, które mogą używać i-węzłów i bloków w każdym miejscu w systemie plików.
Innym celem zastosowania grup alokacji jest zrównoleglenie zarządzania wolnym obszarem i alokacją i-węzłów. Starsze systemy pliki, jak na przykład EFS (protoplasta XFS), posiadają jednowątkowy mechanizm alokacji i zwalniania. W dużych systemach plików, w których działa wiele procesów może to być uciążliwe. Uniezależnienie struktury każdej grupy alokacji od innych XFS udostępnia równoległy mechanizm zarządzania wolnym obszarem oraz i-węzłami. Tak więc dwa procesy konkurujące z sobą mogą alokować przestrzeń w systemie plików bez przeszkadzania sobie nawzajem.
W pełni 64-bitowe atrybuty plików
Dzięki nim rozmiar pliku może wynosić aż 9 milionów terabajtów, a rozmiar systemu plików do 18 milionów terabajtów.
Kronikowanie
Zastosowanie kronikowania zapewnia wysoką niezawodność, a także bardzo szybką - rzędu kilku sekund - naprawę systemu plików po awarii systemu, bez potrzeby używania narzędzi rodzaju fsck. Czas naprawy jest niezależny od rozmiaru systemu plików.
Efektywne zarządzanie dużymi plikami - B+ drzewa
- Zarządzanie wolnym obszarem
Zarządzanie wolnym obszarem jest kluczem do wysokiej wydajności i skalowalności systemu plików. Efektywne alokowanie i zwalnianie miejsca a także niedopuszczanie do fragmentacji są podstawowym warunkiem wydajności. W XFS zastąpiono blokowo zorientowaną bitmapę na ,,extentowo'' zorientowaną strukturę składającą się z pary B+ drzew dla każdej grupy alokacji. Węzły w B+ drzewie są deskryptorami wolnych extentów w grupie alokacji. Każdy deskryptor składa się z relatywnego startowego bloku danej grupy alokacji i długości. Jedno z B+ drzew jest indeksowane po startowych blokach wolnych extentów, a drugie po długości wolnych extentów. Podwójne indeksowanie umożliwia bardzo elastyczne i efektywne wyszukiwanie wolnych extentów bazujące na typie alokacja która jest przetwarzana.
Przeszukiwanie takiego drzewa jest zdecydowanie bardziej efektywne niż liniowe przeglądanie bitmapy, szczególnie przy dużych, ciągłych alokacjach. W wyszukiwaniu w drzewie opisującym tylko wolne extenty, nie traci się czasu na skanowanie bitów dla alokowanych bloków lub określających długość danego extentu. W przeciwieństwie do map bitowych w B+ drzewach nie ma ograniczeń na wyrównanie czy też rozmiar extentu który może być zaalokowany. Znalezienie extentu o zadanym rozmiarze czy też znalezienie extentu w pobliżu zadanego bloku są operacjami w czasie O(log n).
W XFS liczba plików jest ograniczona tylko przez wolne miejsce na dysku - zamiast statycznej prealokacji XFS dynamicznie alokuje i-węzły gdy są potrzebne. To zwalnia administratora systemu z oszacowywania ile plików będzie utworzonych, oraz z ponownego tworzenia systemu plików w wypadku, gdyby szacunki zawiodły.
Dynamiczna alokacja i-węzłów
Podczas używania dynamicznej alokacji i-węzłów trzeba mieć strukturę, aby śledzić gdzie te i-węzły są położone. W XFS-ie każda grupa alokacji używa B+ drzewa do indeksowania położenia i-węzłów. I-węzły są alokowane w kawałkach składających z 64 i-węzłów, tak, że w B+ drzewie i-węzłów każdej grupy alokacji są zapamiętane offset grupy i bit zajętości dla każdego i-węzła w grupie.
Zintegrowany volume manager
Volume manager (XLV), używany przez XFS, zapewnia warstwę abstrakcji pomiędzy XFS a leżącym pod nim urządzeniem dyskowym. XFS nie wie nic o warstwie urządzeń, na których się znajduje. Takie odseparowanie zarządzania dyskiem od systemu plików upraszcza jego impelementację, interfejsy jego aplikacji oraz zarządzanie systemem plików.
Gwarantowana wydajność wejścia wyjścia - GRIO (Guaranteed Rate I/O)
Architektura