Konfigurowanie pamięci podręcznej ZFS dla dużych prędkości IO

Konfigurowanie pamięci podręcznej ZFS dla dużych prędkości IO
Zespół stojący za ZFS uważa, że ​​wolna i niewykorzystana pamięć jest marnowana pamięć. Tak więc zaprojektowali ZFS do bardzo agresywnego buforowania danych. ZFS próbuje buforować jak najwięcej danych w pamięci (RAM), aby zapewnić szybszy dostęp do systemu plików.

Niestety pamięć (RAM) jest bardzo kosztowna. Tak więc ZFS pozwala również używać szybkich dysków SSDS również do buforowania danych. Dane buforowania pamięci nazywa się pamięci podręcznej poziomu 1 lub L1, a dane buforowania na SSD nazywa się pamięci podręcznej poziomu 2 lub L2.

ZFS wykonuje 2 rodzaje buforowania odczytu

1. ARC (adaptacyjna pamięć podręczna wymiany):

ZFS buforuje ostatnio i najczęściej dostępny pliki w pamięci RAM. Po buforowaniu plik pamięci, następnym razem, gdy uzyskasz dostęp do tego samego pliku, zostanie on obsługiwany z pamięci podręcznej zamiast powolnego dysku twardego. Dostęp do tych buforowanych plików będzie wiele razy szybszy niż gdyby miał do nich dostęp z dysków twardych.

2. L2ARC (adaptacyjna pamięć zastępująca poziom 2):

Pamięć podręczna Arc jest przechowywana w pamięci komputera. Gdy pamięć jest pełna, najstarsze dane są usuwane z pamięci podręcznej łukowej, a nowe dane są buforowane. Jeśli nie chcesz, aby ZFS na stałe wyrzuciły buforowane dane, możesz skonfigurować szybki SSD jako pamięć podręczną L2ARC dla puli ZFS.

Po skonfigurowaniu pamięci podręcznej L2ARC dla puli ZFS ZFS będzie przechowywać dane usunięte z pamięci podręcznej Arc w pamięci podręcznej L2ARC. Tak więc więcej danych można przechowywać w pamięci podręcznej, aby uzyskać szybszy dostęp.

ZFS robi 2 rodzaje buforowania zapisu

1. ZIL (ZFS Intent Log):

ZFS domyślnie przydziela niewielką część puli do przechowywania pamięci podręcznej. Nazywa się Zil Lub ZFS Intent Log. Przed zapisaniem danych na fizycznych dyskach twardych, są one przechowywane w ZIL. Aby zminimalizować liczbę operacji zapisu i zmniejszyć fragmentację danych, dane są grupowane w ZIL i przepłukiwane na fizyczny dysk twardy po osiągnięciu określonego progu. To bardziej jak bufor zapisu niż pamięć podręczna. Możesz o tym pomyśleć w ten sposób.

2. Slog (dziennik wtórny):

Ponieważ ZFS używa niewielkiej części basenu do przechowywania ZIL, dzieli przepustowość puli ZFS. Może to mieć negatywny wpływ na wydajność puli ZFS.

Aby rozwiązać ten problem, możesz użyć szybkiego SSD jako urządzenia. Jeśli na puli ZFS istnieje urządzenie slogu, wówczas ZIL jest przenoszony do urządzenia slogu. ZFS nie będzie już przechowywać danych ZIL na puli. Tak więc na ZIL nie marnuje się przepustowości basenu.

Istnieją również inne korzyści. Jeśli aplikacja zapisuje pulę ZFS przez sieć (i.mi. VMware ESXI, NFS), ZFS mogą szybko zapisać dane do hasła i wysłać potwierdzenie do aplikacji, że dane są zapisywane na dysku. Następnie może zapisać dane na wolniejsze dyski twarde jak zwykle. To sprawi, że te aplikacje będą bardziej responsywne.

Zauważ, że normalnie ZFS nie czyta z hasła. ZFS odczytuje dane z hasła w przypadku utraty mocy lub awarii zapisu. Uznane pisze są tam przechowywane tylko tamczasowo, dopóki nie zostaną spłukiwane do wolniejszych dysków twardych. Ma tylko zapewnić, że w przypadku utraty mocy lub awarii zapisu, potwierdzone zapisy nie zostaną utracone i są one jak najszybciej spłukiwane do stałych urządzeń magazynowych.

Zwróć również uwagę, że przy braku urządzenia do slogu ZIL będzie używany do tego samego celu.

Teraz, gdy wiesz wszystko o ZFS, czytaj i pisz buforów, zobaczmy, jak je skonfigurować na puli ZFS.

