fio工具介绍

用于测试存储设备IO性能。

当存储设备中存在用户数据时,严谨使用fio进行写操作!!!

参数介绍

rw:指定测试的读写方式。read/write/randread/randwrite/randrw,分别代表顺序读/顺序写/随机读/随机写/随机读写混合。

rwmixwrite:指定读写混合时,设定写的比例,单位为%。

bs:指定IO的粒度。一般测试顺序读写使用1024k,随机读写使用8k。

runtime:指定测试的时长,单位为秒。

size:指定测试的设备大小。

ioengine:指定IO引擎,一般使用Linux默认的异步IO引擎libaio。

direct:固定设为1,绕过一些操作系统级的cache等机制。

iodepth:指定队列深度,固定设为1。

numjobs:指定线程数。

group_reporting:汇总所有线程的测试结果,便于结果分析。

测试举例

如下,是一个fio的测试配置模板,使用文件的形式可以同时对多个设备进行压测,统计总体性能值。

用此命令将要压测的盘筛选出来

qdatamgr qlink show -c | grep Disk

比如编辑一个文件fio-test,测试时执行命令:fio fio-test即可。

k/l

主要注意两个参数:

bs:块大小

rw:读写模式

numjobs:线程数,相当于并发数

模板如下:

[global]

numjobs=32

rw=randread

bs=8k

runtime=100

ioengine=libaio

direct=1

iodepth=1

name=jicki

group_reporting

[file1]

filename=/dev/qdata/mpath-1s01.3261.01.fioa1

[file2]

filename=/dev/.....

fio测试注意事项

1.测试随机读写时,numjobs从8开始,12..16..20..逐渐往上加,直到IOPS不再上升,此时的结果就是保证IOPS最高时延迟最小的测试值。

2.测试顺序读写时,numjobs从1开始,2..3..4..往上加,基本思路与以上描述一致。

3.测试随机读写时要关注IOPS,不要关注IO吞吐;测试顺序读写时要关注IO吞吐,不要关注IOPS。

4.随机读写测试中,IO延迟不要超过500us。

测试结果查看

随机读IOPS测试:

三处标红的地方分别是瞬时IOPS、平均IOPS、平均IO延迟了。

顺序读IO吞吐测试:

三处标红的地方分别是瞬时IO吞吐、平均IO吞吐、平均IO延迟。

四路服务器测试的小tips

1:如果4路服务器上做fio测试绑定cpu核心以后,数值还是没有提高,可以参考把jobs数提高到很高的位置,具体打个比方4路服务器总共有129个核心数,那可以在数值不提高的情况下把Jobs数提高到90,然后跑一次看看,数值有否提升。

2:如果fio测试的磁盘比较少,而cpu的核心数又非常多,那绑定核心推荐一块磁盘绑定第一个cpu的1-12的核心,第2快磁盘绑定第2个cpu的33-45核心,以此类推,如果磁盘比较多的话,那就按照正常绑定核心数就行。

不绑核时单个计算节点压测,随机读IOPS为40万

mpstat监控结果如下:

mpstat -P ALL 1

Linux 2.6.32-573.el6.x86_64 (yxqrac1) 11/11/2016 x86_64 (192 CPU)

04:36:48 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle

04:36:49 AM all 0.18 0.00 1.15 10.44 0.00 1.41 0.00 0.00 86.81

04:36:49 AM 0 0.00 0.00 0.00 7.22 0.00 0.00 0.00 0.00 92.78

04:36:49 AM 1 0.00 0.00 1.11 61.11 0.00 35.56 0.00 0.00 2.22

04:36:49 AM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 4 1.14 0.00 1.14 63.64 0.00 31.82 0.00 0.00 2.27

04:36:49 AM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 12 2.17 0.00 3.26 76.09 0.00 18.48 0.00 0.00 0.00

04:36:49 AM 13 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 99.00

