LoginSignup
5
1

More than 1 year has passed since last update.

IORを使ったファイルI/O性能測定

Posted at

概要

本記事では、IORを使い、ファイルI/Oの性能測定する方法を書きます。

IORとは

以下、IORのGitHubから引用。

IOR can be used for testing performance of parallel file systems 
using various interfaces and access patterns.  
IOR uses MPI for process synchronization.

日本語訳:
IORは種々のインターフェイスとアクセスパターンを発行することができ、並列ファイルシステムのパフォーマンス(I/O性能)を測定することができます。
IOR はプロセスの同期にMPIを使用します。

どのようなところで使われているか?

以下のような場面で使用されています。

上記のように、様々なところでI/O測定に使われています。

環境

本記事では、IORのビルド~動作確認まで行います。
ビルド、動作確認に使ったマシン構成は以下の通りです。

ホスト環境

  • CPU:Intel(R) Core(TM) i5-7600 CPU @ 3.50GHz
  • Memory:24GB
  • NIC:Intel X520-DA1 (10G)
  • OS:Ubuntu 20.04.3 LTS

サーバ環境 (ファイル設備)

ホスト環境に以下のシステムをNFSでマウントしています。
マウント先は/mnt/ext/IOR。

  • Synology DS1621+ RAID5(SATA HDD 5400RPM 4台)
    • メモリ:24GB
  • NIC:Intel X520-DA1 (10G)

ネットワークまわり

  • ルータ:YAMAHA RTX830
  • スイッチ:Allied Telesis AT-x510-28GTX

環境準備方法

Step1 Open MPIインストール

Open MPIのサイトからソースコードをダウンロード&解凍し、以下のような手順でビルドします。

$ wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.4.tar.gz
$ tar zxfv openmpi-4.1.4.tar.gz
$ cd openmpi-4.1.4
$ ./configure --prefix=<任意のDIR>
$ make
$ make install
$ sudo make install

.bashrcに以下を書き込み、パスを通します。

PATH=/<任意のDIR>/bin:$PATH
LD_LIBRARY_PATH=/<任意のDIR>/lib:$LD_LIBRARY_PATH
MANPATH=/<任意のDIR>/share/man:$MANPATH
export PATH LD_LIBRARY_PATH MANPATH

以下のコマンドを実行し、パスを通す。

$ source .bashrc

Step2 IORインストール

gitからソースコードを持ってきて、ビルドします。

$ git clone https://github.com/hpc/ior.git
$ cd ior
$ ./bootstrap
$ ./configure --prefix=<任意のDIR>
$ make
$ make install

.bashrcに以下を書き込み、パスを通します。

PATH=/home/pt2/ior/bin:$PATH
LD_LIBRARY_PATH=/home/pt2/ior/lib:$LD_LIBRARY_PATH
MANPATH=/home/pt2/ior/share/man:$MANPATH
export PATH LD_LIBRARY_PATH MANPATH

以下のコマンドを実行し、パスを通す。

$ source .bashrc

IOR実行方法

IORを使って実際にファイルI/O性能を測定してみます。
本記事ではfile-per-process、single-shared-fileについて説明します。

file-per-process

各Rankが別々のファイルにアクセスするパターンです。(下図参照)
image.png

コマンド例(Cache I/Oの測定)は以下です。

# mpiexec -n 1 ior -a POSIX -F -w -r -e -t 1m -b 32g -i 3 -d 1 -C -o /mnt/ext/IOR/
-n 1 : 1多重
-a POSIX : POSIX使用
-F : file-per-process
-w : 書き込み性能測定
-r : 読み込み性能測定
-e : POSIX書き込みクローズ時にfsyncを実行する。
-t 1m : I/O長1Mbyte
-b 32g : ファイルサイズ32GB
-i 3 : 試行回数3回
-d 1 : 試行回数間の遅延時間
-C : リードバックのタスク順序をn+1順序に変更する。(それぞれのプロセスが別ノードのプロセスから書き込まれたデータを参照するようにする。)
-o /mnt/ext/IOR/ : ファイル出力先を/mnt/ext/IOR/にする。

(参考:DirectI/Oの測定は以下になります)
# mpiexec -n 1 ior -a POSIX -F -w -r -e -t 1m -b 32g -i 3 -d 1 -C --posix.odirect -o /mnt/ext/IOR/

single-shared-file

各ランクが同じファイルの別々の領域にアクセスするパターンです。(下図参照)
image.png