Spis treści

  1. Konfigurowanie maksymalnego limitu pamięci dla ARC
  2. Dodanie urządzenia do pamięci podręcznej L2ARC
  3. Dodanie urządzenia z hasłem
  4. Wniosek
  5. Bibliografia

Konfigurowanie maksymalnego limitu pamięci dla ARC

W Linux ZFS domyślnie używa 50% zainstalowanej pamięci do buforowania łuku. Tak więc, jeśli masz 8 GB pamięci zainstalowanej na komputerze, ZFS użyje 4 GB pamięci do buforowania łuku na maks.

Jeśli potrzebujesz, możesz zwiększyć lub zmniejszyć maksymalną ilość pamięci, którą można użyć do buforowania łuku. Aby ustawić maksymalną ilość pamięci, którą ZFS może użyć do buforowania łuku, możesz użyć ZFS_ARC_MAX Parametr jądra.

Możesz znaleźć wiele informacji o wykorzystaniu pamięci podręcznej ARC za pomocą Arc_summary polecenie w następujący sposób:

$ sudo arc_summary -s arc

w Rozmiar łuku (prąd) Sekcja można znaleźć maksymalny rozmiar, który może rosnąć pamięć podręczna łuku (Max rozmiar (wysoka woda)), rozmiar bieżącej pamięci podręcznej łukowej (Rozmiar docelowy (adaptacyjny)) i inne informacje o użyciu pamięci podręcznej ARC, jak widać na zrzucie ekranu poniżej.

Zauważ, że rozmiar pamięci podręcznej maksymalnej łuku na moim komputerze wynosi 3.9 GB, ponieważ mam 8 GB pamięci zainstalowanej na moim komputerze. To około 50% całkowitej dostępnej pamięci, jak wspomniałem wcześniej.

Możesz zobaczyć, ile danych trafia w pamięć podręczną ARC i ile danych pomija również pamięć podręczną ARC. Może to pomóc w ustaleniu, jak skutecznie działa pamięć podręczna ARC w twoim scenariuszu.

Aby wydrukować podsumowanie uderzeń/braków pamięci podręcznej ARC, uruchom następujące polecenie:

$ sudo arc_summary -s archits

Podsumowanie uderzeń i braków pamięci podręcznej ARC powinno być wyświetlane, jak widać na zrzucie ekranu poniżej.

Możesz monitorować zużycie pamięci pamięci podręcznej ZFS Arc za pomocą następującego polecenia:

$ sudo arcstat 1 2>/dev/null

Jak widać, maksymalna pamięć pamięci podręcznej (C), bieżący rozmiar pamięci podręcznej łukowej (Arcsz), Odczytane dane z pamięci podręcznej ARC (Czytać) i inne informacje są wyświetlane.

Teraz zobaczmy, jak ustawić niestandardowy limit pamięci dla pamięci podręcznej ZFS Arc.

Aby ustawić niestandardowy limit pamięci maksymalnej dla pamięci podręcznej ZFS, utwórz nowy plik ZFS.conf w /etc/modprobe.D/ katalog w następujący sposób:

$ sudo nano /etc /modprobe.D/ZFS.conf

Wpisz w następującym wierszu w ZFS.conf plik:

Opcje ZFS ZFS_ARC_MAX =

Zastępować, z pożądanym maksymalnym limitem pamięci dla pamięci podręcznej ZFS w bajtach.

Powiedzmy, że chcesz użyć 5 GB pamięci dla pamięci podręcznej ZFS Arc. Aby przekonwertować 5 GB na bajty, możesz użyć następującego polecenia:

$ echo $ ((5*2 ** 30))

Jak widzisz, 5 GB jest równe 5368709120 bajty.

Możesz zrobić to samo z tłumaczem Python 3 w następujący sposób:

$ Python3 -C "Drukuj (5*2 ** 30)"

Po ustawieniu limitu pamięci pamięci podręcznej ZFS Arc naciśnij + X śledzony przez Y I Aby uratować ZFS.conf plik.

Teraz zaktualizuj obraz initramfs twojego bieżącego jądra za pomocą następującego polecenia:

$ sudo aktualizacja initramfs -u

Obraz initramfs powinien zostać zaktualizowany.

Aby zmiany zaczęły uruchomić komputer za pomocą następującego polecenia:

$ sudo restart

Następnym razem, gdy uruchomisz komputer, maksymalny limit pamięci pamięci ZFS Pamięć podręczna ZFS powinien być ustawiony na pożądany rozmiar (w moim przypadku 5 GB), jak widać na zrzucie ekranu poniżej.

$ sudo arc_summary -s arc

Dodanie urządzenia do pamięci podręcznej L2ARC

