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

fs_mark

 fs_markは、ファイルシステム上に多数のファイルを作成して読み取りや削除、メタデータの取得といった操作を行い、その処理にかかった時間を測定するというベンチマークツールだ。bonnie++にも似たようなテスト項目があるが、fs_markは作成するファイルのサイズやファイル数などを簡単に指定できるのが特徴となる。

 Debian 7.0(wheezy)以降のDebianでは、「fsmark」という名称でパッケージが提供されている。また、RHELやその互換ディストリビューション向けにはEPELからfs_markという名称のパッケージが提供されている。

 manページは用意されていないが、–helpオプションで簡易的なオプション一覧を確認できる。それぞれのオプションの詳細についてはREADME(/usr/share/doc/fs_mark-3.3/以下などにインストールされる)に記載されているが、そのうち必須なのはテストに使用するディレクトリを指定する-dオプションだ。そのほか、よく使われるパラメータとしては、作成するファイルの数を指定する-nオプションと、作成する1ファイル当たりのサイズを指定する-sオプションがある。たとえば次の例は、カレントディレクトリで1MB(1024×1024=1048576B)のファイルを1024個作成するテストを実行するものだ。

$ fs_mark -d . -n 1024 -s 1048576

#  fs_mark  -d  .  -n  1024  -s  1048576
#       Version 3.3, 1 thread(s) starting at Thu Aug 29 18:27:19 2013
#       Sync method: INBAND FSYNC: fsync() per file in write loop.
#       Directories:  no subdirectories used
#       File names: 40 bytes long, (16 initial bytes of time stamp with 24 random bytes at end of name)
#       Files info: size 1048576 bytes, written with an IO size of 16384 bytes per write
#       App overhead is time in microseconds spent in the test not doing file writing related system calls.

FSUse%        Count         Size    Files/sec     App Overhead
    10         1024      1048576          9.4            19055

 この例では、1秒あたり9.4ファイルの書き込みが実行できたことになる。1ファイルのサイズは1MBなので、スループットとしては9.4MB/秒程度となる。

 また、vオプションを付けるとより詳細な実行結果が表示される。

$ fs_mark -d . -n 1024 -s 1048576 -v

#  fs_mark  -d  .  -n  1024  -s  1048576  -v
#       Version 3.3, 1 thread(s) starting at Thu Aug 29 18:31:49 2013
#       Sync method: INBAND FSYNC: fsync() per file in write loop.
#       Directories:  no subdirectories used
#       File names: 40 bytes long, (16 initial bytes of time stamp with 24 random bytes at end of name)
#       Files info: size 1048576 bytes, written with an IO size of 16384 bytes per write
#       App overhead is time in microseconds spent in the test not doing file writing related system calls.
#       All system call times are reported in microseconds.

FSUse%        Count         Size    Files/sec     App Overhead        CREAT (Min/Avg/Max)        WRITE (Min/Avg/Max)        FSYNC (Min/Avg/Max)         SYNC (Min/Avg/Max)        CLOSE (Min/Avg/Max)       UNLINK (Min/Avg/Max)
    10         1024      1048576          9.3            19144       28       55     2706        7       14      118    90939   106042   178190        0        0        0        4        6       27      151      160      338

 -vオプションを付けた場合、ファイルの作成(CREAT)およびデータの書き込み(WRITE)、メモリバッファからストレージへの書き出し(FSYNC)、キャッシュのストレージへの書き込み(SYNC)、ファイルのクローズ(CLOSE)それぞれにかかった最小(Min)/平均(Avg)/最大(Max)の時間がミリ秒単位で表示される。この例の場合、メモリバッファからストレージへの書き出しを行うFSYNC処理中でもっとも時間がかかっていることが分かる。

