bonnie++ で I/O 性能を測定 (Linux/Unix での IO ベンチマークソフト)

今まで Linux 上でハードディスクのパフォーマンスを計測する方法として hdparm を使ってきましたが、もう少しいろいろなケース別にパフォーマンスを計測したいなぁーとか NFS のパフォーマンスを計測したいなぁーとか思って、ベンチマークツールがないものかと調べてみたら bonnie++ ってのを知りました。

Bonnie++ now at 1.03e (last version before 2.0)!

Bonnie++ is a benchmark suite that is aimed at performing a number of simple tests of hard drive and file system performance. Then you can decide which test is important and decide how to compare different systems after running it. I have no plans to ever have it produce a single number, because I don't think that a single number can be useful when comparing such things.
The main program tests database type access to a single file (or a set of files if you wish to test more than 1G of storage), and it tests creation, reading, and deleting of small files which can simulate the usage of programs such as Squid, INN, or Maildir format email.

インストールは Linuxシステム構築Tips - bonnie++の使用方法 を参考にインストールしてみました。デフォルトのソースのままだと、今時の高速 HDD だと早すぎて正常値が取得できないので patch をあてる必要があります。

- スポンサーリンク -

wget http://www.coker.com.au/bonnie++/bonnie++-1.03e.tgz
tar xvfz bonnie++-1.03e.tgz
cd bonnie++-1.03e
./configure

vi bonnie.h
#define MinTime (0.5) の部分を以下のように数値を変更する
#define MinTime (0.01)
make

ベンチマークの実行時には、測定時に作成する一時ファイルと使用メモリサイズとかを指定するとよい。指定がない場合には、実メモリサイズの2倍の一時ファイルが測定時に作成され、今時のメモリ8GBとかのシステムで実行してしまうと、16GBものディスク容量が必要となるので注意が必要。

512MBの一時ファイルでベンチマークを計測するなら、以下のような設定になります。

./bonnie++ -d /tmp -s 512 -r 256 -u drk

bonnie++ のオプションは以下のようなモノがあります。

# ./bonnie++ 
You must use the "-u" switch when running as root.
usage: bonnie++ [-d scratch-dir] [-s size(MiB)[:chunk-size(b)]]
                [-n number-to-stat[:max-size[:min-size][:num-directories]]]
                [-m machine-name]
                [-r ram-size-in-MiB]
                [-x number-of-tests] [-u uid-to-use:gid-to-use] [-g gid-to-use]
                [-q] [-f] [-b] [-D] [-p processes | -y]

 -b:write時にバッファキャッシュを使わないよう指定する。
 -d:測定対象のディレクトリを指定する。
 -q:実行経過を表示しない。
 -r:メモリサイズを指定する。単位はMB。
 -s:測定時に作成する一時ファイルの最大サイズを指定する。単位はMB。
 -u:実行ユーザを指定する。通常は一般ユーザで実行、rootユーザで実行する場合は-u rootオプションが必要となる。
 -x:連続して測定する場合、実行回数を指定する。

さて身近にある幾つかのマシンで速度計測。最近購入した DELL 1950III で 2.5inc-10K x 4 (RAID5) がかなり高速!ちなみに bonnie++ の測定結果の意味は以下の通り。

連続書き込み(Sequential Output)

Per Char関数putc()を使用したキャラクタベースの書き込みテスト
Block関数write()を使用したブロックベースの書き込みテスト
Rewrite関数write()を使用した再書き込みテスト

連続読み込み(Sequential Input)

Per Char関数getc()を使用したキャラクタベースの読み込みテスト
Block関数read()を使用したブロックベースの読み込みテスト

ランダムシーク(Random Seek)

Seekdrand48()を使用した8000回のlseek()

連続操作(Sequential Create)

Createcreat()を使用したファイルの作成テスト ファイル名は7桁数値、0-12までの英数字
Readstat()を使用したファイル情報の確認テスト
Deleteunlink()を使用したファイルの削除テスト

ランダム操作(Random Create)

