ZFS interpretiert die Ausgabe von zdb -S tank

ZFS interpretiert die Ausgabe von zdb -S tank

Ich wollte wissen, ob es sich für mich auszahlt, die ZFS-Deduplizierung zu aktivieren. Deshalb habe ich den Befehl ausgeführt, zdb -S tankweiß aber, dass ich Hilfe beim Interpretieren der Ausgabe brauche.

Simulated DDT histogram:

bucket              allocated                       referenced
______   ______________________________   ______________________________
refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
------   ------   -----   -----   -----   ------   -----   -----   -----
     1    49.2M   6.15T   6.15T   6.14T    49.2M   6.15T   6.15T   6.14T
     2     352K   42.0G   42.0G   42.0G     725K   86.3G   86.3G   86.4G
     4    7.99K    913M    913M    916M    37.7K   4.20G   4.20G   4.21G
     8    1.43K    161M    161M    161M    14.6K   1.58G   1.58G   1.58G
    16      623   67.1M   67.1M   67.4M    12.2K   1.32G   1.32G   1.33G
    32       73   7.37M   7.37M   7.43M    2.65K    268M    268M    270M
    64      717   4.23M   4.23M   7.46M    48.3K    392M    392M    611M
   128        4    257K    257K    266K      689   40.9M   40.9M   42.6M
   256        2    128K    128K    133K      802   57.8M   57.8M   59.3M
   512        2      1K      1K   10.7K    1.37K    703K    703K   7.32M
    4K        1    128K    128K    128K    7.31K    935M    935M    934M
   16K        1    512B    512B   5.33K    20.0K   10.0M   10.0M    107M
   64K        1    128K    128K    128K    93.0K   11.6G   11.6G   11.6G
  512K        1    128K    128K    128K     712K   89.0G   89.0G   88.9G
 Total    49.6M   6.19T   6.19T   6.18T    50.9M   6.34T   6.34T   6.33T

dedup = 1.02, compress = 1.00, copies = 1.00, dedup * compress / copies = 1.03

Dank im Voraus.

Antwort1

Es gibt zwei Dinge, die Sie bei diesem Histogramm beachten sollten. Das erste und offensichtlichste ist der dedupAusdruck am Ende. Dazu gibt es nicht viel zu sagen, da es sich um einfache Mathematik handelt. In Ihrem Fall bietet die Deduplizierung nur eine Platzersparnis von 2 %, und da Sie keine Komprimierung verwenden (was Sie in erster Linie tun sollten, da dies Platz spart und Ihnen Leistung bringt, da I/O viel kostspieliger ist als die CPU-Zeit mit einem effizienten Algorithmus wie LZ4), ist dies der Grenzgewinn, den Sie nach der Aktivierung der Deduplizierung haben: 2~3 %.

Deduplizierung wird dann sinnvoll, wenn die effektive Platzersparnis höher als 2,0 ist und Ihr Speichersubsystem so teuer ist, dass es in Ordnung ist, Speicher und CPU nur für die Deduplizierung zu verschwenden. Wir sprechen hier beispielsweise von Enterprise NVMe-Pools.

Aber zu welchem ​​Preis ist das geschehen?

Das ist das zweite, was ich erwähnt habe. Der erste Treffer wird in Ihrem RAM sein. Sie müssen die Deduplizierungstabellen im RAM speichern. Wenn kein RAM vorhanden ist, um sie zu speichern, stürzt das System einfach ab und Sie können den Pool nicht mounten. Es gibt einige Fortschritte mit neueren Versionen von ZFS (wie OpenZFS 2.0), aber mir ist nicht bekannt, ob sich diesbezüglich etwas geändert hat.

In diesem Sinne erhalten Sie einfach die Gesamtzahl der Blöcke, die die letzte Zeile der ersten Spalte darstellt:49.6M

Da jede Deduplizierungstabelle 320 Bytes benötigt, multiplizieren Sie einfach die Anzahl der Blöcke mit dem erforderlichen Speicherplatz für eine bestimmte Deduplizierungstabelle und Sie erhalten die erforderliche RAM-Menge:

49.6M * 320 bytes = 15.872MB ~ 15.5GB

Sie verschwenden also fast16 GIGABYTESystem-RAM, nur um Ihre nicht deduplizierbaren Daten zu deduplizieren. Diese 16 GB werden von wichtigen Teilen des Systems wie ARC entfernt, die Ihren Pool einfach beschleunigen.

Also nein. Deduplizierung lohnt sich nicht, außer wenn:

  • Sie haben ein extrem teures Speichersubsystem
  • Ihre Daten können problemlos dedupliziert werden

verwandte Informationen