一、FIO工具简介

FIO测试是一种比较复杂的一项工具,可以设置的参数较多,也是测试人员常用的工具。注意:FIO 适用于所有型号的硬盘,但是测试时需要将客户的业务停止。

一般常见的FIO测试我们重点关注的是磁盘的IOPS、BMps、响应时间等,某些客户可能还关注IOPS的稳定性。对于通常情况下客户反馈过来的性能测试问题,如是单盘测试的情况,可以直接使用FIO测试与规格书来做相关的比对。

FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。

二、FIO工具下载

注意如果支持引擎是libaio,需要安装相应的支持包。点击如下工具下载;注意下载后先解压zip包,再上传linux环境下安装

fio-2.1.10.tar.gz.zip

libaio-devel-0.3.109-13.el7.x86_64.zip

三、FIO安装步骤

解压后进入目录,执行如下命令安装

./configure


make && make install

常用参数

fio -v               #查看版本


fio –enghelp         #查看fio支持的引擎,常用的libaio和rbd

参数名释义取值备注
–name测试用例名,命令行测试时必须指定
–filename测试文件、目录、设备名多个目录或文件用:分隔
–directory测试文件路径前缀,不指定时默认为当前目录示例:


/mntdir/seq_read/1M

–ioengine测试所用的io引擎文件系统测试一般为libaio;卷测试一般为rbd
–direct是否禁用缓存1,不使用缓存
–rw读写模式,read,顺序读


write,顺序写

rw,顺序混合

randwrite,随机写

randrw,随机混合

— rwmixwrite


–rwmixread

 随机读写时的读或写比例混合读写时,2个参数只用其一
–bs测试块大小,可接k,m单位示例:


8k

1m

–size测试文件大小或比例,可接k,m,g,t单位示例:


1M

1G

100%

仅适用于文件系统测试
–numjobs测试线程数不建议超过物理核心数
–iodepthio队列深度示例:


16

超过32后性能提升不大,但时延会明显增加
— runtime测试运行时间,单位秒300
— ramp_time测试开始前的预热时间,单位秒10
–time_based是否以时间为基准1,强制以时间为基准,即使未达到size大小测试也结束
— group_reporting汇总报告结果
— thread使用线程,减少系统开销
–output结果输出目录,指定后不在屏幕输出
–poolIoengine=rbd时,指定存储池名
–rbdnameIoengine=rbd时,指定卷名

四、测试要点

1.fio测试产生的文件需要手动清除。

2.读写混合测试时,读写测试结果是分开的,建议单次只测顺序或随机或混合情形下的读写。

3.fio也可以使用nohup后台执行,若通过output指定结果文件,则查看nohup.out查看测试结果。

4.numjobs和iodepth根据测试类型及测试机实际配置调整,并非越大越好。在性能已达瓶颈后,调高这2个参数,可能会导致时延明显增大。

未明确要求版本时,可使用fio-3.7版本。

命令示例:

fio -filename=/root/iopstest/test -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k

fio -filename=/root/iopstest/test -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k

五、测试结果

本次测试为NF5280M5本地SSD硬盘测试结果

读 135714   写16049

1.将测试的IOPS和BMps值与规格书中的做对比

规格书中的IOPS值是使用4k随机读写进行衡量的,这样可以最大程度的保证随机IO的并发,测试出更加准确的值。

2.规格书中BMps代表的是理论带宽值,此值是在顺序读写的时候进行的测试,所以理论上随机读写测试时的带宽会小于顺序读写。

注:IOPS:Input/Output Operations Per Second,即每秒的输入输出量(或读写次数),是一个用于存储设备性能测试的主要量测方式。

带宽:粗略的讲可以使用bs(条带宽度)与IOPS的值相乘即带宽值。