https://brick.kernel.dk/snaps/
fio是一种I / O工具,用于基准测试和压力/硬件验证。它支持19种不同类型的I / O引擎(sync,mmap,libaio,posixaio,SG v3,splice,null,network,syslet,guasi,solarisaio等),I / O优先级(适用于较新的Linux内核) ,评估I / O,分叉或线程作业等等。它可以在块设备和文件上工作。fio以简单易懂的文本格式接受职位描述。包含几个示例作业文件。fio显示各种I / O性能信息,包括完整的IO延迟和百分位数。Fio广泛用于许多地方,包括基准测试,QA和验证目的。它支持Linux,FreeBSD,NetBSD,OpenBSD,OS X,OpenSolaris,AIX,HP-UX,Android和Windows。
下载地址:
http://freshmeat.sourceforge.net/urls/3aa21b8c106cab742bf1f20d60629e3f
安装:
1. wget http://brick.kernel.dk/snaps/fio-2.0.7.tar.gz
2. yum install libaio-devel
3. tar -zxvf fio-2.0.7.tar.gz
4. cd fio-2.0.7
5. yum install gcc
6. yum install librbd*
7. make
8. make install
用法:
fio的运行分为两种方式:1、fio option 2、fio jobfile
方式一:
fio -filename=/dev/sdx -iodepth=1 -numjobs=1 -thread -rw=randwrite -bs=4k -ioengine=libaio -group_reporting -name=mytest
-randrepeat=0 -time_based -runtime=300 -direct=1
fio -direct=1 -iodepth=12 -rw=rw -ioengine=rbd -bs=4K -group_reporting -name=test -numjobs=4 -runtime=600
clientname=admin -pool=pool-4f54c712d0fc4ae494d924031cb0f81f -rbdname=volume-b54cffb2fe31417695d819bb40af4c6f
fio -thread -ioengine=libaio -group_reporting -name=mytest -randrepeat=0 -time_based -runtime=300 -direct=1
rwmixread=70 -filename=/dev/sdi:/dev/sdj -rw=randrw -bs=4k -numjob=1 --iodepth=128
参数解释:
-rw=read(100%顺序读) -rw=write(100%顺序写) -rw=randread(100%随机读) -rw=randwrite(100%随机写),
-rw=rw -rwmixread=70,混合顺序70%读30%写
-direct=1绕过内存 -iodepth 1队列长度
-thread -numjobs=30 线程,如果没有thread就是进程。
-runtime=10秒
-name=mytest 作业名称
-filename=指定测试设备
group_reportig 开启报告,要不然得单独统计每个线程 跑的结果
bs=4k ,指定测试粒度。
size=200GB,指定测试数据量。也可以不指定。
ioengine=libaio,指定测试引擎。
bssplit=blocksize/percentage;blocksize/percentage
bssplit=4k/10:64k/50;32k/40
random_generator=str
方式二:
fio job_file
job_file内容:
job file格式采用经典的ini文件,[ ]中的值表示job name,可以采用任意的ASCII字符,‘global’除外,global有特殊的意义。Global section描述了job file中各个job的默认配置值。一个job section可以覆盖global section中的参数,一个job file可以包含几个global section.一个job只会受到它上面的global section的影响。‘;’和‘#’可以用作注释
两个进程,分别从一个从128MB文件中,随机读的job file.
[global]
rw=randread
size=128m
[job1]
[job2]
;–end job file–
job1和job2 section是空的,因为所有的描述参数是共享的。没有给出filename=选项,fio会为每一个job创建一个文件名,如果用命令写,则是:
$fio –name=global –rw=randread –size=128m –name=job1 –name=job2
环境变量
在job file中支持环境变量扩展。类似于${VARNAME}可以作为选项的值(在=号右边)。
实例:
$SIZE=64m NUMJOBS=4 fio jobfile,fio
;–start job files–
[random-writers]
rw=randwrite
size=${SIZE}
numjobs=${NUMJOBS}
;–end job file–
一个job包含的基本的参数
1)IO类型
向文件发起的IO类型。
<1>readwrite=str,rw=str
read 顺序读
write 顺序写
randwrite 随机写
randread 随机读
rw,readwrite 顺序混合读写
randrw 随机混合读写
server/client
这两个参数涉及到fio的client/server模式
fio --server
然后此台fio进入server模式,默认打开8765端口,在另一台机器执行
fio --client=host jobfile
fio进入client模式,host指向server模式的机器,就可以实现将jobfile发送到server机器执行fio测试的任务。执行结果将返回client的机器。
verify数据校验
verify=meta 只verify header的crc32校验,不去verify后面的data区域,这是执行最快的一种verify。
verify = crc32 如果使用verify=crc32,整个4kb的数据会分为两个部分:
在verify的时候,header是默认校验的,就是校验header的内容和header的crc校验,如果指定的verify=crc32,那么在校验header之后,还会校验data区域内容和data区域的crc
生成性能结果图片
fio_generate_plots 可以直接生成IO性能图片,通过yum可以直接安装该插件:yum install gnuplot
1.写成一个配置文件
使用方法如下:
[global]
runtime=60
time_based
group_reporting
write_bw_log=test_fio_statistics
[test]
filename=/dev/zd16
bs=4k
ioengine=libaio
rw=rw
numjobs=1
iodepth=160
rwmixread=0
fsync=10
通过write_bw_log 生成一个test_fio_statistics的文件。
2.第二步运行fio的作图工具:
fio_generate_plots test_fio_statistics.log