FIOによるディスクパフォーマンス確認
HDDも以前と比較して選択肢が増えて、必要に応じてSATA,SAS,SSD,Fusion-IO等を選択し、
用件、コスト、パフォーマンス、可用性に応じて全体的なバランスからシステムを選択する必要がある。
ディスク、CPU、メモリー、ネットワークのパフォーマンスを必要に応じて確認する必要があるが、
今回はI/Oの確認の為にディスクベンチマークをFIOで行う方法の再確認。

fio
FIOの取得

[root@HOME001 tools]# wget http://brick.kernel.dk/snaps/fio-2.0.12.1.tar.bz2
--2012-12-30 15:57:22--  http://brick.kernel.dk/snaps/fio-2.0.12.1.tar.bz2
brick.kernel.dk をDNSに問いあわせています... 87.104.106.3
brick.kernel.dk|87.104.106.3|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 244365 (239K) [application/x-bzip]
`fio-2.0.12.1.tar.bz2' に保存中

100%[==============================================>] 244,365      209K/s 時間 1.1s

2012-12-30 15:57:25 (209 KB/s) - `fio-2.0.12.1.tar.bz2' へ保存完了 [244365/244365]

[root@HOME001 tools]#

FIOの展開

[root@HOME001 tools]# tar -jxf fio-2.0.12.1.tar.bz2
[root@HOME001 tools]# ls -l
合計 704
drwxrwxr-x. 11 root  root    4096 12月 19 03:55 2012 fio-2.0.12.1
-rw-r--r--.  1 root  root  244365 12月 19 03:56 2012 fio-2.0.12.1.tar.bz2
drwxrwxrwx.  6 mysql users   4096 12月 30 13:10 2012 htop-0.8.3
-rw-r--r--.  1 root  root  428061  6月 23 23:05 2009 htop-0.8.3.tar.gz
drwxr-xr-x.  5 root  root    4096 12月 29 07:21 2012 iotop-0.4.4
-rw-r--r--.  1 root  root   30334 10月 31 06:01 2011 iotop-0.4.4.tar.gz
[root@HOME001 tools]#

必要なライブラリーを追加

[root@HOME001 fio-2.0.12.1]# yum install libaio-devel
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package libaio-devel.i686 0:0.3.107-10.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================================
 Package                            Arch                       Version                                 Repository                  Size
========================================================================================================================================
Installing:
 libaio-devel                       i686                       0.3.107-10.el6                          base                        13 k

Transaction Summary
========================================================================================================================================
Install       1 Package(s)

Total download size: 13 k
Installed size: 19 k
Is this ok [y/N]: y
Downloading Packages:
libaio-devel-0.3.107-10.el6.i686.rpm                                                                             |  13 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : libaio-devel-0.3.107-10.el6.i686                                                                                     1/1
  Verifying  : libaio-devel-0.3.107-10.el6.i686                                                                                     1/1
Installed:
  libaio-devel.i686 0:0.3.107-10.el6
Complete!
[root@HOME001 fio-2.0.12.1]#

libaio

MAKEとインストール

[root@HOME001 fio-2.0.12.1]# make
    CC gettime.o
    CC fio.o
    CC ioengines.o
    CC init.o
    CC stat.o
    CC log.o
    CC time.o
    CC filesetup.o
    CC eta.o
    CC verify.o
省略.......
    CC engines/rdma.o
    CC profiles/tiobench.o
    CC engines/fusion-aw.o
    CC engines/falloc.o
    CC engines/e4defrag.o
    CC fio
[root@HOME001 fio-2.0.12.1]#

[root@HOME001 fio-2.0.12.1]# make install
install -m 755 -d /usr/local/bin
install fio fio_generate_plots /usr/local/bin
install -m 755 -d /usr/local/man/man1
install -m 644 fio.1 /usr/local/man/man1
install -m 644 fio_generate_plots.1 /usr/local/man/man1
[root@HOME001 fio-2.0.12.1]#

fio

実際にFIOでI/Oテストを行ってみる。
fio –directory=/tmp/ –direct=1 –rw=write –bs=4k –size=512M –numjobs=2 –runtime=100 –group_reporting –name=seq-write

