bonnie++ で I/O 性能を測定 (Linux/Unix での IO ベンチマークソフト)
今まで Linux 上でハードディスクのパフォーマンスを計測する方法として hdparm を使ってきましたが、もう少しいろいろなケース別にパフォーマンスを計測したいなぁーとか NFS のパフォーマンスを計測したいなぁーとか思って、ベンチマークツールがないものかと調べてみたら bonnie++ ってのを知りました。
Bonnie++ now at 1.03e (last version before 2.0)!
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)
Block関数write()を使用したブロックベースの書き込みテスト
Rewrite関数write()を使用した再書き込みテスト
連続読み込み(Sequential Input)
Block関数read()を使用したブロックベースの読み込みテスト
ランダムシーク(Random Seek)
連続操作(Sequential Create)
Readstat()を使用したファイル情報の確認テスト
Deleteunlink()を使用したファイルの削除テスト
ランダム操作(Random Create)
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の設定値も以下の通りにしてあります。
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 |
コメントやシェアをお願いします!