【详细齐全】FIO使用方法 及参数解析(文章末尾)

2023-11-07

linux 使用FIO测试磁盘iops 方法详解

FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎, 包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。 

fio 官网地址:http://freshmeat.net/projects/fio/ 

fio

FIO安装

wget http://brick.kernel.dk/snaps/fio-3.12.tar.gz

yum install libaio-devel
tar -zxvf fio-2.2.5.tar.gz
cd fio-2.2.5
make
make install

若要启动gfio,需安装gtk2,configure时加上--enable-gfio

$ yum install libaio-devel
$ yum install gtk2
$ yum install gtk2-devel
$ ./configure --enable-gfio
$ make
$ make install

  • 安装fio

apt-get install fio   (yum install fio)

输出:...
 

Installed:
  fio.x86_64 0:3.1-2.el7                                         

Dependency Installed:
  libpmem.x86_64 0:1.3-3.el7      libpmemblk.x86_64 0:1.3-3.el7  
  librdmacm.x86_64 0:15-7.el7_5 
  • 可以把fio的输出数据自动画图的插件gnuplot

apt-get install gnuplot  (yum install gnuplot)

输出:

Installed:
  gnuplot.x86_64 0:4.6.2-3.el7                                                                      

Dependency Installed:
  dejavu-fonts-common.noarch 0:2.33-6.el7           dejavu-sans-fonts.noarch 0:2.33-6.el7          
  gd.x86_64 0:2.0.35-26.el7                         gnuplot-common.x86_64 0:4.6.2-3.el7            
  graphite2.x86_64 0:1.3.10-1.el7_3                 harfbuzz.x86_64 0:1.3.2-1.el7                  
  libXft.x86_64 0:2.3.2-2.el7                       libXpm.x86_64 0:3.5.12-1.el7                   
  libjpeg-turbo.x86_64 0:1.2.90-5.el7               libthai.x86_64 0:0.1.14-9.el7                  
  pango.x86_64 0:1.40.4-1.el7                      

Complete!

1.输出bw,lat和iops数据并画图

fio安装完后自带有一个高级脚本fio_generate_plots能够根据fio输出的数据进行画图。操作流程如下:

1.1设置fio输出详细日志:注意这里“\”位置是指换行,命令执行完成后在当前路径可以搜索到要输出的日志。

fio --filename=test_file  --direct=1 --rw=randwrite --numjobs=1 --iodepth=16 \
--ioengine=libaio  --bs=4k --group_reporting --name=zhangyi --log_avg_msec=500 \
--write_bw_log=test-fio --write_lat_log=test-fio --write_iops_log=test-fio --size=1G  

这里需要说明下的就是write_bw_log这个参数需要指定,意思就是将fio的输出带宽信息就到文件test-fio中。这里可以指定带宽,IOPS和延时

fio的输出日志主要包含三种:bw,lat和iops,设置这三种的参数如下:

write_bw_log=rw
write_lat_log=rw
write_iops_log=rw

这里需要强调的一点是,后面接的参数rw,是输出日志文件名的prefix,如最终会生成的日志文件如下:

[xxx@xxx fio]$ ll rbd*.log
-rw-r--r-- 1 orcadt orcadt 208 Dec  3 20:58 rbd_bw.log
-rw-r--r-- 1 orcadt orcadt 227 Dec  3 20:58 rbd_clat.log
-rw-r--r-- 1 orcadt orcadt 197 Dec  3 20:58 rbd_iops.log
-rw-r--r-- 1 orcadt orcadt 227 Dec  3 20:58 rbd_lat.log
-rw-r--r-- 1 orcadt orcadt 205 Dec  3 20:58 rbd_slat.log

这个参数在后面画图的时候也要用到。

for i in clat lat slat bw iops;do mv test-fio_$i.1.log rbd_$i.log;done

1.2 画图

前提是还需要安装好gnuplot,然后使用下面的命令即可自动画图:

root@ubuntu:/tmp> fio_generate_plots bw

发现没有,fio_generate_plots接受的唯一参数就是这个日志文件名的prefix。

