Przeczytałem wiele informacji na temat planowania wymagań pamięci RAM dla deduplikacji ZFS. Właśnie zaktualizowałem pamięć RAM mojego serwera plików, aby obsługiwać niektóre bardzo ograniczone deduplikacje na Zvols ZFS, na których nie mogę używać migawek i klonów (ponieważ są one zvols sformatowane jako inny system plików), ale będą zawierały dużo zduplikowanych danych.
Chcę się upewnić, że nowa pamięć RAM, którą dodałem, będzie obsługiwać ograniczoną deduplikację, którą zamierzam robić. W planowaniu moje liczby wyglądają dobrze, ale chcę mieć pewność .
Jak mogę sprawdzić aktualny rozmiar tabel deduplikacji ZFS (DDT) w moim systemie na żywo? Czytam ten wątek z listy mailingowej, ale nie jestem pewien, w jaki sposób docierają do tych liczb. (W zdb tank
razie potrzeby mogę opublikować wyniki , ale szukam ogólnej odpowiedzi, która może pomóc innym)
Po przeczytaniu oryginalnego wątku e-mail i odpowiedzi @ ewwhite, która go wyjaśniła, myślę, że to pytanie wymaga zaktualizowanej odpowiedzi, ponieważ powyższa odpowiedź obejmuje tylko połowę.
Jako przykład użyjmy danych wyjściowych z mojej puli. Użyłem polecenia
zdb -U /data/zfs/zpool.cache -bDDD My_pool
. W moim systemie potrzebowałem dodatkowego-U
argumentu, aby zlokalizować plik pamięci podręcznej ZFS dla puli, który FreeNAS przechowuje w innej lokalizacji niż normalna; być może będziesz musiał to zrobić lub nie. Z reguły spróbuj najpierwzdb
bez-U
, a jeśli wystąpi błąd pliku pamięci podręcznej, użyjfind / -name "zpool.cache"
lub podobnie, aby zlokalizować potrzebny plik.To był mój faktyczny wynik i zinterpretowałem go poniżej:
Co to wszystko oznacza i ustalenie rzeczywistego rozmiaru tabeli deduplikacji:
Dane wyjściowe pokazują dwie podtabele , jedną dla bloków, w których istnieje duplikat ( DDT-sha256-zap-duplicate ), a drugą dla bloków, w których duplikat nie istnieje ( DDT-sha256-zap-unique ) /. Trzecia tabela poniżej zawiera ogólną sumę dla obu tych elementów, a poniżej znajduje się wiersz podsumowania. Patrząc tylko na „sumaryczne” wiersze i podsumowanie, daje nam to, czego potrzebujemy:
Zróbmy trochę chrupania liczb.
Liczba bloków działa w następujący sposób: Liczba wpisów związanych z duplikatami bloków = 771295, liczba wpisów związanych z unikalnymi blokami = 4637966, całkowita liczba wpisów w tabeli DDT powinna wynosić 771295 + 4637966 = 5409261. Tak więc liczba bloków w milionach (milionach binarnych to znaczy!) wyniesie 5409261 / (1024 ^ 2) = 5,158 miliona. Podsumowując, stwierdzamy, że w sumie jest 5,16 mln bloków .
Potrzebna pamięć RAM działa w następujący sposób: każdy z 771295 wpisów dla duplikatów bloków zajmuje 165 bajtów w pamięci RAM, a każdy 4646966 wpisów dla unikalnych bloków zajmuje 154 bajty w pamięci RAM, więc całkowita pamięć RAM potrzebna teraz dla tabeli deduplikacji = 841510439 bajtów = 841510439 / (1024 ^ 2) MBytes = 803 MB = 0,78 GB pamięci RAM .
(Użyty rozmiar dysku można obliczyć w ten sam sposób, używając liczb „rozmiar na dysku”. Najwyraźniej ZFS stara się efektywnie wykorzystywać dyskowe operacje we / wy i wykorzystując fakt, że miejsce na dysku zajmowane przez DDT nie jest to zwykle problem. Wygląda więc na to, że ZFS po prostu przydziela pełny 512-bajtowy sektor dla każdego wpisu lub coś w tym stylu, zamiast tylko 154 lub 165 bajtów, aby utrzymać jego wydajność. Może to nie obejmować żadnego limitu dla wielu kopie przechowywane na dysku, co zwykle robi ZFS.)
Całkowita ilość przechowywanych danych i korzyści z ich dedukcji: Ze statystyk DDT ogółem 715 GB („715 G”) danych jest przechowywanych przy użyciu zaledwie 578 GB („578 G”) przydzielonego miejsca na dyskach. Tak więc nasz współczynnik oszczędności miejsca deduplikacji wynosi (715 GB danych) / (578 GB miejsca wykorzystanego po deduplikacji) = 1,237 x, co mówi nam podsumowanie („dedup = 1,24”).
źródło