nextupprevious
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:

Każdemu zdalnemu plikowi odpowiada jeden plik w schowku zawierający kopię danych. W pliku razem z danymi znajdują się metadane. Metadane obejmują: Metadane i bloki danych przez nie opisane umieszczone są w pojedyńczym pliku schowka. Tworzą w pliku strukturę przedstawioną na rysunku 7.
\resizebox* {1\columnwidth}{!}{\includegraphics{klaster1.ps}}
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.


nextupprevious
Next:Implementacja obsługi schowka wUp:Poprawa wydajności systemu NFSPrevious:Opis rozwiązania
root

2000-08-18