本例中生成的文件有(这些文件是用来绘图的源文件):

bw-bw.svg 
bw-clat.svg 
bw-iops.svg 
bw-lat.svg 
bw-slat.svg

绘图!

[xxx@xxx fio]$ fio2gnuplot -b -g 1 files Selected with pattern '*_bw.log'
1 files Selected with pattern '*_bw.log'
 |-> rbd_bw.log

Running gnuplot Rendering

Rendering traces are available in the current directory

查看生成图片:

[orcadt@xxxx fio]$ ll *.png
-rw-r--r-- 1 orcadt orcadt 10719 Dec  3 21:23 rbd_bw-2Draw.png
-rw-r--r-- 1 orcadt orcadt 10636 Dec  3 21:23 rbd_bw-2Dsmooth.png
-rw-r--r-- 1 orcadt orcadt 10134 Dec  3 21:23 rbd_bw-2Dtrend.png
-rw-r--r-- 1 orcadt orcadt 13666 Dec  3 21:23 result.average.png
-rw-r--r-- 1 orcadt orcadt 13669 Dec  3 21:23 result.max.png
-rw-r--r-- 1 orcadt orcadt 13442 Dec  3 21:23 result.min.png
-rw-r--r-- 1 orcadt orcadt 13178 Dec  3 21:23 result.stddev.png

直接 fio 测试命令

随机读:

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=200G -numjobs=10 -runtime=1000 -group_reporting -name=mytest

说明:
filename=/dev/sdb1       测试文件名称,通常选择需要测试的盘的data目录。
direct=1                 测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite             测试随机写的I/O
rw=randrw                测试随机写和读的I/O
bs=16k                   单次io的块文件大小为16k
bsrange=512-2048         同上,提定数据块的大小范围
size=5g    本次的测试文件大小为5g,以每次4k的io进行测试。
numjobs=30               本次的测试线程为30.
runtime=1000             测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
ioengine=psync           io引擎使用pync方式
rwmixwrite=30            在混合读写的模式下,写占30%
group_reporting          关于显示结果的,汇总每个进程的信息。
此外
lockmem=1g               只使用1g内存进行测试。
zero_buffers             用0初始化系统buffer。
nrfiles=8                每个进程生成文件的数量。

顺序读:

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

随机写:

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

顺序写:

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

混合随机读写:

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop

 

GFIO 

 

fio是个非常强大的IO性能测试工具,可以毫不夸张的说,如果你把所有的fio参数都搞明白了,基本上就把IO协议栈的问题搞的差不多明白了,原因在于作者Jens Axboe是linux内核IO部分的maintainer. 但是这个工具有个很大的缺点就是没有图形界面,单靠输出的数字很难看出来IO的趋势变化,所以急需一个图形前端.

幸运的是Jens也认识到这个问题,2012年2月15号在google plus上说:

Once complete, this will be a great addition to fio. It can be quite tricky to get a good overview of all the various job controlling options that fio has, presenting them graphically has some advantages over a basic 80-line text cli.

可是Jens是写linux内核代码的,对于图形终端的编程不是很熟悉。 大牛毕竟是大牛,发扬革命不怕苦精神,自己学图形编程,于是在最近的2.1版本给我们带来了这个图形终端。有了这个东西使用起来就方便许多。

我给大家演示下如何编译,运行这个gfio. 在这之前需要给大家说下fio的server/client模式。 fio一旦进入server模式就会在8765 tcp端口上监听,等待客户端来连接。 一旦客户端连接上来,会发上来比如运行job等任务,服务端把运行结果推送到客户端。所以这个图形前端实际上是fio的一个client, 名字叫gfio. 具体参见 README里面的描述。

新版本的支持gfio的fio可以在这里下载 git clone git://git.kernel.dk/fio.git,编译gfio源码的时候, 由于它依赖于gtk库,需要先安装libgtk2.0开发包,演示开始:

sudo apt-get -y install libgtk2.0-dev  (yum install gtk2 gtk2-devel gtk2-devel-docs)
$ git clone git://git.kernel.dk/fio.git
<
cd fio
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【详细齐全】FIO使用方法 及参数解析(文章末尾) 的相关文章

  • 带有量角器端到端测试的 Electron 应用程序

    我目前正在研究一个Electron http electron atom io 应用程序 我现在想将端到端测试与量角器 https angular github io protractor 我已经查看了 Protractor 的教程 现在正
  • 您使用什么来通过其自定义协议来测试(功能/负载/压力)您的网络服务?

    我最近创建了一个回合制游戏服务器 可以接受数十万个并发客户端连接 长话短说 Linux 上的 epoll 通信基于简单 定制 基于线路的协议 该服务器允许客户端连接 寻找游戏比赛中的其他玩家 玩所述游戏 发送动作 聊天消息等 并在游戏结束时
  • 如何在 akka actor 中测试公共方法?

    我有一个 akka 演员 class MyActor extends Actor def recieve def getCount id String Int do a lot of stuff proccess id do more st
  • Java Junit 测试 HTTP POST 请求

    我需要测试以下方法而不改变方法本身 该方法向服务器发出 POST 方法 但我需要制作一个独立于服务器的测试用例 在将其重定向到本地文件之前 我测试了类似的方法 但为此我将协议指定为文件 主机名指定为 localhost 端口指定为 1 我的
  • 如何使用JMeter对网站进行负载测试

    我想在 JMeter 中创建一个脚本来模拟100 位用户在 3 4 分钟内访问我们的网站 我们需要测试我们的应用程序是否可以允许 25 000 个用户 天 即每小时 1 100 个用户 为此我做了这个 Jmeter 测试 这是结果 这是图表
  • Cucumber 是否不需要编写单元测试?

    我对 Ruby ROR 可用的测试框架数量之多感到有点困惑 我最近看了黄瓜轨道广播 http railscasts com episodes search cucumber并发现它们非常有趣 所以我开始玩游戏 然后努力从概念上考虑在哪里进行
  • Junit Mockito 测试一切

    我现在正在寻找更多时间但没有结果 请帮忙 这是我要测试的课程 public class DBSelectSchema extends Database private static final Logger LOG Logger getLo
  • Guice 字段注入不起作用(返回 null)

    我在使用 Guice 时遇到空值问题 接下来我将向您展示一个类似场景的示例 我知道字段注入是一种不好的做法 但我希望它在演示中像这样工作 我有一个名为B 这是我要注入的 class B Inject public B public void
  • 如何在Android上读取/写入外部USB存储设备?

    我目前正在制作一个应用程序 需要能够读取和写入通过 USB OTG 适配器连接的 USB 闪存驱动器 有没有一种简单的方法可以通过标准访问此存储Java io File蜜蜂 该应用程序只能在运行 Android 4 2 2 的已 root
  • 所有junit测试后的清理

    在我的项目中 我必须在所有测试之前进行一些存储库设置 这是使用一些棘手的静态规则来完成的 然而 在所有测试之后我不知道如何进行清理 我不想保留一些神奇的静态数字来引用所有测试方法的数量 我应该一直维护它 最受赞赏的方法是添加一些侦听器 该侦
  • 如何在浏览器中模拟纬度和经度值(用于地理位置测试)?

    我正在开发一个网络应用程序 它要求我在浏览器中模拟纬度和经度值以进行地理位置测试 有人有测试基于地理定位的应用程序的经验吗 提前致谢 伪造地理位置 您想要在 Firefox 中伪造您的位置的原因有很多 一个很好的理由是在没有无线局域网卡的计
  • OutputCapture 进行多次测试

    我正在使用 org springframework boot test OutputCapture 来测试记录某些内容的注释 它对于单个测试非常有效 当单独运行测试时 如果源文件中存在使用输出捕获的多个测试 但是当多个测试一起运行时 只有第
  • 如何从 Play WSClient 的字符串创建 WSResponse 对象

    文档 https www playframework com documentation 2 4 x JavaTestingWebServiceClients Mock the web service建议使用模拟Web服务测试基于WSCli
  • 移动端跨浏览器网络测试

    在构建网站时 我通常使用以下工具浏览器截图 http browsershots org确保我的页面在不同的浏览器中看起来相当不错 然而 我开始收到关于在不同便携式设备上运行的大量移动浏览器的抱怨 我的问题很简单 如何最好地进行移动跨浏览器测
  • 如何在 Laravel 中使用 Storage::facade 检查目录是否存在?

    对应的是什么 if File exists path using Storage 在 Laravel 5 1 中 Anyone 尝试这个 To check if File exists in Laravel 5 1 exists Stora
  • 关于如何在 PHPUnit 中使用 setUp() 和tearDown() 有真实的例子吗?

    Methods setUp and tearDown 在每次测试之前和之后调用 但实际上 有没有任何真实的例子说明我为什么需要这个 检查其他人的测试 我总是看到类似的东西 public function setUp this gt test
  • 在 laravel 5 测试期间如何模拟外部 API?

    我想在 laravel 中测试 HTTP 路由 URL 的操作函数调用辅助函数 该函数调用外部 API 测试时如何模拟外部 API 调用 public function actionFunction helper new HelperCla
  • Hamcrest 泛型地狱 #2:iterable With Size 给出错误“不适用于参数”

    在 hamcrest 中 1 3 RC2 没有 JUnit 依赖项 我使用失败iterableWithSize 我有一个 扩展 Iterator参数化为Content像这样EndResult
  • 如何停止和重新启动 Android 仪器测试中的活动?

    我正在尝试编写一个停止的 Android 活动仪器测试 onPause then onStop 并重新启动当前活动 我试过 activity finish activity getActivity 但这似乎不能正常工作 测试的目的是断言表单
  • Rspec——需要存根在另一个文件中调用的 File.open

    在我的测试中 我正在初始化一个名为的新类Package带有一些参数 在此类的初始化中 我打开一个在远程机器上可用的文件 但不是本地常见的文件 我想知道如何在测试中对该方法进行存根 我正在使用 rspec 和 mocha 我尝试过类似的东西

