介绍

fio 全称是flexible I/O tester(灵活的I/O测试工具)。可以根据用户指定I/O类型进行多线程/进程的I/O负载模拟。

安装部署

fio 是系统ISO自带的基础安装安装包,直接使用yum安装。

yum list fio

命令使用方法

语法:

fio [options] [jobfile]...
注意:参数特别多,请把参数按man分类进行解读,就非常容易理解了。

jobfile参数主要分为以下几类,每类包含若干参数,参数详情 man fio 查看,这里略过。

  • 任务描述
  • 时间参数
  • 目标文件/设备
  • I/O类型
  • 块大小
  • 缓冲区与内存
  • I/O 大小
  • I/O 引擎
  • I/O 深度
  • I/O 速率
  • I/O 延迟
  • I/O 重播
  • 线程、进程和作业同步
  • 验证
  • 稳态
  • 测量和报告
  • 错误处理
  • 运行预定义的工作负载

举例

--随机读
--任务名:randread ,直接路径读,直接读取sdb,不经buffer,深度为64,随机读,io引擎为libaio,块大小4k,每线程IO大小为1G,任务数为1,任务运行时间为1000s,设备为sdb
fio -name=randread -direct=1 -iodepth=64 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdc# 随机写  sdc盘作单纯测试用
fio -name=randwrite -direct=1 -iodepth=64 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdc# 顺序读
fio -name=read -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdc# 顺序写   sdc盘作单纯测试用
fio -name=write -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdc

测试报告解析

[root@kickstart ~]# fio -name=randread -direct=1 -iodepth=64 -rw=randread -ioengine=libaio -bs=4k -size=5G -numjobs=1 -runtime=10 -group_reporting -filename=/dev/sdb
randread: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=64
fio-3.1
Starting 1 process
Jobs: 1 (f=1): [r(1)][100.0%][r=115MiB/s,w=0KiB/s][r=29.5k,w=0 IOPS][eta 00m:00s] <<<<
randread: (groupid=0, jobs=1): err= 0: pid=22902: Tue May 31 17:15:38 2022read: IOPS=29.5k, BW=115MiB/s (121MB/s)(1152MiB/10001msec)slat (usec): min=18, max=716, avg=31.02, stdev= 8.09clat (usec): min=204, max=4219, avg=2137.73, stdev=91.47lat (usec): min=716, max=4322, avg=2169.35, stdev=92.46clat percentiles (usec):|  1.00th=[ 2008],  5.00th=[ 2040], 10.00th=[ 2057], 20.00th=[ 2073],| 30.00th=[ 2089], 40.00th=[ 2114], 50.00th=[ 2114], 60.00th=[ 2147],| 70.00th=[ 2147], 80.00th=[ 2180], 90.00th=[ 2212], 95.00th=[ 2245],| 99.00th=[ 2474], 99.50th=[ 2638], 99.90th=[ 3032], 99.95th=[ 3195],| 99.99th=[ 3458]bw (  KiB/s): min=116000, max=119080, per=100.00%, avg=117930.00, stdev=827.54, samples=20iops        : min=29000, max=29770, avg=29482.45, stdev=206.91, samples=20lat (usec)   : 250=0.01%, 750=0.01%, 1000=0.01%lat (msec)   : 2=0.67%, 4=99.32%, 10=0.01%cpu          : usr=0.47%, sys=99.52%, ctx=35, majf=0, minf=94IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%issued rwt: total=294801,0,0, short=0,0,0, dropped=0,0,0latency   : target=0, window=0, percentile=100.00%, depth=64Run status group 0 (all jobs):READ: bw=115MiB/s (121MB/s), 115MiB/s-115MiB/s (121MB/s-121MB/s), io=1152MiB (1208MB), run=10001-10001msecDisk stats (read/write):sdb: ios=291783/0, merge=0/0, ticks=45307/0, in_queue=45335, util=99.10%

Jobs: 1 (f=1): [r(1)][100.0%][r=115MiB/s,w=0KiB/s][r=29.5k,w=0 IOPS][eta 00m:00s]

