Linux Tips – bonnie++の使用方法

120px-Crystal_Clear_app_harddrive

Linux Tips – bonnie++の使用方法ハードディスクベンチマークツール「bonnie++」を用いて、LinuxサーバのディスクIO性能を測定する際の手順メモです。bonnie++のバージョンは「1.03」を、コンパイラはgccを使用しています。

bonnie++を使用することで、シーケンシャルアクセス(read/write)、ランダムアクセス等の性能測定を一度に行うことができます。

なお、bonnie++ 1.03では、近年供給されているような高性能なハードディスクやSSDの性能測定用に使用することが想定されておらず、測定に掛かった時間が短過ぎる場合には、測定結果の表示が「+++++」「+++」となってしまう項目があります。このため、ソースを少し修正してからmakeします。

インストール

インストール手順(ソースから)
  • ソースのダウンロード
  • 次のURLより、bonnie++ 1.03のソースをダウンロードする。
    (2012年7月時点の最新版は「1.03e」)
    http://www.coker.com.au/bonnie++/

  • tarファイルの展開
  • $ tar xzvf bonnie++-1.03.tgz
    $ cd bonnie++-1.03
    
  • configure
  • $ ./configure
    
  • bonnie.h の修正
  • $ vi bonnie.h
    
    • 修正前
    • #define MaxDataPerFile (MaxNameLen + 6 + 1 + 4)
      #define MinTime (0.5)
      #define Seeks (8192)
      
    • 修正後
    • #define MaxDataPerFile (MaxNameLen + 6 + 1 + 4)
      #define MinTime (0.01)
      #define Seeks (8192)
      
  • make
  • $ make
    
インストール手順(パッケージ管理システム)

Ubuntu等、APTパッケージ管理システムでbonnie++がインストール可能なディストリビューションでは、次のようなコマンドで簡単にbonnie++をインストールすることができます。

  • apt-getコマンドでbonnie++をインストール
  • $ sudo apt-get install bonnie++
    

RHEL、CentOS、Scientific Linuxでは、Repoforge(旧称:RPMforge)で提供されているbonnie++のRPMを利用してbonnie++をインストールすることができます。

  • RPMのダウンロード
  • Repoforgeから環境に応じたbonnie++のRPMをダウンロードする。
    http://pkgs.repoforge.org/bonnie++/

  • rpmコマンドでbonnie++をインストール
  • # rpm -ihv bonnie++-1.96-1.el6.rf.x86_64.rpm
    

なお、各ディストリビューションやRepoforgeが提供する(上述のパッチを適用していない)bonnie++をインストールした際は、測定時間が短過ぎる場合に測定結果の表示が「+++++」「+++」となってしまうことがあるのでご注意下さい。

実行

実行手順
  • 実行コマンド例(基本)
  • $ ./bonnie++ -d /target-dir
    
  • 実行コマンド例(rootユーザで実行する場合)
  • # ./bonnie++ -d /target-dir -u root
    
  • 実行コマンド例(測定時に作成する一時ファイルのサイズを512MBに指定する場合)
  • $ ./bonnie++ -d /target-dir -s 512 -r 256
    
  • 実行コマンド例(筆者のお勧め、上述の「+++++」表示の回避用としても効果有り)
  • $ ./bonnie++ -d /target-dir -n 256:1024:1024:16
    
