ファイルシステムのベンチマーク集

作成日:2012.05.02

UNIX 系 OS のファイルシステムの計測を行うベンチマーク。 x86-64/Linux で動作することを検証している。

更新履歴
(2012.05.02) 作成

プリミティブ計測型のベンチマーク

プリミティブ計測型のベンチマークと呼んでいるものは、ファイルシステムの READ/WRITE 性能を単純に計測するベンチマークである。

IOzone

おそらく一番メジャーなファイルシステムのベンチマーク。 単純なファイルアクセスを行い Excel のグラフが出力できるのが特徴。

現在も開発が進められておりファイルシステムの冗長性除去(dedup)のテスト機能なども持っている。

Flexible IO Tester (fio)

13 種類の I/O エンジンを切り替えることが可能なファイルシステム。

モデル記述言語でジョブを記述しそれを実行することも可能だが、プリセットのジョブは多くない。 また記述能力も低い。 ただしプリセットのジョブに IOmeter File Server Access Pattern がある。 そのため iometer を流す替りにこのベンチマークを流すのは、マイクロベンチマーク以上、アプリケーションワークロード以下の中量級のテストにはなると思われる。

またファイルシステム以外にブロックデバイスの計測も可能としている。

インストール

libaio-devel package が必要。

$ tar xzvf fio-1.50.tar.gz
$ cd fio-1.50/
$ make
$ su
# make install

計測例

実行コマンドは fio で、カレントディレクトリの計測を行う。

単純な read/write の計測を行う場合、以下のように記述する。

fio --filename=/dev/sdb --direct=1 --rw=randwrite --bs=1m --size=5G --numjobs=4 --runtime=10 --group_reporting

ワークロードを指定した計測を行いたい場合には以下のように指定する。

$ fio (展開ディレクトリ)/fio-1.50/examples/iometer-file-access-server

Bonnie++

Bonnie++ はデータの読み書きを行う速度、1秒間に行うことのできるシークの回数、1秒間に行うことのできるファイルのメタデータの操作回数という3つの項目についてのベンチマークが可能だ。 メタデータ操作には、ファイルの作成/削除と、ファイルの大きさや所有者などのメタデータ(fstat(2) システムコールの結果)の取得とがある。

Bonnie++ もブロックデバイスに対する性能測定を行うことができる。

AIO-Stress

未検証。

Threaded I/O Tester

未検証。

ワークロード計測型のベンチマーク

ワークロード計測型のベンチマークは「Web サーバのアクセスを模す」「メールサーバを模す」等、実際の計算機のワークロードを仮定したベンチマークである。

SPECsfs2008 をのぞくと、オープンソースまたはソース公開がされたベンチマークである。

Filebench

Workload Model Language (WML) という記述言語でワークロードを定義できるベンチマーク。 単純な READ/WRITE 性能を測るのでは

Fedora では filebench という名前でパッケージ化されている。

プリセットのワークロード 以下のようなアプリケーションモデルがプリセットされている。

他に特定のファイル操作向けのマイクロベンチマークがある。

Workload model language

Workload model language ファイルに対して write、read、openfile、createfile、closefile、makedir、removedir、listdir、fsync、fsyncset (操作中の全てのファイルに対してfsync)、statfile、readwholefile、appendfile、appendfilerand、deletefile、writewholefile の操作をフローとして記述できる。

また制御構文として先行する処理を待ったりウェイトを入れたりすることが可能。 ただし workload model language は条件構造がないようなので、例えば「例えばファイル操作が失敗した場合には〇〇する」ようなワークロードは記述できないと思われる。

計測例

filebench> load varmail
 8395: 3.898: Varmail personality successfully loaded
 8395: 3.899: Usage: set $dir=<dir>
 8395: 3.900:        set $filesize=<size>    defaults to 16384
 8395: 3.900:        set $nfiles=<value>     defaults to 1000
 8395: 3.901:        set $dirwidth=<value>   defaults to 20
 8395: 3.901:        set $nthreads=<value>   defaults to 1
 8395: 3.902:        set $meaniosize=<value> defaults to 16384
 8395: 3.902:        run <runtime>
filebench> set $dir=/tmp
filebench> run 10

FS-Mark

$ ./fs_mark -d ${DIR1} -d ${DIR2} -s 51200 -n 4096

1000 Files, 1MB Size, No Sync/FSync

$ ./fs_mark -d /tmp/test/ -s 1048576 -n 1000
$ /home/nminoru/tmp/fs_mark-3.3/fs_mark -d . -s 1048576 -n 1000

#  /home/nminoru/tmp/fs_mark-3.3/fs_mark  -d  .  -s  1048576  -n  1000
#       Version 3.3, 1 thread(s) starting at Wed Mar 23 10:43:12 2011
#       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
     5         1000      1048576         35.7            14485

PostMark

PostMark は NetApp 社が作成した "短命でサイズの小さいファイルを多数扱うプログラム"の性能を評価するために作られたベンチマークで、主にインターネットサーバプログラムの性能を想定。

もともと NetApp のサイトで公開されていたが、現在は該当ページが消失している。 インターネット上にはファイルが残っているものの、管理者が不明なベンチマークになっている。

DBENCH

Samba の性能測定のために用意されたベンチマーク。 ただし CIFS を直接話すのではなく、ローカルディスク上の指定のディレクトリに対してファイルを作成して操作を行う。

