[转帖]文件系统读写性能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工具,可以测试不同的操作系统中文件系统的读写性能。可以测试

[转帖]dd - Linux世界中的搬运工

《存储工具系列文章》主要介绍存储相关的测试和调试工具,包括不限于dd、fio、vdbench、iozone、iometer、cosbench等性能负载工具,及strace等调试工具。 dd,是 device driver 的缩写,它可以称得上是“Linux 世界中的搬运工”,它用来读取设备、文件中的

[转帖]FIO使用说明

FIO介绍: FIO是测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证。磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类。FIO是一个可以产生很多线程或进程并执行用户指定的特定类型I/O操作的工具,FIO的典型用途是编写和模拟的I/O负载匹配的作业文件。也就是

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

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

[转帖]Linux中的Page cache和Buffer cache详解

1、内存情况 在讲解Linux内存管理时已经提到,当你在Linux下频繁存取文件后,即使系统上没有运行许多程序,也会占用大量的物理内存。这是因为当你读写文件的时候,Linux内核为了提高读写的性能和速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结

[转帖]linux磁盘IO读写性能优化

在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,我们可以 动态调整请求队列数来提高效率,默认的请求队列数存放在/sys/block/xvda/queue/nr_requests 文件中,注意:/sys/block/xvda ,这里 xvda 写的是你自己的硬盘名,因我的是vps所

[转帖]sar -Linux 上全面的系统性能分析工具(1)

https://zhuanlan.zhihu.com/p/554441955 一、sar简介 sar(System Activity Reporter 系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、

[转帖]Linux 中用 dd 命令来测试硬盘读写速度

https://www.cnblogs.com/xiexun/p/13935443.html hdparm -T /dev/sdb iostat 磁盘性能监控 由sysstat包提供 dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转

[转帖]Linux磁盘I/O(二):使用vm.dirty_ratio和vm.dirty_background_ratio优化磁盘性能

文件缓存是一项重要的性能改进,在大多数情况下,读缓存在绝大多数情况下是有益无害的(程序可以直接从RAM中读取数据)。写缓存比较复杂,Linux内核将磁盘写入缓存,过段时间再异步将它们刷新到磁盘。这对加速磁盘I/O有很好的效果,但是当数据未写入磁盘时,丢失数据的可能性会增加。 当然,也存在缓存被写爆的