Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

FreeNAS i system ZFS - kompresja, deduplikacja.

TechEkspert 07 May 2015 22:05 9123 10
  • FreeNAS i system ZFS - kompresja, deduplikacja.
    FreeNAS jest otwartoźródłowym projektem serwera NAS udostępniającego zasoby protokołami plikowymi (np. CIFS/NFS/FTP), a także blokowymi (iSCSI). Konfiguracja i zarządzanie odbywa się poprzez intuicyjny interfejs WEB, system można uruchamiać z pendrive lub innego nośnika umożliwiającego botowanie. Dane przechowywane są na dyskach tworzących grupy RAID zapewniając bezpieczeństwo (odporność na awarię jednego lub więcej dysków), a także wydajność (striping).

    Podczas konfiguracji zasobów FreeNAS mamy możliwość wybrania rodzaju kompresji oraz deduplikacji dla zapisywanych danych. Zwykle pozostawiałem wyłączone opcje deduplikacji i kompresji dla zasobów, których przyszłe obciążenie I/O trudno ocenić, a przestrzeń dyskowa jest obszerna. Pora na syntetyczne sprawdzenie jak radzą sobie mechanizmy oszczędzania miejsca.
    Domyślnie dla FreeNAS zalecana jest dostępna pamięć RAM 8GB. Można wstępnie przyjąć, że dla aktywnej opcji deduplikacji na każdy 1TB miejsca na dysku należy przeznaczyć 5GB dodatkowego RAM.

    System plików ZFS

    FreeNAS pozwala na konfigurację kilkoma kliknięciami systemu plików ZFS, który wspiera kompresję oraz deduplikację zapisywanych danych. W zależności od rodzaju danych możemy zaoszczędzić przestrzeń dyskową kosztem obciążenia CPU oraz zajętości RAM, a także szybkości zapisu/odczytu.
    FreeNAS pozwala na skonfigurowanie mechanizmów kompresji i deduplikacji a także ich wyłączenie. Jaki wpływ na wydajność będą miały ustawienia?

    Warunki testów wpływu konfiguracji ZFS na wydajność FreeNAS

    FreeNAS 9.3 pracował jako maszyna wirtualna na platformie VirtualBox, który udostępniał dysk 8GB na system maszyny, cztery wirtualne procesory i 10GB RAM, maszyna fizyczna była wyposażona w fizyczny procesor i3-2120 3.3GHz.

    FreeNAS wyposażony był w kartę sieciową 1GBE, która symulowała typowe domowe warunki, w środowiskach biznesowych można się spodziewać 10GBE a nawet FC lub w słabszej wersji trunk kilku połączeń 1GBE. Dla testu rozwiązań domowych połączenie 1GBE było wystarczające mimo, że ograniczało maksymalne przepustowości. Drugim ograniczeniem była wydajność wirtualnych procesorów, a także zasoby pamięci RAM (szczególnie dla deduplikacji).
    Tutaj znajdziecie więcej informacji o deduplikacji.
    W normalnym zastosowaniu FreeNAS powinien zapisywać dane na kilku dyskach pracujących w grupie RAID, co zapewni odporność na awarię jednego z nich. Do wyboru mamy:
    RAID1 (mirror - dane zapisywane jednocześnie na dwóch dyskach, przy awarii jednego z nich dysponujemy drugim z identyczną zawartością)
    RAID10 (mirror stripów - dane zapisywane są naprzemiennie (RAID0) na dwa dyski co daje wydajność, jednocześnie dwa kolejne dyski z taką samą zawartością tworzą mirror (RAID1))
    RAID5 i RAID6 został określony jako RAID Z1 (odporność na awarię jednego dysku), RAID Z2 (odporność na awarię dwóch dysków), RAID Z3 (odporność na awarię trzech dysków).
    W tego typu poziomach RAID dane zapisywane są sekwencyjnie (strip - wydajność) na kilku dyskach, natomiast bezpieczeństwo zapewnia mechanizm sum kontrolnych zapisywanych na kolejnym dysku.
    Tutaj znajdziecie więcej podstawowych informacji o RAID.

    Podczas testów FreeNAS pracował z wirtualnym dyskiem 64GB będącym plikiem na dysku SSD pozwalającym ograniczyć wpływ wydajności dysku na wyniki testu. W realnych warunkach należy się liczyć z dodatkowym obciążeniem CPU przez mechanizmy obliczania sum kontrolnych RAID (chyba, że korzystamy z zasobu udostępnianego przez kontroler sprzętowy).

    Rodzaje danych testowych kopiowanych na zasób udostępniany przez FreeNAS (łącznie 40.8GB):

    Do testów mechanizmów kompresji i deduplikacji, zostało przygotowanych kilka zestawów danych testowych.

    ISO 10.8GB
    Bardzo słabo kompresowalne dane,
    obrazy płyt instalacyjnych różnych dystrybucji Linux.
    Rozmiar po kompresji 7z LZMA2 10.6GB.

    umcomp.dat 10GB
    Niekompresowalny plik - zaszyfrowane dane.
    Rozmiar po kompresji 7z LZMA2 10GB.

    big.dat 10GB
    Kompresowalny plik binarny.
    Rozmiar po kompresji 7z LZMA2 2.35GB.

    text.txt 10GB
    Super kompresowalny plik tekstowy.
    Rozmiar po kompresji 7z LZMA2 10MB.

    W ramach testu ustawień ZFS, powyższe dane testowe były kopiowane na udział testowy. Po zakończeniu kopiowania oceniana była zajmowana przestrzeń dyskowa NAS oraz zajętość zasobów CPU i RAM podczas operacji kopiowania (FreeNAS udostępnia graficzny monitor zasobów). Na koniec wykonywany był test szybkości zapisu i odczytu, dane generowane w tym teście miały charakterystykę zgodną z plikiem testowym big.dat.
    Dla testu deduplikacji, dodatkowo został sprawdzony stan zajętości po dwukrotnym skopiowaniu katalogu ISO.

    Dane udostępniane były protokołem blokowym iSCSI. Na początek w konfiguracji protokołu iSCSI utworzony został portal udostępniający zasoby:
    FreeNAS i system ZFS - kompresja, deduplikacja.

    Z tym portalem na adresie interfejsu NAS będziemy się łączyć korzystając z inicjatora iSCSI w kliencie pod kontrolą Windows 7.


    Następnie konfigurujemy inicjator iSCSI:
    FreeNAS i system ZFS - kompresja, deduplikacja.

    a także grupa autoryzowanych użytkowników:
    FreeNAS i system ZFS - kompresja, deduplikacja.

    W kolejnym etapie dodajemy element docelowy, konfigurujemy przynależność do portalu oraz inicjatora, jeżeli wybierzemy autoryzację przypiszemy także grupę użytkowników mogących połączyć się z określonym celem:
    FreeNAS i system ZFS - kompresja, deduplikacja.

    kolej na utworzenie ekstentu, który będzie powiązany z urządzeniem lub plikiem, możemy też określić rozmiar bloku:
    FreeNAS i system ZFS - kompresja, deduplikacja.

    na koniec łączymy extent z targetem, czyli mapujemy plik lub urządzenie do zasobu w iSCSI, możemy określić numer LUN lub pozostawić opcję automatycznej numeracji:
    FreeNAS i system ZFS - kompresja, deduplikacja.


    Tyle po stronie serwera FreeNAS, udostępniany zasób podłączymy w komputerze klienta pracującym pod kontrolą W7, zasób będzie widoczny jako kolejny dysk.
    Wybieramy Panel sterowania->Narzędzia administracyjne->inicjator iSCSI.
    FreeNAS i system ZFS - kompresja, deduplikacja.
    FreeNAS i system ZFS - kompresja, deduplikacja.


    Po połączeniu z FreeNAS tworzymy nową partycję i formatujemy ją:
    FreeNAS i system ZFS - kompresja, deduplikacja.


    Brak kompresji i deduplikacji
    Na początek wypróbujmy ustawienia, w których rezygnujemy z kompresji i deduplikacji.
    Udostępniamy pusty zasób:
    FreeNAS i system ZFS - kompresja, deduplikacja.


    Po skopiowaniu plików testowych nie jest niespodzianką, że zajmują one 40.8GB:
    FreeNAS i system ZFS - kompresja, deduplikacja.


    Szybkość zapisu wynosiła 40MB/s natomiast odczytu 59MB/s,
    będzie to punkt odniesienia do kolejnych prób.

    Interfejs FreeNAS udostępnia dane o zajętości pamięci RAM oraz obciążeniu procesora, tak wyglądało obciążenie zasobów podczas testu:
    FreeNAS i system ZFS - kompresja, deduplikacja.


    Obciążenie procesora na poziomie 40-50% oraz stała zajętość pamięci około 8GB.


    Kompresja "w locie".

    Zaczniemy od zalecanej kompresji lz4.

    Umieszczone pliki iso, uncomp zajęły -> 19.9GB
    rozmiar praktycznie identyczny jak pierwotny, czyli nie widać tutaj zysku z kompresji, lecz dane są trudno kompresowalne.

    Dodajemy pliki big.dat otrzymujemy zajętość -> 30.4GB
    na razie nie widać zysków z kompresji, umieściliśmy 3x10GB i zajętość jest na poziomie 30GB.

    Umieszczamy plik text.txt zajętość -> 31GB
    tutaj widać zysk z kompresji, mimo umieszczenia kolejnego 10GB pliku zajętość wzrosła o 0.6GB.

    Całkowita zajętość 31GB około 76% 40.8GB, czyli zajętości bez mechanizmów kompresji.

    Szybkość zapisu wynosiła 43MB/s, natomiast odczytu 52MB/s,
    zapis o 3MB/s szybszy niż w przypadku próby kontrolnej, odczyt wolniejszy o 7MB/s. Ciekawym efektem jest szybszy zapis, prawdopodobnie na dysk trafiały skompresowane dane co wymagało mniejszej liczby operacji I/O.

    FreeNAS i system ZFS - kompresja, deduplikacja.

    W niewielkim stopniu wzrosło zapotrzebowanie na CPU, zalecana kompresja lz4 przyniesie oszczędności zajętego miejsca w przypadku kompresowalnych plików przy niewielkim zwiększeniu obciążenia systemu.

    Sprawdźmy działanie gzip na poziomie kompresji domyślnej 6 (default level 6).


    Pliki iso, uncomp.dat -> 20.2GB,
    bez niespodzianek, brak kompresji.

    Plik big.dat -> 28.2GB,
    tutaj widać działanie lepszego mechanizmu kompresji niż lz4

    Następnie plik text.txt -> 28.5GB,
    łącznie lepiej o 2.5GB w porównaniu do lz4.

    Całkowita zajętość 28.5GB około 70% 40.8GB, czyli zajętości bez mechanizmów kompresji.

    Szybkość zapisu wynosiła 16MB/s, natomiast odczytu 52MB/s,
    wyraźne spowolnienie zapisu (2.5x w porównaniu do braku kompresji) oraz szybkość odczytu na poziomie lz4.

    FreeNAS i system ZFS - kompresja, deduplikacja.


    Obciążenie CPU sięgające nawet 100%, zależne od rodzaju napływających danych, obciążenie RAM bez zmian. Wybór gzip na poziomie 6 trzeba dobrze przemyśleć, jeżeli głównie zależy nam na oszczędności miejsca, napływające dane są kompresowalne, akceptujemy niższą szybkość zapisu oraz większe obciążenie, można wybrać ten tryb kompresji.

    Sprawdźmy działanie gzip na poziomie najszybszym (fastest).

    Pliki iso.dat, uncomp.dat -> 21GB,
    bez niespodzianek, praktycznie brak kompresji.

    Plik big.dat -> 28.3GB,
    prawie tak dobrze jak na poziomie gzip 6.

    Następnie plik text.txt -> 28.5,
    dla tych danych testowych wynik identyczny jak dla kompresji gzip 6.

    Całkowita zajętość 28.5GB około 70% 40.8GB, czyli zajętości bez mechanizmów kompresji.

    Szybkość zapisu wynosiła 32MB/s, natomiast odczytu 50MB/s,
    szybkość zapisu dwukrotnie lepsza niż w przypadku gzip poziom 6,
    ciekawa opcja konkurencyjna dla lz4, wolniejsza lecz oferująca nieco lepszy współczynnik kompresji.

    FreeNAS i system ZFS - kompresja, deduplikacja.

    Obciążenie CPU sięgające 80%.


    Deduplikacja.

    Dla prób deduplikacji zmieniłem nieco ustawienia, tak aby zwiększyć prawdopodobieństwo, że 4kB blok z hosta będzie odwzorowany bez zmian na poszczególnych etapach przetwarzania. W tym celu ustawiłem 4kB blok dla nowego woluminu zvol, 4kB blok dla extentu iSCSI oraz 4kB blok podczas formatowania partycji w systemie Windows:
    FreeNAS i system ZFS - kompresja, deduplikacja.


    Warto poeksperymentować i sprawdzić, czy ustawienia wielkości bloków będą miały wpływ na skuteczność działania deduplikacji oraz szybkość zapisu i odczytu.

    Dla woluminu została uruchomiona deduplikacja ZFS:
    FreeNAS i system ZFS - kompresja, deduplikacja.

    Na początek umieszczamy na zasobie dwukrotnie pliki iso co daje 2x10.8GB=21.6GB. Dzięki deduplikacji pliki o rozmiarze 21.6GB zajmują na dysku ->12.9GB.

    Widać prawie dwukrotną oszczędność w przypadku umieszczania dwóch identycznych kopii plików.

    Możemy wykonać estymację skuteczności deduplikacji, wydając polecenie zdb -S nazwa woluminu:
    FreeNAS i system ZFS - kompresja, deduplikacja.


    Wydając polecenie zpool list możemy przyjrzeć się szczegółom:
    FreeNAS i system ZFS - kompresja, deduplikacja.


    Deduplikacja może funkcjonować wraz z mechanizmem kompresji uruchomionym na danym zasobie. Nie sprawdzałem takiego połączenia na uruchomionej maszynie wirtualnej. Warto wypróbować połączenie obu mechanizmów we własnym zakresie.

    Tworzymy zasób ponownie i wykonajmy test taki sam jak dla kompresji, czyli kopiowanie zestawu plików testowych.

    Pliki iso, uncomp.dat -> 25.1G
    brak efektów oszczędności miejsca

    big.dat -> 29.9
    zajętość praktycznie równa oryginalnej wielkości

    text.txt -> 35.4G
    widać działanie mechanizmów oszczędzania miejsca.

    Całkowita zajętość 35.4GB około 87% 40.8GB, czyli zajętości bez mechanizmów kompresji.

    Zapis na poziomie 9MB/s, odczyt 49MB/s, zapis ponad czterokrotnie wolniejszy niż z wyłączonymi mechanizmami kompresji i deduplikacji.

    Więcej informacji o woluminach ZFS z aktywną deduplikacją otrzymamy wydając polecenia zdb -D nazwa_woluminu oraz zpool iostat -v, aby sprawdzić aktywność na poszczególnych zasobach.
    FreeNAS i system ZFS - kompresja, deduplikacja.


    Zobaczmy jakich zasobów potrzebuje deduplikacja:
    FreeNAS i system ZFS - kompresja, deduplikacja.


    Wykorzystanie CPU dochodzi do 90%, zajętość pamięci dość mocno się zmienia i dochodzi do 10GB, niestety po raz pierwszy w czasie testów został aktywowany swap, co zapewne miało wpływ na test wydajnościowy. Deduplikacja może sprawdzić się jeżeli wielokrotnie zapisujecie podobne dane, należy liczyć się z dużym zapotrzebowaniem na pamięć RAM oraz CPU, a także obniżenie wydajności zapisu i odczytu.


    Pełna moc.

    Powyższe testy pozwoliły na sprawdzenie możliwości kompresji i deduplikacji w sposób dostępny dla większości domowych użytkowników komputerów.
    Widać że CPU, RAM oraz przepustowość sieci ograniczały możliwości wydajnościowe FreeNAS. Co się stanie gdy zwolnimy hamulec?
    Spróbujmy uruchomić FreeNAS na maszynie wirtualnej pracującej na jednym z serwerów kasetowych obudowy HP blade, oddając do dyspozycji NAS cztery wirtualne procesory obsługiwane przez procesory Xeon E5-2600 v2 oraz 32GB RAM, a także podłączmy zasób dyskowy na szybkiej macierzy EMC.
    FreeNAS będzie udostępniał zasoby iSCSI po emulowanej karcie e1000, przepustowość sieci będzie prawdopodobnie wąskim gardłem tej konfiguracji testowej. Ruch po między kartą sieciową FreeNAS, a kartą 10GBE klienta będzie obsługiwany przez wirtualny przełącznik.

    Brak kompresji.
    FreeNAS uruchomiony na tak mocnej maszynie osiągał zapis z prędkością 89MB/s, odczyt 148MB/s, widać że emulacja kart sieciowych jest bardzo efektywna (prędkość odczytu przewyższa typową teoretyczną przepustowość dla fizycznego połączenia 1GBE). Obciążenie CPU na poziomie 40-50%.

    FreeNAS i system ZFS - kompresja, deduplikacja.



    Kompresja lz4.
    Zapis z prędkością 88MB/s, odczyt 133MB/s, obciążenie CPU na poziomie 40-50%.

    FreeNAS i system ZFS - kompresja, deduplikacja.


    Kompresja gzip default.
    Zapis z prędkością 34MB/s, odczyt 89MB/s, obciążenie CPU na poziomie 80%. Lepsze zasoby CPU pozwalają na zachowanie stabilności działania FreeNAS.

    FreeNAS i system ZFS - kompresja, deduplikacja.


    Deduplikacja
    Zapis z prędkością 83MB/s, odczyt 166MB/s, obciążenie CPU na poziomie 70%. Udało się nie wykorzystywać zasobów swap. Widać że deduplikacja może sprawnie działać, jednak potrzebne są odpowiednie zasoby RAM i CPU.

    FreeNAS i system ZFS - kompresja, deduplikacja.


    Tutaj widać jakie wyzwanie stoi przed dostawcami gotowych rozwiązań pamięci masowych "uszytych na miarę", pozwalających na wydajne korzystanie z udostępnianych funkcji.
    Wiele rozwiązań wspomaga CPU rozwiązaniami sprzętowymi, np. sprzętowa kompresja (karty kompresji inline), sprzętowe obliczanie sum kontrolnych RAID (kontrolery SAS), sprzętowe wspomaganie Thin Provisionin (np. wykrywanie zapisu zer) i wiele innych ciekawych rozwiązań zwiększających szybkość zapisu i odczytu (np. bufory flash).

    Nie tylko FreeNAS.

    Bezpłatna dystrybucja FreeNAS umożliwia w prosty sposób zapoznanie się z podstawowymi cechami zasobów udostępnianych przez NAS, dystrybucję możemy wykorzystać zarówno w domu, jak również zasobach testowych, a także produkcyjnych. Możemy znaleźć wiele innych rozwiązań podobnych do FreeNAS o różnym zakresie funkcjonalności, np. openfiler, nas4free, napp-it, dedykowane bardziej użytkownikom domowym np. openmediavault, amahi. Dostępne jest także dość tanie płatne oprogramowanie serverelements.com umożliwiające budowę swojego serwera pamięci masowej, a także bardziej zaawansowane rozwiązania udostępniające bezpieczną składnicę danych flexraid do budowy większych systemów, unRAID. Równolegle z FreeNAS zbudowany jest truenas, który dostępny jest w gotowych urządzeniach przeznaczonych do zastosowań biznesowych TrueNAS unified storage.


    Czy korzystacie z ZFS, deduplikacji, lub kompresji w środowiskach produkcyjnych?

    Cool? Ranking DIY
    About Author
    TechEkspert
    Editor
    Offline 
    W moich materiałach znajdziecie testy i prezentacje sprzętu elektronicznego, modułów, sprzętu pomiarowego, eksperymenty. Interesuje mnie elektronika cyfrowa, cyfrowe przetwarzanie sygnałów, transmisje cyfrowe przewodowe i bezprzewodowe, kryptografia, IT a szczególnie LAN/WAN i systemy przechowywania i przetwarzania danych.
    Has specialization in: mikrokontrolery, rozwiązania it
    TechEkspert wrote 4431 posts with rating 3633, helped 12 times. Been with us since 2014 year.
  • #2
    lelekx
    Level 30  
    tl;dr.
    mam malutki serwer (dla 5 użytkowników), po SMB, bez iSCSI; system to niemalże goła dystrybucja Debiana, a jako podbudowa dla NAS jest btrfs na pojedynczym dysku 1TB. Deduplikacja niestety jest wywoływana periodycznie, nic nie dzieje się "w tle". Zysk z deduplikacji jest spory, a brak mechanizmów deduplikowania online zmniejsza zapotrzebowanie na RAM. Nie wiem, czy btrfs udostępnia kompresję, ale i tak nie korzystałbym z niej - większość przechowywanych plików jest już natywnie skompresowana. Prędkości odczytu/zapisu nie powalają na łopatki.

    Inny system: trochę większy serwer, dla ok. 10 użytkowników, po SMB, bez iSCSI, 1GbE po stronie LAN. System bazowy to goły Debian doposażony w webserwer, MySQL, KVM (później wymienione na Virtualbox, KVM powodował częste oops, czasami kernel panic); systemy plików EXT4 na sprzętowej macierzy SAS RAID 5 z 4 dysków 2TB (WD Green SATA) - wcześniejszy RAID 5 na bazie dmraid rozsypywał się(!) przy awarii systemu (patrz KVM). Na maszynie wirtualnej pracuje router (też Debian, absolutnie minimalna konfiguracja + serwer FTP). Taka konfiguracja była konieczna ze względu na duże spadki wydajności przy przesyłaniu plików z dysków NAS i konieczność izolacji serwera plików od interfejsów WAN. Deduplikacja ani kompresja nie była użyta ze względu na brak wsparcia systemu plików. Odczyty i zapisy dużych plików nasycały interfejs 1Gbps LAN - na 10GbE nie mogłem sobie pozwolić.
  • #3
    freebsd
    Level 41  
    Na serwerach poprodukcyjnych nie korzystam ani z deduplikacji ani z kompresji. Przestrzeń dyskowa wychodzi taniej niż moc obliczeniowa, a "mocy" i szybkości pracy dysków w firmach nigdy za wiele. Deduplikacja przy snapshot też nie jest niezbędna. Czasami włączam kompresję lz4, ale rzadko. Co kompresować? Bazy danych? Kontent dla http? To co zajmuje dużo miejsca najczęściej już jest skompresowane i to skutecznie. Nawet pliki użytkowników coraz częściej też od razu są skompresowane.
    ZFS i wspomniany btrfs mają jak wiadomo potrzebniejsze właściwości, ale dziękuję @TechEkspert, że kolejny raz poruszył ciekawy temat.
  • #4
    TechEkspert
    Editor
    @lelekx ciekawe podejście uszycie systemu na miarę, większa wydajność oraz odporność na wykorzystanie luk. Być może trochę bardziej skomplikowane zarządzanie, ale to kwestia przyzwyczajenia i znajomości systemu. Ciekawy przykład wykorzystania btrfs i zysku z deduplikacji w post processingu.
    Wykorzystanie sprzętowego kontrolera w drugim systemie to dobre rozwiązanie, WD Green sprawdza się w takim rozwiązaniu ? na myśl nasuwa się tutaj zastosowanie WD Red.

    @freebsd podoba mi się stwierdzenie "przestrzeń dyskowa wychodzi taniej niż moc obliczeniowa" bardzo ciekawy sposób określenia co jest nam aktualnie potrzebne, w jednym systemie przestrzeni dyskowej będzie tak dużo że nie opłacalne będzie obciążanie zasobów CPU i RAM mechanizmami kompresji i deduplikacji, w innym rozwiązaniu może okazać się istotne ograniczanie zajętości miejsca na dyskach, wszystko zależne od skali i charakteru danych i systemu.
  • #5
    freebsd
    Level 41  
    Dla testów skompresowałem trochę danych:
    330000 plików zajmujących 1,5 TB w 52000 katalogów. Data02 to oczywiście tytułowy 128 bitowy system plików:
    FreeNAS i system ZFS - kompresja, deduplikacja. FreeNAS i system ZFS - kompresja, deduplikacja. FreeNAS i system ZFS - kompresja, deduplikacja.

    Szybka kompresja lz4 dała przyrost miejsca o 0,01%.
    FreeNAS i system ZFS - kompresja, deduplikacja.
    W czasach gdy nawet .odt i .docx są skompresowane to miejsce można zaoszczędzić już chyba tylko na .pdf'ach.

    PS: Pamiętacie program Stacker, DoubleSpace? Wtedy przestrzeń dyskowa droga, a procesory w miarę szybkie - dawne czasy.
  • #6
    TechEkspert
    Editor
    Ciekawa próba, i dość obszerna (reprezentatywna) ilość testowanych danych, w przypadku takiej charakterystyki kompresja faktycznie nie ma najmniejszego sensu...
    Być może deduplikacja przyniosłaby tutaj większe korzyści.

    Kompresja przyda się w przypadku plików logu (które zresztą są zwykle kompresowane i poddawane rotacji), jednak jeżeli pomyślimy od np. centralnym kolektorze logów (np. dla SIEM), kompresja na poziomie systemu plików może być korzystna.

    Ciekawą sprawą jest dla mnie kompresja wykonywana przez urządzenie, taka sprzętowa kompresja mogłaby ciekawie wpłynąć na ilość miejsca zajmowanego przez bazy danych, elektroniczne skrzynki pocztowe itp. przy zachowaniu sensownej wydajności, dodatkowo można ograniczyć ilość operacji IO na dyskach.
  • #7
    freebsd
    Level 41  
    O dedpulikacji i jej zastosowaniach napisałeś w poprzednim artykule i zgadzam się z zaprezentowanymi przykładami jej zastosowań.
    Największe jej zastosowanie widzę w usłudze rozproszonego systemu plików obsługujących, gdzie dane mogą składować zupełnie przypadkowi użytkownicy. Wtedy zamiast fizycznie przechowywać 1000 kopi najnowszego filmu można to wykonać raz :-) I zdaje się, że tak to jest robione.

    Mam centralne serwery logów. Faktycznie przyrost danych jest liczony w GB i kompresja była by tu bardzo na miejscu. Musiała by być realizowana przez zewnętrzny komputer/macierz, ponieważ maszyny zbierające logi i obsługujące ich prezentacje maja co robić i nie obciążył bym jej jeszcze.

    Co do kompresji baz danych to nie bardzo to widzę. Po pierwsze bazy zakłada się, przynajmniej te najważniejsze, w specyficzny sposób. Trzeba połączyć fizyczną jednostkę przechowywania z logiczną systemu plików, oraz rozmiarem strony, na której operuje system bazodanowy.
    Po drugie wyobraźmy sobie podstawową operację: w każdej stronie składowanych danych rezerwujemy 80% miejsca na nowe dane, a system, lub kontroler, właśnie to skompresował. Jak będzie wyglądać modyfikacja danych lub indeksu? Jak fizyczne dane będą przepisywane i jak wpłynie to na wydajność bazy. Jak zachować ciągłe obszary odczytu?
    Taka operacja musiała by być też wykonywana na poziomie kontrolera podłączonego do szyny systemowej, inaczej przepustowość interface będzie ograniczeniem.

    Natomiast przy nadal wysokich cenach SSD kontroler przeznaczony na rynek konsumencki wykonujący sprzętową kompresję był by ciekawą propozycją. Jak skompresowały by się GB zajmowane przez sam system Windows? Jak (i czy) kompresują sie zainstalowane gry?
    Należało by tylko jakoś wytłumaczyć użytkownikom, dlaczego wolne miejsce jest szacowane :-)

    Dodano po 20 [minuty]:

    Właśnie życie podpowiedziało, gdzie przydało by się połączyć bazę danych z kompresją przestrzeni dyskowej... Baza danych przeznaczona głównie do odczytu. Weźmy np. zabawy z WPA2: zestaw nawet dużych słowników to około 100GB i nie jest to problem. Kłopoty zaczynają się, przy przechowywaniu obliczonych tęczowych tablic dla różnych ESSID'ów...
  • #8
    TechEkspert
    Editor
    Deduplikacja mimo, że również nie jest rozwiązaniem pozbawionym wad może przynieść korzyści zarówno w przypadku, o którym piszesz czyli DFS z wieloma użytkownikami (w sprytnych systemach zaoszczędzi się wtedy także na paśmie dla replikacji), a także w przypadku składnicy danych przechowującej dyski wielu podobnych maszyn wirtualnych.

    Co do centralnego logu wielu systemów, mam podobne zdanie, warto oddzielić funkcję storage na osobne urządzenie. Otrzymujemy usługę składowania plików, natomiast mechanizmy, które optymalizują wykorzystanie miejsca / czas dostępu nie zabierają zasobów systemu, który korzysta ze storage.

    Ciekawy pomysł z kompresją baz tylko do odczytu, w wielu systemach można podzielić pliki bazy danych i zapisać na różnych storage w zależności od przeznaczenia. Przykładowo rozwiązanie może się sprawdzić zarówno w przypadku danych typu tęczowe tablice, jak również w bazach zapisujących bilingi, statystyki i inne dane używane pod analizy, w tym zbiory zaliczające się do bigdata.

    W pewnych przypadkach zarówno kompresja jak i deduplikacja może zwiększyć liczbę iops udostępnianych przez system, jednak w rozwiązaniach w których wymagane są wysokie wartości dostępnych iops coraz większą popularność zdobywają macierze all-flash.

    Cena zakupu rozwiązań all-flash jest wysoka, jednak w pewnych przypadkach wymiana obecnego systemu pamięci na system oparty o SSD może przynieść oszczędności.
    System pamięci masowej często rozwija się razem z biznesem i można spotkać rozwiązania, w których półki z dyskami zajmują kilka szaf, natomiast obsługujące je kontrolery dotarły do granic swoich możliwości. W takich systemach można spotkać dyski SAS o pojemnościach 300-900GB, dyski NL SAS/SATA o pojemnościach 1TB-4TB oraz półki na dyski zarówno 3.5" jak również 2.5".
    Często można spotkać niewielką pulę dysków SSD, o pojemnościach 100-640GB które ratowały wydajność systemu pracując jako dedykowany zasób lub pula dla mechanizmu tieringu.

    Wymieniając cały system na all-flash zwykle zajmuje on mniej miejsca (np. stosując wszystkie dyski ~1TB SSD 2.5"), zużywa mniej energii produkując mniej ciepła co przekłada się na mniejsze koszty utrzymania infrastruktury, oraz dostarcza bardzo duże ilości iops dla systemów biznesowych. Stara infrastruktura po optymalizacji może często służyć jako miejsce np. na kopie zapasowe.

    Tutaj znalazłem opis sprzętowej kompresji, przykładami zastosowania są właśnie bazy danych oraz serwery pocztowe:
    IBM Real-time Compression
    natomiast podane przykłady oszczędności odnoszą się do baz danych (~20% wielkości oryginału), plików użytkowników (~34% wielkości oryginału), oraz dysków maszyn wirtualnych (~40% wielkości oryginału).
    Przykładowo tutaj dostępny jest gotowy ipcore dla sprzętowej kompresji (6-10GB/s):
    lossless compression ip core
  • #9
    willyvmm
    Level 30  
    Artykół ciekawy, ale nie merytoryczny niestety. Ot takie sobie testy kompresji w ZFS w warunkach w których ZFS zazwyczaj nie pracuje.

    W zastosowaniach typu NAS duże obciążenie procesora podczas zapisu/odczytu nie jest wadą.

    Przede wszystkim, w ZFS nie ma RAID5,6 tylko RAIDZ1, Z2, Z3. Nie jest to to samo co RAID5,6 - co nie zmienia faktu że jest to bardzo podobne (po szczegóły zapraszam do dokumentacji i różnych innych opracowań o ZFS, np. blok danych nie ma stalej wielkości).

    Moje uwagi:
    Quote:
    W realnych warunkach należy się liczyć z dodatkowym obciążeniem CPU przez mechanizmy obliczania sum kontrolnych RAID (chyba, że korzystamy z zasobu udostępnianego przez kontroler sprzętowy).

    Otóż ZFS nie powinien być używany na sprzętowych kontrolerach RAID. ZFS oblicza własne sumy kontrolne ZAWSZE i dzięki mechanizmowi SCRUBBINGU potrafi uszkodzone dane odtwożyć - ale, nie korzystając z 1 dysku. Do poprawnego działania ZFS i wykorzystania chociaż podstawowych jego zalet potrzeba minimum 2 dysków skonfigurowanych w mirror. Używanie ZFS na 1 dysku mija się nieco z celem, chybą że celem samym w sobie jest transparentna kompresja danych. Z zasady działania ZFS wynika też jego stosunkowo wysoki narzut na moc obliczeniową CPU. Jak już pisałem wcześniej w zastosowaniach typu NAS nie jest to wadą.

    ZFS nie był zapewne zoptymalizowany do maszyny. Choć dla tego testu nie jest to konieczne. Domowe NAS'y nie mają wymagań co do latencji i IOPS

    Zabawa w Rozmiar bloku fizycznego przy twożeniu voluminu jest nie na miejscu. Powinna być ustawiona na rozmiar odpowiadający fizycznej jednostce alokacji na dysku. Zazwyczaj 4KB lub 512B. Nietrzymanie się tej zasady MOŻE powodować istotny spadek wydajności.

    Brakuje testu kompresji LZJB - Algorytm który czasowo jest niezauważalny dla procesora, a da się osiągnąc całkiem akceptowalne rezultaty. Zalecane jest wręcz włączenie tej kompresji bo dlaczego by nie skoro koszt jest pomijalny?


    Pozdrawiam.
  • #10
    TechEkspert
    Editor
    ZFS posiada wiele ciekawych funkcjonalności o których piszesz, FreeNAS upraszcza konfigurację wielu z nich (co z jednej strony może być wadą z innej zaletą), oraz ułatwia zapoznanie się z cechami ZFS.

    ZFS posiada wiele cech na wielu poziomach, przyjrzałem się kompresji i deduplikacji.
    Nie poruszając wpływu ilości dysków, rodzaju RAID, scrubbingu, ZFS log device i cache device.

    Założyłem że funkcjonalności związane z oszczędzaniem przestrzeni, można skutecznie sprawdzić odrywając je od mechanizmów bardziej niskopoziomowych związanych z niezawodnym i wydajnym dostępem do danych zapisanych na poszczególnych dyskach. Tak czy inaczej, korzyści wynikające z bezpośredniego dostępu ZFS do grupy dysków przechowującej dane, są bezsprzeczne.

    Dlatego patrząc na wyniki prób należy mieć świadomość, że produkcyjne wykorzystanie ZFS na wielu dyskach będzie wymagać dodatkowych zasobów, i będzie się różnić od prób z zasobem dyskowym widocznym jako pojedynczy dysk.


    Wysokie obciążenie CPU i RAM storage nie jest niczym złym, szczególnie jeżeli jest to osobny system udostępniający zasoby, oraz stopień ich wykorzystania nie wpływa na jakość udostępniania danych. Krótko mówiąc wykorzystujemy maksymalnie to za co zapłaciliśmy, jednocześnie obciążenie CPU/RAM nie przenosi się na systemy klienckie.
    Przy testach na ubogiej w zasoby maszynie widoczne było "zatykanie" się FreeNAS przy zbyt dużym wykorzystaniu zasobów.

    LZJB, hmm faktycznie ominąłem ten sposób kompresji, w testach opierałem się o FreeNAS autorzy uznali tą metodę jako niepolecaną. Może warto wypróbować tą opcję i porównać z innymi.
    FreeNAS i system ZFS - kompresja, deduplikacja.

    Generalnie materiał który umieściłem, nie porusza wielu kwestii związanych z ZFS, jednak chyba byłoby to trudne aby wszystko tam zmieścić. Materiał na artykuł to jedno, często zdarza się że dyskusja pod materiałem doskonale go uzupełnia, a często ma większą wartość niż początkowy tekst. Zawsze podobała mi się ta możliwość w artykułach na elektroda.pl
  • #11
    TechEkspert
    Editor
    Z ciekawości sprawdziłem jak działa kompresja LZJB na konfiguracji z pierwszej części materiału (4 rdzenie + 10GB RAM).

    Umieszczone pliki iso, uncomp zajęły -> 21GB
    tutaj bez niespodzianek.

    Dodajemy plik big.dat otrzymujemy zajętość -> 31GB.

    Umieszczamy plik text.txt zajętość -> 33,4GB
    Nieco gorzej niż lz4.

    Całkowita zajętość 33.4GB około 82% 40.8GB, czyli zajętości bez mechanizmów kompresji.

    Szybkość zapisu wynosiła 40MB/s, natomiast odczytu 53MB/s.

    Zajętość CPU około 40-50%.

    Generalnie wyniki bardzo zbliżone do lz4.

    FreeNAS i system ZFS - kompresja, deduplikacja.