Eu queria saber se valeria a pena ativar a desduplicação zfs, então executei o comando,
zdb -S tank
mas sei que preciso de ajuda para interpretar a saída.
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
Desde já, obrigado.
Responder1
Há duas coisas que você deve observar neste histograma. A primeira e mais óbvia é a dedup
expressão no final. Não há muito a dizer sobre isso, pois é matemática simples. No seu caso, a desduplicação proporcionará apenas uma economia de espaço de 2%, e como você não usa compactação (o que deveria ser feito em primeiro lugar, porque economiza espaço e oferece desempenho porque E/S é muito mais caro que o tempo de CPU com um algoritmo eficiente como LZ4), esse é o ganho marginal que você terá após ativar a desduplicação: 2~3%.
A desduplicação começa a ser valiosa quando a economia efetiva de espaço é superior a 2,0 e seu subsistema de armazenamento é tão caro que a memória e a CPU podem ser desperdiçadas apenas para lidar com a desduplicação. Estamos falando de pools Enterprise NVMe, por exemplo.
Mas a que custo isso acontece?
Essa é a segunda coisa que mencionei. O primeiro hit estará na sua RAM. Você precisará armazenar as tabelas de desduplicação na RAM. Se não houver RAM para mantê-lo, o sistema irá travar e você não conseguirá montar o pool. Existem alguns avanços nas versões mais recentes do ZFS (como o OpenZFS 2.0), mas não sei se algo mudou em relação a isso.
Pensando nisso, você obtém apenas o número total de blocos, que é a última linha da primeira coluna:49.6M
Como cada tabela de desduplicação precisa de 320 bytes, basta multiplicar o número de blocos pelo espaço necessário para uma determinada tabela de desduplicação e você obterá a quantidade necessária de RAM:
49.6M * 320 bytes = 15.872MB ~ 15.5GB
Então você vai desperdiçar quase16 GBde RAM do sistema apenas para desduplicar seus dados não compatíveis com desduplicação. Esses 16 GB serão removidos de partes vitais do sistema, como o ARC, que simplesmente aceleram o seu pool.
Então não. A desduplicação não vale a pena, exceto se:
- Você tem um subsistema de armazenamento extremamente caro
- Seus dados podem ser facilmente desduplicados