Konfigurowanie pamięci podręcznej ZFS dla wysokiej prędkości IO

Konfigurowanie pamięci podręcznej ZFS dla wysokiej prędkości IO

Konfigurowanie pamięci podręcznej w puli ZFS

Jeśli przeszłeś przez nasze poprzednie posty na podstawie podstaw ZFS, wiesz, że jest to niezawodny system plików. Wykonuje sumy kontrolne na każdym bloku danych zapisanych na dysku i ważnych metadanych, podobnie jak same wskaźniki kontrolne, są zapisane w wielu różnych miejscach. ZFS może stracić dane, ale gwarantuje się, że nigdy nie zwróci ci złych danych, jakby to były właściwe.

Większość redundancji puli ZFS pochodzi z bazowych VDEVS. To samo dotyczy wydajności puli pamięci. Zarówno wydajność odczytu, jak i zapisu mogą znacznie poprawić się poprzez dodanie SSDS SSD lub NVME. Jeśli użyłeś dysków hybrydowych, w których dysk SSD i wirujący są pakowane jako pojedynczy kawałek sprzętu, wiesz, jak złe są mechanizmy buforowania na poziomie sprzętu. ZFS to nic takiego, ze względu na różne czynniki, które tutaj zbadamy.

Istnieją dwa różne bufory, z których pula może skorzystać:

  1. ZFS Intent Log lub ZIL, aby buforować operacje zapisu.
  2. ARC i L2ARC, które są przeznaczone do operacji odczytu.

Pisze synchroniczne vs asynchroniczne

ZFS, podobnie jak większość innych systemów plików, próbuje utrzymać bufor operacji zapisu w pamięci, a następnie napisać go na dyskach. To jest znane jako asynchroniczny pisz i daje przyzwoitą wydajność dla aplikacji, które są odporne na uszkodzenia lub gdy utrata danych nie wyrządza większego uszkodzenia. OS po prostu przechowuje dane w pamięci i mówi aplikacji, która poprosiła o zapis, że zapis jest zakończony. Jest to domyślne zachowanie wielu systemów operacyjnych, nawet podczas uruchamiania ZFS.

Jednak faktem jest, że w przypadku awarii systemu lub utraty mocy wszystkie buforowane zapisy w pamięci głównej są utracone. Tak więc aplikacje, które pragną spójności w zakresie wydajności, mogą otworzyć pliki synchroniczny tryb, a następnie dane są uważane za zapisane tylko po tym, jak faktycznie znajdują się na dysku. Większość baz danych i aplikacji, takich jak NFS, cały czas polega na zapisach synchronicznych.

Możesz ustawić flagę: sync = zawsze Aby synchroniczne zapisuje domyślne zachowanie dla dowolnego zestawu danych.

$ zfs set sync = zawsze myPool/DataSet1

Oczywiście możesz chcieć mieć dobrą wydajność, niezależnie od tego, czy pliki są w trybie synchronicznym. Tam wchodzi Zil na zdjęciu.


ZFS Intent Log (ZIL) i urządzenia Slog

ZFS Intent Log odnosi się do części puli pamięci, której ZFS używa do przechowywania nowych lub zmodyfikowanych danych, przed rozpowszechnieniem ich w głównej puli pamięci masowej, rozbijając wszystkie VDEVS.

Domyślnie pewna niewielka ilość przechowywania jest zawsze wykupiona z basenu, aby działać jak ZIL, nawet gdy używasz tylko kilku wirujących dysków do przechowywania. Możesz jednak zrobić lepiej, jeśli masz do dyspozycji mały NVME lub jakikolwiek inny rodzaj SSD.

Małe i szybkie przechowywanie może być używane jako osobny dziennik intencyjny (lub slog), w którym nowo przybyte dane będą przechowywane tymczasowo, zanim zostaną wypłukane do większego głównego przechowywania puli puli. Aby dodać urządzenie hasła, uruchom polecenie:

$ ZPOOL Dodaj dziennik zbiornika ADA3

Gdzie czołg to nazwa twojej puli, dziennik jest słowem kluczowym informującym ZFS do leczenia urządzenia ADA3 Jako urządzenie. Węzeł urządzenia SSD niekoniecznie musi być ADA3, Użyj poprawnej nazwy węzła.

Teraz możesz sprawdzić urządzenia w puli, jak pokazano poniżej:

Nadal możesz się martwić, że dane w pamięci nieulotnej nie powiedzie się, jeśli SSD się nie powiedzie. W takim przypadku możesz użyć wielu dysków SSD, które odzwierciedlają się lub w dowolnej konfiguracji RaIDZ.

$ ZPOOL Dodaj lusterko dziennika zbiornika ADA3 ADA4

W większości przypadków użycia małe od 16 GB do 64 GB naprawdę szybkiego i trwałego pamięci flash są najbardziej odpowiednimi kandydatami do urządzenia.


Adaptacyjna pamięć podręczna (ARC) i L2ARC

Podczas próby buforowania operacji odczytu nasze obiektywne zmieniają się. Zamiast upewnić się, że uzyskamy dobrą wydajność, a także niezawodne transakcje, teraz zmiany motywu ZFS do przewidywania przyszłości. Oznacza to, że buforowanie informacji, których aplikacja wymagałaby w najbliższej przyszłości, jednocześnie odrzucając te, które będą potrzebne najdalej z wyprzedzeniem na czas.

Aby to zrobić, część pamięci głównej służy do buforowania danych, które były ostatnio używane, albo najczęściej dostępne są dane. Stąd pochodzi termin adaptacyjna pamięć podręczna zastępująca (ARC). Oprócz tradycyjnego buforowania odczytu, w którym buforowane są tylko niedawno używane obiekty, łuk zwraca również uwagę na to, jak często dostępne są dane.

L2ARC lub poziom 2 jest rozszerzeniem łuku. Jeśli masz dedykowane urządzenie do przechowywania do działania jako L2ARC, będzie ono przechowywać wszystkie dane, które nie są zbyt ważne, aby pozostać w łuku, ale jednocześnie dane są wystarczająco przydatne, aby zasłużyć na miejsce w wolniejszym niż pamięć Urządzenie NVME.

Aby dodać urządzenie jako L2ARC do puli ZFS, uruchom polecenie:

$ ZPOOL Dodaj pamięć podręczną zbiornika ADA3

Gdzie czołg Czy nazwa twojego puli i ADA3 to nazwa węzła urządzenia dla pamięci L2ARC.


Streszczenie

Aby skrócić długą historię, system operacyjny często buforuje operacje w pamięci głównej, jeśli pliki są otwarte w trybie asynchronicznym. Nie należy tego mylić z faktyczną pamięcią podręczną ZFS, ZIL.

Domyślnie ZIL jest częścią nieulotnej pamięci puli, w której dane mają na celu tymczasowe przechowywanie, zanim są prawidłowo rozprzestrzeniane we wszystkich VDEV. Jeśli używasz SSD jako dedykowanego urządzenia ZIL, jest ono znane jako hasło. Jak każde VDEV, Slog może być w konfiguracji lustra lub RaIDza.

Przeczytaj pamięć podręczną, przechowywane w pamięci głównej, jest znany jako łuk. Jednak ze względu na ograniczony rozmiar pamięci RAM zawsze możesz dodać dysk SSD jako L2ARC, w którym rzeczy, które nie mogą zmieścić się w pamięci RAM.