第一组方括号内的字符表示每个线程的当前状态。第一个字符是作业文件中定义的第一个作业,依此类推。可能的值(按典型生命周期顺序)为:P      Thread setup, but not started.C      Thread created.I      Thread initialized, waiting or generating necessary data.P      Thread running pre-reading file(s)./      Thread is in ramp period.R      Running, doing sequential reads.r      Running, doing random reads.W      Running, doing sequential writes.w      Running, doing random writes.M      Running, doing mixed sequential reads/writes.m      Running, doing mixed random reads/writes.D      Running, doing sequential trims.d      Running, doing random trims.F      Running, currently waiting for fsync(2).V      Running, doing verification of written data.f      Thread finishing.E      Thread exited, not reaped by main thread yet.-      Thread reaped.X      Thread reaped, exited with an error.K      Thread reaped, exited due to signal.

read: IOPS=29.5k, BW=115MiB/s (121MB/s)(1152MiB/10001msec)
read/write/trim 冒号前的字符串显示统计信息所针对的 I/O 方向。IOPS 是每秒执行的平均 I/O。BW 是平均带宽速率
slat (usec): min=18, max=716, avg=31.02, stdev= 8.09
slat 提交延迟 这是提交 I/O 所需的时间。对于同步 I/O,不显示此行,因为板条实际上是完成延迟(因为队列/完成是其中的一个操作)
clat (usec): min=204, max=4219, avg=2137.73, stdev=91.47
clat 完成延迟。 这表示从提交到完成 I/O 段的时间。对于同步 I/O,clat 通常等于(或非常接近)0,因为从提交到完成的时间基本上只是 CPU 时间(I/O 已经完成,请参阅板条说明)。
lat (usec): min=716, max=4322, avg=2169.35, stdev=92.46
lat 总延迟。与 slat 和 clat 的名称相同,这表示从 fio 创建 I/O 单元到完成 I/O 操作的时间。
bw ( KiB/s): min=116000, max=119080, per=100.00%, avg=117930.00, stdev=827.54, samples=20
bw 基于样本的带宽统计。与 xlat 统计信息的名称相同,但也包括采集的样本数(样本数)以及此线程在其组中接收的总聚合带宽的近似百分比(per)。仅当此组中的线程位于同一磁盘上时,最后一个值才真正有用,因为它们随后会争用磁盘访问。
iops : min=29000, max=29770, avg=29482.45, stdev=206.91, samples=20
iops 基于样本的 IOPS 统计信息。
lat (usec) : 250=0.01%, 750=0.01%, 1000=0.01%
lat (msec) : 2=0.67%, 4=99.32%, 10=0.01%

lat (nsec/usec/msec) I/O 完成延迟的分布。这是从 I/O 离开 fio 到完成的时间。与上面单独的读/写/修剪部分不同,此处和其余部分中的数据适用于报告组的所有 I/O。250=0.04% 表示 0.04% 的 I/O 在 250us 以下完成。500=64.11% 表示 64.11% 的 I/O 需要 250 到 499us 才能完成。
cpu : usr=0.47%, sys=99.52%, ctx=35, majf=0, minf=94
CPU 使用率。 用户和系统时间,以及此线程经历的上下文切换次数,系统和用户时间的使用情况,最后是主要和次要页面错误的数量。CPU 使用率数字是该报告组中作业的平均值,而上下文和故障计数器是相加的。
depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
IO depthsI/O 深度在作业生存期内的分布。
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
在单个提交调用中提交了多少个 I/O 片段。每个条目都表示该金额及以下,直到上一个条目 - 例如,16 = 100%表示我们每次提交呼叫提交9到16个I / O之间的任何地方。请注意,提交分发条目覆盖的范围可能与等效深度分布条目覆盖的范围不同。
issued rwt: total=294801,0,0, short=0,0,0, dropped=0,0,0
发出的读/写/修整请求的数量,以及其中有多少是短的或丢弃的。
latency : target=0, window=0, percentile=100.00%, depth=64
这些值用于延迟目标和相关选项。启用这些选项时,本节将介绍满足指定延迟目标所需的 I/O 深度。

列出每个客户端后,将打印组统计信息。它们将如下所示:
Run status group 0 (all jobs):
READ: bw=20.9MiB/s (21.9MB/s), 10.4MiB/s-10.8MiB/s (10.9MB/s-11.3MB/s), io=64.0MiB (67.1MB), run=2973-3069msec
WRITE: bw=1231KiB/s (1261kB/s), 616KiB/s-621KiB/s (630kB/s-636kB/s), io=64.0MiB (67.1MB), run=52747-53223msec

打印每个数据方向:
bw :此组中线程的聚合带宽,后跟此组中所有线程的最小和最大带宽。 括号外的值是 2 的幂格式,括号内的值是 10 次方格式的等效值。
io :对此组中的所有线程执行的聚合 I/O。格式与 bw 相同。
run :此组中线程的最小和最长运行时。