Createcreat()を使用したファイルの作成テスト ファイル名は任意
Readstat()を使用したファイル情報の確認テスト
Deleteunlink()を使用したファイルの削除テスト
Sequential Output Sequential Input Random
Per Chr Block Rewrite Per Chr Block Seeks
machine IF HDD RAID kernel file
system
Size K/sec K/sec K/sec K/sec K/sec /sec
dev02 SAS 2.5inc
10K x 4
RAID5 2.6.9-78 ext3 512M 88432 641600 1252036 98616 2728394 233703
db03 SAS 3.5inc
10K x 4
RAID5 2.6.9-67 ext3 512M 79346 521990 1015399 89187 2365334 192594
web01 SAS 3.5inc
10K x 4
RAID5 2.6.9-67 ext3 512M 78702 517364 983970 90878 2483930 805
db02 SAS 3.5inx
10K x 4
RAID5 2.6.9-34 ext3 512M 50940 337165 712611 59781 2127990 137438
dev01 SAS 3.5inc
10K x 1
RAID1 2.4.21-27 ext3 512M 37374 333587 66421 26307 1892969 142482
NetApp NAS 3.5inc
10K x 10
RAID4
-DP
2.6.9-34 nfs 512M 21315 29637 22689 51843 1871314 26843


Sequential Create Random Create
Create Read Delete Create Read Delete
machine IF HDD RAID kernel file
system
files /sec /sec /sec /sec /sec /sec
dev02 SAS 2.5inc
10K x 4
RAID5 2.6.9-78 ext3 16 100619 581899 111798 101126 838492 115621
db03 SAS 3.5inc
10K x 4
RAID5 2.6.9-67 ext3 16 88756 499026 94730 89378 729281 97899
web01 SAS 3.5inc
10K x 4
RAID5 2.6.9-67 ext3 16 87663 464370 91949 87417 698652 96748
db02 SAS 3.5inx
10K x 4
RAID5 2.6.9-34 ext3 16 55010 324442 58072 52501 484489 60254
dev01 SAS 3.5inc
10K x 1
RAID1 2.4.21-27 ext3 16 2410 728045 95281 2724 727659 11933
NetApp NAS 3.5inc
10K x 10
RAID4
-DP
2.6.9-34 nfs 16 801 422 962 888 2666 1175

測定に用いたマシンのデバイス構成はこんな感じ。ついでに hdparm の実行結果も。

[root@dev01 scsi]# cat /proc/scsi/scsi 
Attached devices: 
Host: scsi0 Channel: 00 Id: 01 Lun: 00
  Vendor: SEAGATE  Model: ST373307LC       Rev: 0007
  Type:   Direct-Access                    ANSI SCSI revision: 03

[root@dev01 root]# hdparm -tf /dev/sda1
/dev/sda1:
 Timing buffered disk reads:  192 MB in  3.00 seconds =  64.00 MB/sec


[root@dev02 ~]# cat /proc/scsi/scsi 
Attached devices:
Host: scsi0 Channel: 00 Id: 32 Lun: 00
  Vendor: DP       Model: BACKPLANE        Rev: 1.05
  Type:   Enclosure                        ANSI SCSI revision: 05
Host: scsi0 Channel: 02 Id: 00 Lun: 00
  Vendor: DELL     Model: PERC 6/i         Rev: 1.21
  Type:   Direct-Access                    ANSI SCSI revision: 05

[root@dev02 ~]#  hdparm -tf /dev/mapper/VolGroup00-LogVol00
/dev/mapper/VolGroup00-LogVol00:
 Timing buffered disk reads:  490 MB in  3.01 seconds = 162.87 MB/sec


[root@web01 ~]# cat /proc/scsi/scsi 
Attached devices:
Host: scsi0 Channel: 00 Id: 08 Lun: 00
  Vendor: DP       Model: BACKPLANE        Rev: 1.05
  Type:   Enclosure                        ANSI SCSI revision: 05
Host: scsi0 Channel: 02 Id: 00 Lun: 00
  Vendor: DELL     Model: PERC 5/i         Rev: 1.03
  Type:   Direct-Access                    ANSI SCSI revision: 05

[root@web01 ~]#  hdparm -tf /dev/mapper/VolGroup00-LogVol00
/dev/mapper/VolGroup00-LogVol00:
 Timing buffered disk reads:  404 MB in  3.01 seconds = 134.42 MB/sec


[root@db02 ~]# cat /proc/scsi/scsi 
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: IBM      Model: SERVERAID        Rev: 1.00
  Type:   Direct-Access                    ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 15 Lun: 00
  Vendor: IBM      Model: SERVERAID        Rev: 1.00
  Type:   Processor                        ANSI SCSI revision: 02
