LinuxのI/OベンチマークでCrystalDiskMarkと同等の計測をfioで実現

投稿者: 閲覧数49,816

LinuxサーバーのHDDやSSDのI/Oベンチマークを計測するのに hdparm を使っていましたが単純な計測なので、Windowsでは毎回お世話になっている CrystalDiskMark のようなお手軽簡単でいて比較しやすい計測がしたくて探してみたらありました。
そのベンチマークツールの名をfioと言います。
ディレクトリ指定ができるのでNFSを指定すればネットワーク越しの計測ができたり、マルチプロセス/マルチスレッド対応、I/Oエンジンを変えて同期I/Oや非同期I/Oやら選べて、jobという負荷シナリオを作成してベンチマークできたり、これがあればI/Oベンチマークはなんでもこいって感じです!

2011/1/25 にバージョン1.50がでています。

1.50のリリース情報
-----
サポートは、Windowsに追加されました。クリーンアップOSの一般的なサポート。新たにblktrace再生機能。減速バグがposixaioエンジンで修正されています。 I / Oはエンジンが追加されていますbinject。トリム/ DISCARDの操作をサポートしています。 I / Oの検証がより死後の分析のために失敗した場合は良い面と悪い面のデータをダンプするために拡張されています。様々な高速化と最適化。無名の多くのバグが発見され、固定されている。
(参考:http://sourceforge.jp/projects/freshmeat_fio/releases/204407/)

まずはfio-1.50をインストールします。(インストールはdebian5.0とdebian6.0へ行いました)
※squeezeでは1.38のバイナリーが提供されていますが、かなりバージョンアップしているので1.50をコンパイルしました。


aptitude update && aptitude safe-upgrade
aptitude libaio-devel
mkdir /usr/local/src/fio
cd /usr/local/src/fio
wget http://freshmeat.net/urls/3aa21b8c106cab742bf1f20d60629e3f -O fio-1.50.tar.gz
tar zxvf fio-1.50.tar.gz
cd fio-1.50
make
make install

これでインストール完了です。
さっそくコマンドラインからfioをテスト実行してみます。

計測する際の条件ですが、今話題の3/1に発売されたIntel SSD 510シリーズの性能から、ランダムリード(4KB,QD32)20000IOPSだそうですから同じ条件のテストサイズ8GBのランダムリードをfioで計測してみます。


fio -name=Random-Read-4K-QD32 -filename=/fiodiskmark -rw=randread -bs=4K -iodepth=32 -ioengine=libaio -direct=1 -runtime=120 -size=8G

(計測ドライブはIntel SSD X25-V 40Gでext4です)
ルートパス / (sda1) へファイル fiodiskmark を作り非同期I/Oでランダムリード(4KB,QD32)を最長120秒間テスト。

Random-Read-4K-QD32: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=32
fio 1.50
Starting 1 process
Jobs: 1 (f=1): [r] [100.0% done] [73494K/0K /s] [17.1K/0  iops] [eta 00m:00s]
Random-Read-4K-QD32: (groupid=0, jobs=1): err= 0: pid=3516
  read : io=8192.0MB, bw=74630KB/s, iops=18657 , runt=112402msec
    slat (usec): min=4 , max=9799 , avg=13.38, stdev=10.92
    clat (usec): min=92 , max=88583 , avg=1698.19, stdev=1042.19
     lat (usec): min=176 , max=88595 , avg=1712.09, stdev=1042.07
    bw (KB/s) : min=45128, max=117288, per=100.08%, avg=74690.54, stdev=12093.42
  cpu          : usr=9.15%, sys=28.43%, ctx=1032814, majf=0, minf=291
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.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.1%, 64=0.0%, >=64=0.0%
     issued r/w/d: total=2097152/0/0, short=0/0/0
     lat (usec): 100=0.01%, 250=0.44%, 500=6.82%, 750=9.08%, 1000=10.53%
     lat (msec): 2=36.31%, 4=36.67%, 10=0.12%, 20=0.02%, 50=0.01%
     lat (msec): 100=0.01%

Run status group 0 (all jobs):
   READ: io=8192.0MB, aggrb=74630KB/s, minb=76421KB/s, maxb=76421KB/s, mint=112402msec, maxt=112402msec

Disk stats (read/write):
  sda: ios=2096438/102, merge=372/2453, ticks=3547316/141312, in_queue=4006072, util=99.97%

read:の行に目的の情報があります。bw=74630KB/s, iops=18657ですから新商品の510シリーズに若干及ばない程度ってことがわかります。
bwから72.88MB/sでてることがわかります。このIntel SSD X25-Vでのhdparmの計測結果は次のとおりです。

hdparm -tT /dev/sda1

/dev/sda1:
Timing cached reads:   2416 MB in  2.00 seconds = 1208.34 MB/sec
Timing buffered disk reads: 422 MB in  3.02 seconds = 139.95 MB/sec

Intel X25-Vの公表値が次のとおり。
Bandwidth Sustained Sequential Read: up to 170 MB/s
Sustained Sequential Write: up to 35 MB/s
Random 4 KB Reads: up to 25,000 IOPS
Random 4 KB Writes: up to 2,500 IOPS

いい線いってる感じです。それらしい計測ができてます。

この優秀なベンチマークツール fio をつかって Linux でも CrystalDiskMark と同じ計測をするjobファイルをつくってみましたのでそれを使って計測してみます。


cd /tmp
wget http://www.winkey.jp/downloads/visit.php/fio-crystaldiskmark -O crystaldiskmark.fio
fio crystaldiskmark.fio
(デフォルトでは/tmp/で計測にしています。変更する場合はファイル内のdirectoryのPATH指定を変えてください)
結果からread:行を抜粋。

Seq-Read: (groupid=0, jobs=1): err= 0: pid=4084
  read : io=1024.0MB, bw=191381KB/s, iops=186 , runt=  5479msec
Seq-Write: (groupid=1, jobs=1): err= 0: pid=4085
  write: io=1024.0MB, bw=40177KB/s, iops=39 , runt= 26099msec
Rand-Read-512K: (groupid=2, jobs=1): err= 0: pid=4086
  read : io=1024.0MB, bw=174182KB/s, iops=340 , runt=  6020msec
Rand-Write-512K: (groupid=3, jobs=1): err= 0: pid=4087
  write: io=1024.0MB, bw=41211KB/s, iops=80 , runt= 25444msec
Rand-Read-4K: (groupid=4, jobs=1): err= 0: pid=4150
  read : io=1024.0MB, bw=20706KB/s, iops=5176 , runt= 50640msec
Rand-Write-4K: (groupid=5, jobs=1): err= 0: pid=4151
  write: io=1024.0MB, bw=35237KB/s, iops=8809 , runt= 29758msec
Rand-Read-4K-QD32: (groupid=6, jobs=1): err= 0: pid=4152
  read : io=1024.0MB, bw=80425KB/s, iops=20106 , runt= 13038msec
Rand-Write-4K-QD32: (groupid=7, jobs=1): err= 0: pid=4153
  write: io=1024.0MB, bw=41953KB/s, iops=10488 , runt= 24994msec
これをCrystalDiskMark3.0のような形に手動で整理してみます。

-----------------------------------------------------------------------
fake CrystalDiskMark 3.0 fio (C) 2011 hiroron
WinKey : http://www.winkey.jp/
-----------------------------------------------------------------------
* MB/s = 1,048,576 byte/s

Sequential Read : 186.895 MB/s
Sequential Write : 39.235 MB/s
Random Read 512KB : 170.099 MB/s
Random Write 512KB : 40.245 MB/s
Random Read 4KB (QD=1) : 20.220 MB/s [ 5176 IOPS]
Random Write 4KB (QD=1) : 34.411 MB/s [ 8809 IOPS]
Random Read 4KB (QD=32) : 78.540 MB/s [ 20106 IOPS]
Random Write 4KB (QD=32) : 40.969 MB/s [ 10488 IOPS]

Test : 1024 MB [/dev/sda1 type ext4]
Date : 2011/03/04 4:10:36
OS : Debian 6.0 [squeeze] (2.6.32-5-amd64)

fio版crystaldiskmarkのベンチマーク結果が出たところで検索にて実際のCrystalDiskMarkの値を価格.comの生の声(誇張されてない)から見ると概ね似た傾向の結果となっているのでLinuxでもお手軽簡単に比較できるfio版crystaldiskmarkで是非みなさんもベンチマークしてみてください。
その際には結果を教えてもらえるとうれしいです。

参考サイト
fio
fioを用いたディスクIOのパフォーマンス測定
ベンチマークツールfioを使用した、Linux環境下でのディスクのベンチマーク方法
Intel Solid-State Drive 510 Series - Overview
Intel X25-V SSD Review (40GB) StorageReview.com
価格.com - 『ベンチマーク結果』 インテル X25-V Value SATA SSD SSDSA2MP040G2R5 のクチコミ掲示板
Crystal Dew World