fio is an I/O tool meant to be used both for benchmark and
stress/hardware verification. It has support for 13 different types
of I/O engines (sync, mmap, libaio, posixaio, SG v3, splice, null,
network, syslet, guasi, solarisaio, and more), I/O priorities (for
newer Linux kernels), rate I/O, forked or threaded jobs, and much
more. It can work on block devices as well as files. fio accepts
job descriptions in a simple-to-understand text format. Several
example job files are included. fio displays all sorts of I/O
performance information. Fio is in wide use in many places, for
both benchmarking, QA, and verification purposes. It supports
Linux,
RPM package download:
http://pkgs.repoforge.org/fio/
[Usage]
Create fio configuration file
#cat test.fio [global] size=256m directory=/root direct=1
blocksize=32k
[testtjob] rw=read
size: test file size, test result is more accurater if size is
bigger
directory: where to store the test file
direct=1: direct to read/write disk without using cache
blocksize: size of each read/write operation
[testjob]: name of a test job, can be any words you want, you can
have more than one jobs to run
rw: type of test you want to perform: read, write,
rw(50%read+50%write)
Following are result examples of read test and read-write test:
testjob: (g=0): rw=read, bs=32K-32K/32K-32K, ioengine=sync,
iodepth=2 fio 1.58 Starting 1 process testjob: Laying out IO
file(s) (1 file(s) / 256MB) Jobs: 1 (f=1): [R] [100.0% done]
[43375K/0K /s] [1323 /0 iops] [eta 00m:00s] testjob: (groupid=0,
jobs=1): err= 0: pid=3312 read : io=262144KB, bw=28694KB/s,
iops=896 , runt= 9136msec clat (usec): min=719 , max=270743 ,
avg=1111.62, stdev=6571.44 lat (usec): min=719 , max=270744 ,
avg=1111.94, stdev=6571.45 bw (KB/s) : min= 188, max=42880,
per=100.99%, avg=28976.11, stdev=17731.08 cpu : usr=0.32%,
sys=1.84%, ctx=8206, majf=0, minf=32 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 r/w/d:
total=8192/0/0, short=0/0/0 lat (usec): 750=88.13%, 1000=8.81% lat
(msec): 2=1.93%, 4=0.18%, 10=0.13%, 20=0.49%, 50=0.13% lat (msec):
100=0.05%, 250=0.12%, 500=0.01%
Run status group 0 (all jobs): READ: io=262144KB, aggrb=28693KB/s,
minb=29382KB/s, maxb=29382KB/s, mint=9136msec, maxt=9136msec
Disk stats (read/write): sda: ios=8036/2, merge=124/3,
ticks=9295/78, in_queue=9373, util=97.87%
testjob: (g=0): rw=rw, bs=32K-32K/32K-32K, ioengine=sync, iodepth=2
fio 1.58 Starting 1 process Jobs: 1 (f=1): [M] [100.0% done]
[3517K/3387K /s] [107 /103 iops] [eta 00m:00s] testjob: (groupid=0,
jobs=1): err= 0: pid=3407 read : io=129408KB, bw=4418.4KB/s,
iops=138 , runt= 29289msec clat (usec): min=715 , max=365080 ,
avg=3623.78, stdev=11518.61 lat (usec): min=715 , max=365081 ,
avg=3624.10, stdev=11518.62 bw (KB/s) : min= 1352, max=16704,
per=101.34%, avg=4477.02, stdev=3114.18 write: io=132736KB,
bw=4531.1KB/s, iops=141 , runt= 29289msec clat (usec): min=893 ,
max=189764 , avg=3520.29, stdev=10148.27 lat (usec): min=893 ,
max=189764 , avg=3520.62, stdev=10148.27 bw (KB/s) : min= 1581,
max=16254, per=101.11%, avg=4581.52, stdev=2851.12 cpu : usr=0.14%,
sys=0.58%, ctx=8213, majf=0, minf=24 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 r/w/d:
total=4044/4148/0, short=0/0/0 lat (usec): 750=29.35%, 1000=45.00%
lat (msec): 2=7.87%, 4=2.03%, 10=5.33%, 20=6.64%, 50=3.39% lat
(msec): 100=0.15%, 250=0.22%, 500=0.02%
Run status group 0 (all jobs): READ: io=129408KB, aggrb=4418KB/s,
minb=4524KB/s, maxb=4524KB/s, mint=29289msec, maxt=29289msec WRITE:
io=132736KB, aggrb=4531KB/s, minb=4640KB/s, maxb=4640KB/s,
mint=29289msec, maxt=29289msec
Disk stats (read/write): sda: ios=4067/4254, merge=73/48,
ticks=14845/18048, in_queue=32894, util=99.48%