Host: scsi0 Channel: 01 Id: 15 Lun: 00
  Vendor: IBM      Model: HH LTO Gen 2     Rev: 0202
  Type:   Sequential-Access                ANSI SCSI revision: 03
Host: scsi0 Channel: 02 Id: 08 Lun: 00
  Vendor: IBM      Model: 39M6750a S320  0 Rev: 1   
  Type:   Processor                        ANSI SCSI revision: 02

[root@db02 ~]# hdparm -tf /dev/sda2
/dev/sda2:
 Timing buffered disk reads:  210 MB in  3.01 seconds =  69.87 MB/sec


[root@db03 ~]# cat /proc/scsi/scsi 
Attached devices:
Host: scsi0 Channel: 00 Id: 08 Lun: 00
  Vendor: DP       Model: BACKPLANE        Rev: 1.05
  Type:   Enclosure                        ANSI SCSI revision: 05
Host: scsi0 Channel: 02 Id: 00 Lun: 00
  Vendor: DELL     Model: PERC 5/i         Rev: 1.03
  Type:   Direct-Access                    ANSI SCSI revision: 05

[root@db03 ~]# hdparm -tf /dev/mapper/VolGroup00-LogVol00
/dev/mapper/VolGroup00-LogVol00:
 Timing buffered disk reads:  494 MB in  3.01 seconds = 164.09 MB/sec

非常に高いお金を払って構築した NetApp がもっと高い性能を示すかと思っていたのですが、所詮は NFS かという結果に終わってしまいました。特に Create での性能がローカル HDD と比較して2桁以上遅いです。もっとも Oracle databse の仕組みからすると create じゃないので、Sequential Output/Input を参考にすることになるわけですが Block-write が非常に遅いのがやっぱり気になります。もっとも nfs client の rsize/wsize が oracle 用にチューニングされているので bonnie++ で最速値がでないってのも要因のひとつにあるとは思うけど・・・それを差し引いてもねぇ〜

うーん・・・Oracle RAC もこれじゃーパフォーマンスでないわけだわ。共有ディスク(NAS)への I/O が一番のネックになるだわね。こりゃ。やっぱし SAN で構築すべきだったかなぁ〜と今更ながら思った。ちなみに oracle と nfs に関する記述は Oracle Databaseのインストール後の作業 参考になります。もちろん今雨後打て居るマスターDBの設定値も以下の通りにしてあります。

4.2.6.3 NFSバッファ・サイズ・パラメータのチェック
NFSを使用する場合は、NFSバッファ・サイズ・パラメータrsizeおよびwsizeの値をそれぞれ16384以上に設定する必要があります。推奨される値は32768です。
ダイレクトNFSでは、wtmaxの粒度でNFSサーバーへの書込みが発行されます。wtmaxが32768未満の場合、ダイレクトNFSではNFSサーバーが提供されません。
たとえば、rsizeおよびwsizeの各バッファ設定に値32768を指定する場合は、次のようなエントリを使用してノードごとに/etc/vfstabファイルを更新します。
nfs_server:/vol/DATA/oradata /home/oracle/netapp nfs\
rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,actimeo=0,vers=3,timeo=600

さらに脱線するけど NFS の性能を計測するには、SPEC SFS97_R1 (V3.0) を使うといいみたいです。EMC と NetApp はよく比較されるので、ベンチマーク結果ページから比較的手が出そうな価格帯のものを抜粋。数年前にこの結果が欲しかったです。

Company System Proto Result ORT1
EMC Corp Celerra NS40G Cluster 2 X-Blades TCP 76068 1.83
EMC Corp Celerra NS80G Failover Cluster 2 Xblade60's (1 stdby) TCP 43318 1.52
EMC Corp Celerra NS80G Failover Cluster 3 Xblade60's (1 stdby) TCP 86372 1.49
EMC Corp Celerra NS80G Failover Cluster 4 Xblade60's (1 stdby) TCP 123109 1.79
EMC Corp Celerra NS20 Multi-protocol Storage TCP 22248 2.17
Network Appliance, Inc. FAS2050 TCP 20027 1.37
Network Appliance, Inc. FAS270c Failover Cluster TCP 13620 1.98
Network Appliance, Inc. FAS3020c TCP 34089 1.77
Network Appliance, Inc. FAS920 TCP 13460 0.98
Network Appliance, Inc. FAS920c Failover Cluster TCP 26619 0.98
- スポンサーリンク -