ZFS on Linux を使い始めて約1年、始祖の Solaris 実装とどの程度性能が違うのか知りたくなり、試してみました。
Solaris 系は、初挑戦でしたが、インストールはさほど難しくなかった印象です。むしろ、その前準備(マルチブートのためのパーティション構成変更作業)に手間がかかりました。特に、ディスク先頭の Windows7 のパーティションをいじるのに苦労しました。実験に使ったマシンは ThinkPad T510 ですが、プリインストールされていた Windows7 環境では、C: の他にシステムパーティションと呼ばれる領域がもう1つ確保されていて、これを削除するのが手間でした。ZFS本(ISBN-13: 978-4048676540)によると、OpenSolaris は、基本パーティションにインストールする必要があるということで、Windows7 のシステムパーティションが邪魔になったのです。そこは本題ではないので、詳細は割愛しますが、最終的に次のようなパーティション構成となりました。
今回の測定環境は ThinkPad T510 + 古い SAMSUNG SSD (eSATA接続) です。
# zdb
tankM:
version: 23
name: 'tankM'
state: 0
txg: 194345
pool_guid: 17978947249853082376
hostid: 8323328
hostname: 'my42'
vdev_children: 1
vdev_tree:
type: 'root'
id: 0
guid: 17978947249853082376
children[0]:
type: 'disk'
id: 0
guid: 2831835469869973055
path: '/dev/disk/by-id/ata-SAMSUNG_MCCOE64G8MPP-0VA_SE809N0057-part1'
phys_path: '/dev/ada1s1'
whole_disk: 0
metaslab_array: 24
metaslab_shift: 29
ashift: 12
asize: 64017399808
is_log: 0
DTL: 73
create_txg: 4
features_for_read:
# zpool get all tankM
NAME PROPERTY VALUE SOURCE
tankM size 59.5G -
tankM capacity 32% -
tankM altroot - default
tankM health ONLINE -
tankM guid 17978947249853082376 local
tankM version 23 local
tankM bootfs - default
tankM delegation on default
tankM autoreplace off default
tankM cachefile - default
tankM failmode wait default
tankM listsnapshots off default
tankM autoexpand off default
tankM dedupditto 0 default
tankM dedupratio 1.00x -
tankM free 39.9G -
tankM allocated 19.6G -
tankM readonly off -
tankM ashift 12 local
tankM comment - default
tankM expandsize 0 -
tankM freeing 0 local
tankM feature@async_destroy disabled local
tankM feature@empty_bpobj disabled local
tankM feature@lz4_compress disabled local
# zfs get all tankM -s local
NAME PROPERTY VALUE SOURCE
tankM mountpoint /tankM local
tankM atime off local
zpool の構成は前記のとおりのシングル構成です。
SAMSUNG SSD の基本性能は次のような具合(Disk Utility のベンチマーク結果)です。
以下、bonnie++ 1.96 のデータです。
■CentOS 6.4
# uname -a
Linux xxxx 2.6.32-358.6.2.el6.x86_64 #1 SMP Thu May 16 20:59:36 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
# bonnie++ -u root -d /tankM
...
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
xxxx 15464M 151 99 68485 12 40237 9 319 84 108505 11 910.6 26
Latency 73426us 146ms 1240ms 842ms 302ms 480ms
Version 1.96 ------Sequential Create------ --------Random Create--------
xxxx -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
16 17826 84 +++++ +++ 4228 29 19977 85 +++++ +++ 21914 96
Latency 31300us 332us 77141us 31685us 67us 912us
1.96,1.96,xxxx,1,1369835550,15464M,,151,99,68485,12,40237,9,319,84,108505,11,910.6,26,16,,,,,17826,84,+++++,+++,4228,29,19977,85,+++++,+++,21914,96,73426us,146ms,1240ms,842ms,302ms,480ms,31300us,332us,77141us,31685us,67us,912us
■OpenIndiana 151a7
# uname -a
SunOS xxxx 5.11 oi_151a7 i86pc i386 i86pc Solaris
# ./bonnie++ -u root -d /tankM
...
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
xxxx 16G 209 96 75797 12 42079 10 606 99 102241 10 2499 34
Latency 43718us 190ms 1469ms 18081us 545ms 45179us
Version 1.96 ------Sequential Create------ --------Random Create--------
xxxx -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
16 5706 15 +++++ +++ +++++ +++ 24358 53 +++++ +++ +++++ +++
Latency 1686ms 144us 102us 7317us 27us 92us
1.96,1.96,xxxx,1,1369836787,16G,,209,96,75797,12,42079,10,606,99,102241,10,2499,34,16,,,,,5706,15,+++++,+++,+++++,+++,24358,53,+++++,+++,+++++,+++,43718us,190ms,1469ms,18081us,545ms,45179us,1686ms,144us,102us,7317us,27us,92us
■FreeBSD 9.1
# uname -a
FreeBSD xxxx 9.1-RELEASE FreeBSD 9.1-RELEASE #0 r243825: Tue Dec 4 09:23:10 UTC 2012 [email protected]:/usr/obj/usr/src/sys/GENERIC amd64
# bonnie++ -u root -d /tankM
...
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
xxxx 16G 174 99 69411 11 38889 7 414 91 104735 5 1040 8
Latency 50405us 3339ms 2989ms 628ms 620ms 1002ms
Version 1.96 ------Sequential Create------ --------Random Create--------
xxxx -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
16 31430 95 +++++ +++ 16114 62 32265 96 +++++ +++ 4389 93
Latency 13375us 118us 118ms 13380us 115us 447us
1.96,1.96,xxxx,1,1369838677,16G,,174,99,69411,11,38889,7,414,91,104735,5,1040,8,16,,,,,31430,95,+++++,+++,16114,62,32265,96,+++++,+++,4389,93,50405us,3339ms,2989ms,628ms,620ms,1002ms,13375us,118us,118ms,13380us,115us,447us
■Fedora18
# uname -a
Linux xxxx 3.9.3-201.fc18.x86_64 #1 SMP Tue May 21 17:02:24 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
# bonnie++ -u root -d /tankM
...
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
xxxx 15688M 149 95 74100 13 42477 10 362 87 108047 11 946.6 30
Latency 98607us 170ms 1224ms 733ms 433ms 621ms
Version 1.96 ------Sequential Create------ --------Random Create--------
xxxx -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
16 13264 56 +++++ +++ 10665 70 19831 85 +++++ +++ 24615 94
Latency 310ms 7156us 49153us 39069us 80us 551us
1.96,1.96,xxxx,1,1369840982,15688M,,149,95,74100,13,42477,10,362,87,108047,11,946.6,30,16,,,,,13264,56,+++++,+++,10665,70,19831,85,+++++,+++,24615,94,98607us,170ms,1224ms,733ms,433ms,621ms,310ms,7156us,49153us,39069us,80us,551us
測ってみた感想としては、わたしの利用範囲においては、OpenIndiana , FreeBSD と比較して、Linux 実装のパフォーマンスは遜色ない(若干劣る程度)と感じました。ただ、普段使いは CentOS6 なのですが、最新カーネルの恩恵を受けられる Fedora18 のほうがパフォーマンス発揮できるようです。
Fedora, CentOS 等の iso イメージ格納庫、調査用ソース展開場所(主にカーネル)、自作開発ソース格納庫、バックアップイメージ格納庫、KVM ゲスト用ディスク割り当て(スパース zvol)が、わたしの現在の用途です。
本格的に使っている zpool の形態は、RAIDZ(HDDx4 , バックアップ, iso格納用)、RAIDZ2(HDDx6+zram(L2ARC), ソースコード格納用)、mirror+stripe(HDDx2+HDDx2+SSDx2(ZIL&L2ARC), 大容量バックアップ用NFS)、HW-RAID上のシングル(KVM ゲスト向けzvol切り出し用)といったところです。すっかり、どっぷりと使っています。
仕事では、SAN ストレージ+multipath+LVM2+ext4 領域も使っていますが、ZFS と比べて、運用・操作性が格段にヤヤコシイく感じます。
■関連記事
3つのOSでZFSの性能を比較