Windows も Linux もディスクのベンチは fio で

ディスクの性能を比較するのに、同じような仕組みのものを使った方が比較しやすいかなと思って LinuxWindows も fio を使っています。

Linux(rpm系) なら dag や epel のリポジトリを追加しておけばそこからインストールできます。

Windows のバイナリはこちら http://www.bluestop.org/fio/

ソースからビルドするのでも良いけど。32bit 環境だとうまくビルドできなくて、64bit な mingw ならビルドできた。

Windows 版も実行方法は Linux 版とほぼ同じ。例えばこんな感じ。

C:\temp>"C:\Program Files\fio\fio" --filename=.\data\testfio --direct=1 --rw=read      --bs=4k  --size=5G --numjobs=64 --runtime=16 --group_reporting --name=job1 --thread
job1: (g=0): rw=read, bs=4K-4K/4K-4K/4K-4K, ioengine=windowsaio, iodepth=1
...
job1: (g=0): rw=read, bs=4K-4K/4K-4K/4K-4K, ioengine=windowsaio, iodepth=1
fio-2.1.1
Starting 64 threads
job1: Laying out IO file(s) (1 file(s) / 5120MB)
Jobs: 64 (f=64): [RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR] [100.0% done] [24808KB/0KB/0KB /s] [6202/0/0iops] [eta 00m:00s]
job1: (groupid=0, jobs=64): err= 0: pid=7632: Thu Oct 31 09:00:00 2013
  read : io=360148KB, bw=22491KB/s, iops=5622, runt= 16013msec
    slat (usec): min=7, max=41214, avg=29.17, stdev=349.26
    clat (usec): min=1, max=123347, avg=10910.77, stdev=5673.67
     lat (usec): min=341, max=123371, avg=10939.94, stdev=5677.23
    clat percentiles (msec):
     |  1.00th=[    5],  5.00th=[    7], 10.00th=[    7], 20.00th=[    9],
     | 30.00th=[    9], 40.00th=[   10], 50.00th=[   10], 60.00th=[   11],
     | 70.00th=[   11], 80.00th=[   16], 90.00th=[   17], 95.00th=[   18],
     | 99.00th=[   21], 99.50th=[   38], 99.90th=[   79], 99.95th=[  116],
     | 99.99th=[  121]
    bw (KB  /s): min=    5, max=  675, per=1.57%, avg=354.20, stdev=115.69
    lat (usec) : 2=0.01%, 4=0.01%, 20=0.01%, 250=0.01%, 500=0.01%
    lat (usec) : 750=0.01%, 1000=0.01%
    lat (msec) : 2=0.08%, 4=0.58%, 10=57.25%, 20=41.03%, 50=0.71%
    lat (msec) : 100=0.25%, 250=0.07%
  cpu          : usr=0.00%, sys=0.00%, ctx=0, 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=90037/w=0/d=0, short=r=0/w=0/d=0
 
Run status group 0 (all jobs):
   READ: io=360148KB, aggrb=22490KB/s, minb=22490KB/s, maxb=22490KB/s, mint=16013msec, maxt=16013msec

32bit 版だと size=4000M みたいなベンチ用ファイルのサイズを指定をするとき 4GB を越えるあたりを境にきちんと動かなくなります。

具体的には最初の作業ファイル作成がループして何度も何度も作業ファイルを作ってしまいいっこうにベンチがはじまらないという状態になります。

必ず何MBという明確なのがあるわけじゃなくて実行するたびに少しずつ変わるのですが、とりあえず 4000MB より少なくしておくのが無難だと思います。

キャッシュに乗り切っちゃうサイズで計測すると役に立たないので必ず円盤を回すためにばかでかいファイルを作る必要があり、そうなると 64bit 環境が無難かなと思います。