文件系统读写性能fio测试方法及参数详解

简介

Fio 是一个 I/O 工具,用来对硬件进行压力测试和验证,磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类。

Fio支持13种不同的I/O引擎,包括:sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio , I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs, 等等。

fio-2.1.10百度网盘下载链接:
链接:https://pan.baidu.com/s/1d_ho1Q1uN_0Kaq3N01OLWw?pwd=4z4r
提取码:4z4r

本文以银河麒麟操作系统为例。

测试方法

1.安装libaio:(注意:顺序不能反,一定要先安装libaio,再编译)
桌面版本:

apt-get -y install libaio1 libaio-dev

服务器版本:

yum install libaio libaio-devel

2.解压fio工具包,执行命令:

tar xvf fio-2.1.10-fix.tar.gz

3.解压后进入目录

cd fio-2.1.10

4.对应架构,编译

./configure 
make && make install

5.执行测试命令(示例)

fio -filename=/data/test -direct=1 -iodepth 32 -thread -rw=read -ioengine=libaio -bs=4k -size=5G -numjobs=8 -group_reporting -runtime=120 -time_base -name=/home/fio.result >> /home/fio.result

6.第5步执行完后,更改-rw的参数分别为:write、randwrite、randread;跑完后再更改-bs=参数为1M;-rw=参数分别为read、write、randwrite、randread再跑一遍;
共测试8组,对比测试数据。

7.测试完成后可查看/home/fio.result文件看结果:

cat /home/fio.result

参数说明

1.filename=/data/test 测试文件名称,通常选择需要测试的盘的data目录;
2. direct=1 是否使用directIO,测试过程绕过OS自带的buffer。Linux读写的时候,内核维护了缓存,数据先写到缓存,后面再后台写到SSD。读的时候也优先读缓存里的数据。这样速度可以加快,但是一旦掉电缓存里的数据就没了。所以有一种模式叫做directIO,跳过缓存,直接读写SSD,使测试结果更真实;
3. rw=read 测试顺序读的I/O;
4. rw=write 测试顺序写的I/O;
5. rw=randread 测试随机读的I/O;
6. rw=write rw=randwrite 测试随机写的I/O;
7. rw=write rw=randrw 测试随机混合读和写的I/O;
8. bs=4k 单次io的块文件大小为4k;
9. size=5G 本次的测试文件大小为5g,以每次4k的io进行测试;
10. numjobs=8 测试线程为8;(需要根据测试的cpu线程数做对应修改)
11. name=job1 一个任务的名字,重复了也没关系;
12. thread 使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试;
13. group_reporting 关于显示结果的,汇总每个进程的信息;
14. runtime=120 测试时间为120秒,如果不写则一直将5g文件分4k每次写完为止;
15. time_based 如果设置的话,即使file已被完全读写或写完,也要执行完runtime规定的时间,它是通过循环执行相同的负载来实现的;
16. ioengine=libaio 指定io引擎使用libaio方式。
libaio:Linux本地异步I/O。请注意,Linux可能只支持具有非缓冲I/O的排队行为(设置为“direct=1”或“buffered=0”);
17. iodepth=32 队列的深度为32。
  同步的IO:一次只能发出一个IO请求,等待内核完成才返回,这样对于单个线程iodepth总是小于1。(电梯算法:假如一部电梯一次只能搭乘一人,那么每个人一但乘上电梯,就能快速达到目的地(响应时间),但需要耗费较长的等待时间(队列长度)。虽然响应时间较短,但系统的吞吐量很小。)
  异步情况下:一次提交一批,然后等待一批的完成,减少交互的次数,会更有效率。加大磁盘队列深度就是让磁盘不断工作,减少磁盘的空闲时间。(电梯算法:32个人等电梯,一次上满32人,只需等一次电梯即可)。

Linux系统查看默认队列深度方法
lsscis系统默认是未安装的,需要安装一下

apt-get install lsscis

然后执行:lsscsi -l

lsscsi -l
[0:0:0:0]    disk    DGC      VRAID            0533  /dev/sda 
state=running  queue_depth=31 scsi_level=5 type=0 device_blocked=0 timeout=30

可看到,该队列深度为31。

测试结果分析

当fio完成的时候(或是通过ctrl-c终止的时候),将会打印每一个线程的数据,每个group的数据,和磁盘数据。
本次顺序读测试结果如下图所示:
在这里插入图片描述
各项参数说明
io 执行了多少M的IO
bw 平均IO带宽
iops IOPS 即I/O per second,即每秒进行读写(I/O)操作的次数,是衡量磁盘性能的主要指标之一。
runt 线程运行时间(单位毫秒)
slat 提交延迟
clat 完成延迟
lat 响应时间
cpu 利用率
IO depths io队列
IO submit 单个IO提交要提交的IO数
IO complete 与上面的提交编号一样,但改为填写
IO issued 发出的读/写请求数,以及短请求数。
IO latencies IO延迟的分布
下面的io 总共执行了多少size的IO
aggrb group总带宽
minb 最小平均带宽.
maxb 最大平均带宽.
mint group中线程的最短运行时间.
maxt group中线程的最长运行时间.
ios 所有group总共执行的IO数.
merge 总共发生的IO合并数.
ticks Number of ticks we kept the disk busy.
in_queue 花费在队列上的总共时间.
util 磁盘利用率

总结

我们一般主要看iops、bw、util的值,数值越高则性能越好。也可参考硬盘厂商提供的理论值,我们的测试数据达到厂商提供的数据90%以上,则测试结果较好。

  • 1
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wlh_venus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值