zfs-fuse:圧縮を有効にすると効果がありません

zfs-fuse:圧縮を有効にすると効果がありません

Debian Wheezy zfs-fuseファイルシステムにインストールし、1つのデータセット(「ストレージ/バックアップ」)で圧縮gzip-9を有効にしました。このデータセットで圧縮が有効になっていることを確認すると、「はい」と表示されます。

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

du -ahところで、圧縮があってもなくても圧縮率を確認してみるとsfx get compressratioわかります。

よく圧縮されたファイル(テキストファイルなど)を含むすべてのファイルは、圧縮されていないファイルとまったく同じディスクサイズを占めます。

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

なぜこれが起こるのですか?

zfs get allデータセットに関するいくつかの情報は次のとおりです。

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

答え1

zfs-fuse限られたIOが発生するとデータが30秒ごとに更新されるように見えますがcompressratio、バックグラウンドIOまたは非常に大きなファイルがデータの更新を高速化する可能性があるため、更新をトリガーするもう1つの要因があります。

少し入れました。機能テストの重要事項。 1.00xで起動されたクリーンな(ファイルなし)ファイルシステムが必要です。

最初のテストでスクリプトが永久に一時停止すると、圧縮カウンタは更新されず、インストールに問題があります。

Debian wheezy マシンでスクリプトを実行します。

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

結果は次のとおりです。

$ 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

カウンタの更新をトリガできる集中的なタスクをバックグラウンドで実行することで、通常これを約半分削減できます。

バックグラウンドで

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

その後、もう一度テストしてください。

$ 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

FreeBSDでは、約5秒ごとに更新されることに注目する価値があります。

$ 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

ボックスが入手できるようになったら、Solarisベースの例を追加します。

関連情報