zfs-fuse: a ativação da compactação não tem efeito

4

Instalei no sistema de arquivos Debian Wheezy zfs-fuse e ativei a compactação gzip-9 em um conjunto de dados ("storage / backup"). Quando verifico se a compactação está ativada neste conjunto de dados, ele mostra SIM:

$: zfs get compression storage/backup
NAME         PROPERTY     VALUE     SOURCE
storage/backup  compression  gzip-9    local

No entanto, quando verifico a taxa de compactação com du -ah ou com sfx get compressratio , nenhuma compactação pode ser vista.

Todos os arquivos, incluindo os bem compactados (por exemplo, arquivos de texto), ocupam exatamente o mesmo tamanho de disco que os não compactados:

$: zfs get compressratio storage/backup
NAME         PROPERTY       VALUE  SOURCE
stor/backup  compressratio  1.00x  -

Por que essa situação ocorre?

Aqui estão algumas informações de zfs get all sobre o conjunto de dados:

compressratio         1.00x                  -
mounted               yes                    -
quota                 none                   default
reservation           none                   default
recordsize            128K                   default
mountpoint            /storage/backup        default
sharenfs              off                    default
checksum              on                     default
compression           gzip-9                 local
atime                 on                     default
devices               on                     default
    
por Al Berger 03.07.2014 / 10:24

1 resposta

1

Parece que zfs-fuse atualizará os dados de compressratio a cada 30 segundos com IO limitado ocorrendo, mas há outro disparador para a atualização, já que arquivos IO ou arquivos grandes fazem com que a atualização de dados ocorra mais cedo.

Eu coloquei algumas funções de teste em uma essência . Eles exigem um sistema de arquivos limpo (sem arquivos) que começará em 1.00x.

Se os scripts pausarem para sempre no primeiro teste, seus contadores de compactação nunca serão atualizados e você terá um problema com a sua instalação.

Executando os scripts em uma caixa wheezy do Debian:

$ uname -a
Linux zfs-fuse 3.2.0-4-686-pae #1 SMP Debian 3.2.54-2 i686 GNU/Linux

Resulta no seguinte:

$ test_compression compress
Testing [compress]

Testing size [4096]
Waited 0 seconds for [compressratio_is_one]
4096 bytes made up of 1*4096 blocks
Waited 20 seconds for [compresstario_is_not_one]
1.12x

Testing size [16384]
Waited 30 seconds for [compressratio_is_one]
16384 bytes made up of 1*16384 blocks
Waited 30 seconds for [compresstario_is_not_one]
1.53x

Testing size [1048576]
Waited 30 seconds for [compressratio_is_one]
1048576 bytes made up of 1*131072 blocks
Waited 30 seconds for [compresstario_is_not_one]
31.44x

Testing size [33161216]
Waited 30 seconds for [compressratio_is_one]
33161216 bytes made up of 255*131072 blocks
Waited 0 seconds for [compresstario_is_not_one]
202.31x

Você pode reduzir isso, normalmente pela metade, fazendo algo intensivo em segundo plano, o que provavelmente aciona a atualização do contador.

no fundo

$ while true; do touch somefile; rm somefile; done

Em seguida, teste novamente:

$ test_compression compress
Testing [compress]

Testing size [4096]
Waited 0 seconds for [compressratio_is_one]
4096 bytes made up of 1*4096 blocks
Waited 5 seconds for [compresstario_is_not_one]
1.11x

Testing size [16384]
Waited 17 seconds for [compressratio_is_one]
16384 bytes made up of 1*16384 blocks
Waited 17 seconds for [compresstario_is_not_one]
1.50x

Testing size [1048576]
Waited 16 seconds for [compressratio_is_one]
1048576 bytes made up of 1*131072 blocks
Waited 10 seconds for [compresstario_is_not_one]
29.73x

Testing size [33161216]
Waited 0 seconds for [compressratio_is_one]
33161216 bytes made up of 244*131072 blocks
Waited 0 seconds for [compresstario_is_not_one]
201.35x

De nota, no FreeBSD a atualização acontece a cada 5 segundos:

$ test_compression giggidy/compress
Testing [giggidy/compress]

Testing size [4096]
Waited 0 seconds for [compressratio_is_one]
4096 bytes made up of 1*4096 blocks
Waited 4 seconds for [compresstario_is_not_one]
1.21x

Testing size [16384]
Waited 5 seconds for [compressratio_is_one]
16384 bytes made up of 1*16384 blocks
Waited 5 seconds for [compresstario_is_not_one]
1.91x

Testing size [1048576]
Waited 5 seconds for [compressratio_is_one]
1048576 bytes made up of 1*131072 blocks
Waited 5 seconds for [compresstario_is_not_one]
39.33x

Testing size [33161216]
Waited 5 seconds for [compressratio_is_one]
33161216 bytes made up of 1*131072 blocks
Waited 4 seconds for [compresstario_is_not_one]
114.25x

Vou adicionar um exemplo baseado no Solaris quando puder entrar em uma caixa.

    
por 03.07.2014 / 14:35