Pocket

fio でLinuxからストレージのベンチマーク測定

  • add this entry to hatena bookmark

ディスクI/Oのベンチマーク測定ツール「fio」を使って、Linux上でストレージのパフォーマンス測定を行ってみました。fioは様々な測定が出来るツールであり、深く使いこなすにはディスク周りに関する知識も求められるツールだと思います。ここでは、fioの簡単な使い方までを中心に記載しておきたいと思います。

fio 情報

ディスクI/Oを計測するベンチマーク測定ツールです。以下の特徴を持つ、すぐれたツールだと思います。

  • シーケンシャル Read/Write、ランダム Read/Write が測定可能
  • IOPS(Input/Output Per Second 1秒間に読み込み/書き込み出来る回数)を測定可能
  • ファイルサイズの指定や、IOエンジンの指定など、様々なベンチマーク条件を指定可能

その他、特筆すべき特徴は多いと思います。

fio のインストール

今回のfioインストール環境は、AWS EC2インスタンスとなります。

fio のCentOS用rpmをダウンロードしてインストールする事にしました。

# yum install libaio-devel
# wget http://pkgs.repoforge.org/fio/fio-2.0.14-1.el5.rf.x86_64.rpm
# rpm -Uvh fio-2.0.14-1.el5.rf.x86_64.rpm
# rpm -qa | grep fio
fio-2.0.14-1.el5.rf.x86_64
#

以上でインストールは完了です。fio のインストール場所とREADMEの配置場所は以下になります。

# which fio
/usr/bin/fio
# pwd
/usr/share/doc/fio-2.0.14
# ls
COPYING  examples  README
#

※英語ですが README に使い方が記載されています。

fio の実行方法

典型的な fio の使い方としては、シュミレーションしたいI/Oロードの試験条件毎に設定ファイル(JOB FILE)を作成し定義します。そして、その設定ファイルを指定して fio を実行する形になります。以下が例です。

# fio (設定ファイル)

設定ファイルは、適当なフォルダを作成して、その中に配置すれば良いです。

fio での簡単なベンチマーク試験

fio をとりあえず使ってみる為に、まずは簡単なベンチマーク試験をやってみます。

試験条件は「ランダム Read 試験として、I/Oベンチマーク対象のファイルシステム/home に、100Mのファイルを転送させる。」という場合を条件にしてみます。

まずは「job file」(設定ファイルの事)を作成します。テキトウな場所に「random-read.fio」などのテキトウな名称のファイルを作ります。ファイル内容はとりあえず以下とします。

[random-read]
rw=randread
size=100m
directory=/home/test/fio/

作成したファイル(job file)を指定して fio を実行すると、実行結果が画面に出力されます。

# fio random-read.fio
random-read: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
fio-2.0.14
Starting 1 process
random-read: Laying out IO file(s) (1 file(s) / 100MB)

random-read: (groupid=0, jobs=1): err= 0: pid=23850: Sun Apr 21 07:21:37 2013
  read : io=102400KB, bw=519797KB/s, iops=129949 , runt=   197msec
    clat (usec): min=3 , max=161 , avg= 3.83, stdev= 2.52
     lat (usec): min=4 , max=162 , avg= 4.68, stdev= 2.71
    clat percentiles (usec):
     |  1.00th=[    3],  5.00th=[    3], 10.00th=[    3], 20.00th=[    3],
     | 30.00th=[    3], 40.00th=[    3], 50.00th=[    4], 60.00th=[    4],
     | 70.00th=[    4], 80.00th=[    4], 90.00th=[    4], 95.00th=[    5],
     | 99.00th=[    8], 99.50th=[   10], 99.90th=[   44], 99.95th=[   59],
     | 99.99th=[   67]
    lat (usec) : 4=44.82%, 10=54.64%, 20=0.21%, 50=0.24%, 100=0.07%
    lat (usec) : 250=0.01%
  cpu          : usr=20.92%, sys=77.55%, ctx=25, majf=0, minf=22
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued    : total=r=25600/w=0/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
   READ: io=102400KB, aggrb=519796KB/s, minb=519796KB/s, maxb=519796KB/s, mint=197msec, maxt=197msec

Disk stats (read/write):
  xvda1: ios=1/0, merge=0/0, ticks=28/0, in_queue=1, util=0.36%
#

出力内容は上記のとおり結構詳細で、ベンチマーク測定結果の情報として表示されます。

結果から判断すると、read の bw(bandwidth 帯域幅)と aggrb(aggregate bandwidth 総合帯域幅) は 519797KB/s、IOPSは129949 となっており、ディスクI/Oは良い値だと思います。cpu では、I/O負荷がCPUに及ぼす影響が読み取れますが、I/O速度に対してCPUが低速なのか値が高い状態になっています。

これらの値を正しく判断していくのは難しそうです。正しく値を読み取り、良い判断に繋げていく為には、様々なパターンでベンチマークを行ったり、別の環境での実行結果と比較し、値を判断するためのナレッジを蓄積していく必要がありそうです。

job file で利用できるパラメータ

job file で指定できる条件は多いです。また、組み合わせ次第でとても深いベンチマークも出来ると思います。

パラメータは、付属の README ファイルに記載されています。

また、以下のコマンドでも参照できます。

# fio --cmdhelp
# fio --cmdhelp=(個別パラメータ値)

使いこなしていく為には、基本スキルや慣れも必要になってくると思いますが、調べたい項目をピンポイントに絞って上手に使う事も可能だと思います。私の場合は、まずは何度も様々な環境で実行してみようかなと思います。

 

読者登録はいかがでしょうか?RSS配信中です。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。