04:36:49 AM 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 18 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 19 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 22 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 24 0.00 0.00 31.00 0.00 0.00 69.00 0.00 0.00 0.00

04:36:49 AM 25 4.04 0.00 10.10 85.86 0.00 0.00 0.00 0.00 0.00

04:36:49 AM 26 4.00 0.00 11.00 85.00 0.00 0.00 0.00 0.00 0.00

04:36:49 AM 27 1.01 0.00 4.04 94.95 0.00 0.00 0.00 0.00 0.00

04:36:49 AM 28 0.00 0.00 0.00 100.00 0.00 0.00 0.00 0.00 0.00

04:36:49 AM 29 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 30 1.02 0.00 3.06 95.92 0.00 0.00 0.00 0.00 0.00

04:36:49 AM 31 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

04:36:49 AM 32 1.04 0.00 1.04 97.92 0.00 0.00 0.00 0.00 0.00

使用如下脚本绑核:

[global]
numjobs=32
rw=randread
bs=8k
runtime=100
ioengine=libaio
direct=1
iodepth=1
name=jicki
group_reporting
[file1]
filename=/dev/qdata/mpath-1s01.3261.01.fioa1
cpus_allowed=0-8
[file2]
filename=/dev/qdata/mpath-1s01.3261.01.fioa2
cpus_allowed=9-16
[file3]
filename=/dev/qdata/mpath-1s01.3262.01.fiob1
cpus_allowed=17-24
[file4]
filename=/dev/qdata/mpath-1s01.3262.01.fiob2
cpus_allowed=25-32
[file5]
filename=/dev/qdata/mpath-1s01.3263.01.fioc1
cpus_allowed=33-40
[file6]
filename=/dev/qdata/mpath-1s01.3263.01.fioc2
cpus_allowed=41-48
[file7]
filename=/dev/qdata/mpath-1s01.3264.01.fiod1
cpus_allowed=49-56
[file8]
filename=/dev/qdata/mpath-1s01.3264.01.fiod2
cpus_allowed=57-64
[file9]
filename=/dev/qdata/mpath-1s01.3265.01.fioe1
cpus_allowed=65-72
[file10]
filename=/dev/qdata/mpath-1s01.3265.01.fioe2
cpus_allowed=73-80
[file1]
filename=/dev/qdata/mpath-1s02.3261.01.fioa1
cpus_allowed=81-88
[file2]
filename=/dev/qdata/mpath-1s02.3261.01.fioa2
cpus_allowed=89-96
[file3]
filename=/dev/qdata/mpath-1s02.3262.01.fiob1
cpus_allowed=97-104
[file4]
filename=/dev/qdata/mpath-1s02.3262.01.fiob2
cpus_allowed=105-112
[file5]
filename=/dev/qdata/mpath-1s02.3263.01.fioc1
cpus_allowed=113-120
[file6]
filename=/dev/qdata/mpath-1s02.3263.01.fioc2
cpus_allowed=121-128
[file7]
filename=/dev/qdata/mpath-1s02.3264.01.fiod1
cpus_allowed=129-136
[file8]
filename=/dev/qdata/mpath-1s02.3264.01.fiod2
cpus_allowed=137-144
[file9]
filename=/dev/qdata/mpath-1s02.3265.01.fioe1
cpus_allowed=145-152
[file10]
filename=/dev/qdata/mpath-1s02.3265.01.fioe2
cpus_allowed=153-160
[file1]
filename=/dev/qdata/mpath-1s03.3261.01.fioa1
cpus_allowed=161-168
[file2]
filename=/dev/qdata/mpath-1s03.3261.01.fioa2
cpus_allowed=169-176
[file3]
filename=/dev/qdata/mpath-1s03.3262.01.fiob1
cpus_allowed=177-184
[file4]
filename=/dev/qdata/mpath-1s03.3262.01.fiob2
cpus_allowed=185-191

