Udostępnij przez


Najlepsze praktyki dotyczące pamięci podręcznej systemu plików 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.

Dostosowywalne parametry 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, że dane są pozostawione w czystym stanie, gotowe do przyszłych odczytów, aż nacisk na pamięć zmusi je do usunięcia.
  • Istnieją trzy wyzwalacze dla operacji opróżniania asynchronicznego:
    • Na podstawie czasu: gdy bufor osiągnie wiek zdefiniowany przez ten parametr, musi być przeznaczony do czyszczenia (czyli opróżnianie bufora lub zapisania na nośniku danych).
    • Obciążenie pamięci: Zobacz vm.dirty_ratio | vm.dirty_bytes, aby uzyskać szczegółowe informacje.
    • Zamknięcie: po zamknięciu uchwytu pliku wszystkie niezapisane bufory są asynchronicznie opróżniane do magazynu.

Te czynniki są kontrolowane przez cztery dostrajania. Każdy parametr można regulować dynamicznie i trwale przy użyciu tuned lub sysctl w pliku /etc/sysctl.conf. 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 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óry parametr jest ustawiony automatycznie, drugi parametr zostaje ustawiony na zero; RedHat odradza ręczne ustawianie któregokolwiek z dwóch parametrów na zero. Opcja vm.dirty_ratio (wartość domyślna dwóch) jest ustawiana przez system Red Hat 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 w nowoczesnych systemach. Należy rozważyć ustawienie vm.dirty_bytes zamiast vm.dirty_ratio, aby zapewnić bardziej spójne działanie, niezależnie od rozmiaru pamięci. Na przykład ciągła praca z SAS GRID określiła 30 MiB jako właściwe ustawienie dla najlepszej ogólnej wydajności mieszanych obciążeń.

vm.dirty_background_ratio | vm.dirty_background_bytes

Te parametry konfiguracyjne definiują punkt początkowy, w którym mechanizm zapisu wstecznego systemu Linux rozpoczyna czyszczenie brudnych bloków do stabilnego magazynu. Red Hat domyślnie ustawia wykorzystanie na 10% pamięci fizycznej, co w przypadku systemu o dużej pojemności pamięci oznacza znaczną ilość danych do rozpoczęcia czyszczenia. Na przykład w przypadku usługi SAS GRID, historycznie zalecano ustawienie rozmiaru 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

Ten parametr konfiguracyjny określa, jak długo zanieczyszczony bufor może istnieć, zanim będzie musiał zostać oznakowany do asynchronicznego zapisu. Weźmy na przykład obciążenie CAS w SAS 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 o wielkości kilku megabajtów. Zamiast zamykać te uchwyty plików po zapisaniu danych do każdego fragmentu, uchwyty pozostają otwarte, a aplikacja mapuje znajdujące się wewnątrz bufory na pamięć. Bez zamknięcia nie nastąpi opróżnienie, chyba że wystąpi obciążenie pamięci lub upłynie 30 sekund. Oczekiwanie na przekroczenie limitu pamięci okazało się nieoptymalne, podobnie jak oczekiwanie na wygaśnięcie długiego czasomierza. W przeciwieństwie do usługi SAS GRID, która szukała najlepszej ogólnej przepływności, SAS Viya dążyła do optymalizacji przepustowości zapisu.

vm.dirty_writeback_centisecs

pl-PL: Wątek czyszczenia buforów jądra jest odpowiedzialny za asynchroniczne opróżnianie brudnych buforów pomiędzy przerwami w działaniu każdego wątku opróżniania. Parametr definiuje czas poświęcony na usypianie między operacjami opróżniania. Biorąc pod uwagę 3-sekundową vm.dirty_expire_centisecs wartość używaną przez SAS Viya, SAS ustawił tę możliwość dostosowania do 100 centysekund (1 sekunda), a nie 500 centysekund (5 sekund), aby znaleźć najlepszą ogólną wydajność.

Wpływ niedostrojonej pamięci podręcznej systemu plików

Jeśli weźmiesz pod uwagę domyślne ustawienia pamięci wirtualnej i ilość pamięci RAM we współczesnych systemach, zapisywanie z opóźnieniem może potencjalnie spowolnić inne operacje związane z przechowywaniem z perspektywy konkretnego klienta, który obsługuje to mieszane obciążenie. Następujących objawów można oczekiwać od maszyny z systemem Linux, która jest niezoptymalizowana, z dużym obciążeniem zapisem i obciążoną pamięcią podręczną.

  • Listy katalogów ls wczytują się tak długo, że wydają się nie odpowiadać.
  • Przepływność odczytu w systemie plików znacznie się zmniejsza w porównaniu z przepływnością zapisu.
  • nfsiostat raportuje opóźnienia zapisu w sekundach lub więcej.

Takie zachowanie może wystąpić tylko w przypadku maszyny z systemem Linux wykonującej mieszane obciążenie intensywnie korzystające z zapisu. Ponadto doświadczenie jest pogorszone dla wszystkich woluminów NFS zamontowanych 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ść pamięci brudnej w systemie, a writeback reprezentuje ilość pamięci aktywnie zapisywanej w pamięci masowej.

# 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 stosunek vm.dirty_ratio i stosunek vm.dirty_background zostały ustawione odpowiednio na 2% i 1% pamięci fizycznej. W tym przypadku opróżnianie rozpoczęło się przy osiągnięciu 3,8 GiB, co stanowi 1% systemu pamięciowego 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