Wydanie OpenZFS 2.4.0, implementacji ZFS dla systemów Linux i FreeBSD

Po 11 miesiącach rozwoju opublikowano wydanie projektu OpenZFS 2.4.0, który rozwija implementację systemu plików ZFS dla systemów Linux i FreeBSD. Projekt zyskał popularność jako „ZFS na Linuxie” i wcześniej ograniczał się do rozwijania modułu dla jądra Linux, jednak po zintegrowaniu kodu z FreeBSD został uznany za główną implementację OpenZFS i przemianowany.

Działanie OpenZFS zostało przetestowane z jądrami Linux od 4.18 do 6.18 oraz ze wszystkimi wersjami FreeBSD, począwszy od 13.3. Kod jest rozpowszechniany na zasadzie wolnej licencji CDDL. OpenZFS jest już używany w FreeBSD i wchodzi w skład dystrybucji Debian, Ubuntu, Gentoo, NixOS i ALT Linux. Pakiety z nową wersją wkrótce będą przygotowywane dla głównych dystrybucji Linux, w tym Debian, Ubuntu, Fedora, RHEL/CentOS.

OpenZFS zapewnia implementację komponentów ZFS, związanych zarówno z działaniem systemu plików, jak i z funkcjonowaniem menedżera woluminów. Zaimplementowane komponenty to: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) oraz ZPL (ZFS POSIX Layer). Projekt umożliwia również wykorzystanie ZFS jako zaplecza dla klastra systemu plików Lustre. Osiągnięcia OpenZFS opierają się na oryginalnym kodzie ZFS, zaimportowanym z projektu OpenSolaris i rozszerzonym o ulepszenia i poprawki od społeczności Illumos. Projekt rozwija się we współpracy z pracownikami Laboratorium Narodowego w Livermore w ramach kontraktu z Departamentem Energii USA.

Kod jest rozpowszechniany na podstawie wolnej licencji CDDL, która jest niekompatybilna z GPLv2, co uniemożliwia integrację OpenZFS z główną gałęzią jądra Linux, ponieważ mieszanie kodu objętego licencjami GPLv2 i CDDL jest niedopuszczalne. Aby obejść problemy z licencjami, zdecydowano się na rozprowadzanie produktu dla Linuxa całkowicie na licencji CDDL jako osobnego modułu do pobrania, dostarczanego oddzielnie od jądra. Stabilność bazy kodu OpenZFS ocenia się jako porównywalną z innymi systemami plików dla Linux.

Główne zmiany:

  • Wprowadzono możliwość ustalania domyślnych limitów dla użytkowników, grup i projektów. W poprzednich wersjach limity mogły być ustalane tylko oddzielnie dla każdego identyfikatora użytkownika. W nowej wersji pojawiła się możliwość ustawienia wartości domyślnej, która będzie stosowana, jeśli dla konkretnego użytkownika limit nie został ustalony.
  • Dodano możliwość powrotu z trybu bezpośredniego wejścia/wyjścia (O_DIRECT, Direct I/O) do użycia lekkiego mechanizmu niecache'owanego wejścia/wyjścia (Uncached I/O) dla zapytań, które nie są wyrównane do granicy strony pamięci, co nie jest wspierane w Direct I/O.
  • Proponowany jest nowy zintegrowany algorytm ograniczania prędkości operacji zapisu i umieszczania bloków, który zmniejsza fragmentację vdev (Virtual Device) poprzez agregację kilku operacji zapisu i wykorzystanie dla nich większych, ciągłych obszarów wolnych zamiast umieszczania wyników pojedynczych operacji zapisu w małych obszarach wolnych.
  • Zwiększono wydajność szyfrowania dzięki wykorzystaniu instrukcji AVX2 w implementacji algorytmu AES-GCM. W przeprowadzonych testach przyspieszenie osiąga 80%.
  • Zezwolono na umieszczanie bloków ZIL (ZFS Intent Log) nie tylko na normalnych vdev lub na oddzielnym urządzeniu SLOG, ale także na specjalnych vdev. Jeśli normalny vdev jest powiązany z dyskiem twardym, a specjalny vdev z dyskiem SSD, zmiana ta pozwala wykluczyć sytuacje, w których dane są zapisywane na SSD, a powiązane z nimi bloki ZIL na dysku twardym, co prowadzi do niepotrzebnych opóźnień.
  • Możliwe jest ustawienie właściwości special_small_blocks dla sekcji (ZVOL), a nie tylko dla systemów plików, co umożliwia organizację rozmieszczenia małych bloków na oddzielnym specjalnym vdev, na przykład na dysku SSD.
  • Dodano tryb zapisu „zfs rewrite -P”, który w miarę możliwości pozostawia niezmieniony logiczny czas utworzenia, co pozwala odróżnić bloki, które zostały jedynie przeniesione do puli, od bloków, które zostały rzeczywiście zmienione przez użytkownika.
  • Dla poleceń „zpool trim”, „zpool scrub” i „zpool initialize” wprowadzono opcję „-a” (—all), umożliwiającą wykonanie tych poleceń od razu dla wszystkich zaimportowanych pul.
  • Dodano polecenie „zpool scrub -S -E” do przeprowadzania weryfikacji sum kontrolnych danych, które mieszczą się w podanych przedziałach czasowych.
  • Wprowadzono nowe optymalizacje procesu deduplikacji.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster