Udostępnij za pośrednictwem


Najlepsze rozwiązania dotyczące pamięci podręcznej systemu plików systemu plików systemu Linux dla usługi Azure NetApp Files

Ten artykuł pomaga zrozumieć najlepsze rozwiązania dotyczące pamięci podręcznej systemu plików dla usługi Azure NetApp Files.

Możliwość dostosowania pamięci podręcznej systemu plików

Należy zrozumieć następujące czynniki dotyczące dostrajania pamięci podręcznej systemu plików:

  • Opróżnianie zanieczyszczonego buforu powoduje pozostawienie danych w czystym stanie, który będzie można wykorzystać do przyszłych operacji odczytu, dopóki wykorzystanie pamięci nie doprowadzi do eksmisji.
  • Istnieją trzy wyzwalacze dla operacji opróżniania asynchronicznego:
    • Na podstawie czasu: gdy bufor osiągnie wiek zdefiniowany przez to dostrajanie, musi być oznaczony do czyszczenia (czyli opróżniania lub zapisywania w magazynie).
    • Wykorzystanie pamięci: zobacz vm.dirty_ratio | vm.dirty_bytes , aby uzyskać szczegółowe informacje.
    • Zamknij: po zamknięciu uchwytu pliku wszystkie zanieczyszczone bufory są asynchroniczne opróżniane do magazynu.

Te czynniki są kontrolowane przez cztery dostrajania. Każde dostrajanie można dostroić dynamicznie i trwale przy użyciu tuned lub sysctl w /etc/sysctl.conf pliku. Dostrajanie tych zmiennych zwiększa wydajność aplikacji.

Uwaga

Informacje omówione w tym artykule zostały odkryte podczas ćwiczeń weryfikacji SAS GRID i SAS Viya. W związku z tym możliwości dostrajania są oparte na lekcjach wyciągniętych z ćwiczeń walidacji. Wiele aplikacji będzie podobnie korzystać z dostrajania tych parametrów.

vm.dirty_ratio | vm.dirty_bytes

Te dwie możliwości dostrajania definiują ilość pamięci RAM, która będzie można wykorzystać do modyfikacji danych, ale nie została jeszcze zapisana w stabilnym magazynie. Niezależnie od tego, która możliwość dostosowania jest ustawiana automatycznie, ustawia pozostałe dostrajania do zera; System RedHat zaleca ręczne ustawienie jednego z dwóch parametrów dostrajania do zera. Opcja vm.dirty_ratio (wartość domyślna dwóch) jest ustawiana przez firmę Redhat na 20% lub 30% pamięci fizycznej w zależności od systemu operacyjnego, co jest znaczną ilością, biorąc pod uwagę zużycie pamięci przez nowoczesne systemy. Należy rozważyć ustawienie vm.dirty_bytes zamiast vm.dirty_ratio bardziej spójnego środowiska niezależnie od rozmiaru pamięci. Na przykład ciągła praca z usługą SAS GRID określiła 30 miB odpowiednie ustawienie dla najlepszej ogólnej wydajności obciążeń mieszanych.

vm.dirty_background_ratio | vm.dirty_background_bytes

Te możliwości dostrajania definiują punkt początkowy, w którym mechanizm zapisywania zwrotnego systemu Linux rozpoczyna opróżnianie zanieczyszczonych bloków do stabilnego magazynu. System Redhat domyślnie wynosi 10% pamięci fizycznej, która w dużym systemie pamięci jest znaczną ilością danych do rozpoczęcia opróżniania. Na przykład biorąc pod uwagę usługę SAS GRID, historycznie zalecenie zostało ustawione vm.dirty_background na 1/5 rozmiaru vm.dirty_ratio lub vm.dirty_bytes. Biorąc pod uwagę, jak agresywne vm.dirty_bytes ustawienie jest ustawione dla usługi SAS GRID, nie ustawiono żadnej określonej wartości w tym miejscu.

vm.dirty_expire_centisecs

Ta możliwość dostosowania określa, jak stary może być zanieczyszczony bufor, zanim będzie musiał zostać oznaczony jako asynchroniczne zapisywanie. Weź na przykład obciążenie CAS sygnatury dostępu współdzielonego Viya. Efemeryczne obciążenie dominujące w zapisie wykazało, że ustawienie tej wartości na 300 centysekund (3 sekundy) było optymalne, a wartość domyślna wynosi 3000 centysekund (30 sekund).

