fio使用教程

FIO 是一款 用于对磁盘进行性能测试的工具。可以测试IOPS,吞吐量,IO延迟等主要性能指标,而且支持多种IO引擎。FIO支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。由于目前主要做ceph的项目,所有搜索引擎主要使用rbd,下面的例子也主要针对ceph集群的测试使用。

FIO的下载与安装

FIO可以在yum上直接下载安装,也可以在http://brick.kernel.dk/snaps/下载对应的版本进行编译安装。使用编译安装的步骤如下:

1
2
3
4
5
6
7
下载按包装包
wget http://brick.kernel.dk/snaps/fio-3.5.tar.gz

解压并编译安装

tar -xzvf ./fio-3.5.tar.gz
make && make install

使用yum方式的可以直接yum安装

1
yum install fio-2.1.2-1.el6.rf.x86_64.rpm

FIO参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
filename=/dev/sdb1       测试文件名称,通常选择需要测试的盘的data目录。
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
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 每个进程生成文件的数量
log_avg_msec=1000 日志打印时间

fio的读写模式

1
2
3
4
5
6
rw=read 顺序读
rw=write 顺序写
rw=readwrite 顺序混合读写
rw=randwrite 随机写
rw=randread 随机读
rw=randrw 随机混合读写

FIO文件

我们可以需要进行的测试的fio参数写入到*.fio文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[global]
ioengine=rbd
rbdname=disk01
clientname=admin
pool=rbd
bs=40k
size=1M
iodepth=32
numjobs=1
group_reporting
name=file
direct=1
log_avg_msec=1000
write_bw_log=rw
write_lat_log=rw
write_iops_log=rw
[seq-write]
rw=write
stonewall

[rand-write]
rw=randwrite

[seq-read]
rw=read
stonewall

[rand-read]
rw=randread
stonewall

[global]为通用配置项,stonewall是几个测试任务的分隔符

FIO测试实例

在ceph集群中进行测试

1
fio -ioengine=rbd -rbdname=disk01 -clientname=admin -pool=rbd -rw=write -bs=400k -size=2G -iodepth=32 -numjobs=1  -group_reporting -name=file

随机写测试

1
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

顺序写测试

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

画图

fio安装完后自带有一个高级脚本fio_generate_plots能够根据fio输出的数据进行画图。

fio的输出日志主要包含三种:bw,lat和iops,设置这三种的参数如下:

1
2
3
write_bw_log=rw
write_lat_log=rw
write_iops_log=rw

后面接的参数rw,是输出日志文件名的prefix,如最终会生成的日志文件如下

1
2
3
4
5
rw_iops.log
rw_clat.log
rw_slat.log
rw_lat.log
rw_bw.log

如果生成的文件名为rw_bw.1.log,可以执行下面语句:

1
for i in clat lat slat bw iops;do mv rw_$i.1.log rw_$i.log;done

使用下面的命令即可自动画图:

1
fio_generate_plots bw