bonnie++ とは

bonnie++ は、ディスク・ストレージの性能を測定するためのファイルシステムベンチマークツールの一つです。

他にも代表的に iozoneorion 等がありますが、私は、bonnie++ をよく使っていて、色んなストレージ製品の測定データを蓄積しています。

測定データを蓄積することによって、システムを構築する前にストレージ会社から製品を借りて、bonnie++ を使って性能を測って、今までの測定結果と比較し、良いか悪いか・使えるか使えないか・買うか買わないかについても判断できるので、蓄積した測定データは、非常に大事な財産になります。

なので、性能を測って納得して終わりじゃなくて、試験結果は、記録としてちゃんと残しておくと後々役に立つと思います。

作業の流れは、以下の通りです。

  • ソースファイルをダウンロードし、サーバにアップロード
  • ソースファイルを解凍し、コンパイル・インストール
  • bonnie++ を使って性能を測ってみる

Step 1. ソースファイルをダウンロードし、サーバにアップロード

まずは、bonnie++ ウェブサイトから bonnie++ をダウンロードし、サーバにアップロードしてください。

この記事を書いた時点での最新バージョンは、bonnie++-1.03e.tgz でした。

Step 2. ソースファイルを解凍し、コンパイル・インストール

以下を実施し、ダウンロードしたファイルを解凍した後、コンパイルして、インストールします。

bonnie++ 導入Raw Code(S)Raw Code(T)
━━━━━━━━━━━━━━━━━━━━━━━
ソースファイルを解凍
━━━━━━━━━━━━━━━━━━━━━━━
# tar xvzf bonnie-XXXX.tgz

━━━━━━━━━━━━━━━━━━━━━━━
解凍さきディレクトリへ移動
━━━━━━━━━━━━━━━━━━━━━━━
# cd bonnie-XXXX

━━━━━━━━━━━━━━━━━━━━━━━
システム情報取得
━━━━━━━━━━━━━━━━━━━━━━━
# ./configure

━━━━━━━━━━━━━━━━━━━━━━━
コンパイルする前に bonnie.h の MinTime を 0.5 から 0.01 に変更する。
━━━━━━━━━━━━━━━━━━━━━━━
# vi bonnie.h
----【変更前】--------------------
#define MinTime (0.5)
----【変更後】--------------------
#define MinTime (0.01)


━━━━━━━━━━━━━━━━━━━━━━━
コンパイル / インストール
━━━━━━━━━━━━━━━━━━━━━━━
# make
# make install

━━━━━━━━━━━━━━━━━━━━━━━
実行できることを確認
━━━━━━━━━━━━━━━━━━━━━━━
# 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]

Version: 1.03e

#define MinTime 値変更について

測定が早く終わりすぎると一部の結果が +++++ と表示されます。

測定時間が短すぎてもちゃんと測定できるように MinTime を調整する必要があります。

MinTime を調整したにも関わらず、測定結果に +++++ が出る場合には、-n 256:1024:1024:16 のように追加オプションで測定時に作成するファイル数・サイズ等を調整する必要があります。

# bonnie++ -d ./ -s 2048 -r 1024 -b -u root -n 256:1024:1024:16

Step 3. bonnie++ を使って性能を測ってみる

以下の例では、メモリ 1GB を使って 2GB のファイルをバッファーキャッシュなしで(-b) 作成した時のパフォーマンスを測定します。

より良い結果を得るためには、オプション -s に指定するファイルサイズは メモリサイズの * 2 を指定する必要があります。 (-s と -r に同じ値を指定すると怒られます)

最後の行には、測定結果が csv 形式で出力されます。

性能測定 その1Raw Code(S)Raw Code(T)
# bonnie++ -d ./ -s 2048 -r 1024 -b -u root
Version 1.03e       ------Sequential Output------ --Sequential Input- --Random-
                    -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
test-01          2G 107927  92 220515  24 154825  27 110698  98 309626  20  5116  17
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                16    337   2 +++++ +++   174   1   330   2 +++++ +++   177   1
test-01,2G,107927,92,220515,24,154825,27,110698,98,309626,20,5116.2,17,256,337,2,+++++,+++,174,1,330,2,+++++,+++,177,1

測定結果に +++++ が出たので、ファイル作成オプションを追加してリトライします。

性能測定 その2Raw Code(S)Raw Code(T)
# bonnie++ -d ./ -s 2048 -r 1024 -b -u root -n 256:1024:1024:16
Using uid:0, gid:0.
Writing with putc()...done
Writing intelligently...done
Rewriting...done
Reading with getc()...done
Reading intelligently...done
start 'em...done...done...done...
Create files in sequential order...done.
Stat files in sequential order...done.
Delete files in sequential order...done.
Create files in random order...done.
Stat files in random order...done.
Delete files in random order...done.
Version 1.03e       ------Sequential Output------ --Sequential Input- --Random-
                    -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
test-01          2G 114431  93 705135  50 150989  26 118219  98 315107  20  5346  16
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
   256:1024:1024/16   343   4  1911   9   407   2   347   3  1944   9   164   1
test-01,2G,114431,93,705135,50,150989,26,118219,98,315107,20,5346.4,16,256:1024:1024/16,343,4,1911,9,407,2,347,3,1944,9,164,1

-n 256:1024:1024:16 について

先ほど言ったように、測定結果に +++++ が出た場合には、追加オプションで測定時に作成するファイル数・サイズ等を調整する必要があります。

-n ファイル数(* 1024 file):最大ファイルサイズ(byte):最小ファイルサイズ(byte):作成ディレクトリ数(dir)

上記の場合、ファイル数 256 * 1024ファイルサイズ 1024byteディレクトリ数 16 になります。

また、1ディレクトリ配下に作成されるファイル数は、(256 * 1024) / 16 = 16384 files になります。

デフォルト値は、-n 16:0:0:1 です。

測定結果の見方

以下は、bonnie++ の測定項目です。 一応、何を測定しているか確認しておきましょう。

分類項目内容
シーケンシャルアクセスのベンチマークWriting with putc()キャラクタ単位の書き込み
Writing intelligentlyブロック単位の書き込み
Rewritingブロック単位の再書き込み
Reading with getc()キャラクタ単位の読み込み
Reading intelligentlyブロック単位の読み込み
ランダムアクセスのベンチマークstart 'emファイルのランダムシーク
ファイル作成・削除・メタデータ操作のベンチマークCreate files in sequential order規則性のあるファイル名順でファイル作成
Stat files in sequential order規則性のあるファイル名順でファイル情報の取得
Delete files in sequential order規則性のあるファイル名順でファイル削除
Create files in random orderランダムなファイル名順でファイル作成
Stat files in random orderランダムなファイル名順でファイル情報の取得
Delete files in random orderランダムなファイル名順でファイル削除

測定結果は、以下のような Excel ファイルを作って管理するといいかもしれません。

bonnie++ 測定結果の見方

以上、bonnie++ ストレージ性能測定 でした。