Benchmarking: FIO

From Define Wiki
Revision as of 08:59, 2 July 2012 by David (talk | contribs)
Jump to navigation Jump to search

CERN Fio Benchmarks

[global]
direct=1
bsrange=4k-4k
####################
#numjobs should be half of the number of physical cores on the sample system.
numjobs=2
###################
directory=/srv/castor/04    # directory where '/dev/sda1' disk is mounted on
iodepth=24
timeout=3600
[f1]
size=10000MB
rw=randrw 
  • Run fio benchmark (average over 3 runs)
for i in {1..3}
do
	fio --eta=always --latency-log --bandwidth-log --output=/root/fio/fio-bench.${i}.log /root/fio/fio-bench
	sleep 3
done

  • Results:- grep -i iops /root/fio-bench.[1|2|3].log and sum all the iops values
grep -i iops /root/fio-bench.1.log 
fio-bench.1.log:  read : io=728220KB, bw=207137 B/s, iops=50 , runt=3600019msec
fio-bench.1.log:  write: io=727012KB, bw=206793 B/s, iops=50 , runt=3600019msec
fio-bench.1.log:  read : io=729100KB, bw=207388 B/s, iops=50 , runt=3600001msec
fio-bench.1.log:  write: io=723424KB, bw=205773 B/s, iops=50 , runt=3600001msec

grep -i iops /root/fio-bench.2.log
fio-bench.2.log:  read : io=598968KB, bw=170372 B/s, iops=41 , runt=3600006msec
fio-bench.2.log:  write: io=603348KB, bw=171618 B/s, iops=41 , runt=3600006msec
fio-bench.2.log:  read : io=601040KB, bw=170962 B/s, iops=41 , runt=3600001msec
fio-bench.2.log:  write: io=600416KB, bw=170784 B/s, iops=41 , runt=3600001msec

grep -i iops /root/fio-bench.3.log
fio-bench.3.log:  read : io=675160KB, bw=192044 B/s, iops=46 , runt=3600023msec
fio-bench.3.log:  write: io=675108KB, bw=192029 B/s, iops=46 , runt=3600023msec
fio-bench.3.log:  read : io=675532KB, bw=192149 B/s, iops=46 , runt=3600025msec
fio-bench.3.log:  write: io=676816KB, bw=192515 B/s, iops=47 , runt=3600025msec

IOPS (single drive):= (200 + 164 + 185)/3 = 183
  • Calculate the IOPS from the log file
  grep -i iops fio-bench.1.log | sed -e 's/=/ /g' -e 's/:/ /g'  | awk '{sum=sum+$8} END {print sum}'

CERN Results

Drive Model Number of drives Drive RPM IOPS
250GB (WD2503ABYX) 3 (raid0) 7200 RPM 471
2TB 2 (raid0) 5400 RPM XXX
Intel 320 40Gb 3 (raid0) N/A 1832
Intel 320 40Gb 2 (raid0) N/A 870*
Intel 320 40Gb 1 N/A 606
Intel 320 160Gb 2 (raid0) N/A 3279
Intel 320 160Gb 1 N/A 1591
Seagate Conste.2 1TB 2.5" 1 7200 RPM 332
*Below expected, please run again when drives are available.
Could be due to wear as this test was run directly after the 3 drive raid 0.

General IOPS Tests

I've found fio (http://freshmeat.net/projects/fio/) to be an excellent testing tool for disk systems. To use it, compile it (requires libaio-devel), and then run it as

fio input.fio

For a nice simple IOP test, try this:

[random]
rw=randread
size=4g
directory=/data
iodepth=32
blocksize=4k
numjobs=16
nrfiles=1
group_reporting
ioengine=sync
loops=1

This file will perform 4GB of IO into a directory named /data, using an IO depth of 32, a block size of 4k (the IOP measurement standard) with random reads as the major operation, using standard unix IO. We have 16 simultaneous jobs doing IO, each job using 1 file. It will aggregate all the information from each job and report it, and it will run once.

then to run the test:

fio file.fio


CLI FIO

Write IOPS Test

  fio --filename=/dev/md0 --direct=1 --rw=randwrite --bs=4k --size=16G --numjobs=64 \
  --runtime=10 --group_reporting --name=file1
  

Read IOPS Test

  fio --filename=/dev/md0 --direct=1 --rw=randread --bs=4k --size=16G --numjobs=64 \
  --runtime=10 --group_reporting --name=file1