コマンド例は以下です。

# mpiexec -n 1 ior -a POSIX -w -r -e -t 1m -b 32g -i 3 -d 1 -C -o /mnt/ext/IOR/
-n 1 : 1多重
-a POSIX : POSIX使用
-Fなし : single-shared-file
-w : 書き込み性能測定
-r : 読み込み性能測定
-e : POSIX書き込みクローズ時にfsyncを実行する。
-t 1m : I/O長1Mbyte
-b 32g : ファイルサイズ32GB
-i 3 : 試行回数3回
-d 1 : 試行回数間の遅延時間
-C : リードバックのタスク順序をn+1順序に変更する。(それぞれのプロセスが別ノードのプロセスから書き込まれたデータを参照するようにする。)
-o /mnt/ext/IOR/ : ファイル出力先を/mnt/ext/IOR/にする。

(参考:DirectI/Oの測定は以下になります)
# mpiexec -n 1 ior -a POSIX -w -r -e -t 1m -b 32g -i 3 -d 1 -C --posix.odirect -o /mnt/ext/IOR/

まとめ

本記事では以下を説明しました。

  • IORについて
  • IORのビルド方法
  • IOR実行方法

次回は実際にファイルシステムの測定を行い、その測定結果について考察していきたいと考えています。

参考

IORの出力結果

測定条件(Cache I/O)

Path                : /mnt/ext/IOR/
api                 : POSIX
access              : file-per-process
type                : independent
segments            : 1
ordering in a file  : sequential
ordering inter file : constant task offset
task offset         : 1
nodes               : 1
tasks               : 1
clients per node    : 1
repetitions         : 3
xfersize            : 1 MiB
blocksize           : 32 GiB
aggregate filesize  : 32 GiB
コマンド:mpiexec -n 1 ior -a POSIX -F -w -r -e -t 1m -b 32g -i 3 -d 1 -C -o /mnt/ext/IOR/

IOR-3.4.0+dev: MPI Coordinated Test of Parallel I/O
Began               : Sat Dec 17 22:28:48 2022
Command line        : ior -a POSIX -F -w -r -e -t 1m -b 32g -i 3 -d 1 -C -o /mnt/ext/IOR/
Machine             : Linux pt2
TestID              : 0
StartTime           : Sat Dec 17 22:28:48 2022
Path                : /mnt/ext/IOR/.00000000
FS                  : 5.2 TiB   Used FS: 27.7%   Inodes: 0.0 Mi   Used Inodes: -nan%

Options:
api                 : POSIX
apiVersion          :
test filename       : /mnt/ext/IOR/
access              : file-per-process
type                : independent
segments            : 1
ordering in a file  : sequential
ordering inter file : constant task offset
task offset         : 1
nodes               : 1
tasks               : 1
clients per node    : 1
repetitions         : 3
xfersize            : 1 MiB
blocksize           : 32 GiB
aggregate filesize  : 32 GiB

Results:

access    bw(MiB/s)  IOPS       Latency(s)  block(KiB) xfer(KiB)  open(s)    wr/rd(s)   close(s)   total(s)   iter
------    ---------  ----       ----------  ---------- ---------  --------   --------   --------   --------   ----
write     169.07     169.07     0.005915    33554432   1024.00    0.000631   193.81     0.000009   193.81     0
read      138.75     138.75     0.007207    33554432   1024.00    0.000653   236.16     0.000017   236.16     0
write     169.52     169.52     0.005899    33554432   1024.00    0.000585   193.29     0.000012   193.29     1
read      140.11     140.11     0.007137    33554432   1024.00    0.000842   233.87     0.000015   233.87     1
write     167.03     167.03     0.005987    33554432   1024.00    0.000337   196.18     0.000010   196.18     2
read      136.59     136.59     0.007321    33554432   1024.00    0.000832   239.90     0.000017   239.90     2

Summary of all tests:
Operation   Max(MiB)   Min(MiB)  Mean(MiB)     StdDev   Max(OPs)   Min(OPs)  Mean(OPs)     StdDev    Mean(s) Stonewall(s) Stonewall(MiB) Test# #
write         169.52     167.03     168.54       1.09     169.52     167.03     168.54       1.09  194.43052         NA            NA     0
read          140.11     136.59     138.48       1.45     140.11     136.59     138.48       1.45  236.64573         NA            NA     0
Finished            : Sat Dec 17 22:50:36 2022

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1