Wydanie ZFS na Linuksie 0.8.0, implementacje ZFS dla jądra Linuksa

Po prawie dwóch latach rozwoju przedstawione wydanie ZFS w Linuksie 0.8.0, implementacja systemu plików ZFS spakowana jako moduł dla jądra Linuksa. Moduł został przetestowany z jądrami Linuksa od 2.6.32 do 5.1. Gotowe pakiety instalacyjne już wkrótce będzie przygotowany dla głównych dystrybucji Linuksa, w tym Debian, Ubuntu, Fedora, RHEL/CentOS. Moduł ZFS on Linux jest już zawarty w dystrybucjach Debian, Ubuntu, Gentoo, Sabayon Linux i ALT Linux.

W ramach ZFS na Linuksie przygotowano implementację komponentów ZFS związanych zarówno z obsługą systemu plików, jak i funkcjonowaniem menedżera woluminów. W szczególności zaimplementowane są następujące komponenty: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) i ZPL (ZFS POSIX Layer). Dodatkowo projekt zapewnia możliwość wykorzystania ZFS jako backendu dla klastrowego systemu plików Lustre. Działanie projektu opiera się na oryginalnym kodzie ZFS zaimportowanym z projektu OpenSolaris i wzbogaconym o ulepszenia i poprawki od społeczności Illumos. Projekt jest rozwijany przy udziale pracowników Livermore National Laboratory w ramach kontraktu z Departamentem Energii USA.

Kod jest rozpowszechniany na bezpłatnej licencji CDDL, która jest niezgodna z GPLv2, co nie pozwala na integrację ZFS w systemie Linux z główną gałęzią jądra Linuksa, ponieważ mieszanie kodu na licencjach GPLv2 i CDDL jest niedozwolone. Aby obejść tę niezgodność licencji, zdecydowano się na dystrybucję całego produktu na licencji CDDL jako oddzielnie ładowalny moduł, który jest dostarczany oddzielnie od rdzenia. Stabilność ZFS w bazie kodu Linux jest oceniana jako porównywalna z innymi systemami plików dla Linuksa.

