常用参数的说明 --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=10G --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
|