实战

通常情况下,I/O都是读写混合的,怎么模拟应用I/O呢?
使用blktrace命令记录设备上的I/O,再使用fio重放blktrace记录的I/O。

#跟踪设备上的I/O 期间复制了一份centos7.6.iso 和读取ISO镜像中的包
blktrace /dev/sdb
#将I/O记录转化为二进制文件
blkparse sdb -d sdb.bin
#重放
fio --name=replay --filename=/dev/sdb --direct=1 --read_iolog=sdb.bin
replay: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
fio-3.1
Starting 1 process
Jobs: 1 (f=1): [M(1)][100.0%][r=0KiB/s,w=0KiB/s][r=0,w=0 IOPS][eta 00m:00s]
replay: (groupid=0, jobs=1): err= 0: pid=23493: Tue May 31 21:42:45 2022read: IOPS=870, BW=171MiB/s (180MB/s)(4825MiB/28183msec)clat (usec): min=59, max=13441, avg=426.95, stdev=267.83lat (usec): min=59, max=13442, avg=427.13, stdev=267.83clat percentiles (usec):|  1.00th=[  161],  5.00th=[  192], 10.00th=[  239], 20.00th=[  306],| 30.00th=[  379], 40.00th=[  400], 50.00th=[  416], 60.00th=[  433],| 70.00th=[  457], 80.00th=[  490], 90.00th=[  562], 95.00th=[  660],| 99.00th=[  971], 99.50th=[ 1221], 99.90th=[ 3949], 99.95th=[ 4359],| 99.99th=[11076]bw (  KiB/s): min=27608, max=357844, per=100.00%, avg=266981.08, stdev=63130.40, samples=37iops        : min=  136, max= 1766, avg=1325.11, stdev=316.99, samples=37write: IOPS=573, BW=170MiB/s (178MB/s)(4779MiB/28183msec)clat (usec): min=47, max=18035, avg=232.20, stdev=344.15lat (usec): min=48, max=18065, avg=236.51, stdev=345.39clat percentiles (usec):|  1.00th=[   57],  5.00th=[   68], 10.00th=[   72], 20.00th=[   83],| 30.00th=[  124], 40.00th=[  182], 50.00th=[  262], 60.00th=[  277],| 70.00th=[  293], 80.00th=[  314], 90.00th=[  351], 95.00th=[  396],| 99.00th=[  570], 99.50th=[  709], 99.90th=[ 1467], 99.95th=[ 8717],| 99.99th=[16188]bw (  KiB/s): min= 3648, max=532424, per=100.00%, avg=271786.28, stdev=93116.18, samples=36iops        : min=  201, max= 1698, avg=896.00, stdev=336.83, samples=36lat (usec)   : 50=0.01%, 100=10.01%, 250=15.25%, 500=63.58%, 750=9.10%lat (usec)   : 1000=1.47%lat (msec)   : 2=0.40%, 4=0.10%, 10=0.06%, 20=0.03%cpu          : usr=8.48%, sys=23.75%, ctx=41002, majf=0, minf=26IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%issued rwt: total=24523,16175,0, short=0,0,0, dropped=0,0,0latency   : target=0, window=0, percentile=100.00%, depth=24Run status group 0 (all jobs):READ: bw=171MiB/s (180MB/s), 171MiB/s-171MiB/s (180MB/s-180MB/s), io=4825MiB (5059MB), run=28183-28183msecWRITE: bw=170MiB/s (178MB/s), 170MiB/s-170MiB/s (178MB/s-178MB/s), io=4779MiB (5011MB), run=28183-28183msecDisk stats (read/write):sdb: ios=24523/16134, merge=0/1, ticks=10603/3856, in_queue=14460, util=51.27%

最后通过blktrace与fio结合,取得了模拟应用I/O的测试报告。