Sas Viya udostępnia dane CAS w wielu małych fragmentach kilku megabajtów. Zamiast zamykać te dojścia do plików po zapisaniu danych do każdego fragmentu, uchwyty są pozostawione otwarte, a bufory w ramach programu są mapowane przez aplikację na pamięć. Bez zamknięcia nie będzie żadnych opróżnień, dopóki nie minie ciśnienie pamięci lub 30 sekund. Oczekiwanie na wykorzystanie pamięci okazało się nieoptymalne, podobnie jak oczekiwanie na długi czasomierz do wygaśnięcia. W przeciwieństwie do usługi SAS GRID, która szukała najlepszej ogólnej przepływności, sas Viya szukała optymalizacji przepustowości zapisu.

vm.dirty_writeback_centisecs

Wątek opróżniania jądra jest odpowiedzialny za asynchroniczne opróżnianie brudnych buforów między poszczególnymi wątkami opróżniania. To dostrajanie definiuje ilość poświęcaną na spanie między opróżnieniami. Biorąc pod uwagę 3-sekundową vm.dirty_expire_centisecs wartość używaną przez sas Viya, sygnatura dostępu współdzielonego ustawiła tę możliwość dostosowania do 100 centysekund (1 sekund), a nie 500 centysekund (5 sekund), aby znaleźć najlepszą ogólną wydajność.

Wpływ nieostrożonej pamięci podręcznej systemu plików

Biorąc pod uwagę domyślne możliwości dostosowania pamięci wirtualnej i ilość pamięci RAM w nowoczesnych systemach, zapis może potencjalnie spowalniać inne operacje związane z magazynem z perspektywy określonego klienta napędzające to mieszane obciążenie. Następujące objawy mogą być oczekiwane na maszynie z systemem Linux z nieostrożnym, dużym obciążeniem zapisem i pamięcią podręczną.

  • Listy katalogów ls zajmują wystarczająco dużo czasu, aby nie odpowiadać.
  • Przepływność odczytu w systemie plików znacznie się zmniejsza w porównaniu z przepływnością zapisu.
  • nfsiostat raporty zapisu opóźnienia w sekundach lub wyższym.

Takie zachowanie może wystąpić tylko przez maszynę z systemem Linux wykonującą mieszane obciążenie z dużym obciążeniem zapisu. Ponadto środowisko jest obniżone względem wszystkich woluminów NFS zainstalowanych w jednym punkcie końcowym magazynu. Jeśli instalacja pochodzi z co najmniej dwóch punktów końcowych, tylko woluminy współużytkowane przez punkt końcowy wykazują to zachowanie.

Ustawienie parametrów pamięci podręcznej systemu plików zgodnie z opisem w tej sekcji zostało pokazane w celu rozwiązania problemów.

Monitorowanie pamięci wirtualnej

Aby zrozumieć, co dzieje się z pamięcią wirtualną i zapisem zwrotnym, rozważ poniższy fragment kodu i dane wyjściowe. Dirty reprezentuje ilość zanieczyszczonej pamięci w systemie, a zapis zwrotny reprezentuje ilość pamięci aktywnie zapisywanej w magazynie.

# while true; do echo "###" ;date ; egrep "^Cached:|^Dirty:|^Writeback:|file" /proc/meminfo; sleep 5; done

Następujące dane wyjściowe pochodzą z eksperymentu, w którym vm.dirty_ratio proporcja i vm.dirty_background została ustawiona odpowiednio na 2% i 1% pamięci fizycznej. W tym przypadku opróżnianie rozpoczęło się na poziomie 3,8 GiB, 1% systemu pamięci 384 GiB. Zapisywanie zwrotne dokładnie przypomina przepływność zapisu w usłudze NFS.

Cons
Dirty:                                    1174836 kB
Writeback:                         4 kB
###
Dirty:                                    3319540 kB
Writeback:                         4 kB
###
Dirty:                                    3902916 kB        <-- Writes to stable storage begins here
Writeback:                         72232 kB   
###
Dirty:                                    3131480 kB
Writeback:                         1298772 kB   

Następne kroki