【Strage】ZFS-on-Linuxあれこれのメモ 
 一部の人からぶん殴られそうなZFS-on-Linuxですが、これははたして実用出来るか?と、今色々試しています。そのときのメモです。

検証マシン
Express5800 GT120a
CPU E5504 @ 2.00GHz*2(2-way)
Memory 12G(2Gx6)

.4kセクタ(AFT)について


SeagateのSmartAlignという「レガシーなOSでもパフォーマンスが落ちないよ!」という技術を積んだ2TのHDD(ST2000DL003)を4発ほど積んで試してみたのですが、結果としてはasift=12をした方がパフォーマンスは高くなりました。
 これはチャンクサイズが大きくなった事によるパフォーマンスアップなのか、それともHDD側が4k>512変換をするオーバーヘッドが無くなったことによるパフォーマンスアップなのか、というのがハッキリしないので、後々AFTを使っていないHDDを挿して試してみようと思います

HDD
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: ST2000DL003-9VT1 Rev: CC32
Type: Direct-Access ANSI SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: ST2000DL003-9VT1 Rev: CC32
Type: Direct-Access ANSI SCSI revision: 05
Host: scsi2 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: ST2000DL003-9VT1 Rev: CC32
Type: Direct-Access ANSI SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: ST2000DL003-9VT1 Rev: CC32
Type: Direct-Access ANSI SCSI revision: 05



AFTを意識せずに作ってみる
#zpool create create zfs raidz sda sdb sdc sdd


ファイルに書き込み

# dd if=/dev/zero of=/zfs/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 20.1331 s, 208 MB/s
# dd if=/dev/zero of=/zfs/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 19.0672 s, 220 MB/s
# dd if=/dev/zero of=/zfs/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 19.6231 s, 214 MB/s



asift=12(4kセクタ)をしてみる
#zpool create -o ashift=12 zfs raidz sda sdb sdc sdd


ファイルへ書き込み

# dd if=/dev/zero of=/zfs/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 12.1009 s, 347 MB/s
# dd if=/dev/zero of=/zfs/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 11.9098 s, 352 MB/s
# dd if=/dev/zero of=/zfs/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 11.9703 s, 350 MB/s


100MB/sec以上速くなりました。。。

・zfsのcompressオプションはzleとlzjbとgzipのどれがいいの?



 WindowsからCIFSでビデオカメラで撮った.MTSなファイルや色々なiso/rar/zipファイルが混在してる18.4 GB (19,804,638,525 バイト)ほどのデータを移してからdfをしてみた結果、

Filesystem 1K-blocks Used Available

zfs 5567643136 18742528 5548900608 (lzjb)
zfs 5567643136 19261184 5548381952 (zle)
zfs 5567643136 18440576 5549202560 (gzip)


となったので、圧縮率に関してはgzipが一番高いように見えます。速度的には、zleとlzjbは目に見えた違いはありませんでした。しかし、gzipは転送速度が明らかに遅い(CIFS越しにzleとlzjbは900-800Mbps出ていたのに対してgzipは500-600Mbps程度)上に、CPUをかなり使用していました。zfs set compress=gzip-9とかやったときには全てのCPUが殆ど90%以上になり、ATOPの画面で8CPUが全て真っ赤になりました。そして遅いのでgzip-9は転送を諦めました…。gzipは確かに圧縮率は高いのですがパフォーマンス的にみてだめぽな感じです。

結論・lzjb使うのが一番いい

とりあえずのメモなので今日はここまでです。


//追記//
ashift=12の件ですが、AFTを使用していないST3500418AS(500Gプラッタの薄い500GのHDD)を4発使って試してみました。

ashift無しの場合

# zpool create -f zfs2 raidz sda sdb sdc sdd

# dd if=/dev/zero of=/zfs2/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 13.8498 s, 303 MB/s
# dd if=/dev/zero of=/zfs2/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 13.1475 s, 319 MB/s
# dd if=/dev/zero of=/zfs2/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 13.5215 s, 310 MB/s


この段階で、HDDを4発入れると200MB/secと言うのはないと言うことが分かりました。つまり、AFを使用したHDDでは割り当てが512バイトだとやはりセクタ割り当てでオーバーヘッドがあるようです。

試しにAFTを使っていないHDDでashift=12をした結果

# zpool destroy zfs2
# zpool create -f -o ashift=12 zfs2 raidz sda sdb sdc sdd
# dd if=/dev/zero of=/zfs2/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 14.305 s, 293 MB/s
# dd if=/dev/zero of=/zfs2/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 13.9485 s, 301 MB/s
# dd if=/dev/zero of=/zfs2/4G.img bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 13.9136 s, 301 MB/s


むしろ若干遅くなりましたね…。やはり4kセクタHDDはashiftを指定してあげるべきですね。

コメントを書く
必要事項とコメントを入力して下さい。









タグの挿入