指定可能なオプション
  • -bオプション : write時にバッファキャッシュを使わないよう指定する。(Linuxでは本オプションを指定しても効果無し?)
  • -dオプション : 測定対象のディレクトリを指定する。
  • -nオプション : ファイル作成・削除・メタデータ操作のベンチマーク実行時に作成する一時ファイルのファイル数・ファイルサイズ・ディレクトリ数を指定する。
  • 例えば、「-n 256:4096:512:16」と指定した場合、「ファイル数 256*1024、最大ファイルサイズ 4096byte、最小ファイルサイズ 512byte、ディレクトリ数 16」の条件下で、ファイル作成・削除・メタデータ操作のベンチマークが実行される。
    「-n 16:0:0:4」と指定した場合は、「ファイル数 16*1024、ファイルサイズ 0byte、ディレクトリ数 4」の条件下で実行される。この際、1ディレクトリ配下のファイル数は「16*1024 / 4」になる。
    本オプションを指定しない場合、デフォルト値の「16:0:0:1」=「ファイル数 16*1024、ファイルサイズ 0byte、ディレクトリ数 1」の条件下で実行される。

  • -qオプション : 実行経過を表示しない。
  • -rオプション : メモリサイズを指定する。単位はMB。
  • -sオプション : シーケンシャルアクセスのベンチマーク実行時に作成する一時ファイルの最大サイズを指定する。単位はMB。
  • バッファキャッシュによる測定誤差を小さくするため、デフォルトでは実メモリサイズの2倍の一時ファイルが測定時に作成される。測定対象のパーティションの空き容量に注意が必要。
    デフォルトより小さいサイズを指定する場合、「-s 512 -r 256」というように-rオプションと組み合わせて使用する。

  • -uオプション : 実行ユーザを指定する。通常は一般ユーザで実行。rootユーザで実行する場合には、「-u root」オプションを付けることが必要。
  • -xオプション : 連続して測定する場合、実行回数を指定する。
実行結果例
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.03       ------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
banlinux         1G 20296  82 24762  12 11088   5 20206  70 33167   6 202.2   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 33876  99 187797  99 49498  99 34445  99 248845 100 48371 100
banlinux,1G,20296,82,24762,12,11088,5,20206,70,33167,6,202.2,0,16,33876,99,187797,99,49498,99,34445,99,248845,100,48371,100
ベンチマークの実行内容・結果の見方
  • シーケンシャルアクセスのベンチマーク
    1. Writing with putc() : キャラクタ単位の書き込み
    2. Writing intelligently : ブロック単位の書き込み
    3. Rewriting : ブロック単位の再書き込み
    4. Reading with getc() : キャラクタ単位の読み込み
    5. Reading intelligently : ブロック単位の読み込み
  • ランダムアクセスのベンチマーク
    1. start ‘em : ファイルのランダムシーク
  • ファイル作成・削除・メタデータ操作のベンチマーク
    1. Create files in sequential order : 規則性のあるファイル名順でファイル作成
    2. Stat files in sequential order : 規則性のあるファイル名順でファイル情報の取得
    3. Delete files in sequential order : 規則性のあるファイル名順でファイル削除
    4. Create files in random order : ランダムなファイル名順でファイル作成
    5. Stat files in random order : ランダムなファイル名順でファイル情報の取得
    6. Delete files in random order : ランダムなファイル名順でファイル削除
実環境における測定結果

HDDベンチマーク手順+性能測定結果一覧 (hdparm,dd,bonnie++)

関連記事

HDDベンチマーク手順+性能測定結果一覧 (hdparm,dd,bonnie++)
Oracle ORIONの使用方法 (Linuxディスクベンチマーク)
Linuxファイルシステムベンチマーク第1回 ext2,ext3,JFS,ReiserFS,XFS,NTFS
Linuxファイルシステムベンチマーク第2回 ext3,ext4,JFS,ReiserFS,XFS,NILFS2
Intel SSD 330 Series 120GB ベンチマーク結果
RAMディスク(/dev/shm)のIO性能をチューニングに活用する方法
SSD I/Oブロックサイズの調整によるチューニング効果検証 (DC S3700編)
 
「Linux」カテゴリーの記事一覧

参考になるサイト

turbolinux – HDDのパフォーマンスをテストする
ベンチマークツールbonnie++を用いた性能測定に関する解説。
Linux man page – bonnie++(8)
bonnie++の使用方法をmanページ風にまとめたホームページ。(英文)