fio 全称是flexible I/O tester(灵活的I/O测试工具)。可以根据用户指定I/O类型进行多线程/进程的I/O负载模拟。
介绍
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负载模拟。相关推荐
- Linux IO 测试工具 fio命令
fio是测试IO的非常好的工具,用来对磁盘进行压力测试和验证.磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类.fio是一个可以产生很多线程或进程并执行用户指定的特定类 ...
- 【测试】linux FIO命令详解(一):磁盘IO测试工具 fio (并简要介绍iostat工具)
目录 随看随用 FIO介绍 FIO 工具常用参数: fio工作参数可以写入配置文件 IO状态监控: Iostat介绍 与FIO相似的工具 fio测试脚本 提取iops和bw gunplot画图 Fio ...
- 【测试】 FIO:ceph/磁盘IO测试工具 fio(iodepth深度)
目录 随看随用 NAS文件系统测试 块系统测试 FIO用法 FIO介绍 FIO 工具常用参数: FIO结果说明 I/O 的重放('录'下实际工况的IO,用fio'重放') fio工作参数可以写入配置文 ...
- linux FIO命令详解(一):磁盘IO测试工具 fio (并简要介绍iostat工具)
FIO介绍 FIO是测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证.磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类.FIO是一个可以产生很多线程或进程并执行 ...
- 服务器io测试工具-fio
Fio 是一个 I/O 工具,旨在用于基准测试和压力/硬件验证.它支持 19 种不同类型的 I/O 引擎(sync.mmap.libaio.posixaio.SG v3.splice.null.net ...
- SPCAMLEditor–灵活实用的CAML编辑工具(上)
SPCAMLEditor–灵活实用的CAML编辑工具 (上) 查看word版本:SPCAMLEditor_灵活实用的CAML编辑工具1.doc CAML简述 CAML全称Collaborative A ...
- fio模拟mysql写入速度_fio 测试工具
一 何为fio 总之就是一个磁盘io的测试工具,支持多引擎和多系统测试,非常灵活和强大. 二 安装 Linux:yum install libaio-devel 依赖包安装 解压tar包 然后mak ...
- 正则表达式测试工具 Regex Tester 的使用方法
2019独角兽企业重金招聘Python工程师标准>>> 正则表达式测试工具"RegexTester",下载地址:http://www.oschina.net/p/ ...
- 天猫php采集列表,QueryList: QueryList是一个基于phpQuery的通用列表采集类,是一个简单、 灵活、强大的采集工具,采集任何复杂的页面 基本上就一句话就能搞定了。...
#QueryList交流社区: http://querylist.cc/ #QueryList文档: http://doc.querylist.cc/ #QueryList交流QQ群:12326696 ...
最新文章
- 09-JS中table模糊查询
- sleep头文件linux,Linux下的sleep函数 要用的话得包涵什么头文件啊?
- 017.Zabbix宏介绍
- LaTex:算法排版
- 《集体智慧编程》数学公式
- 第 7 章 异常处理结构、代码测试与调试
- 实例15:python
- Hadoop2.6.0完全分布式安装
- jQuery概述、优点、使用步骤、入口函数、jQuery对象和DOM对象之间的转换、层级选择器、属性选择器、筛选选择器、节点选择器
- LVS-NAT和LVS-DR模式的实现详解
- PartitionStateMachine分析
- linux云自动化运维,linux云自动化系统运维17(延时服务及定时服务)
- python头文件库_跟老齐学Python之不要红头文件(1)
- 易天ETU-link 100G QSFP28光模块系列资料
- JAVA面向对象OOP多态→抽象类abstract、接口interface实现implement、final不变修饰符、样例代码
- ReportView使用
- 【图像处理】基于matlab GUI图像滤镜(马赛克+蓝色透镜+素描)【含Matlab源码 1145期】
- HTML+CSS期末大作业:家乡旅游网站设计——山东菏泽(6页) 简单个人网页设计作业 静态HTML旅行主题网页作业 DW个人网站模板下载 大学生简单个人网页作品代码
- 删库是不可能删库的,这辈子是不可能删库的
- gimp中文版下载 | GIMP(专业图像处理软件)官方中文版V2.10.30 | GIMP图片编辑器中文版下载
热门文章
- Qt扫盲-QSqlQuery理论总结
- 【MATLAB】 01 基本操作与数组输入
- Python用try-except的时候获取错误行信息和文件信息
- Latex语法学习10:盒子的使用(fbox, tcolorbox, boitee),支持设置颜色和换页
- pgpool读写分离,配置设置及调研
- niosii spi 外部_转载:NIOS II spi详解
- 卷积神经网络 (CNN) 基本原理和公式
- ClickHouse MergeTree副本表和分布式表(切片)
- 10张程序员喜爱的壁纸,需要自取~
- 信息系统开发(JAVA)设计一个银行账户类