fio 全称是flexible I/O tester(灵活的I/O测试工具)。可以根据用户指定I/O类型进行多线程/进程的I/O负载模拟。相关推荐

  1. Linux IO 测试工具 fio命令

    fio是测试IO的非常好的工具,用来对磁盘进行压力测试和验证.磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类.fio是一个可以产生很多线程或进程并执行用户指定的特定类 ...

  2. 【测试】linux FIO命令详解(一):磁盘IO测试工具 fio (并简要介绍iostat工具)

    目录 随看随用 FIO介绍 FIO 工具常用参数: fio工作参数可以写入配置文件 IO状态监控: Iostat介绍 与FIO相似的工具 fio测试脚本 提取iops和bw gunplot画图 Fio ...

  3. 【测试】 FIO:ceph/磁盘IO测试工具 fio(iodepth深度)

    目录 随看随用 NAS文件系统测试 块系统测试 FIO用法 FIO介绍 FIO 工具常用参数: FIO结果说明 I/O 的重放('录'下实际工况的IO,用fio'重放') fio工作参数可以写入配置文 ...

  4. linux FIO命令详解(一):磁盘IO测试工具 fio (并简要介绍iostat工具)

    FIO介绍 FIO是测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证.磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类.FIO是一个可以产生很多线程或进程并执行 ...

  5. 服务器io测试工具-fio

    Fio 是一个 I/O 工具,旨在用于基准测试和压力/硬件验证.它支持 19 种不同类型的 I/O 引擎(sync.mmap.libaio.posixaio.SG v3.splice.null.net ...

  6. SPCAMLEditor–灵活实用的CAML编辑工具(上)

    SPCAMLEditor–灵活实用的CAML编辑工具 (上) 查看word版本:SPCAMLEditor_灵活实用的CAML编辑工具1.doc CAML简述 CAML全称Collaborative A ...

  7. fio模拟mysql写入速度_fio 测试工具

    一 何为fio 总之就是一个磁盘io的测试工具,支持多引擎和多系统测试,非常灵活和强大. 二 安装 Linux:yum install libaio-devel  依赖包安装 解压tar包 然后mak ...

  8. 正则表达式测试工具 Regex Tester 的使用方法

    2019独角兽企业重金招聘Python工程师标准>>> 正则表达式测试工具"RegexTester",下载地址:http://www.oschina.net/p/ ...

  9. 天猫php采集列表,QueryList: QueryList是一个基于phpQuery的通用列表采集类,是一个简单、 灵活、强大的采集工具,采集任何复杂的页面 基本上就一句话就能搞定了。...

    #QueryList交流社区: http://querylist.cc/ #QueryList文档: http://doc.querylist.cc/ #QueryList交流QQ群:12326696 ...

最新文章

  1. 09-JS中table模糊查询
  2. sleep头文件linux,Linux下的sleep函数 要用的话得包涵什么头文件啊?
  3. 017.Zabbix宏介绍
  4. LaTex:算法排版
  5. 《集体智慧编程》数学公式
  6. 第 7 章 异常处理结构、代码测试与调试
  7. 实例15:python
  8. Hadoop2.6.0完全分布式安装
  9. jQuery概述、优点、使用步骤、入口函数、jQuery对象和DOM对象之间的转换、层级选择器、属性选择器、筛选选择器、节点选择器
  10. LVS-NAT和LVS-DR模式的实现详解
  11. PartitionStateMachine分析
  12. linux云自动化运维,linux云自动化系统运维17(延时服务及定时服务)
  13. python头文件库_跟老齐学Python之不要红头文件(1)
  14. 易天ETU-link 100G QSFP28光模块系列资料
  15. JAVA面向对象OOP多态→抽象类abstract、接口interface实现implement、final不变修饰符、样例代码
  16. ReportView使用
  17. 【图像处理】基于matlab GUI图像滤镜(马赛克+蓝色透镜+素描)【含Matlab源码 1145期】
  18. HTML+CSS期末大作业:家乡旅游网站设计——山东菏泽(6页) 简单个人网页设计作业 静态HTML旅行主题网页作业 DW个人网站模板下载 大学生简单个人网页作品代码
  19. 删库是不可能删库的,这辈子是不可能删库的
  20. gimp中文版下载 | GIMP(专业图像处理软件)官方中文版V2.10.30 | GIMP图片编辑器中文版下载

热门文章

  1. Qt扫盲-QSqlQuery理论总结
  2. 【MATLAB】 01 基本操作与数组输入
  3. Python用try-except的时候获取错误行信息和文件信息
  4. Latex语法学习10:盒子的使用(fbox, tcolorbox, boitee),支持设置颜色和换页
  5. pgpool读写分离,配置设置及调研
  6. niosii spi 外部_转载:NIOS II spi详解
  7. 卷积神经网络 (CNN) 基本原理和公式
  8. ClickHouse MergeTree副本表和分布式表(切片)
  9. 10张程序员喜爱的壁纸,需要自取~
  10. 信息系统开发(JAVA)设计一个银行账户类