Ich wollte wissen, ob es sich für mich auszahlt, die ZFS-Deduplizierung zu aktivieren. Deshalb habe ich den Befehl ausgeführt,
zdb -S tank
weiß 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 dedup
Ausdruck 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