Como a desduplicação no nível do bloco do ZFS se ajusta ao tamanho do bloco variável?

4

De acordo com O primeiro resultado do Google para "Deduplicação do ZFS"

...
What to dedup: Files, blocks, or bytes?
...
Block-level dedup has somewhat higher overhead than file-level dedup when whole files are duplicated, but unlike file-level dedup, it handles block-level data such as virtual machine images extremely well.
...
ZFS provides block-level deduplication
...

De acordo com o Artigo do ZFS da Wikipédia

ZFS uses variable-sized blocks of up to 128 kilobytes. The currently available code allows the administrator to tune the maximum block size used as certain workloads do not perform well with large blocks. If data compression (LZJB) is enabled, variable block sizes are used. If a block can be compressed to fit into a smaller block size, the smaller size is used on the disk to use less storage and improve IO throughput (though at the cost of increased CPU use for the compression and decompression operations).

Eu quero ter certeza de que entendi isso corretamente.

Supondo que a compressão está desativada

Se eu um arquivo preenchido aleatoriamente de 1GB, então eu escrevo um segundo arquivo que é o mesmo, exceto no meio, eu mudo um dos bytes. Esse arquivo será deduplicado (todos, exceto pelo bloco de bytes alterados?)

Se eu escrever um único arquivo de byte, será necessário um total de 128 kilobytes? Se não, os blocos ficarão maiores no caso de o arquivo ficar mais longo?

Se um arquivo receber dois blocos de 64kilobyte (isso aconteceria?), um arquivo idêntico seria desclassificado depois de um único bloco de 128 kilobytes

Se um arquivo for encurtado, parte do seu bloco teria sido ignorada, talvez os dados não fossem redefinidos para 0x00 bytes. Um bloco meio usado seria deduzido?

    
por George Bailey 18.08.2011 / 16:51

2 respostas

7

A desduplicação do ZFS funciona em blocos (recordlength), ele não sabe / não se preocupa com arquivos. Cada bloco é verificado usando sha256 (por padrão mutável). Se a soma de verificação corresponder a um outro bloco, apenas fará referência ao mesmo registro e nenhum novo dado será gravado. Um problema de desduplicação com o ZFS é que as somas de verificação são mantidas na memória, portanto, os grandes pools exigirão muita memória. Portanto, você só deve aplicar a reduplicação ao usar um tamanho de registro grande

Supondo um comprimento de registro de 128k

If I a randomly filled file of 1GB, then I write a second file that is the same except half way through, I change one of the bytes. Will that file be deduplicated (all except for the changed byte's block?)

Sim, apenas um bloco não será duplicado.

If I write a single byte file, will it take a whole 128 kilobytes? If not, will the blocks get larger in the event the file gets longer?

128k serão alocados, se o tamanho do arquivo crescer acima de 128k, mais blocos serão alocados conforme necessário.

If a file takes two 64kilobyte blocks (would this ever happen?), then would an identical file get deduped after taking a single 128 kilobyte block

Um arquivo terá 128k o mesmo arquivo será deduplicado

If a file is shortened, then part of its block would have been ignored, perhaps the data would not be reset to 0x00 bytes. Would a half used block get deduced?

Se o mesmo bloco for encontrado, sim

    
por 18.08.2011 / 23:35
0

Os blocos de tamanho variável do ZFS são como Yavor mencionado já não devem ser confundidos chunking de tamanho variável aleatório, também chamado de chunking definido pelo conteúdo ou impressão digital Rabin. Aqui é uma pequena conversa descrevendo as diferenças.

O ZFS usou tamanhos de bloco estáticos, mas configuráveis.

    
por 02.10.2011 / 12:55