[root@HOME001 fio-2.0.12.1]# fio --directory=/tmp/ --direct=1 --rw=write --bs=4k --size=512M --numjobs=2 --runtime=100 --group_reporting --name=seq-write
seq-write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
seq-write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
fio-2.0.12.1
Starting 2 processes
seq-write: Laying out IO file(s) (1 file(s) / 512MB)
seq-write: Laying out IO file(s) (1 file(s) / 512MB)
Jobs: 2 (f=2): [WW] [100.0% done] [0K/11584K/0K /s] [0 /2896 /0  iops] [eta 00m:00s]
seq-write: (groupid=0, jobs=2): err= 0: pid=10250: Sun Dec 30 16:16:04 2012
  write: io=1024.0MB, bw=11369KB/s, iops=2842 , runt= 92231msec
    clat (usec): min=223 , max=202116 , avg=693.03, stdev=5958.70
     lat (usec): min=225 , max=202118 , avg=695.77, stdev=5958.71
    clat percentiles (usec):
     |  1.00th=[  266],  5.00th=[  274], 10.00th=[  294], 20.00th=[  306],
     | 30.00th=[  310], 40.00th=[  314], 50.00th=[  318], 60.00th=[  326],
     | 70.00th=[  350], 80.00th=[  358], 90.00th=[  362], 95.00th=[  378],
     | 99.00th=[  892], 99.50th=[ 1112], 99.90th=[99840], 99.95th=[100864],
     | 99.99th=[100864]
    bw (KB/s)  : min= 3760, max= 7072, per=49.97%, avg=5680.87, stdev=554.02
    lat (usec) : 250=0.12%, 500=96.95%, 750=1.30%, 1000=0.84%
    lat (msec) : 2=0.39%, 4=0.02%, 10=0.01%, 20=0.01%, 50=0.01%
    lat (msec) : 100=0.04%, 250=0.32%
  cpu          : usr=1.09%, sys=14.74%, ctx=267814, majf=0, minf=0
  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=0/w=0/d=262144, short=r=0/w=0/d=0

Run status group 0 (all jobs):
  WRITE: io=1024.0MB, aggrb=11369KB/s, minb=11369KB/s, maxb=11369KB/s, mint=92231msec, maxt=92231msec

Disk stats (read/write):
    dm-0: ios=0/262084, merge=0/0, ticks=0/243053, in_queue=243054, util=100.00%, aggrios=0/262205, aggrmerge=0/80, aggrticks=0/197656, aggrin_queue=197235, aggrutil=99.97%
  sda: ios=0/262205, merge=0/80, ticks=0/197656, in_queue=197235, util=99.97%
[root@HOME001 fio-2.0.12.1]#

fioでベンチマーク中にiotopでパフォーマンス確認
fio-test

ファイルが残っているのでマニュアルで削除する。

[root@HOME001 fio-2.0.12.1]# ls -lh /tmp/
合計 1.1G
srwxrwxrwx. 1 mysql mysql    0 12月 30 15:44 2012 mysql.sock
-rw-r--r--. 1 root  root  512M 12月 30 16:16 2012 seq-write.1.0
-rw-r--r--. 1 root  root  512M 12月 30 16:16 2012 seq-write.2.0
-rw-------. 1 root  root   254 12月 30 16:02 2012 yum_save_tx-2012-12-30-16-02d9sxpX.yumtx
[root@HOME001 fio-2.0.12.1]#

その他:参考値簡易測定
何もインストールしないで通常のDDコマンドでも簡易的な確認可能

[root@HOME001 tmp]# time dd if=/dev/zero of=tempfile_1M bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 35.9152 s, 29.9 MB/s

real    0m36.251s
user    0m0.006s
sys     0m2.802s
[root@HOME001 tmp]# time dd if=/dev/zero of=tempfile_1024M bs=1024M count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 38.0579 s, 28.2 MB/s

real    0m38.178s
user    0m0.000s
sys     0m3.910s
[root@HOME001 tmp]# ls -lh tempfile_*
-rw-r--r--. 1 root root 1.0G 12月 30 16:57 2012 tempfile_1024M
-rw-r--r--. 1 root root 1.0G 12月 30 16:57 2012 tempfile_1M
[root@HOME001 tmp]#

dd

参考
fioを用いたディスクIOのパフォーマンス測定
クラウドを加速させるSSD技術(前編)
書き込み速度ベンチマーク
容量指定のダミーファイルを作成したい


サーバーを購入したり、ディスク交換や追加した場合に、
単純にI/O性能を測る事が出来るツールを確認。
前回は、Linuxのhdparmを検証しました。

CrystalDiskMark

ダウンロードページ
2012年2月12日[7/2008/Vista/2003/XP/2000, x86/x64, i18n]
http://crystalmark.info/download/index.html#CrystalDiskMark

インストールしないでもベンチマーク出来る方が、
何処でも利用出来て敷居が低いのでポータブル版をダウンロードして利用。

ダウンロードして展開
展開

実行ファイルをクリック(32bit/64bit版)
実行

対象ディスクの選択

ローカルディスクで実行
ローカル

外部SDカードで実行

それぞれのテストは100MBのファイル設定で2回ずつ実行。(Defaultは5回実行)
テストループ回数は多い程、サンプリングデータが増えてより正確なデータを得る
事が出来ると考える。