fio在测试时,将针对不同的盘发起的测试线程固定在特定的核上,彼此分离,使得每个核上都分配到测试线程,以此最大化CPU的利用。

绑核之后其他参数不变,单个计算节点随机读可达85万IOPS

mpstat监测结果:

10:09:22 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
10:35:14 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
10:35:15 AM all 21.96 0.00 69.02 0.07 0.00 1.59 0.00 0.00 7.37
10:35:15 AM 0 28.28 0.00 70.71 0.00 0.00 0.00 0.00 0.00 1.01
10:35:15 AM 1 27.00 0.00 68.00 0.00 0.00 3.00 0.00 0.00 2.00
10:35:15 AM 2 23.23 0.00 36.36 0.00 0.00 40.40 0.00 0.00 0.00
10:35:15 AM 3 25.00 0.00 73.00 0.00 0.00 0.00 0.00 0.00 2.00
10:35:15 AM 4 25.00 0.00 68.00 0.00 0.00 6.00 0.00 0.00 1.00
10:35:15 AM 5 26.73 0.00 61.39 0.00 0.00 10.89 0.00 0.00 0.99
10:35:15 AM 6 25.00 0.00 64.00 0.00 0.00 10.00 0.00 0.00 1.00
10:35:15 AM 7 23.76 0.00 65.35 0.00 0.00 9.90 0.00 0.00 0.99
10:35:15 AM 8 24.75 0.00 64.36 0.00 0.00 10.89 0.00 0.00 0.00
10:35:15 AM 9 25.25 0.00 65.66 0.00 0.00 9.09 0.00 0.00 0.00
10:35:15 AM 10 18.00 0.00 28.00 0.00 0.00 54.00 0.00 0.00 0.00
10:35:15 AM 11 24.24 0.00 64.65 0.00 0.00 10.10 0.00 0.00 1.01
10:35:15 AM 12 29.00 0.00 59.00 0.00 0.00 12.00 0.00 0.00 0.00
10:35:15 AM 13 24.00 0.00 67.00 0.00 0.00 9.00 0.00 0.00 0.00
10:35:15 AM 14 29.29 0.00 61.62 0.00 0.00 9.09 0.00 0.00 0.00
10:35:15 AM 15 27.00 0.00 64.00 0.00 0.00 9.00 0.00 0.00 0.00
10:35:15 AM 16 18.63 0.00 29.41 0.00 0.00 51.96 0.00 0.00 0.00
10:35:15 AM 17 26.26 0.00 64.65 0.00 0.00 9.09 0.00 0.00 0.00
···
···
···

*基本上,CPU的所有核都得到了有效利用

Tips:

顺序读和顺序写的bw如果数值相差比较大,可以先去官网查询该盘的性能参数,例如:

intel P4600 nvme盘官网查询参数如下:顺序读和顺序写相差2倍多。

fio压测的更多相关文章

  1. fio硬盘测速windows+linux

    一.FIO工具简介 Fio工具的介绍网上有很多,都是可以通用的,这里就不做太多个人描述了,直接借鉴一下 fio是一种I / O工具,用于基准测试和压力/硬件验证.它支持19种不同类型的I / O引擎( ...

  2. 018 磁盘 IO 性能监控/压测工具(sar、iotop、fio、iostat)

    1 sar 命令查看当前磁盘 IO 读写 sar(System Activity Reporter 系统活动情况报告)是 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告 ...

  3. mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...

  4. Http压测工具wrk使用指南

    用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...

  5. 使用mysqlslap对mysql进行压测,观察Azure虚拟机cpu使用率

    一直想做这个测试,原因很简单,很多人一直比较怀疑Azure的虚拟机性能,说相同的配置凭啥比阿里的虚拟机贵那么多,其实,我自己以前也怀疑过,但是接触Azure的几个月,确实发现Azure的虚拟机性能真的 ...

  6. MySQL mysqlslap压测

    200 ? "200px" : this.width)!important;} --> 介绍 mysqlslap是mysql自带的一个性能压测工具:mysqlslap用于和其 ...

  7. 真刀真枪压测:基于TCPCopy的仿真压测方案

    郑昀 基于刘勤红和石雍志的实践报告 创建于2015/8/13 最后更新于2015/8/19 关键词:压测.TCPCopy.仿真测试.实时拷贝流量 本文档适用人员:技术人员 提纲: 为什么要做仿真测试 ...

  8. Netty NIO 框架性能压测-短链接-对比Tomcat

    压测方案 准备多个文件大小分别为 1k 10k 100k 300k 使用ab分别按 [50,2000](按50逐渐叠加)压测服务,每次请求10W次 硬件信息:CPU:Intel(R) Xeon(R) ...

  9. 图解jmeter压测http接口

    此次压力测试是以一个http json的后台接口为例. 1. 创建相应的部件 2. 设置相应的参数 线程组主要用于设置一共要测试的线程数量(上图1000),每秒起的线程数(上图10),几秒内启动完单循 ...

