Next:Implementacja
obsługi schowka wUp:Poprawa
wydajności systemu NFSPrevious:Opis
rozwiązania
Struktura schowka
Schowek jest oparty na standardowym systemie plików ext2. Znajduje
się on w ustalonym przez administratora katalogu. Pojedynczy katalog może
służyć jako schowek dla jednego lub wielu zdalnych systemów plików. W katalogu
znajduje się specjalny pliki cacheInfo zawierający informacje
o twardym i miękkim rozmiarze schowka oraz o ilości znajdujących się w
nim danych. Twardy limit określa maksymalny rozmiar schowka. Po jego przekroczeniu
jądro nie umieszcza w nim nowych danych. Miękki limit określa przy jakim
stopniu zapełnienia schowka ma być budzony proces oczyszczającyc schowek.
Ponadto w katalogu /dev/ znajduje się plik nfsCacheFull.
Jest to nazwane łącze fifo. Służy do budzenia procesu oczyszczającego schowek
w momencie, gdy jest on pełny i jądro nie może umiścić w nim nowych danych.
Jądro przesyła do procesu nazwę katalogu w którym brakuje miejsca.
Ziarnistość schowka wynosi 4KB. Przyjąłem taki rozmiar z dwóch powodów:
-
dane przekazywanie między wirtalnym system plików i systemem NFS są w postaci
stron systemu operacyjnego. Strona ma rozmiar 4KB;
-
w system ext2 są efektywnie zapisywane i odczytywane bloki danych
będących wielokrotnością 512 bajtów.
Każdemu zdalnemu plikowi odpowiada jeden plik w schowku zawierający kopię
danych. W pliku razem z danymi znajdują się metadane. Metadane obejmują:
-
informacje o tym, które bloki zdalnego pliku znajdują się w schowku,
-
czas utworzenia, modyfikacji, ostatniego dostęp i rozmiar pliku znajdującego
się na serwerze,
-
liczbę odwołań do pliku znajdującego się w schowku.
Metadane i bloki danych przez nie opisane umieszczone są w pojedyńczym
pliku schowka. Tworzą w pliku strukturę przedstawioną na rysunku 7.
|
Rysunek: Pierwsza grupa pliku zawierającego
dane schowka
Pierszych 16 bajtów określa atrybuty pliku znajdującego się na serwerze.
Są to: czas utworzenia (c_time), modyfikacji (m_time), czas ostatniego
dostępu (a_time) i rozmiar (size). Są one przechowywane tu po to, by proces
oczyszczający schowek miał do nich dostęp. Bajty od 16 do19 określają,
ile było odowłań do pliku znajdującego się w schowku. Bajty od 20 do 2048
nie zawierają żadnych danych. Bajty od 2048 do 4095 są mapą bitową określającą,
które bloki pliku są umieszczone w schowku. Bajty od 4096 do 67 112 960
zawierają bloki danych rozmiaru 4KB. Jeżeli plik ma więcej niż 67 108 864
bajtów (2048 * 8 * 4096), to są one umieszczane w kolejnym bloku danych
zaczynającym się od bajtu 67 117 056 i opisywane przez mapę bitową umiejscowioną
między bajtami 67 112 960 a 67 117 056. Jeżeli drugi blok danych zostanie
wyczerpany, to tworz się kolejna mapa bitowa i kolejny blok danych. Taka
struktura powoduje, że przesunięcie (and. offset) odczytywanego
bloku danych jest zawsze wielokrotnością 4KB i że jest efektywnie obsługiwany
przez system ext2.
Metadane (atrybuty pliku i maski bitowe) zajmują 4KB. Mieszczą się na
jednej stronie systemu operacyjnego.
Umieszczenie map bitowych bloków w pojedyńczym pliku schowka powoduje,
że nie jest potrzebna struktura znajdująca się w przestrzeni jądra, która
określałaby, które bloki znajdują się w schowku. Zakładam, że bufory systemu
plików będą przechowywały w pamięci te fragmenty map bitowych, do których
jądro odwołuję się najczęściej. Jeżeli tak by nie było, spadek wydajności
schowka byłby prawdopodobnie nie do przyjęcia.
System plików ext2 bardzo efektywnie przechowuje rzadkie pliki.
Dlatego taka reprezentacja danych jest efektywna również w przypadku losowego
dostępu do pliku, który powoduje, że między blokami danych będą występowały
puste obszary. Także pusty obszar pomiędzy bajtami 20 i 2048 nie zajmuje
żadnych bloków na dysku.
Nazwy plików znajdujących się w schowku tworzone są z nazwy serwera
i numeru i-węzła jaki ma zdalny plik na serwerze. Wyklucza to możliwość
utworzenia pliku schowka, który będzie odpowiadał wielu zdalnym plikom.
Next:Implementacja
obsługi schowka wUp:Poprawa
wydajności systemu NFSPrevious:Opis
rozwiązania
root
2000-08-18