fio使用详解

fio使用详解
1.常用参数的说明
–debug 调试模式 
–version 显示版本信息 
测试任务相关的参数 
–output= 文件名 输出到文件 
–runtime= 限制运行时间 单位为秒 
– name= 字符串 测试项目名称 
–description= 字符串 测试项目描述 
–filename= 测试文件,也可以制定到裸设备上 
–size= 测试文件大小 
–filesize= 单独的文件大小,也可以是一个范围,fio在设定的size只内随机的选择大小,如果没有指定,每个子文件大小相同。 
读写相关的参数 
–readwrite= 
read 顺序读 
write 顺序写 
trim 顺序trim,只支持Linux块设备 
randread 随机读 
randwrite 随机写 
randtrim 随机trim 只支持Linux块设备 
rw,readnwrite 混合读写 
randrw 随机混合读写 
如果是混合读写,默认是 50/50 即50%读加50%的写,对于特定的类型,结果会有些出入,因为速度可能不一样。可以在测试的指定一个数字, 
rwmixwrite=20 混合读写,写占20% 
direct=1 或者0 ,1为绕过文件系统的缓存 
–blocksize= 
–bs= 测试块大小,4K 8K 1M 等 
–bssplit=字符串 需要测试混合块大小的时候使用,可以按照如下的格式 
bssplit=4k/10:64k/50:32k/40 4K占10% 64K占50% 32k占40% 
也可以不指定百分比,fio会平均分配,比如 
bssplit=4k/50:1k/:32k/ 就是4k占50% 1K 32看各占25% 
bssplit 读写的时候都可以使用 
运行相关参数 
–max-job= 运行的最高线程 
–zero_buffers 如果使用这个参数,fio会初始化IO缓存,并默认使用随机的数据填满缓存。 
–refill_buffers 强制重新填写读写缓存 
–iodepth= io队列深度 默认是1 
–direct= 0或者1 1为关闭文件系统缓存 
–numjobs= 线程数量 
–group_reporting 汇总每个进程的信息 
–lockmem= 固件测试的时候内存大小 比如2G 
–nrfiles=8 每个进程生成文件的数量

下面几个参数在libaio的引擎下的作用: 
–iodepth_batch=当队列里面的IO个数达到该值的时候,就调用io_submit批次提交请求 
–iodepth_batch_complete=一次最多可收割的io数 
–iodepth_low=队列的io数降到该值,就重新填充

2.fio使用案例
文件系统4k顺序读测试 
fio –filename=/tmp/test –direct=1 –rw=read –bs=4k –size=15G –numjobs=64 –runtime=300 –group_reporting –name=test-read 
文件系统4k随机写测试 
fio –filename=/tmp/test –direct=1 –rw=randwrite –bs=4k –size=15G –numjobs=64 –runtime=300 –group_reporting –name=test-read 
裸设备4k顺序写测试 
fio –filename=/dev/sdb –direct=1 –rw=write –bs=4k –size=15G –numjobs=64 –runtime=300 –group_reporting –name=test-read

3.测试结果解读
fio –filename=/test –direct=1 –rw=randwrite –bs=4k –size=1G –numjobs=64 –runtime=300 –group_reporting –name=test-randwrite 
… 
write: io=2850.2MB, bw=9726.1KB/s, iops=2431 , runt=300048msec 
clat (usec): min=159 , max=448315 , avg=410.20, stdev=1208.19 
lat (usec): min=159 , max=448315 , avg=411.15, stdev=1208.27 
clat percentiles (usec): 
| 1.00th=[ 203], 5.00th=[ 278], 10.00th=[ 326], 20.00th=[ 346], 
| 30.00th=[ 366], 40.00th=[ 386], 50.00th=[ 402], 60.00th=[ 418], 
| 70.00th=[ 434], 80.00th=[ 454], 90.00th=[ 486], 95.00th=[ 516], 
| 99.00th=[ 724], 99.50th=[ 1032], 99.90th=[ 1368], 99.95th=[ 2224], 
| 99.99th=[ 8256] 
bw (KB/s) : min= 3, max= 667, per=1.57%, avg=152.30, stdev=27.63 
lat (usec) : 250=3.92%, 500=89.07%, 750=6.14%, 1000=0.32% 
lat (msec) : 2=0.49%, 4=0.03%, 10=0.02%, 20=0.01%, 50=0.01% 
lat (msec) : 500=0.01% 
cpu : usr=0.04%, sys=0.23%, ctx=1548182, majf=0, minf=1844 
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 : total=r=0/w=729637/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs): 
WRITE: io=2850.2MB, aggrb=9726KB/s, minb=9726KB/s, maxb=9726KB/s, mint=300048msec, maxt=300048msec

Disk stats (read/write): 
dm-0: ios=0/766673, merge=0/0, ticks=0/341324, in_queue=341316, util=86.15%, aggrios=0/731075, aggrmerge=0/35722, aggrticks=0/268135, aggrin_queue=267337, aggrutil=85.33% 
vda: ios=0/731075, merge=0/35722, ticks=0/268135, in_queue=267337, util=85.33%

I/O延迟包括三种:slat,clat,lat 
关系是 lat = slat + clat。 
slat 表示fio submit某个I/O的延迟。 
clat 表示fio complete某个I/O的延迟。 
lat 表示从fio将请求提交给内核,再到内核完成这个I/O为止所需要的时间。

4.通过脚本执行fio测试
fio 也可以将测试用例写好脚本,通过运行脚本,完成多项测试任务 
; – start – 
[global] 
[random-writers] 
rw=randwrite 
bs=4K 
direct=1 
size=30G 
numjobs=63 
[random-read] 
rw=randread 
bs=4K 
direct=1 
size=30G 
numjobs=63

; – end –

Published by

风君子

独自遨游何稽首 揭天掀地慰生平