2015-04-18追記、ふたたび比較実験しました。
比較は、
・CentOS 6.5 + ZFS on Linux 0.6.2
・OpenIndiana 151a9 (最近ひっそりとアップデートされた。ただし iso 提供は無し)
・FreeBSD 10.0
の3つの OS で行いました。マシン環境は次の通りです。3つの OS をマルチブートできるようにしてあります。
・lenovo ThinkPad T510
・CPU Intel Core i7 M620 2.67GHz
・MEM 8GB
・OS ディスク R2021D (Plextor M5M 256GB SSD 2枚によるRAID1)
・ZFS pool (HGST HTS721010A9E630 7200rpm SATA 1TB +
HITACHI HTS725050A9A634 7200rpm SATA 500GB による mirror構成)
※補足:HGST 1T を 2nd HDD ベイに搭載、HITACHI 500G は eSATA 接続で、約400G のパーティションでミラー
まずは、ファイルコピーです。実験データには、CentOS 6 の OS バックアップイメージを使っています。
root@hoge:~# uname -a SunOS hoge 5.11 oi_151a9 i86pc i386 i86pc Solaris root@hoge:~# zpool import tank4 root@hoge:~# zpool list NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT rpool 11.6G 9.57G 2.06G - 82% 1.00x ONLINE - tank4 368G 268G 99.7G - 72% 1.00x ONLINE - root@hoge:~# zpool status tank4 pool: tank4 state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: scrub repaired 0 in 1h18m with 0 errors on Sat Mar 15 20:39:47 2014 config: NAME STATE READ WRITE CKSUM tank4 ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c5t3d0p1 ONLINE 0 0 0 c5t1d0p1 ONLINE 0 0 0 errors: No known data errors root@hoge:~# cd /tank4/backup root@hoge:/tank4/backup# ls -l m5m.sda6.dump -rw-r--r-- 1 root root 9207209203 2014-02-22 21:51 m5m.sda6.dump root@hoge:/tank4/backup# cp m5m.sda6.dump m5m.sda6.dump-copied-on-oi151a9 real 3m44.857s user 0m0.056s sys 0m16.702s root@hoge:/tank4/backup# ls -l m5m.sda6.dump* -rw-r--r-- 1 root root 9207209203 2014-02-22 21:51 m5m.sda6.dump -rw-r--r-- 1 root root 9207209203 2014-03-16 13:55 m5m.sda6.dump-copied-on-oi151a9 root@hoge:/tank4/backup# cd root@hoge:~# zpool export tank4
root@hoge:~ # uname -a FreeBSD hoge 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59 UTC 2014 root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64 root@hoge:~ # zpool import tank4 root@hoge:~ # zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank4 368G 277G 91.1G 75% 1.00x ONLINE - root@hoge:~ # zpool status pool: tank4 state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(7) for details. scan: scrub repaired 0 in 1h18m with 0 errors on Sat Mar 15 20:39:47 2014 config: NAME STATE READ WRITE CKSUM tank4 ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 diskid/DISK-xxxxxxxxxxxxxxxxxxxxs1 ONLINE 0 0 0 diskid/DISK-yyyyyyyyyyyyyys1 ONLINE 0 0 0 errors: No known data errors root@hoge:~ # cd /tank4/backup root@hoge:/tank4/backup # ls -l m5m* -rw-r--r-- 1 root wheel 9207209203 Feb 22 21:51 m5m.sda6.dump -rw-r--r-- 1 root wheel 9207209203 Mar 16 13:55 m5m.sda6.dump-copied-on-oi151a9 root@hoge:/tank4/backup # time cp m5m.sda6.dump m5m.sda6.dump-copied-on-freebsd10.0 0.007u 4.455s 4:14.75 1.7% 21+174k 70801+2io 0pf+0w root@hoge:/tank4/backup # ls -l m5m* -rw-r--r-- 1 root wheel 9207209203 Feb 22 21:51 m5m.sda6.dump -rw-r--r-- 1 root wheel 9207209203 Mar 16 14:09 m5m.sda6.dump-copied-on-freebsd10.0 -rw-r--r-- 1 root wheel 9207209203 Mar 16 13:55 m5m.sda6.dump-copied-on-oi151a9 root@hoge:/tank4/backup # cd root@hoge:~ # zpool export tank4
[root@hoge ~]# uname -a Linux hoge 2.6.32-431.5.1.el6.x86_64 #1 SMP Wed Feb 12 00:41:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [root@hoge ~]# zpool import tank4 [root@hoge ~]# zpool status pool: tank4 state: ONLINE scan: scrub repaired 0 in 1h18m with 0 errors on Sat Mar 15 20:39:47 2014 config: NAME STATE READ WRITE CKSUM tank4 ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ata-HITACHI_HTS725050A9A364_xxxxxxxxxxxxxxxxxxxx-part1 ONLINE 0 0 0 ata-HGST_HTS721010A9E630_yyyyyyyyyyyyyy-part1 ONLINE 0 0 0 errors: No known data errors [root@hoge ~]# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank4 368G 285G 82.6G 77% 1.00x ONLINE - [root@hoge ~]# cd /tank4/backup [root@hoge backup]# ls -l m5m* -rw-r--r-- 1 root root 9207209203 Feb 22 21:51 m5m.sda6.dump -rw-r--r-- 1 root root 9207209203 Mar 16 14:09 m5m.sda6.dump-copied-on-freebsd10.0 -rw-r--r-- 1 root root 9207209203 Mar 16 13:55 m5m.sda6.dump-copied-on-oi151a9 [root@hoge backup]# time cp m5m.sda6.dump m5m.sda6.dump-copied-on-centos6 real 3m29.308s user 0m0.038s sys 0m6.764s [root@hoge backup]# ls -l m5m* -rw-r--r-- 1 root root 9207209203 Feb 22 21:51 m5m.sda6.dump -rw-r--r-- 1 root root 9207209203 Mar 16 14:21 m5m.sda6.dump-copied-on-centos6 -rw-r--r-- 1 root root 9207209203 Mar 16 14:09 m5m.sda6.dump-copied-on-freebsd10.0 -rw-r--r-- 1 root root 9207209203 Mar 16 13:55 m5m.sda6.dump-copied-on-oi151a9 [root@hoge backup]# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank4 368G 294G 74.0G 79% 1.00x ONLINE -
次に、シーケンシャルREAD (ddコマンド利用) です。
キャッシュの影響を避けるため、再起動&zpool import 直後に実行しています。
root@hoge:~# uname -a SunOS hoge 5.11 oi_151a9 i86pc i386 i86pc Solaris root@hoge:~# dd if=/tank4/backup/m5m.sda6.dump-copied-on-oi151a9 of=/dev/null bs=1M 8780+1 records in 8780+1 records out 9207209203 bytes (9.2 GB) copied, 106.582 s, 86.4 MB/s root@hoge:~# dd if=/tank4/backup/m5m.sda6.dump-copied-on-freebsd10.0 of=/dev/null bs=1M 8780+1 records in 8780+1 records out 9207209203 bytes (9.2 GB) copied, 115.16 s, 80.0 MB/s root@hoge:~# dd if=/tank4/backup/m5m.sda6.dump-copied-on-centos6 of=/dev/null bs=1M 8780+1 records in 8780+1 records out 9207209203 bytes (9.2 GB) copied, 114.334 s, 80.5 MB/s
root@hoge:~ # uname -a FreeBSD hoge 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59 UTC 2014 root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64 root@hoge:~ # dd if=/tank4/backup/m5m.sda6.dump-copied-on-oi151a9 of=/dev/null bs=1M 8780+1 records in 8780+1 records out 9207209203 bytes transferred in 105.113849 secs (87592732 bytes/sec) root@hoge:~ # dd if=/tank4/backup/m5m.sda6.dump-copied-on-freebsd10.0 of=/dev/null bs=1M 8780+1 records in 8780+1 records out 9207209203 bytes transferred in 114.760721 secs (80229621 bytes/sec) root@hoge:~ # dd if=/tank4/backup/m5m.sda6.dump-copied-on-centos6 of=/dev/null bs=1M 8780+1 records in 8780+1 records out 9207209203 bytes transferred in 113.732792 secs (80954745 bytes/sec)
[root@hoge ~]# uname -a Linux hoge 2.6.32-431.5.1.el6.x86_64 #1 SMP Wed Feb 12 00:41:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [root@hoge ~]# dd if=/tank4/backup/m5m.sda6.dump-copied-on-oi151a9 of=/dev/null bs=1M 8780+1 records in 8780+1 records out 9207209203 bytes (9.2 GB) copied, 64.9959 s, 142 MB/s [root@hoge ~]# dd if=/tank4/backup/m5m.sda6.dump-copied-on-freebsd10.0 of=/dev/null bs=1M 8780+1 records in 8780+1 records out 9207209203 bytes (9.2 GB) copied, 71.2292 s, 129 MB/s [root@hoge ~]# dd if=/tank4/backup/m5m.sda6.dump-copied-on-centos6 of=/dev/null bs=1M 8780+1 records in 8780+1 records out 9207209203 bytes (9.2 GB) copied, 72.7268 s, 127 MB/s
1ユーザのパーソナル利用環境での数値ですし、参考までですが、実験したワークロードにおいては、CentOS が良好な結果となりました。
あと2点補足ですが、ZFS のチューニング (ARCサイズ調整等) は行っていないデフォルトでの実験結果です。 また、当該 ZFS 領域には圧縮オプションは指定していません。
プールのプロパティを示します。
[root@hoge ~]# zpool get all tank4 NAME PROPERTY VALUE SOURCE tank4 size 368G - tank4 capacity 79% - tank4 altroot - default tank4 health ONLINE - tank4 guid 1893700132493715388 default tank4 version - default tank4 bootfs - default tank4 delegation on default tank4 autoreplace off default tank4 cachefile - default tank4 failmode wait default tank4 listsnapshots off default tank4 autoexpand off default tank4 dedupditto 0 default tank4 dedupratio 1.00x - tank4 free 74.0G - tank4 allocated 294G - tank4 readonly off - tank4 ashift 12 local tank4 comment - default tank4 expandsize 0 - tank4 freeing 0 default tank4 feature@async_destroy enabled local tank4 feature@empty_bpobj active local tank4 feature@lz4_compress active local [root@hoge ~]# zfs get all tank4/backup NAME PROPERTY VALUE SOURCE tank4/backup type filesystem - tank4/backup creation Sat Feb 1 9:43 2014 - tank4/backup used 66.4G - tank4/backup available 67.2G - tank4/backup referenced 66.4G - tank4/backup compressratio 1.00x - tank4/backup mounted yes - tank4/backup quota none default tank4/backup reservation none default tank4/backup recordsize 128K default tank4/backup mountpoint /tank4/backup default tank4/backup sharenfs off default tank4/backup checksum on default tank4/backup compression off local tank4/backup atime off inherited from tank4 tank4/backup devices on default tank4/backup exec on default tank4/backup setuid on default tank4/backup readonly off default tank4/backup zoned off default tank4/backup snapdir hidden default tank4/backup aclinherit restricted default tank4/backup canmount on default tank4/backup xattr on default tank4/backup copies 1 default tank4/backup version 4 - tank4/backup utf8only off - tank4/backup normalization none - tank4/backup casesensitivity sensitive - tank4/backup vscan off default tank4/backup nbmand off default tank4/backup sharesmb off default tank4/backup refquota none default tank4/backup refreservation none default tank4/backup primarycache all default tank4/backup secondarycache all default tank4/backup usedbysnapshots 0 - tank4/backup usedbydataset 66.4G - tank4/backup usedbychildren 0 - tank4/backup usedbyrefreservation 0 - tank4/backup logbias latency default tank4/backup dedup off default tank4/backup mlslabel none default tank4/backup sync standard default tank4/backup refcompressratio 1.00x - tank4/backup written 66.4G - tank4/backup snapdev hidden default
なお、手持ちデータがありませんので、ここ2年ほど ZFS on Linux を使ってみた経験上の話しですが、多数のファイルを含む tar ファイルの展開のような、メタデータ処理が多いワークロードは、ext4 等と比べて苦手なようです。あと、NFS はかなり苦手(ZIL使わない/使えない場合)のようで、NFS export する場合は、ZVOL + ext4 として export すると良い結果が得られると思います。ZVOL でも圧縮機能や snapshot を使えるので有益ですし、オンラインで割り当てサイズ (volsize) 拡張することも可能です。
2014-03-23追記
tar の展開についても比較してみました。展開に使ったアーカイブは、btrfs の実験に使ったものと同じです。
root@hoge:~# uname -a SunOS hoge 5.11 oi_151a9 i86pc i386 i86pc Solaris root@hoge:~# zpool import tank4 root@hoge:~# cd /tank4/backup root@hoge:/tank4/backup# ls -l sda6.tar -rw-r--r-- 1 root root 10927441920 2013-10-20 22:44 sda6.tar root@hoge:/tank4/backup# time tar xf sda6.tar real 4m2.966s user 0m4.219s sys 1m8.711s root@hoge:/tank4/backup# time rm -rf test.restore real 0m27.575s user 0m0.495s sys 0m7.178s root@hoge:/tank4/backup# cd root@hoge:~# zpool export tank4
root@hoge:~ # uname -a FreeBSD hoge 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59 UTC 2014 root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64 root@hoge:~ # zpool import tank4 root@hoge:~ # cd /tank4/backup backup/ backup2/ backup3/ root@hoge:~ # cd /tank4/backup root@hoge:/tank4/backup # ls -l sda6.tar -rw-r--r--+ 1 root wheel 10927441920 Oct 20 22:44 sda6.tar root@hoge:/tank4/backup # time tar xf sda6.tar 3.651u 29.506s 5:08.18 10.7% 66+173k 59704+418539io 12pf+0w root@hoge:/tank4/backup # time rm -rf test.restore 0.336u 12.340s 1:09.05 18.3% 15+165k 26766+0io 0pf+0w root@hoge:/tank4/backup # cd root@hoge:~ # zpool export tank4
[root@hoge ~]# uname -a Linux hoge 2.6.32-431.5.1.el6.x86_64 #1 SMP Wed Feb 12 00:41:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [root@hoge ~]# zpool import tank4 [root@hoge ~]# cd /tank4/backup [root@hoge backup]# ls -l sda6.tar -rw-r--r-- 1 root root 10927441920 Oct 20 22:44 sda6.tar [root@hoge backup]# time tar xf sda6.tar real 3m51.565s user 0m3.033s sys 0m46.419s [root@hoge backup]# time rm -rf test.restore real 2m1.249s user 0m0.471s sys 0m16.205s [root@hoge backup]# cd [root@hoge ~]# zpool export tank4この実験では、CentOS は、削除(rm)が苦手という結果になりました。現在の Linux 実装は、vmalloc に依存しており(meminfo を見ればわかります)、そこら辺に性能が出ない原因があるのではと思いますが、将来は他の Linux の fs と同様にページキャッシュを使う構造になるはず(既に試みが行われている)であり、まだ、性能向上の余地が残っているということでもあろうと思います。
2014-03-25追記
ものはついでに、LZ4 圧縮を有効にした場合についても、やってみました。
root@hoge:~# uname -a SunOS hoge 5.11 oi_151a9 i86pc i386 i86pc Solaris root@hoge:~# zpool import tank4 root@hoge:~# zpool list tank4 NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT tank4 368G 271G 96.7G - 73% 1.00x ONLINE - root@hoge:~# zfs list tank4/backup NAME USED AVAIL REFER MOUNTPOINT tank4/backup 72.8G 89.9G 72.8G /tank4/backup root@hoge:~# zfs get compression tank4/backup NAME PROPERTY VALUE SOURCE tank4/backup compression off local root@hoge:~# zfs set compression=lz4 tank4/backup root@hoge:~# zfs get compression tank4/backup NAME PROPERTY VALUE SOURCE tank4/backup compression lz4 local root@hoge:~# cd /tank4/backup root@hoge:/tank4/backup# ls -l sda6.tar -rw-r--r-- 1 root root 10927441920 2013-10-20 22:44 sda6.tar root@hoge:/tank4/backup# time tar xf sda6.tar real 2m40.653s user 0m4.100s sys 0m50.868s root@hoge:/tank4/backup# time rm -rf test.restore real 0m15.588s user 0m0.425s sys 0m6.385s root@hoge:/tank4/backup# cd root@hoge:~# zpool export tank4
root@hoge:~ # uname -a FreeBSD hoge 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59 UTC 2014 root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64 root@hoge:~ # zpool import tank4 root@hoge:~ # zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank4 368G 271G 96.7G 73% 1.00x ONLINE - root@hoge:~ # zfs list tank4/backup NAME USED AVAIL REFER MOUNTPOINT tank4/backup 72.8G 89.9G 72.8G /tank4/backup root@hoge:~ # zfs get compression tank4/backup NAME PROPERTY VALUE SOURCE tank4/backup compression lz4 local root@hoge:~ # cd /tank4/backup root@hoge:/tank4/backup # ls -l sda6.tar -rw-r--r--+ 1 root wheel 10927441920 Oct 20 22:44 sda6.tar root@hoge:/tank4/backup # time tar xf sda6.tar 3.772u 29.051s 3:11.58 17.1% 66+173k 56955+418539io 12pf+0w root@hoge:/tank4/backup # time rm -rf test.restore 0.446u 11.615s 0:42.61 28.2% 15+171k 17198+0io 0pf+0w root@hoge:/tank4/backup # cd root@hoge:~ # zpool export tank4
[root@hoge ~]# uname -a Linux hoge 2.6.32-431.5.1.el6.x86_64 #1 SMP Wed Feb 12 00:41:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [root@hoge ~]# zpool import tank4 [root@hoge ~]# zpool list tank4 NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank4 368G 271G 96.7G 73% 1.00x ONLINE - [root@hoge ~]# zfs list tank4/backup NAME USED AVAIL REFER MOUNTPOINT tank4/backup 72.8G 89.9G 72.8G /tank4/backup [root@hoge ~]# zfs get compression tank4/backup NAME PROPERTY VALUE SOURCE tank4/backup compression lz4 local [root@hoge ~]# cd /tank4/backup [root@hoge backup]# ls -l sda6.tar -rw-r--r-- 1 root root 10927441920 Oct 20 22:44 sda6.tar [root@hoge backup]# time tar xf sda6.tar real 2m15.379s user 0m3.018s sys 0m44.704s [root@hoge backup]# time rm -rf test.restore real 1m18.267s user 0m0.318s sys 0m13.814s [root@hoge backup]# cd [root@hoge ~]# zpool export tank4すごい効果です。CentOS の tar 展開の処理時間は、Btrfs の compress-force=lzo の実験結果と同等です。それにしても、OpenIndiana の rm は抜群に速い(FreeBSDの2倍以上)ですね。
2014-04-29追記
RHEL7.0 RC と、最新の ZFS(未だに 0.6.3 が出ないので GitHub から落とした)を試してみました。こちら
0 件のコメント:
コメントを投稿