読者です 読者をやめる 読者になる 読者になる

zfsで圧縮機能を試してみる

とりあえずこんな感じで3つほどファイルシステム作成して試してみた。

# zpool create -m /zdevel zpool0 da0s1 da0s2 da1s1 da1s2
# zfs create zpool0/hamaco
# zfs create zpool0/jack
# zfs create zpool0/rucifer

圧縮を有効にする

zfs setコマンドを使って圧縮機能を有効にする。

# zfs set compress=on zpool0/jack
# zfs set compress=gzip zpool0/rucifer

compressにはが使用可能。このうちonとlzjbは同じ動作をする。gzipは多分gzip-6と同じだと思う。

5.5Mのファイルをコピーしてみる。

# cd /zdevel
shana# time cp /usr/local/www/public/sample.bmp hamaco/
0.006u 0.012s 0:00.01 100.0% 48+1892k 0+0io 0pf+0w
shana# time cp /usr/local/www/public/sample.bmp jack/
0.000u 0.016s 0:00.02 50.0% 32+1696k 0+0io 0pf+0w
shana# time cp /usr/local/www/public/sample.bmp rucifer/
0.005u 0.011s 0:00.01 100.0% 48+1892k 0+0io 0pf+0w

この程度だと圧縮してても速度は殆ど大差がない。

ディスク使用量を見てみる。

# zfs list
NAME             USED  AVAIL  REFER  MOUNTPOINT
zpool0          9.82M  1.93G    22K  /zdevel
zpool0/hamaco   5.52M  1.93G  5.52M  /zdevel/hamaco
zpool0/jack     2.51M  1.93G  2.51M  /zdevel/jack
zpool0/rucifer  1.65M  1.93G  1.65M  /zdevel/rucifer

shana# zfs get compressratio
NAME            PROPERTY       VALUE           SOURCE
zpool0          compressratio  1.71x           -
zpool0/hamaco   compressratio  1.00x           -
zpool0/jack     compressratio  2.21x           -
zpool0/rucifer  compressratio  3.37x           -

ちゃんと圧縮されて保存されているみたい。compressratioで圧縮率が分かる。

速度比較

/dev/urandomを使って128MBのファイルを作成する。

shana# dd if=/dev/urandom of=hamaco/random.dat count=131072 bs=1024
131072+0 records in
131072+0 records out
134217728 bytes transferred in 10.760321 secs (12473394 bytes/sec)

shana# dd if=/dev/urandom of=jack/random.dat count=131072 bs=1024
131072+0 records in
131072+0 records out
134217728 bytes transferred in 12.353089 secs (10865115 bytes/sec)

shana# dd if=/dev/urandom of=rucifer/random.dat count=131072 bs=1024
131072+0 records in
131072+0 records out
134217728 bytes transferred in 23.177062 secs (5790972 bytes/sec)

圧縮率がよくなるにつれて、速度が低下しているのが分かる。

/dev/zeroで128MBのファイルを作ると、逆に圧縮しているほうが速くなる。

shana# dd if=/dev/zero of=hamaco/zero.dat count=131072 bs=1024
131072+0 records in
131072+0 records out
134217728 bytes transferred in 8.296105 secs (16178403 bytes/sec)
shana# dd if=/dev/zero of=jack/zero.dat count=131072 bs=1024
131072+0 records in
131072+0 records out
134217728 bytes transferred in 4.481962 secs (29946200 bytes/sec)
shana# dd if=/dev/zero of=rucifer/zero.dat count=131072 bs=1024
131072+0 records in
131072+0 records out
134217728 bytes transferred in 4.336304 secs (30952103 bytes/sec)

最後に

FreeBSDzfsだとshareiscsiが使えない>

sharenfsも

#zfs set sharenfs=on {pool_name}

だけだと、動かないし……
時間のある時にでもOpenSolaris入れて試してみるか~