磁盘IO压测工具之fio命令(磁盘性能测试)

0    34    1

Tags:

👉 本文共约4679个字,系统预计阅读时间或需18分钟。

简介

目前主流的第三方IO测试工具有fio、iometer 和 Orion,这三种工具各有千秋,在linux 下也可以使用dd 进行简单的磁盘(文件系统)测试。fio在Linux系统下使用比较方便,iometer在window系统下使用比较方便,Orion是oracle的IO测试软件,可在没有安装oracle数据库的情况下模拟oracle数据库场景的读写。

FIO是一款开源的 I/O 压力测试工具,主要是用来测试磁盘的IO性能。它可以支持多种不同的I/O引擎。

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

fio文档:https://fio.readthedocs.io/en/latest/index.html

FIO 是一个 I/O 工具,旨在用于基准测试和压力/硬件验证。它支持 19 种不同类型的 I/O 引擎(sync、mmap、libaio、posixaio、SG v3、splice、null、network、syslet、guasi、solarisaio 等)、I/O 优先级(适用于较新的 Linux 内核) 、评估 I/O、分叉或线程作业等等。它可以在块设备和文件上工作。fio 接受简单易懂的文本格式的职位描述。包括几个示例作业文件。

fio 显示各种 I/O 性能信息,包括完整的 IO 延迟和百分位数。Fio 在许多地方被广泛使用,用于基准测试、QA 和验证目的。它支持 Linux、FreeBSD、NetBSD、OpenBSD、OS X、OpenSolaris、AIX、HP-UX、Android 和 Windows。

Multithreaded IO generation tool , FIO 是一个多线程io生成工具,可以生成多种IO模式,用来测试磁盘设备的性能(也包含文件系统:如针对网络文件系统 NFS 的IO测试)。

安装

yum安装

下载:https://pkgs.org/download/fio

编译安装

下载:https://git.kernel.dk/cgit/fio/refs/

磁盘IO压测工具之fio命令(磁盘性能测试)

注意如果编译的时候出现gcc 版本过低,可参考问题升级gcc 后在编译。 或者安装fio-3.20的版本,如下:

使用

fio支持的读写模式包括顺序读,随机读,顺序写,随机写,混合随机读写,混合顺序读写,真实的磁盘读取往往是随机IO。常用参数包括引擎,队列深度,线程,block,是否裸设备,读写方式,大小/耗时,跳过缓存等。

以下是对这些参数的简单介绍:

在 fio 中,iodepth 是指每个线程在执行 IO 操作时,可以同时发起的请求数量。更具体地说,iodepth 参数定义了一个线程可以保持处于挂起状态(即等待 I/O 完成)的 I/O 请求数量。

例如,如果 iodepth=4,则每个线程可以同时保持 4 个 I/O 请求处于挂起状态,而不必等待先前的 I/O 操作完成。这样可以提高系统吞吐量和并发性,因为 I/O 操作可以同时在多个请求之间分配。

值得注意的是,iodepth 参数的最优值取决于应用程序的特定工作负载和硬件环境。一般来说,较大的 iodepth 值可以在具有更高 IOPS(每秒 I/O 操作数)和低延迟的高速硬件上实现更好的性能,而较小的 iodepth 值适用于低速硬件和较高的延迟要求。

执行多次测试的时候 ,由于命令行参数过多影响,不太直观,可以将参数写到配置文件中,把全局变量和测试变化的参数写在不同的块里,最后运行即可,比如我们要测试多个rw场景 write,readwrite ,可以写配置文件 fio_yace.cfg

注意,如果 [4k-write] 和 [4k-randwrite] 两个测试需要串行执行,需要在各自的块下面加上 stonewall

最后命令行运行

fio fio_yace.cfg

即执行测试。测试结果的数据较多,主要观察吞吐量和IOPS两个。当然延迟也需要进行观察。

示例

这里举几个例子供大家参考:

顺序读:

随机写:

顺序写:

混合随机读写:

测试场景:

测试场景

顺序读

顺序读注意,bs 单次io的块文件大小,我们建议可以设置为数据库的块或页大小,在真实的环境中或以调大size

我们需要得点关注的是IOPS :3317 以及BW IO带宽是:13.0MiB/s

read: IOPS=3317, BW=13.0MiB/s (13.6MB/s)(2332MiB/180001msec)

随机写

我们可以看到IOPS是1108 ,BW带宽只有 4434KiB/s

write: IOPS=1108, BW=4434KiB/s (4540kB/s)(781MiB/180331msec); 0 zone resets

随机读写混合

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

从结果中我们可以看到70%随机读的IOPS 是1802 ,30%随机写是774 ,而带宽分别是7209KiB/s,3096KiB/s。

read: IOPS=1802, BW=7209KiB/s (7382kB/s)(1268MiB/180113msec)

write: IOPS=774, BW=3096KiB/s (3171kB/s)(545MiB/180113msec); 0 zone resets

压测结果解读

报告参数解释 ,通常我们关注 io,iops,clat

bw 表示测试中达到的平均带宽

clat 表示完成延迟(completion latency) - 完成延迟是提交请求和请求完成之间的时间。统计值分别是最小、最大、平均和标准方差。

CPU 行数据显示IO负载对CPU的影响

IO depths 段落对于测试多请求的IO负载非常有意义 - 由于上述测试所有测试是单IO请求,所以IO depths始终100%是1

三行 lat 显示了每个IO请求完成的概况,例如,上述延迟在2ms的占68.84%,1ms(1000us)占21.36%

READ 行显示了读取速率

详细的解释如下:

关于gcc 版本过低问题

解决:

图形界面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开发包,演示开始:

这样fio就编译好了,同时进入server模式。 在另外一个终端运行 gfio 就可以看到图形界面,打开examples/aio-read.fio 这个脚本把玩下(注意这个脚本里面文件的路径是/data1, 最好改成/tmp之类的),如下图:

磁盘IO压测工具之fio命令(磁盘性能测试)

fio数据生成曲线图工具之fio2gnuplot

1、背景

我们常常在测试fio的时候,一般只会看到最终测试结果。如下所示

这样只能看到一个结果,而中间过程的IO情况则看不到。所以这里介绍一个方法,可以将fio中间过程的数据抓出来绘制成图的方法。

2、安装gnuplot

最终回安装两个包:

3、对一个文件执行fio操作

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

运行完成后可以生成如下文件:

这个文件就记录了fio运行期间的带宽数据。

这里表示每log_avg_msec=500ms记录一次。这个参数也可以调整。

绘图

将这个test-fio_bw.1.log修改成test-fio_bw.log,因为fio2gnuplot会默认在当前目录下寻找*_bw.log文件。

这里b的意思就是绘制带宽的图,-i则表示绘制iops的图,但是貌似现在gnuplot不支持iops和latency的绘制。不要在乎这些细节。执行完成后会生成如下几个文件:

打开文件

这里写图片描述

fio数据生成曲线图工具之fio_generate_plots bw

也可以用fio_generate_plots bw的方式来生成图像

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

1.1设置fio输出详细日志

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

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

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

画图

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

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

本例中生成的图片文件有:

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

总结

参考

工具| IO测试fio详解

https://www.cnblogs.com/raykuan/p/6914748.html

https://huataihuang.gitbooks.io/cloud-atlas/content/performance/utilities/fio.html
https://blog.51cto.com/u_12993908/5275922

http://blog.yufeng.info/archives/2721

https://blog.csdn.net/weixin_37871174/article/details/77717633

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部