ZFS interpreta la salida del tanque zdb -S

ZFS interpreta la salida del tanque zdb -S

Quería saber si me compensaría activar la deduplicación de zfs, así que ejecuté el comando, zdb -S tankpero sé que necesito ayuda para interpretar el resultado.

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

Gracias de antemano.

Respuesta1

Hay dos cosas que debes mirar en este histograma. La primera y más obvia es la dedupexpresión al final. No hay mucho que decir al respecto ya que son matemáticas simples. En su caso, la deduplicación solo proporcionará un ahorro de espacio del 2%, y dado que no usa compresión (que debería hacerlo en primer lugar, porque ahorra espacio y le brinda rendimiento porque la E/S es mucho más costosa que el tiempo de CPU con un algoritmo eficiente como LZ4), esa es la ganancia marginal que tendrá después de habilitar la deduplicación: 2~3%.

La deduplicación comienza a ser valiosa cuando el ahorro de espacio efectivo es superior a 2.0 y su subsistema de almacenamiento es tan costoso que se puede desperdiciar memoria y CPU solo para manejar la deduplicación. Estamos hablando de pools Enterprise NVMe, por ejemplo.

¿Pero a qué costo esto viene?

Esa es la segunda cosa que he mencionado. El primer golpe estará en tu RAM. Deberá almacenar las tablas de deduplicación en la RAM. Si no hay RAM para contenerlo, el sistema simplemente fallará y no podrá montar el grupo. Hay algunos avances con las versiones más nuevas de ZFS (como OpenZFS 2.0), pero no sé si algo ha cambiado al respecto.

Con esto en mente, solo obtienes el número total de bloques, que es la última línea de la primera columna:49.6M

Dado que cada tabla de desduplicación necesita 320 bytes, simplemente multiplica la cantidad de bloques por el espacio requerido para una tabla de desduplicación determinada y obtendrás la cantidad de RAM necesaria:

49.6M * 320 bytes = 15.872MB ~ 15.5GB

Así que desperdiciarás casi16 GBde RAM del sistema solo para deduplicar sus datos no aptos para deduplicación. Esos 16 GB se eliminarán de partes vitales del sistema, como ARC, que simplemente aceleran su grupo.

Entonces no. No vale la pena la deduplicación excepto si:

  • Tienes un subsistema de almacenamiento extremadamente caro.
  • Sus datos se pueden deduplicar fácilmente

información relacionada