随机推荐

  1. Python - 基础语法 - 第一天

    编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 标识符 第一个字符必须是字母表中字母或下划线 _ . 标识符的其他的部分由字母.数字和下划线 ...

  2. 北理工机器人队RM视觉组学习参考汇总(持续更新中)

    欢迎大家有意加入北理工机器人队参与到视觉组的工作中.在大家能够正式作为队员参与到视觉组的准备工作之前,北理机器人队需要对各位进行培训.这篇文章主要面向有志于参加机器人队视觉组的同学.同时,欢迎所有对相 ...

  3. python--线程和进程的初识

    一.进程与线程之间的关系 1.线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除. 2.线程可与属于同一进程的其它线程共享 ...

  4. 【开发笔记】- grails框架中在使用domain的save方法保存时保存不成功

    1.如果报错,自行根据异常查找错误,这里不说明 2.如果为报错,我遇到的就是domain中的字段属性与数据库中为同步 (1)你的domain是新的,在增加新的字段属性时未使用update更新数据库,造 ...

  5. unity 2d碰撞/ui组件碰撞

    首先,ugui的碰撞是可以用Collision2D跟Rigidbody2D实现的(就跟3D碰撞一样).之前试过不可以主要问题正在于Collision2D以及Rigidbody的设置上. 碰撞双方都添加 ...

  6. Ueditor文字和echarts图片 生成 word 前端解决方案

    编程就像搭积木,少了任何一个就拼接不起来,所有积木都找到就只剩下调试. 一.echarts  获取图片方法getDataURL  详细配置:https://www.echartsjs.com/zh/a ...

  7. IoU与非极大值抑制(NMS)的理解与实现

    1. IoU(区域交并比) 计算IoU的公式如下图,可以看到IoU是一个比值,即交并比. 在分子中,我们计算预测框和ground-truth之间的重叠区域: 分母是并集区域,或者更简单地说,是预测框和 ...

  8. Spring中@Autowired、@Resource和@Inject注解的使用和区别

    在使用Spring进行项目开发的时候,会大量使用到自动装配,那自动装配是什么呢?简单来说:Spring 利用依赖注入(DI)功能,完成SpringIOC容器中各个组件之间的依赖关系赋值管理. 下面介绍 ...

  9. 第06节-开源蓝牙协议BTStack框架分析

    本篇博客根据韦东山的视频,整理所得. 本篇博客讲解BTStack的框架,首先来看一下硬件的结构: 蓝牙模块接在电脑上,或是接在开发板上.不论接在哪,我们都需要编写程序来控制这个蓝牙模块. . 我们需要 ...

  10. socket小程序写一个客户端,实现给服务端发送hello World字符串,将客户端发送的数据变成大写后返回

    写一个客户端,实现给服务端发送hello World字符串,将客户端发送的数据变成大写后返回 本机id是192.168.xx.xy 服务端 import socket soc = socket.soc ...