一、fio介绍

fio 是一个 I/O 工具用来对硬件进行压力测试和验证,是一款Linux平台上颇为专业的磁盘性能测试工具,其测试数据十分具有参考价值。支持13种不同的I/O引擎,包括:sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等, I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs等。

二、安装

这里使用的是源码包安装。下载地址:

链接: http://pan.baidu.com/s/1ntpyXfj 密码: odgq

这里使用的系统是RedHat 6或CentOs 6

首先,需要安装gcc编译器,搭建好yum源,yum install gcc* 确定安装即可。

把fio上传到Linux系统中,注意,使用ftp上传的时候,需使用binary二进制模式

为了避免权限问题,可以把fio文件权限改为755,chmod 755 fio-2.1.7.tar.gz

tar -zxvf fio-2.1.7.tar.gz//解压

cd fio-2.1.7

./configure

make

make install

装好即可。


[root@zhou ~]# fio

No jobs(s) defined


fio-2.1.7

fio [options] [job options] <job file(s)>

 --debug=options       Enable debug logging. May be one/more of:

                       process,file,io,mem,blktrace,verify,random,parse,

                       diskutil,job,mutex,profile,time,net,rate

 --parse-only          Parse options only, don't start any IO

 --output              Write output to file

 --runtime             Runtime in seconds

 --latency-log         Generate per-job latency logs

 --bandwidth-log       Generate per-job bandwidth logs

 --minimal             Minimal (terse) output

 --output-format=x     Output format (terse,json,normal)

 --terse-version=x     Set terse version output format to 'x'

 --version             Print version info and exit

 --help                Print this page

 --cpuclock-test       Perform test/validation of CPU clock

 --crctest             Test speed of checksum functions

 --cmdhelp=cmd         Print command help, "all" for all of them

 --enghelp=engine      Print ioengine help, or list available ioengines

 --enghelp=engine,cmd  Print help for an ioengine cmd

 --showcmd             Turn a job file into command line options

 --eta=when            When ETA estimate should be printed

                       May be "always", "never" or "auto"

 --eta-newline=time    Force a new line for every 'time' period passed

 --status-interval=t   Force full status dump every 't' period passed

 --readonly            Turn on safety read-only checks, preventing writes

 --section=name        Only run specified section in job file

 --alloc-size=kb       Set smalloc pool to this size in kb (def 1024)

 --warnings-fatal      Fio parser warnings are fatal

 --max-jobs=nr         Maximum number of threads/processes to support

 --server=args         Start a backend fio server

 --daemonize=pidfile   Background fio server, write pid to file

 --client=hostname     Talk to remote backend fio server at hostname

 --idle-prof=option    Report cpu idleness on a system or percpu basis

                       (option=system,percpu) or run unit work

                       calibration only (option=calibrate)


Fio was written by Jens Axboe <jens.axboe@oracle.com>

                  Jens Axboe <jaxboe@fusionio.com>

                  Jens Axboe <axboe@fb.com>

三、使用方法


▲随机读:

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=200G -numjobs=10 -runtime=1000 -group_reporting -name=mytest

说明:

filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。

direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。

rw=randwrite 测试随机写的I/O

rw=randrw 测试随机写和读的I/O

bs=16k 单次io的块文件大小为16k

bsrange=512-2048 同上,提定数据块的大小范围

size=5g 本次的测试文件大小为5g,以每次4k的io进行测试。

numjobs=30 本次的测试线程为30.

runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。

ioengine=psync io引擎使用pync方式

rwmixwrite=30 在混合读写的模式下,写占30%

group_reporting 关于显示结果的,汇总每个进程的信息。

此外

lockmem=1g 只使用1g内存进行测试。

zero_buffers 用0初始化系统buffer。

nrfiles=8 每个进程生成文件的数量。

顺序读:

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

▲随机写:

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

▲顺序写:

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

▲混合随机读写:

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop