BlankTar

about | blog | works | photo

前回のzfsネタに引き続き、今回は圧縮機能を試してみるよ。
ファイルシステムレベルでデータを圧縮してくれるってのはお手軽な感じでいいよね。
まあ、スループットが気になる所ではあるけれど。

設定

とりあえず設定します。
前回と同じ構成でtestpoolというストレージプールがあるってのが前提。

圧縮の設定は

# zfs set compression=on testpool

相変わらず1行で全部済む。楽だ。
ちなみにこの設定だとlzjbってので圧縮します。

# zfs set compression=gzip testpool

とかやってgzip圧縮したり、

# zfs set compression=gzip-1 testpool

とか

# zfs set compression=gzip-9 testpool

とかやって圧縮レベルを指定したりできます。

現在セットされている圧縮モードは

# zfs get compression
NAME     PROPERTY     VALUE SOURCE
testpool compression  on local

で確認できます。

試してみる

さあ、試してみよう

# head -c 50M /dev/zero >/testpool/testfile
# zfs get list
NAME      USED  AVAIL  PEFER  MOUNTPOINT
testpool  385K  63.1M    22K  /testpool

こんな感じ。
50M書き込んで385Kしか使ってないっ
・・・まあ、例によって0x00しか書いてないから当然だけれど。

という訳で、今度は乱数を書いてみる。

# head -c 50M /dev/urandom >/testpool/testfile
# zfs get list
NAME       USED  AVAIL  PEFER  MOUNTPOINT
testpool  50.3M  13.2M  49.9M  /testpool

的な。
圧縮できてないっ ・・・当然だけれど。

で、ベンチマーキング

あんま信憑性のあるデータじゃないですが、一応。

# zfs set compression=off testpool
# time head -c 50M /dev/urandom >/testpool/testfile
real    0m4.838s
user    0m0.007s
sys 0m3.841s
# zfs get list
NAME       USED  AVAIL  PEFER  MOUNTPOINT
testpool  50.3M  13.2M  49.9M  /testpool

# zfs set compression=on testpool
# time head -c 50M /dev/urandom >/testpool/testfile
real    0m5.425s
user    0m0.009s
sys 0m3.828s
# zfs get list
NAME       USED  AVAIL  PEFER  MOUNTPOINT
testpool  50.3M  13.2M  49.9M  /testpool

# zfs set compression=gzip
# time head -c 50M /dev/urandom >/testpool/testfile
real    0m6.658s
user    0m0.012s
sys 0m3.841s
# zfs get list
NAME       USED  AVAIL  PEFER  MOUNTPOINT
testpool  50.4M  13.1M  50.1M  /testpool

# zfs set compression=gzip-1
# time head -c 50M /dev/urandom >/testpool/testfile
real    0m6.457s
user    0m0.002s
sys 0m3.814s
# zfs get list
NAME       USED  AVAIL  PEFER  MOUNTPOINT
testpool  50.4M  13.1M  50.1M  /testpool

こんな感じでした。
平均値とかは取ってません! めんどくさい!

速さだと off < lzjb < gzip-1 < gzip な感じ。
妥当だね・・・。
圧縮率は今回は分からん。乱数だもんね。
聞くところによれば、素直に速さとトレードオフのようです。

しかしまあ、たった50Mなのに結構な差がでたね。
テストに使ったのが低スペックめのPC上の低スペックめな仮想マシンってのもあるとは思いますが。
とはいえ、とりあえずオンにすりゃいいってもんじゃないっぽいのは確か。

保存するデータと付きあわせてよく検討しましょう、かな。

< zfsの重複排除で未来を感じてみる cat5のケーブルとcat6のケーブルは何が違うのか。 >