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

文件系统,读写,性能,fio,测试方法,参数,详解 · 浏览次数 : 0

小编点评

**测试方法** 1. **安装 libaio**: - 桌面版本: `apt-get -y install libaio1 libaio-dev1` - 服务器版本: `yum install libaio libaio-devel1` 2. **解压工具包**: - 解压 `fio-2.1.10-fix.tar.gz1` 3. **进入目录**: - `cd fio-2.1.101` 4. **编译编译**: - `./configure` - `make && make install12` 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.result1` 6. **更改参数并执行测试**: - `fio -filename=/data/test -direct=1 -iodepth 32 -thread -rw=read -ioengine=libaio -bs=1M -size=5G -numjobs=8 -group_reporting -runtime=120 -time_base -name=/home/fio.result` 7. **执行完测试后更改参数**: - `rw=write rw=randwrite test random writes and reads` 8. **测试随机混合读和写的性能**: - `rw=write rw=randrw` 9. **设置 I/O engine**: - `ioengine=libaio` 10. **设置队列深度**: - `iodepth=32` **参数说明** - `filename=/data/test`:测试文件名称 - `direct=1`:启用 Direct I/O - `iodepth=32`:设置 I/O 数据缓存数量为 32 - `thread`:开启多线程 - `rw=read`:只读 - `ioengine=libaio`:设置 I/O engine 为 libaio - `bs=1M`:设置块大小为 1 MB - `size=5G`:设置数据大小为 5 GB - `numjobs=8`:设置并发线程数量为 8 - `group_reporting`:启用组报告 - `runtime=120`:设置测试运行时间为 120 秒 - `time_base`:设置时间基线 - `name=/home/fio.result`:保存测试结果文件名 - `group_reporting`:启用组报告 **结果分析** - `iops`:每秒 IOPS - `bw`:每秒带宽 - `util`:磁盘利用率 - `slat`:提交延迟 - `clat`:完成延迟 - `lat`:响应时间 - `io`:所有线程执行的 I/O数量 - `merge`:合并执行的 I/O数量 - `ticks`:测试时间持续的毫秒数

正文

简介

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
  • 1

服务器版本:

yum install libaio libaio-devel
  • 1

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

tar xvf fio-2.1.10-fix.tar.gz
  • 1

3.解压后进入目录

cd fio-2.1.10
  • 1

4.对应架构,编译

./configure 
make && make install
  • 1
  • 2

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
  • 1

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

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

cat /home/fio.result
  • 1

参数说明

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
  • 1

然后执行:lsscsi -l

lsscsi -l
  • 1
[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
  • 1
  • 2

可看到,该队列深度为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%以上,则测试结果较好。

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux29394 人正在系统学习中

与[转帖]文件系统读写性能fio测试方法及参数详解相似的内容:

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

简介 Fio 是一个 I/O 工具,用来对硬件进行压力测试和验证,磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类。 Fio支持13种不同的I/O引擎,包括:sync, mmap, libaio, posixaio, SG v3, splice, null, netw

[转帖]iozone - 性能压力测试工具

《存储工具系列文章》主要介绍存储相关的测试和调试工具,包括不限于dd、fio、vdbench、iozone、iometer、cosbench等性能负载工具,及strace等调试工具。 1 概述 IOzone是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能。可以测试

[转帖]iozone磁盘读写测试工具的使用以及命令详解、下载(网站最详细讲解步骤)

一、iozone简介 iozone是一款开源工具,用来测试文件系统的读写性能,也可以进行测试磁盘读写性能。 二、下载 方式一:网站下载http://www.iozone.org/ 方式二:个人网盘存放有,版本为iozone3.430版本,需要新版本可私聊联系我,免费赠送给。 链接:https://p

[转帖]磁盘读速度巨慢使用arcconf工具调整后的二次优化

情况叙述:lvm文件系统出现损坏,格式为xfs,磁盘修复失败后该节点需要重新格式化处理,格式化后重新划分pv,vg,lv,做完之后应用反应读写的速度达不到应用使用的要求,与正常的相比速度不稳定 现象:time和dd测试速度后发现写的速度为10-20MB/s 解决1:yy3:~ # chmod +x

[转帖]Linux磁盘I/O(一):Cache,Buffer和sync

Cache和Buffer的区别 磁盘是一个块设备,可以划分为不同的分区;在分区之上再创建文件系统,挂载到某个目录,之后才可以在这个目录中读写文件。Linux 中“一切皆文件”,我们平时查看的“文件”是普通文件,磁盘是块设备文件,我们可以通过执行 “ls -l <路径>” 查看它们的区别: $ ls

[转帖]Linux 文件系统 EXT4 的前世今生

https://www.oschina.net/translate/introduction-ext4-filesystem?print 在先前关于Linux文件系统的文章中,我写了一份说明书去介绍Linux文件系统,里面有一些高级的概念,比如说,一切都是文件。我很想去深入地讨论更多EXT文件系统的

[转帖]XFS文件系统 inodes异常

https://www.jianshu.com/p/f5763e4d7e5b 异常服务器 [sysadmin@VM_21_14_centos tomcat]$ df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vgd

[转帖]挂载文件系统选项nodiratime、noatime

默认的方式下linux会把文件访问的时间atime做记录,文件系统在文件被访问、创建、修改等的时候记录下了文件的一些时间戳,比如:文件创建时间、最近一次修改时间和最近一次访问时间;这在绝大部分的场合都是没有必要的。 因为系统运行的时候要访问大量文件,如果能减少一些动作(比如减少时间戳的记录次数等)将

[转帖]Linux文件系统的几个性能测试软件小结

https://developer.aliyun.com/article/297631#:~:text=Linux%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%87%A0%E4%B8%AA%E6%80%A7%E8%83%BD%E6%B5%8B%E8

[转帖]Linux fuse用户态文件系统及其libfuse

https://www.jianshu.com/p/abc5524ac18c 为什么要有用户态文件系统 VFS文件系统可知文件系统在内核态的,应用程序操作文件,统一调用内核态的VFS层抽象接口。 突然有一天有一个和文件系统有关的需求,要编写一个特定功能的文件系统,不管是代码编写还是调试都不太方便,就