ネットワーク/ストレージの処理能力をチェックするためのベンチマークツール 3ページ

ストレージの性能を調査するベンチマークツール

 続いて、ストレージの性能を調査するためのベンチマークツールについて紹介しよう。ストレージ性能の評価基準としては、まず読み書き速度が挙げられる。ただ、ネットワークの場合とは異なり、多くのストレージではアクセスのしかたによってそのパフォーマンスが異なる。一般的にもっともパフォーマンスが高いのが、「シーケンシャルアクセス」という、連続したデータを一気に書き込むようなアクセスだ。いっぽう、小さいデータをさまざまな個所に書き込むような「ランダムアクセス」はシーケンシャルアクセスよりもパフォーマンスが落ちることが多い。ベンチマークツールにはシーケンシャルアクセスのみの性能測定しかできないものもあるので、目的に応じて使用するベンチマークツールを選択する必要がある。

 ベンチマークツールとしてよく知られているものとしては、表1が挙げられる。

表1 ストレージ向けの代表的なベンチマークツール
ツール名説明
hdparm本来はSATA/IDEデバイスのパラメータ設定ツールだが、デバイスの読み込み速度を測定するベンチマーク機能がある
Bonnie++ファイルへのI/O速度と、ファイルの作成/メタデータ取得/削除速度を測定するツール(解説記事
dbenchユーザーが定義したI/O処理を実行してその速度を測定するツール
fs_mark指定したサイズのファイルを指定した数だけ作成し、その速度を測定するツール
tiobench複数スレッドから同時にファイルシステムにアクセスし、その速度を測定するツール
IOzoneファイルサイズなどの実行条件を変えながらファイルシステムにアクセスし、その速度を測定するツール(解説記事
fio指定した条件でファイルシステムにアクセスし、その速度を測定するツール(解説記事

 今回はこのうち、多くの環境で簡単に利用できるhdparmコマンドと、多機能かつ簡単に実行できるBonnie++、過去にSourceForge.JP Magazineで取り上げていないfs_markおよびtiobenchについてその使い方を紹介する。

 なお、ストレージの性能を調査する際に注意が必要なのが、ほぼすべてのファイルシステムでメモリを使ったキャッシュが行われている点だ。Linuxでは、空きメモリを積極的にファイルシステム用のキャッシュとして利用するような仕組み(ページキャッシュ)が使われている。そのため、ファイルシステム上でファイルの読み書きを行うベンチマークツールの場合、キャッシュによってストレージ本来の性能以上の結果が出てしまう可能性がある。キャッシュの影響を小さくするためには、テストに使用するファイルの総サイズを搭載する物理メモリの総量よりも大きくすれば良い。ベンチマークツールによって異なるが、搭載物理メモリの2倍程度が目安と言われている。また、Linuxの場合、起動時のカーネルパラメータで「mem=<メモリ容量>」というオプションを指定することで、使用するメモリ量を制限できる。これを利用して、ベンチマークテスト時にはあえて利用できるメモリ容量を少なくする場合もある。たとえば搭載しているメモリのうち256MBのみを使用するには、起動時に以下のようなカーネルオプションを指定すれば良い。

mem=256M

簡易的にベンチマークを実行できるhdparmコマンド

 ストレージの読み込み速度を簡易的に調べるには、hdparmコマンドを利用できる。hdparmコマンドは元々はSATA/IDEデバイスの設定パラメータを確認・変更するためのツールなのだが、「-t」および「-T」オプションを利用することで読み込み速度を調査できる簡易的なベンチマークテストを実行できる。「-t」オプションではキャッシュなし読み込み速度を、「-T」オプションではキャッシュ付き読み込み速度の測定が可能だ。どちらの場合も、実行にはroot権限が必要となる。

 たとえば、「/dev/sda」のキャッシュなし読み込み速度を測定するには次のようにする。

# hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads:   90 MB in  3.05 seconds =  29.47 MB/sec

 この場合、読み込み速度は29.47MB/秒となっている。また、同じデバイスに対しキャッシュ付き読み込みでテストを行った結果が次の例だ。

# hdparm -T /dev/sda

/dev/sda:
 Timing cached reads:   18232 MB in  2.00 seconds = 9129.84 MB/sec

 この場合、キャッシュの効果によって9129.84MB/秒という非常に高速な結果が得られている。

Bonnie++

 Bonnie++は、ファイルシステムの処理性能を測定するベンチマークツールだ。Red Hat Enterprise Linux(RHEL)やその互換ディストリビューションでは、EPELというFedoraプロジェクトが提供しているパッケージリポジトリからRPMパッケージの入手が可能だ。また、Debianでは公式リポジトリで「bonnie++」という名称でパッケージが公開されている。

 bonnie++ではファイルに対するI/Oとファイルの作成/削除を行い、その性能を測定する(表2)。

表2 bonnie++で実行されるテスト
シーケンシャル書き込み文字単位での書き込み(Per-Character)putc()関数を使って1文字づつファイルを書き込む
ブロック単位での書き込み(Block)writeシステムコールを使 ってブロック単位でファイルの書き込みを行う
上書き(Rewrite)readシステムコールでファイルを読んだの ち、writeシステムコールでそこにデータを上書きする
シーケンシャル読み込み文字単位での書き込み(Per-Character)putc()関数を使って1文字づつファイルを書き込む
ブロック単位での書き込み(Block)writeシステムコールを使 ってブロック単位でファイルの書き込みを行う
ランダムシーク(Random Seeks)lseek()関数をランダムな値 を指定して連続実行してその処理速度を調査する
シーケンシャルなファイル処理作成(Create)7桁の数字からなるファイル名を持つファイルを作成し、番号順にファイルの作成、読み込み、削除を行う
読み込み(Read)
削除(Delete)
ランダムなファイル処理作成(Create)ランダムなファイル名を持つファイルを作成し、ランダムにファイルの作成、読み込み、削除を行う
読み込み(Read)
削除(Delete)

 bonnie++は通常/usr/sbin以下にインストールされるが、実行自体は一般ユーザー権限で行える。実行の際はとくにオプションなどを指定する必要はない。テストしたいファイルシステム上でbonnie++を実行すると、次のようにその実行結果が表示される。

$ /usr/sbin/bonnie++ 
Writing a byte at a time...done
Writing intelligently...done
Rewriting...done
Reading a byte at a time...done
Reading intelligently...done
start 'em...done...done...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.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
t001             1G   394  98 74326  16 20347   4  1584  96 157469  15 157.1   2
Latency             34677us     520ms    2557ms   39304us   69247us     770ms
Version  1.96       ------Sequential Create------ --------Random Create--------
t001                -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  3437  97 +++++ +++ +++++ +++  3678  96 +++++ +++ 13754  92
Latency             62812us     200us     150us     720us     186us     519us
1.96,1.96,gate,1,1377689859,1G,,394,98,74326,16,20347,4,1584,96,157469,15,157.1,2,16,,,,,3437,97,+++++,+++,+++++,+++,3678,96,+++++,+++,13754,92,34677us,520ms,2557ms,39304us,69247us,770ms,62812us,200us,150us,720us,186us,519us

 ここで、「%CP」の項目はそのテストの実行中のCPU使用率を、「/sec」は1秒あたりの処理回数を示している。一部「++++」として値が表示されていない項目があるが、それは処理時間が短すぎて計測できなかった、という意味だ。今回はファイルの作成/読み取り/削除に関する処理でこのような表示がされているが、この場合はテストに使用するファイルの数を増やしてやればよい。ファイルの数を増やすには、「-n」オプションを使用する。ここで指定した数の1024倍のファイルが使用するファイル数となる。デフォルトは16、つまり16×1024=16384個のファイルを作成/読み取り/削除することになる。ただし、この値を大きくするとテスト時間が増加するため、何度か繰り返して適切な値を探ると良いだろう。

 また、最後の行はベンチマークテスト結果をCSV形式で表示したものとなっている。bonnie++にはこのCSV形式データをHTML形式に変換するbon_csv2htmlというツールが含まれており、このデータをこれらプログラムに標準入力経由で渡すことでHTML形式の表を作成できる。

echo "1.96,1.96,t001,1,1377689859,1G,,394,98,74326,16,20347,4,1584,96,157469,15,157.1,2,16,,,,,3437,97,+++++,+++,+++++,+++,3678,96,+++++,+++,13754,92,34677us,520ms,2557ms,39304us,69247us,770ms,62812us,200us,150us,720us,186us,519us" | bon_csv2html > result.html

 作成された表は、図3のようになる。慣れない場合はこちらのほうが値を確認しやすいだろう。

図3 bon_csv2htmlツールで出力されたHTMLファイル