1 puntos por GN⁺ 2024-10-31 | 1 comentarios | Compartir por WhatsApp

¿Qué es la deduplicación en OpenZFS?

  • Definición de deduplicación: En OpenZFS, antes de escribir datos en disco, se verifica si esos datos ya existen en el disco; si existen, no se realiza una nueva escritura y en su lugar se agrega una referencia a la copia existente.
  • Desafíos de la deduplicación: Es difícil comprobar si los datos ya están en el disco y conocer su ubicación. Esto requiere operaciones adicionales de entrada/salida (IO), lo que puede causar una caída en el rendimiento.

¿Cómo funciona la deduplicación?

  • Modo de funcionamiento: Cuando la deduplicación está activada, se prepara el bloque de datos y se calcula su checksum. Antes, el asignador de metaslabs asignaba el espacio, pero cuando la deduplicación está activada, el checksum se consulta en la tabla de deduplicación.
  • Tabla de deduplicación: Se almacena en forma de tabla hash que usa el checksum como clave y la ubicación en disco junto con el conteo de referencias como valor. Esto se considera parte de los metadatos del pool.

Problemas de la deduplicación tradicional

  • Problemas de la tabla de deduplicación: La deduplicación tradicional se implementa usando el objeto de tabla hash en disco de OpenZFS. Es una estructura compleja y no es adecuada para aplicaciones como la deduplicación.
  • Uso de memoria: La lectura de la tabla de deduplicación se cachea en el ARC, y si hay suficiente RAM, se puede reducir la parte de lectura de las actualizaciones de la tabla.
  • Problema de entradas únicas: El espacio necesario para rastrear entradas únicas en la tabla de deduplicación es un problema. Los bloques con conteo de referencias de 1 ocupan espacio en la tabla de deduplicación y, si no se vuelve a escribir el mismo dato, ese costo no puede recuperarse.

¿Cómo resuelve el problema FastDedup?

  • Reducción de la lista de entradas activas: Para reducir el uso de memoria, se disminuye la huella de memoria de la lista de entradas activas. En la nueva tabla de deduplicación, la parte de "valor" de una entrada se reduce a 72 bytes.
  • Log de deduplicación: En lugar de la lista de entradas activas, se usa un log para registrar los cambios, y en caso de recuperación por fallo se vuelve a reproducir el log. El log se guarda en memoria para permitir búsquedas rápidas.
  • Vaciado incremental del log: Para controlar el tamaño del log, una parte del log se escribe en el ZAP en cada transacción. Cuando hay presión de memoria, se acelera el vaciado del log.

Resumen de GN⁺

  • La nueva función "FastDedup" de OpenZFS fue desarrollada para resolver los problemas de la deduplicación tradicional. Reduce el uso de memoria y permite una gestión de datos más eficiente mediante logs.
  • La deduplicación solo es útil en cargas de trabajo específicas y, para uso general, sigue pudiendo ser ineficiente. Esto se debe a que la sobrecarga de administrar la tabla de deduplicación es alta.
  • Otro proyecto con una función similar es la deduplicación de Btrfs, que puede ser una alternativa en otros sistemas de archivos.

1 comentarios

 
GN⁺ 2024-10-31
Comentarios de Hacker News
  • Hice clic por el título, pero terminé leyendo casi todo aunque no me interesaba ZFS. El artículo explicaba las cosas con claridad y me gustó especialmente el tema CSS para móvil. Hay un resumen conciso al final del artículo.

  • Además de la discusión sobre copy_file_range, estaría bien poder encontrar en el sistema de archivos archivos de 1 MB o más con el mismo hash y aplicarles deduplicación de forma selectiva.

  • El problema de la deduplicación tradicional es que el overhead es demasiado alto, así que salvo en ciertas cargas de trabajo específicas es difícil obtener beneficios. Vi una reducción de 3:1 por deduplicación/compresión en cargas de trabajo de VMWare en arreglos de Pure y Dell/EMC.

  • La efectividad de la deduplicación depende mucho del tamaño de los bloques que se hashean. Cuanto más pequeño es el bloque, mayor es la probabilidad de encontrar bloques coincidentes. Personalmente prefiero un tamaño de bloque de 4 KB.

  • Quiero una deduplicación "offline" o una deduplicación "perezosa". Cuando la deduplicación está activada, todas las operaciones de escritura y liberación requieren consultas y escrituras en la tabla de deduplicación. Quiero que la escritura de datos termine rápido.

  • Tengo muchas expectativas con la deduplicación rápida. Quería usar la deduplicación de ZFS para datos de ArchiveBox. Parece que sería posible archivar muchas URL y dejar que el sistema de archivos comprima todo.

  • He estado usando la deduplicación de ZFS para mi archivo personal y actualmente está reduciendo el espacio en disco a una tercera parte. ZFS ha funcionado muy bien en términos de confiabilidad y ha ayudado a evitar la pérdida de datos.

  • La deduplicación general suena bien en teoría, pero en la práctica no funciona muy bien. IPFS intenta deduplicar datos usando fragmentos de tamaño variable, pero en la práctica no hace diferencia y solo aumenta la complejidad.

  • Estaría bien que mejorara el hardware dedicado de los controladores de disco para exponer al sistema el hash de los bloques para cálculos como ECC.

  • Ojalá la API del sistema de archivos tuviera una forma completamente distinta. La API de sistemas de archivos de todos los OS está estancada por la compatibilidad.

  • Si el rendimiento de escritura es importante, no hace falta deduplicar al escribir. La deduplicación puede hacerse después, en paralelo y con baja prioridad.