seagate_sshd_hybrid_hdd_1今回は,ファイルシステムの性能を測ることができる"MDtest"と"IOR"の実行方法についてメモをしておきます.最近は,計算機の性能としてファイルシステムの性能も大変重視されるようになってきています."MDtest"は,ファイルシステムの,ファイルやディレクトリの操作(Operation)速度を測ることができます."IOR"は,ファイルシステムのファイルRead/Write速度を測ることができます.どちらも,Lustreなどの並列ファイルシステムの性能を測ることもできます(というか,もともとそのために作られてる?).

実験環境は,CentOS6,SUSE Enterprise Linux 11.3です.
MPIがテストに必須環境となっていますので,事前にインストールしておいてください.ここでは,Yumを利用してインストールしたOpenMPIを利用しました.また,テストには,それなりのディスクスペースを必要とします.ある程度余裕のあるディスク上で行ってください.

文中の「緑文字」はコマンド,「青文字」は端末の標準出力結果だと考えてください.


1. MDtest
まず,下記のURLからソースコードをダウンロードします.
http://sourceforge.net/projects/mdtest/

ここのテストでは,mdtest-1.9.3を使用しました.
ダウンロードしたら展開して,展開してできたディレクトリへ移動します.

次にソースをコンパイルします.
>$ export MPI_CC="mpicc"
>$ make mdtest


これで"mdtest"という名前の実行バイナリが生成されます.
実行前にテスト用ファイルを生成するディレクトリを作成しておきます.
ディレクトリ名は任意ですが,ここでは"datadir"とします.
>$ mkdir datadir

下記のコマンドのように実行することでテストを実行出来ます.
>$ mpirun -np {proc} ./mdtest -d ./datadir/ -n 1000 -i 3 -p 3 -u

{proc}には任意のMPI並列プロセス数を入れて実行してください.
"-n"オプションはテストで取り扱うファイル数です.
ここでは1000個のファイルを取り扱ってテストを行う設定になっています.
"-i"オプションは何回の試行を行うか指定します.

実行結果は,下記の様に表示されます.
SUMMARY: (of 3 iterations)
Operation Max Min Mean Std Dev
--------- --- --- ---- -------
Directory creation: 601.274 489.456 563.544 52.391
Directory stat : 472118.865 401907.244 436283.083 28682.358
Directory removal : 45390.935 27474.807 38973.594 8149.140
File creation : 597.000 594.159 595.553 1.161
File stat : 455753.993 392761.869 420854.547 26162.964
File read : 421072.583 397300.748 410142.651 9798.529
File removal : 46059.365 42340.618 44800.755 1739.735
Tree creation : 71089.898 39945.752 50854.471 14323.176
Tree removal : 1489.984 1193.259 1369.151 127.240


"creation"は作成,"stat"は状態確認,"removal"は削除をそれぞれ意味しています.
単位はOperation per second [Op/s] です.


2. IOR
まず,下記のURLからソースコードをダウンロードします.
http://sourceforge.net/projects/ior-sio/

ここのテストでは,IOR-2.10.3を使用しました.
ダウンロードしたら展開して,展開してできたディレクトリへ移動します.

次にソースをコンパイルはmakeコマンドだけで可能です.
>$ make

これで"IOR"という名前の実行バイナリが生成されます.
実行前にテスト用ファイルを生成するディレクトリを作成しておきます.
ディレクトリ名は任意ですが,ここでは"datadir/file"とします.
>$ mkdir -p datadir/file

テストはWrite,Readの順に実行します.
まず,下記のコマンドでWriteテストを実行出来ます.
>$ mpirun -np {proc} ./IOR -b 1g -t 1m -e -w -F -k -o ./datadir/file

{proc}には任意のMPI並列プロセス数を入れて実行してください.
"-w"オプションがWriteを指示しています."-b"はブロックサイズを意味します.
その他のオプションについてはIORのREADMEを参照してください.

その後,Readテストを実行します.
注意点は,Readテストの前に/dirdata/fileを消去しないでください.
ReadテストではWriteテストで作成したファイルを利用します.
>$ mpirun -np {proc} ./IOR -b 1g -t 1m -e -r -F -k -o ./dirdir/file

{proc}には任意のMPI並列プロセス数を入れて実行してください.
"-r"オプションに変わっています.

それぞれのテストの実行結果は次のように出てきます.

Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)
--------- --------- --------- ---------- ------- --------- --------- ---------- ------- --------
write 283.66 283.66 283.66 0.00 283.66 283.66 283.66 0.00 3.60990 EXCEL

Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)
--------- --------- --------- ---------- ------- --------- --------- ---------- ------- --------
read 2700.50 2700.50 2700.50 0.00 2700.50 2700.50 2700.50 0.00 0.37919 EXCEL



MDtest,IORのどちらにおいてもファイルI/O性能を測るためのテストですので,念のため,何度か実験を行う際には,一度作成したディレクトリは消去し,syncコマンドを使ってメモリの上に載ったデータを吐き出しておきましょう.

私の環境でテストしたところ,Workstation(Sandybridge世代)のディスクI/Oは,Read/Write共に100 [MiB/s]程度(4 PE実行),RAID6(FC 8Gbps)のディスクI/OはReadが4.5 [GiB/s],Writeが400 [MiB/s]程度(12 PE実行)でした.

かなり簡単に実行出来ますので,マシンを構築したときに,なんだかディスク性能が悪いなぁなんて思ったらテストしてみるとよいと思います.