Next: Opis rozwiązania
Up: Poprawa wydajności systemu NFS
Previous: Poprawa wydajności systemu NFS
Wydajność NFS pod systemem Linux 2.2 jest znacznie mniejsza niż w innych implementacjach.
Składa się na to dwa czynniki:
- serwer jest umieszczony w przestrzeni użytkownika. Zmniejsza do wydajność względem
rozwiązań z serwerem umieszczonym w przestrzeni jądra;
- brak schowka dyskowego po stronie klienta;
Optymalizacjami NFS w systemie Linux 2.2 po stronie klienta są:
- asynchroniczne czytanie z wyprzedzeniem,
- schowek dla operacji odczytu utworzony ze standardowych buforów wirtualnej przestrzeni
plików (VFS),
- schowek dla wyniku operacji lookup przechowujący atrybuty plików. Wykorzystane
są standardowe mechanizmy wirtualnej przestrzeni plików.
Próbą poprawy wydajności była przedstawiona w 1998 roku przez Grega J. Badrosa
[12] implementacja dyskowego schowka NFS opartego na wersji 2.0 systemu
Linux. Nie weszła ona jednak do głównej dystrybucji systemu operacyjnego, przez
co nie istnieje w aktualnej wersji 2.2 systemu.
Schowek Grega Badrosa znajdował się w dowolnym katalogu systemu plików. Były
w nim przechowywane tylko całe pliki. Jeżeli plik nie był odczytany w całości,
uruchomiony zostawał dodatkowy proces, który uzupełniał brakujące bloki otrzymując
je od serwera. Do czasu otrzymania kompletnego pliku, jądro musiało przechowywać
w pamięci operacyjnej informacje o wszystkich blokach niekompletnych plików.
Gdyby tak nie było, to nie wiadomo by było które części pliku zawierały dane,
a które były puste.
Proces oczyszczający schowek był wydzielony z jądra. Występowałą dwustonna komunikacja
między jądrem i procesem. Jądro informowało proces o potrzebie usunięcia starych
danych wpisując żądanie do odpowiedniego pliku. Proces informuje jądra o wykonaniu
zadania poprzez psedourządzenie10.
W schowku mogły być umieszczane tylko pliki, których rozmiar był nie większy
niż 16MB.
W implementacji Grega Badrosa, oprócz schowków dla danych, pojawiają się dwa
dodatkowe elementy, których nie było w Linuksie 2.0:
- schowek dla operacji lookup,
- asynchroniczne zapisywanie danych do serwera.
W wersji 2.2 systemu Linux powyższe dwa elementy nie są potrzebne, ponieważ
wirtualna przestrzeń plików ma zaimplementowany schowek dla operacji lookup.
Stosowanie dodatkowego schowka mogłoby tylko zmniejszyć wydajność systemu. W
wersji 2.2 zaimplementowane jest też asynchroniczne zapisywanie danych.
Podjąłem się powtórnej implementacji dyskowego schowka NFS z czterech powodów:
- Greg Badros, na pytanie dlaczego nie rozwija swojej wersji schowka, napisał
mi, że zajął się innymi projektami. Oznacza to, że ta wersja schowka prawdopodobnie
nigdy nie pojawi się w oficjalnej dystrybucji;
- rozwiązanie Grega Badrosa nie zostało umieszczone w głównej dystrybucji Linuxa.
Wymagało poprawek kodu, który łamał standardy Linuxa;
- rozwiązanie Grega Badrosa nie współpracuje z Linuxem w wersji 2.2;
- inaczej niż Greg Badros wyobrażam sobie niektóre rozwiązania zastosowane w schowku.
Różnice opisane są w paragrafie 4.6.
Next: Opis rozwiązania
Up: Poprawa wydajności systemu NFS
Previous: Poprawa wydajności systemu NFS
root
2000-08-18