操作内容は client.txt に記述されたモデルに従う。 モデルは 1 種類だけで、その処理内容はよく分からない。 ただしモデル記述のフォーマット等が文書化されておらずモデルを書き換えるのは難しい。

誤った操作に対してエラーが返ってくることを期待するテストなどもあり、GlusterFS など完全な POSIX 準拠をしていないファイルシステム上で実行するとエラーで停止することもある。

インストール

$ ./autogen.sh
$ ./configure
$ make
$ su
# make install

計測例

クライアント数を指定して実行する(例では 20 クライアントを指定)。 計測完了までに 7 分程度かかる。

$ dbench 20

出力結果の例である。

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX    4498119     0.017   636.233
 Close        3304249     0.001     0.976
 Rename        190433     0.209  1162.427
 Unlink        908273     0.070  3484.869
 Deltree          122    24.244  1863.425
 Mkdir             61     0.002     0.004
 Qpathinfo    4076942     0.010     3.363
 Qfileinfo     714768     0.001     0.940
 Qfsinfo       747517     0.133     8.761
 Sfileinfo     366253     0.006     1.203
 Find         1576307     0.046     3.553
 WriteX       2244118     0.480 11318.286
 ReadX        7050663     0.003     2.774
 LockX          14650     0.002     0.037
 UnlockX        14650     0.001     0.267
 Flush         315236    33.155 15219.476

Throughput 235.67 MB/sec  20 clients  20 procs  max_latency=15219.482 ms

SysBench

未検証。

Flexible Filesystem Benchmark (FFSB)

これもワークロードのモデルを記述するベンチマーク。 調査中だがモデルの記述能力は filebench の方が高いようだ。

Iometer

Intel が作成したファイルベンチマークで実アプリ Dynamo と呼ばれる負荷発生器とそれを操作する GUI部分に分かれており、それぞれを別のマシンに配置することができる。 Dynamo は Windows、Linux、Solaris、MacOS X などに対応している。 GUI 部分は Windows でしか動作しない。

負荷発生器の dynamo は複数のサーバに配置し同時に負荷をかけることができる。 そのため分散ファイルシステムの負荷性能試験にも使える。

商用のストレージシステムなどの評価にも使われるベンチマークで、他のベンチマークが「Iometer ライクなワークロードを生成する」という機能を持つようにかなり権威があったようだ。 現在はあまりメンテナンスされていない。

現在はオープンソースとして公開されている。

SPECsfs2008

計算機の標準ベンチマークを策定している SPEC(Standard Performance Evaluation Corporation) のネットワークファイルシステム向けのベンチマーク。 NFSv3 と CIFS の性能を測定できる。 SPECsfs2008 以前に SPEC SFS93 と SPEC SFS97 もあった。

ベンチマークはソースコードの配布(有償)で配布され、ビルド環境は自前で作成する必要がある。

商用ストレージシステムの評価にも使われる非常に権威のあるベンチマークだが、ソースの入手等が難しいため一般の人が使うのは困難だ。

一般的なテクニック

ディスクキャッシュの開放

ファイルシステムはアクセスをする度にメモリ上にディスク内容のキャッシュを載せてゆく。 そのためベンチマークを繰り返し実行するとキャッシュ分だけ性能が上がってゆくことがある。

これを防ぐにはベンチマークを行う前にファイルシステムをアンマウント→マウントをし直すか、ディスクキャッシュのフラッシュを行う必要がある。

ディスクキャッシュのうち「ページキャッシュ」はファイルの ページキャッシュだけを開放するには以下のように実行する。

echo 1  > /proc/sys/vm/drop_caches

ディスクキャッシュのうち「dentry」、ディレクトリのエントリ情報に関するキャッシュだけを開放するには以下のように実行する。

echo 2  > /proc/sys/vm/drop_caches

ディスクキャッシュのうちページキャッシュと dentry の両方を開放するには以下のように実行する。

echo 3  > /proc/sys/vm/drop_caches

マウントオプション

SSD の初期化

HDD の性能を測定する場合、パーティションのファイルシステムを切り直して初期化をする。 SSD の性能を測定する場合はファイルシステムの切り直しだけではなく、切り直しを行う領域に TRIM を発行する必要がある。

初期化する SSD が /dev/sdc の場合は以下のようにする。 62500000 はディスクの総セクタ数を、40000 は 65535 以下の適当な幅を指定する。

# i=0; while [ $i -lt 62500000 ]; do echo $i:40000; i=$(((i+40000))); done | hdparm --trim-sector-ranges-stdin --please-destroy-my-drive /dev/sdc

CPU のバインド

ファイルシステムに関するベンチマークではそれほど重要ではないが、ベンチマークプロセスが CPU を移動すると性能に影響する場合には CPU のアフィニティをとると有効な場合がある。

既存のプログラムで CPU アフィニティをとるには taskset コマンドを用いる。

taskset -c 1 dd if=/dev/zero of=/dev/fioa bs=4096 count=262144

ベンチマーク自身がマルチスレッドやマルチプロセスの場合、このコマンドを用いると稼動できる CPU が制限されて性能が出ないこともあるので注意。

コメント

コメントを書き込む

TOP    掲示板    戻る
Written by NAKAMURA Minoru, Email: nminoru atmark nminoru dot jp, Twitter:@nminoru_jp