1 pontos por GN⁺ 2024-10-31 | 1 comentários | Compartilhar no WhatsApp

O que é a desduplicação no OpenZFS?

  • Definição de desduplicação: no OpenZFS, antes de gravar dados no disco, o sistema verifica se esses dados já existem no disco e, se existirem, não faz uma nova gravação, apenas adiciona uma referência à cópia existente.
  • Desafios da desduplicação: é difícil verificar se os dados já estão no disco e saber sua localização. Isso exige operações adicionais de entrada e saída (IO), o que pode causar queda de desempenho.

Como a desduplicação funciona?

  • Modo de funcionamento: quando a desduplicação está ativada, um bloco de dados é preparado e seu checksum é calculado. Antes, o alocador de metaslab reservava o espaço, mas com a desduplicação ativada o checksum é consultado na tabela de desduplicação.
  • Tabela de desduplicação: é armazenada na forma de uma tabela hash que usa o checksum como chave e a localização no disco e a contagem de referências como valor. Isso é considerado parte dos metadados do pool.

Problemas da desduplicação tradicional

  • Problema da tabela de desduplicação: a desduplicação tradicional é implementada usando o objeto de tabela hash em disco do OpenZFS. Trata-se de uma estrutura complexa, inadequada para aplicações como desduplicação.
  • Uso de memória: a leitura da tabela de desduplicação fica em cache no ARC e, se houver RAM suficiente, é possível reduzir a parte de leitura das atualizações da tabela.
  • Problema dos itens únicos: o espaço necessário para rastrear itens únicos na tabela de desduplicação é um problema. Blocos com contagem de referência igual a 1 ocupam espaço na tabela de desduplicação e, se os mesmos dados não forem gravados novamente, esse custo não pode ser recuperado.

Como a desduplicação rápida resolve esse problema?

  • Redução da lista de itens ativos: para reduzir o uso de memória, diminui-se a pegada de memória da lista de itens ativos. Na nova tabela de desduplicação, a parte de "valor" de cada item foi reduzida para 72 bytes.
  • Log de desduplicação: em vez da lista de itens ativos, usa-se um log para registrar mudanças e reproduzi-lo na recuperação após falha. O log é armazenado em memória para permitir consultas rápidas.
  • Flush incremental do log: para controlar o tamanho do log, parte dele é gravada no ZAP a cada transação. Quando há pressão de memória, o flush do log é acelerado.

Resumo do GN⁺

  • O novo recurso "FastDedup" do OpenZFS foi desenvolvido para resolver os problemas da desduplicação tradicional. Ele reduz o uso de memória e permite um gerenciamento de dados mais eficiente por meio de logs.
  • A desduplicação só é útil em cargas de trabalho específicas e ainda pode ser ineficiente para uso geral. Isso acontece porque o overhead de gerenciamento da tabela de desduplicação é alto.
  • Um projeto semelhante é o recurso de desduplicação do Btrfs, que pode ser uma alternativa em outros sistemas de arquivos.

1 comentários

 
GN⁺ 2024-10-31
Comentários do Hacker News
  • Cliquei pelo título, mas, mesmo sem ter interesse em ZFS, acabei lendo quase tudo. O texto explicava tudo com clareza, e gostei especialmente do tema CSS para mobile. Há um resumo conciso no fim do texto.

  • Além da discussão sobre copy_file_range, seria bom se o sistema de arquivos pudesse encontrar arquivos de 1 MB ou mais com o mesmo hash e aplicar deduplicação de forma seletiva.

  • O problema da deduplicação tradicional é que a sobrecarga é grande demais, então é difícil ver benefício fora de cargas de trabalho específicas. Vi economia de 3:1 com deduplicação/compressão em cargas de trabalho de VMWare em arrays da Pure e da Dell/EMC.

  • A eficácia da deduplicação é muito influenciada pelo tamanho dos blocos que são hasheados. Quanto menor o bloco, maior a chance de haver blocos coincidentes. Pessoalmente, prefiro blocos de 4 KB.

  • Quero deduplicação "offline" ou "preguiçosa". Quando a deduplicação está ativada, toda operação de escrita e liberação exige consultas e gravações na tabela de deduplicação. Quero que a gravação dos dados termine rápido.

  • Estou muito animado com a deduplicação rápida. Queria usar a deduplicação do ZFS nos dados do ArchiveBox. Parece que vai ficar possível arquivar muitas URLs e deixar o sistema de arquivos comprimir tudo.

  • Venho usando a deduplicação do ZFS em um arquivo pessoal e, no momento, ela está reduzindo o espaço em disco em 3 vezes. O ZFS funcionou muito bem em termos de confiabilidade e ajudou a evitar perda de dados.

  • A deduplicação genérica parece boa na teoria, mas na prática não funciona bem. O IPFS tenta deduplicar dados usando fragmentos de tamanho variável, mas na prática isso não faz diferença e só aumenta a complexidade.

  • Seria bom se o hardware dedicado dos controladores de disco fosse aprimorado para expor ao sistema os hashes dos blocos para cálculos como ECC.

  • Gostaria que a API do sistema de arquivos fosse de uma forma completamente diferente. As APIs de sistema de arquivos de todos os sistemas operacionais estão engessadas por causa da compatibilidade.

  • Se o desempenho de escrita é importante, não é necessário fazer deduplicação no momento da gravação. A deduplicação pode ser feita depois, em paralelo e com baixa prioridade.