tiobench

 tiobenchは、複数のスレッドから同時にファイルシステムにアクセスしてその場合のスループットを測定するベンチマークツールだ。tiotestとtiobenchという2つのベンチマークコマンドが用意されており、tiotestコマンドがベンチマークツール本体で、tiobenchはパラメータを変えながらtiotestを呼び出すラッパープログラムとなっている。

 Debianでは、「tiobench」という名称でパッケージが提供されている。RHELやその互換ディストリビューション向けには、EPELからtiobenchという名称のパッケージが提供されている。

 tiotestを引数無しで実行すると、シーケンシャルリードおよびシーケンシャルライトでは各スレッドごとに10MBのファイルを読み書きして測定し、またランダムリードおよびランダムライトでは各スレッドごとに4096Bのデータを1000回読み書きして測定を行う。デフォルトでは4スレッドを使用するよう設定されているので、シーケンシャルリード/ライトでは計40MB(10MB×4)、ランダムリード/ライトでは計16MB(4096B×1000×4)分の読み書きが行われることになる。実行結果は次のように表形式で出力され、スループット(Rate)およびレイテンシが表示される。

$ tiotest
Tiotest results for 4 concurrent io threads:
,----------------------------------------------------------------------.
| Item                  | Time     | Rate         | Usr CPU  | Sys CPU |
+-----------------------+----------+--------------+----------+---------+
| Write          40 MBs |    1.7 s |  23.613 MB/s |   4.8 %  |  13.5 % |
| Random Write   16 MBs |    5.9 s |   2.663 MB/s |   1.2 %  |   1.6 % |
| Read           40 MBs |    0.0 s | 10124.019 MB/s |   0.0 %  | 1619.6 % |
| Random Read    16 MBs |    0.0 s | 11306.078 MB/s |   0.0 %  | 2025.8 % |
`----------------------------------------------------------------------'
Tiotest latency results:
,-------------------------------------------------------------------------.
| Item         | Average latency | Maximum latency | % >2 sec | % >10 sec |
+--------------+-----------------+-----------------+----------+-----------+
| Write        |        0.003 ms |        0.014 ms |  0.00000 |   0.00000 |
| Random Write |        0.002 ms |        0.015 ms |  0.00000 |   0.00000 |
| Read         |        0.001 ms |        0.019 ms |  0.00000 |   0.00000 |
| Random Read  |        0.001 ms |        0.010 ms |  0.00000 |   0.00000 |
|--------------+-----------------+-----------------+----------+-----------|
| Total        |        0.002 ms |        0.019 ms |  0.00000 |   0.00000 |
`--------------+-----------------+-----------------+----------+-----------'

 シーケンシャルライト/リードのテストで使用するファイルファイズは、-fオプションで変更できる。たとえば1スレッドあたり25MB(4スレッドで100MB)にしたい場合、「-f 25」と指定すればよい。また、スレッド数は-tオプションで指定可能だ(デフォルトは4)。ランダムライト/ランダムリードのテストで使用するファイルサイズは-bオプション(1回のアクセスで実行するバイト数)および-rオプション(実行するアクセス回数)と-tオプション(スレッド数)の値の積で決定され、デフォルトではそれぞれ4KB(4096)、1000、4が使われる(総サイズは4096B×1000×4で16MBとなる)。たとえば総サイズを40MBにしたい場合、アクセス回数を2.5倍に指定すればよいので「-r 2500」と指定すればよい。

ベンチマークテストを実行する際はその結果の「ブレ」にも注意

 ここまで複数のベンチマークテスト用ツールを紹介してきたが、これらを利用する際に注意してほしいのが「結果のブレ」だ。PCやサーバー上では複数のプログラムが同時に稼働しているため、ベンチマーク結果は状況によって変動する。また、ネットワークの速度は外的要因によっても大きく変化する。そのため、ベンチマークテストを行う際はテストを複数回実施して結果を比較したうえで評価することをおすすめする。ベンチマークツールによっては複数回のテストを実行する機能を持っているものもあるので、うまく利用すると良いだろう。