Główne zmiany:

  • Dodano wbudowaną obsługę szyfrowania przechowywanych danych na poziomie systemu plików i partycji. Domyślnym algorytmem szyfrowania jest aes-256-ccm. Zaproponowano polecenie „zfs load-key” do ładowania kluczy szyfrujących;
  • Zaimplementowano możliwość przesyłania zaszyfrowanych danych podczas wykonywania poleceń „zfs send” i „zfs receiver”. W przypadku określenia opcji „-w” dane już zaszyfrowane w puli są przesyłane do innej puli w niezmienionej postaci, bez pośredniego odszyfrowywania. Przy takim kopiowaniu dane pozostają chronione kluczem nadawcy, co pozwala na wykorzystanie tego trybu do tworzenia kopii zapasowych w niewiarygodnych systemach (w przypadku włamania się odbiorcy atakujący nie będzie mógł uzyskać dostępu do danych bez klucza);
  • Dodano obsługę usuwania dysków głównych z puli pamięci, podłączonych zarówno pojedynczo, jak i jako część kopii lustrzanej. Usuwanie odbywa się za pomocą polecenia „zpool remove”. Proces usuwania kopiuje dane z wykluczonego dysku na pozostałe dyski podstawowe w puli;
  • Dodano polecenie „zpool checkpoint”, aby zapisać aktualny stan puli z możliwością cofnięcia dalszych zmian do zapisanego punktu w czasie (tworzona jest migawka całej puli). Ta funkcja może być przydatna w procesie wykonywania potencjalnie niebezpiecznych skomplikowanych prac administracyjnych, które w normalnych warunkach prowadzą do nieodwracalnych zmian (np. aktywacja flag dla nowej funkcjonalności ZFS lub wyczyszczenie danych);
  • Dodano polecenie „zpool trim”, aby informować dyski używane w puli o sektorach, które nie są już używane. Zastosowanie operacji TRIM umożliwia zwiększenie wydajności dysków SSD i zapobieganie degradacji ich wydajności. Zaproponowano nową właściwość „autotrim”, aby umożliwić ciągły proces przesyłania poleceń TRIM w tle;
  • Dodano polecenie „zpool initialize” do inicjalizacji całego nieprzydzielonego miejsca na dysku, co pozwala na natychmiastową gotowość do użycia, bez pogorszenia wydajności przy pierwszym dostępie (na przykład podczas hostowania zwirtualizowanych pamięci masowych, takich jak VMware VMDK);
  • Dodano obsługę limitów rozliczania i na poziomie projektu, oprócz wcześniej dostępnych limitów na poziomie użytkownika i grupy. W istocie projekty to wydzielona przestrzeń obiektów powiązana z odrębnym identyfikatorem (identyfikatorem projektu). Wiązanie jest definiowane za pomocą operacji „chattr -p” lub poprzez dziedziczenie atrybutów. Do zarządzania projektami prezentowane są polecenia „zfs project” i „zfs projectspace”, które pozwalają zarządzać tworzeniem projektów i ustawiać dla nich limity miejsca na dysku;
  • Dodano możliwość tworzenia skryptów Lua w celu automatyzacji różnych prac z ZFS. Skrypty są uruchamiane w specjalnych izolowanych środowiskach za pomocą polecenia „zpool program”;
  • Wdrożono nową bibliotekę Pyzfs, który zapewnia stabilne API do administrowania ZFS z poziomu aplikacji Pythona. Biblioteka jest opakowaniem wokół libzfs_core i zapewnia identyczny zestaw funkcji, ale używa bliższych typów Pythona;
  • Narzędzia arcstat, arcsummary i dbufstat zostały dostosowane do języka Python 3. Nazwy narzędzi arcstat.py, arc_summary.py i dbufstat.py zostały zmienione na wersje bez rozszerzenia „.py”;
  • Dodano obsługę interfejsu jądra Linux Direct IO (O_DIRECT), który umożliwia dostęp do danych bez buforowania i omijania pamięci podręcznej;
  • Wprowadzono optymalizacje wydajności:
    • Działanie komend „scrub” i „resilver” zostało przyspieszone dzięki podziale na dwie fazy (osobna faza została przeznaczona na skanowanie metadanych i określanie lokalizacji bloków z danymi na dysku, co umożliwia dalszą weryfikację z wykorzystaniem danych sekwencyjnych czytanie);
    • Dodano obsługę klas alokacji,
      umożliwienie łączenia stosunkowo małych dysków SSD i używania ich do przechowywania tylko niektórych typów powszechnie używanych bloków, takich jak metadane, dane DDT i małe bloki plików;

    • Poprawiona wydajność poleceń administratora, takich jak
      „zfs list” i „zfs get”, buforując metadane niezbędne do ich działania;

    • Dodano obsługę równoległości operacji alokacji bloków poprzez uruchamianie oddzielnych procesów alokacji dla każdej grupy metaslab. Na konwencjonalnych systemach następuje wzrost wydajności o 5-10%, ale na dużych (8 128 GB SSD, 24 rdzenie NUMA, 256 GB RAM) wzrost operacji alokacji bloków może osiągnąć 25%;
    • Dodano możliwość odroczenia wykonania komendy „resilver” (przebudowy dystrybucji danych z uwzględnieniem zmian w konfiguracji dysków) - jeżeli poprzednia jeszcze się nie zakończyła przy uruchamianiu nowej operacji, to nowy handler rozpocznie wykonywanie dopiero po koniec poprzedniego;
    • Do ZIL (ZFS Intent Log) dodano optymalizacje, aby umożliwić tworzenie i przetwarzanie bloków w obecności bloków, które są nadal przetwarzane przez magazyn;
    • Skrócono czas rejestracji partycji (zvol) w systemie. Kiedy pula zawiera dużą liczbę partycji, są one teraz dostępne natychmiast po wykonaniu „importu zpool”;
    • Dodano obsługę przyspieszanego sprzętowo obliczania skrótów SHA256 i operacji szyfrowania AES-GSM przy użyciu chipów Intel QAT (Quick Assist Technology). Dodano obsługę akceleracji sprzętowej chipsetu Intel C62x i procesora Atom C3000.

Źródło: opennet.ru

Dodaj komentarz