Jeśli do twojej puli ZFS jest dodawane urządzenie pamięci podręcznej L2ARC (SSD lub NVME), ZFS odciąży (przenoszenie) Buforing łuku do urządzenia L2ARC, gdy pamięć jest pełna (lub osiągnie limit maksymalnego łuku). Tak więc więcej danych można przechowywać w pamięci podręcznej, aby uzyskać szybszy dostęp do puli ZFS.

Aby śledzić wraz z przykładami, utwórz test testu ZFS Pool1 z /dev/sdb I /dev/sdc dyski twarde w lustrzanej konfiguracji w następujący sposób:

$ sudo zpool Utwórz -f pula 1 lustro /dev /sdb /dev /sdc

Pula ZFS Pool1 powinien być utworzony z /dev/sdb I /dev/sdc dyski twarde w trybie lustrzanym, jak widać na zrzucie ekranu poniżej.

$ sudo zpool pula stanu 1

Powiedzmy teraz, chcesz dodać SSD NVME NVME0N1 Jako urządzenie pamięci podręcznej L2ARC dla puli ZFS Pool1.

$ sudo lsblk -e7

Aby dodać SSD NVME NVME0N1 do puli ZFS Pool1 Jako urządzenie pamięci podręcznej L2ARC uruchom następujące polecenie:

$ sudo zpool dodaj -f pula 1 pamięć podręczna /dev /nvme0n1

NVME SSD NVME0N1 należy dodać do puli ZFS Pool1 Jako urządzenie pamięci podręcznej L2ARC, jak widać na zrzucie ekranu poniżej.

$ sudo zpool pula stanu 1

Po dodaniu urządzenia pamięci podręcznej L2ARC do puli ZFS możesz wyświetlić statystyki pamięci podręcznej L2ARC za pomocą Arc_summary polecenie w następujący sposób:

$ sudo arc_summary -s l2arc

Statystyki pamięci podręcznej L2ARC powinny być wyświetlane, jak widać na zrzucie ekranu poniżej.

Dodanie urządzenia z hasłem

Możesz dodać jeden lub więcej dysków SSDS/NVME do puli ZFS jako urządzenie slogu (log wtórny) do przechowywania dziennika ZFS (ZIL) puli ZFS.

Zwykle wystarczy dodawanie jednego SSD. Ale ponieważ slog jest używany do upewnienia się, że zapisy nie są utracone w przypadku awarii zasilania i innych problemów z zapisem, zaleca się użycie 2 SSD w lustrzanej konfiguracji. To da ci nieco większą ochronę i upewni się, że żadne zapisy nie zostaną utracone.

Powiedzmy, że chcesz dodać SSD NVME NVME0N2 I NVME0N3 Jako urządzenie hasła w puli ZFS Pool1 W lustrzanej konfiguracji.

$ sudo lsblk -e7

Aby dodać SSD NVME NVME0N2 I NVME0N3 Jako urządzenie hasła w puli ZFS Pool1 W lustrzanej konfiguracji uruchom następujące polecenie:

$ sudo zpool add -f pula 1 lustro /dev /nvme0n2 /dev /nvme0n3

Jeśli chcesz dodać pojedynczy SSD NVME NVME0N2 Jako urządzenie hasła w puli ZFS Pool1, Zamiast tego możesz uruchomić następujące polecenie:

$ sudo zpool add -f pula 1 log /dev /nvme0n2

SSD NVME NVME0N2 I NVME0N3 należy dodać do puli ZFS Pool1 jako urządzenie hasła w trybie lustrzanym, jak widać na zrzucie ekranu poniżej.

$ sudo zpool pula stanu 1

Możesz znaleźć informacje o transakcji ZIL i Slog za pomocą Arc_summary polecenie w następujący sposób:

$ sudo arc_summary -s zil

Informacje o transakcji zil i slogu powinny być wyświetlane, jak widać na zrzucie ekranu poniżej.

Wniosek

W tym artykule omówiłem różne rodzaje funkcji buforowania odczytu i zapisu systemu plików ZFS. Pokazałem również, jak skonfigurować limit pamięci dla pamięci podręcznej łukowej. Pokazałem ci, jak dodać urządzenie pamięci podręcznej L2ARC i urządzenie slogu do puli ZFS.

Bibliografia

[1] ZFS - Wikipedia

[2] Eli5: ZFS Buging (2019) - YouTube

[3] Wprowadzenie ZFS na Linux - Damian Wojstaw

[4] Ubuntu Manpage: ZFS-Module-Parameters-Parametry modułu ZFS

[5] Ram - to ZFS na Ubuntu 20.04 Używając tony pamięci? - Zapytaj Ubuntu