He leído mucha información sobre la planificación de los requisitos de RAM para la deduplicación ZFS. Acabo de actualizar la RAM de mi servidor de archivos para admitir algunas deducciones muy limitadas en zvols ZFS en las que no puedo usar instantáneas y clones (ya que tienen formato zvols como un sistema de archivos diferente) pero contendrán muchos datos duplicados.
Quiero asegurarme de que la nueva RAM que agregué admitirá la deduplicación limitada que pretendo hacer. En la planificación, mis números se ven bien, pero quiero estar seguro .
¿Cómo puedo saber el tamaño actual de las tablas de deduplicación ZFS (DDT) en mi sistema en vivo? Leí este hilo de la lista de correo pero no tengo claro cómo están llegando a esos números. (Puedo publicar la salida de zdb tank
si es necesario, pero estoy buscando una respuesta genérica que pueda ayudar a otros)
Después de leer el hilo original del correo electrónico y la respuesta de @ewwhite que lo aclaró, creo que esta pregunta necesita una respuesta actualizada, ya que la respuesta anterior solo cubre la mitad.
Como ejemplo, usemos la salida en mi grupo. He utilizado el comando
zdb -U /data/zfs/zpool.cache -bDDD My_pool
. En mi sistema necesitaba el-U
argumento adicional para ubicar el archivo de caché ZFS para el grupo, que FreeNAS almacena en una ubicación diferente de la normal; puede o no necesitar hacer eso. Por lo general, intentezdb
sin-U
primero, y si obtiene un error de archivo de caché, usefind / -name "zpool.cache"
o similar para ubicar el archivo que necesita.Este fue mi resultado real y lo he interpretado a continuación:
Lo que todo significa y calcular el tamaño real de la tabla de deduplicación
La salida muestra dos subtablas , una para bloques donde existe un duplicado ( DDT-sha256-zap-duplicate ) y otra para bloques donde no existe duplicado ( DDT-sha256-zap-unique ) /. La tercera tabla debajo de ellos da un total general de ambos, y hay una fila de resumen debajo de eso. Mirando solo las filas "totales" y el resumen nos da lo que necesitamos:
Hagamos algunos cálculos numéricos.
El recuento de bloques funciona así: Número de entradas relacionadas con bloques duplicados = 771295, número de entradas relacionadas con bloques únicos = 4637966, las entradas totales en la tabla DDT deben ser 771295 + 4637966 = 5409261. Entonces, el número de bloques en millones (millones binarios eso es!) sería 5409261 / (1024 ^ 2) = 5.158 millones. En el resumen encontramos que hay 5,16 millones de bloques en total .
La RAM necesaria funciona así: las 771295 entradas para bloques duplicados ocupan cada una 165 bytes en RAM, y las 4637966 entradas para bloques únicos ocupan cada una 154 bytes en RAM, por lo que la RAM total necesaria para la tabla de deduplicación en este momento = 841510439 bytes = 841510439 / (1024 ^ 2) MBytes = 803 MB = 0.78 GB de RAM .
(El tamaño en el disco utilizado se puede calcular de la misma manera, utilizando las cifras de "tamaño en el disco". Claramente, ZFS está tratando de usar E / S de disco de manera eficiente y aprovechando el hecho de que el espacio en disco ocupado por el DDT no es normalmente es un problema. Parece que ZFS simplemente está asignando un sector completo de 512 bytes para cada entrada, o algo por el estilo, en lugar de solo 154 o 165 bytes, para mantenerlo eficiente. Esto podría no incluir ninguna asignación para múltiples copias guardadas en el disco, lo que ZFS suele hacer
La cantidad total de datos almacenados y el beneficio de deducirlos: del total de estadísticas DDT, 715 Gbytes ("715G") de datos se almacenan usando solo 578 GBytes ("578G") de almacenamiento asignado en los discos. Entonces, nuestra relación de ahorro de espacio dedup es (715 GB de datos) / (578 GB de espacio utilizado después de deducirlo) = 1.237 x, que es lo que nos dice el resumen ("dedup = 1.24").
fuente