ZFS interpreta a saída do tanque zdb -S

ZFS interpreta a saída do tanque zdb -S

Eu queria saber se valeria a pena ativar a desduplicação zfs, então executei o comando, zdb -S tankmas 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 dedupexpressã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

informação relacionada