ついでにzfsのデータ圧縮を試してみる
前回のzfsネタに引き続き、今回は圧縮機能を試してみるよ。 ファイルシステムレベルでデータを圧縮してくれるってのはお手軽な感じでいいよね。 まあ、スループットが気になる所ではあるけれど。
設定
とりあえず設定します。 前回と同じ構成でtestpoolというストレージプールがあるってのが前提。
圧縮の設定は
$ sudo zfs set compression=on testpool
相変わらず1行で全部済む。楽だ。
ちなみにこの設定だとlzjb
ってので圧縮します。
$ sudo zfs set compression=gzip testpool
とかやってgzip圧縮したり、
$ sudo zfs set compression=gzip-1 testpool
とか
$ sudo zfs set compression=gzip-9 testpool
とかやって圧縮レベルを指定したりできます。
現在セットされている圧縮モードは
$ sudo zfs get compression NAME PROPERTY VALUE SOURCE testpool compression on local
で確認できます。
試してみる
さあ、試してみよう
$ sudo head -c 50M /dev/zero >/testpool/testfile $ sudo zfs get list NAME USED AVAIL PEFER MOUNTPOINT testpool 385K 63.1M 22K /testpool
こんな感じ。
50M書き込んで385Kしか使ってないっ ・・・まあ、例によって0x00しか書いてないから当然だけれど。
という訳で、今度は乱数を書いてみる。
$ sudo head -c 50M /dev/urandom >/testpool/testfile $ sudo zfs get list NAME USED AVAIL PEFER MOUNTPOINT testpool 50.3M 13.2M 49.9M /testpool
的な。
圧縮できてないっ ・・・当然だけれど。
で、ベンチマーキング
あんま信憑性のあるデータじゃないですが、一応。
$ sudo zfs set compression=off testpool $ sudo time head -c 50M /dev/urandom >/testpool/testfile real 0m4.838s user 0m0.007s sys 0m3.841s $ sudo zfs get list NAME USED AVAIL PEFER MOUNTPOINT testpool 50.3M 13.2M 49.9M /testpool $ sudo zfs set compression=on testpool $ sudo time head -c 50M /dev/urandom >/testpool/testfile real 0m5.425s user 0m0.009s sys 0m3.828s $ sudo zfs get list NAME USED AVAIL PEFER MOUNTPOINT testpool 50.3M 13.2M 49.9M /testpool $ sudo zfs set compression=gzip $ sudo time head -c 50M /dev/urandom >/testpool/testfile real 0m6.658s user 0m0.012s sys 0m3.841s $ sudo zfs get list NAME USED AVAIL PEFER MOUNTPOINT testpool 50.4M 13.1M 50.1M /testpool $ sudo zfs set compression=gzip-1 $ sudo time head -c 50M /dev/urandom >/testpool/testfile real 0m6.457s user 0m0.002s sys 0m3.814s $ sudo zfs get list NAME USED AVAIL PEFER MOUNTPOINT testpool 50.4M 13.1M 50.1M /testpool
こんな感じでした。 平均値とかは取ってません! めんどくさい!
速さだと off < lzjb < gzip-1 < gzip な感じ。 妥当だね・・・。 圧縮率は今回は分からん。乱数だもんね。 聞くところによれば、素直に速さとトレードオフのようです。
しかしまあ、たった50Mなのに結構な差がでたね。 テストに使ったのが低スペックめのPC上の低スペックめな仮想マシンってのもあるとは思いますが。 とはいえ、とりあえずオンにすりゃいいってもんじゃないっぽいのは確か。
保存するデータと付きあわせてよく検討しましょう、かな。