FIO User Guide and how to use fio
Preface
Fio is a good tool for IOPS testing. It is used for stress testing and verification of hardware. It supports 13 different I/O engines, including sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, and solarisaio.
Test preparation
Tool: fio-Flexible IO Tester
Official Website:
Http://freecode.com/projects/fio
Http://brick.kernel.dk/snaps/
Note:: We recommend that you test the performance by writing a bare disk to obtain more real data. However, testing bare disks directly damages the structure of the file system, resulting in data loss. Make sure that the data on the disk is backed up before testing.
CentOS can be directly installed using yum
# Yum install libaio-devel fio # manually install yum install libaio-develwget http://brick.kernel.dk/snaps/fio-2.2.10.tar.gztar-zxvf fio-2.2.10.tar.gzcd fio-2.2.10make $ make install
For gfio, gtk 2.18 (or newer), associated glib threads, and cairo are requiredto be installed. gfio isn't built automatically and can be enabledwith a -- enable-gfio option to configure. example: write fio quota [global] ioengine = libaiobs = 1024Krw = writeramp_time = 6 runtime = 300 direct = 1 iodepth = 16 # rwmixwrite = 20time_based [test] filename =/dev /sdanumjobs = 1 result: test: (g = 0): rw = write, bs = 1 M-1 M/1 M-1 M/1 M-1 M, ioengine = libaio, iodepth = 16fio-2.8Starting 1 processJobs: 1 (f = 1): [W (1)] [100.0% done] [0KB/68198KB/0KB/s] [0/66/0 iops] [eta 00 m: 00 s] test: (groupid = 0, jobs = 1 ): err = 0: pid = 4676: Thu Apr 7 17:22:37 2016 write: io = 20075 MB, bw = 68464KB/s, iops = 66, runt = 300255 msec # How much IO is executed, average bandwidth, thread running time slat (usec): min = 51, max = 5732, avg = 291.11, stdev = 262.47 # clat (usec): min = 1, max = 2235.8 K, avg = 239043.28, stdev = 153384.41 # completion latency lat (usec): min = 367, max = 2235.9 K, avg = 239337.72, stdev = 153389.57 # response time clat percentiles (usec): | 1.00th = [221], 5.00th = [442], 10.00th = [1004], 1000000th = [108032], | 30.00th = [228352], 40.00th = [248832], 50.00th = [257024], 60.00th = [268288], | 70.00th = [280576], 80.00th = [301056], 90.00th = [342016], 95.00th = [477184], | 99.00th = [806912], 99.50th = [864256], 99.90th = [1122304], 99.95th = [1171456], | 99.99th = [1646592] bw (KB/s): min = 170, max = 204800, per = 100.00%, avg = 68755.07, stdev = 27034.84 lat (usec ): 2 = 0.01%, 4 = 0.13%, 50 = 0.06%, 100 = 0.26%, 250 = 1.04% lat (usec): 500 = 4.53%, 750 = 2.61%, 1000 = 1.33% lat (msec ): 2 = 1.18%, 4 = 0.15%, 10 = 0.77%, 20 = 0.77%, 50 = 1.50% lat (msec): 100 = 4.43%, 250 = 23.48%, 500 = 53.23%, 750 = 3.09%, 1000 = 1.30% lat (msec): 2000 = 0.19%,> = 2000 = 0.01% cpu: usr = 0.03%, sys = 2.11%, ctx = 19066, majf = 0, minf = 7 IO depths: 1 = 0.1%, 2 = 0.1%, 4 = 0.1%, 8 = 0.1%, 16 = 103.8%, 32 = 0.0%,> = 64 = 0.0% # io queue submit: 0 = 0.0%, 4 = 100.0%, 8 = 0.0%, 16 = 0.0%, 32 = 0.0%, 64 = 0.0%,> = 64 = 0.0% # The number of I/o complete to be submitted for a single IO commit: 0 = 0.0%, 4 = 100.0%, 8 = 0.0%, 16 = 0.1%, 32 = 0.0%, 64 = 0.0%,> = 64 = 0.0% issued: total = r = 0/w = 20060/d = 0, short = r = 0/w = 0/d = 0, drop = r = 0/w = 0/d = 0 latency: target = 0, window = 0, percentile = 100.00%, depth = 16 # distribution of I/O delays Run status group 0 (all jobs): WRITE: IO = 20075 MB, aggrb = 68464KB/s (total group bandwidth ), minb = 68464KB/s (minimum average bandwidth), maxb = 68464KB/s (maximum average bandwidth), mint = 300255 msec (minimum running time of threads in A group ), maxt = 300255 msec (maximum running time of threads in a group) Disk stats (read/write): sda: ios = 23/41769 (total number of IO operations performed by all groups ), merge = 0/149 (total Number of IO mergers), ticks = 706/9102766 (Number of ticks we kept the disk busy), in_queue = 9105836 (total time spent on the queue ), util = 100.00% (Disk utilization) FAQ: 1. execution reports: No package 'gtk +-2.0 'found, No package 'gthread-2.0' found, configure: gtk and gthread not found A: yum install gtk2-devel2. run fio-name test-runtime = 30-filename =/dev/sda3-ioengine = libaio-direct = 1-bs = 1024 K-iodepth = 16-rw = write-time_based: report: fio:/dev/sda3 appears mounted, and 'Allow _ mounted_write 'isn' t set. aborting. a: sda stress testing