随机推荐

  • 软件测试课堂作业+期末整理【超实用】

    疫情期间在家结课 所用教材 第一本 辅助自学教材 第二本 MOOC上武剑洁老师的配套教材 虽说MOOC是国家精品课 但个人觉得 内容太少 太理论 了 我们大学老师和MOOC出的题目有点不一样 鼠标下滑到最后可见 点击可直接跳转 纯理论 as
  • Qt键盘事件

    ifndef COMPLETELINEEDIT H define COMPLETELINEEDIT H include
  • Linux下Shell脚本实战之监测磁盘空间

    Linux下Shell脚本实战之监测磁盘空间 一 脚本目的及要求 二 脚本内容 三 运行脚本 一 脚本目的及要求 1 监控 home下每各个用户目录的占用磁盘大小 2 监控 var log下前10名占用磁盘大小 3 输出的磁盘空间报告文件加
  • 基于fpga的卷积神经网络verilog代码仿真源码

    基于fpga的卷积神经网络verilog代码仿真源码 一个up主讲解卷积神经网络verilog代码 直接逐句讲解verilog代码 搭配仿真工具讲解时序问题 以及在verilog代码中设计遇到问题 源码也是在评论下面给出来了 希望对大家有作
  • 阿里云创建专有网络网段192、172和10选择方法

    阿里云专有网络VPC私网网段可选192 168 0 0 16 172 16 0 0 12或10 0 0 0 8 如何选择 阿里云百科来详细说下阿里云专有网络IPv4网段选择方法 阿里云专有网络VPC网段选择 阿里云专有网络VPC网段可以使用
  • 第二十二章、 Model/View便利类树型部件QTreeWidget

    老猿Python博文目录 专栏 使用PyQt开发图形界面Python应用 老猿Python博客地址 一 引言 树部件 Tree Widget 是Qt Designer中 Item Widgets Item Based 部件中提供的一个Mod
  • 网络渗透测试——MAC泛洪攻击

    使用Kali虚拟机对eNSP模拟交换机进行MAC地址泛洪攻击 一 攻击效果 交换机向所有端口转发 泛洪 从而截取数据包 二 攻击原理 攻击者 kali虚拟机 向eNSP模拟的交换机发送大量不同Mac地址的无用的数据包 占满该交换机的MAC地
  • 【css】纯css实现图片发光效果

    html div class box h1 我是图片 h1 div css 初始化 取消页面元素的内外边距 padding 0 margin 0 body 弹性布局 让页面元素垂直 水平居中 display flex justify con
  • 配置Windows10虚拟机并使用VMware tools共享文件

    下载VMware workstation Download VMware Workstation Prohttps www vmware com products workstation pro workstation pro evalua
  • matlab 特征选择算法,特征选择、特征提取matlab算法实现(模式识别)

    提供了模式识别特征选择和特征提取详尽的matlab算法代码实现 6 特征选择 6 1 问题 对 threethreelarge m 数据 采用任意一种特征选择算法 选择2个特征 6 2 思路 采用简单特征选择法 simple feature
  • MySQL基本概念、PyMySQL操作及数据库事务操作

    目录 一 数据库概念及其分类 1 1数据库概念 1 2数据库分类 1 2 1关系型数据库 1 2 2 非关系型数据库 二 SQL Structured Query Lanaguage结构化查询语言 2 1SQL语言分类 2 2 SQL语句常
  • 学习记录(C语言)

    一 初识转义字符 转义字符有哪些 其中 表示打印一个单独的单引号或者双引号 n表示换行 t相当于tab键 ddd ddd表示1 3个八进制数字例如打印 130 八进制的130相当于十进制的88再对照ASCII码表88对应的符号为X 同理 x
  • Python网络爬虫原理及实践

    作者 京东物流 田禹 1 网络爬虫 网络爬虫 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 网络爬虫相关技术和框架繁多 针对场景的不同可以选择不同的网络爬虫技术 2 Scrapy框架 Python 2 1 Scrapy架构 2
  • windows 安装 yarn

    windows 安装 yarn 下载node js http nodejs cn download 通过 Chocolatey 安装 以管理员身份打开 cmd exe SystemRoot System32 WindowsPowerShel
  • 时间数组传到数据库

    1 数据库 有数据 想精确到时分秒 就写datatime 不想要就写data 2 vue页面 写一个数组 可以放 开始时间 结束时间 3 把dataRange数组的索引 0 赋给workTimeBegin 1 赋给workTimeEnd 这
  • 给exe添加管理员权限的几种方法&修改exe兼容性属性的方法

    有些程序我们必须以管理员权限才能运行 但是我们又不想 右键 gt 以管理员权限运行 那么我们就只有给exe增加管理员权限了 1 如果是vs编译的exe可以通过配置属性 项目 XXX 属性 配置属性 链接器 清单文件 然后重新编译 可以根据需
  • delphi .dfm文件汉字不显示_搞定Delphi模块化之Package

    Package的优点 应用程序可以被高度的模块化 而且可以逐渐交付完成的功能给客户 维护方便 可以只更新单一的模块功能 提升程序的载入速度 Package的缺点 有些情形下使用Package只能间接的方式取得资料 变量 类 Package
  • springboot项目上传文件过大导致java heap space 的问题解决方案(windows和linux)

    windows 点击项目 run as debug as Run Configuration Debug Configuration java application Arguments Xmx1024m Xms1024m XX NewRa
  • 万物云原生下的服务进化

    导读 在万物云原生下的环境下 Java的市场份额也因耗资源 启动慢等缺点 导致在云原生环境里被放大而降低 通过这篇文章 读者可以更好地了解如何在云原生环境下通过升级相关版本和使用GraalVM打出原生镜像到方式 优化Java应用的性能和资源
  • 【详细齐全】FIO使用方法 及参数解析(文章末尾)

    linux 使用FIO测试磁盘iops 方法详解 FIO是测试IOPS的非常好的工具 用来对硬件进行压力测试和验证 支持13种不同的I O引擎 包括 sync mmap libaio posixaio SG v3 splice null n