如何使用fio模拟线上环境
线上表现
这里我想通过fio来模拟线上的IO场景,那么如何模拟呢?
首先使用iostat看线上某个盘的 使用情况,这里我们需要关注的是 avgrq-sz, avgrq-qz.
#iostat -dx 1 1000 /dev/sdk
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdk 0.22 16.32 71.08 49.98 23544.95 19763.38 715.45 0.65 5.34 7.64 2.08 5.21 63.04
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdk 0.00 0.00 81.00 78.00 26968.00 39936.00 841.56 143.32 683.93 38.35 1354.35 6.29 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdk 0.00 0.00 115.00 10.00 36940.00 5120.00 672.96 156.64 167.23 30.00 1745.40 7.99 99.90
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdk 0.00 44.00 107.00 28.00 37924.00 13496.00 761.78 149.48 584.97 33.19 2693.57 7.41 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdk 2.00 0.00 153.00 5.00 40896.00 2560.00 550.08 158.39 160.71 29.68 4170.20 6.33 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdk 0.00 0.00 89.00 88.00 28864.00 44424.00 828.11 143.19 2087.81 22.73 4176.35 5.65 100.00
- avgrq-sz: 和fio的-bs=参数关联, 单位是扇区数,一个扇区的大小是512KB,因此, 841.56 代表大小是: 841.56/2 = 420.78KB.
- avgra-gz: 和fio的iodepth关联,大概是150,因此,我们需要调整 fio的 iodepth的值
线下模拟
那么如何使用fio去模拟这个大小呢?
fio中最重要的一个参数是: -bs=xxxx, 我们经常看到这里是4k,16k,128k等等的测试数据,这里其实就是request 从elevator中出来,dispatch到driver的时候的大小。
线上机器 大小是 841.56 sector (420.78KB.)的时候, 意味着,这里, -bs=420k 比较合适。
需要注意的:
- 如果测试/dev/sdc, so, mount /dev/sdc /mnt/sdc , fio目标是/mnt/sdc/test, 而不是 /dev/sdc
- 线上差不多4个线程, numjobs = 4
- 线上读写比例3:1, So, -rwmixread=70
#fio -filename=/mnt/sdc/test -direct=1 -iodepth=4 -thread -rw=randrw -rwmixread=70 -ioengine=libaio -bs=420k -size=2G -numjobs=4 -name="EBS 4K randwrite test" -group_reporting -runtime=5000
avgqu-sz 和fio的iodepth 的关系
iodepth = 1, iostat avgqu-sz =
#fio -filename=/apxxxxxxx/disk3/test -direct=1 -iodepth=1 -thread -rw=randrw -rwmixread=70 -rwmixwrite=30 -ioengine=libaio -bs=4k -size=8G -numjobs=4 -name="EBS 4K randwrite test" -group_reporting -runtime=50000
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 226.00 125.00 904.00 500.00 8.00 12.00 11.36 17.29 0.62 2.85 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 1.00 23.00 6.00 92.00 28.00 8.28 12.91 16.41 20.61 0.33 34.48 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 186.00 99.00 744.00 396.00 8.00 12.21 30.16 39.33 12.94 3.51 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 207.00 108.00 828.00 432.00 8.00 12.00 12.87 19.07 1.00 3.17 100.00
iodepth = 100, iostat avgqu-sz =
#fio -filename=/axxxxxx/disk3/test -direct=1 -iodepth=100 -thread -rw=randrw -rwmixread=70 -rwmixwrite=30 -ioengine=libaio -bs=4k -size=8G -numjobs=4 -name="EBS 4K randwrite test" -group_reporting -runtime=50000
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 180.00 68.00 720.00 272.00 8.00 111.30 230.22 231.29 227.40 2.85 70.80
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 241.00 103.00 964.00 412.00 8.00 159.43 392.41 395.76 384.58 2.91 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 254.00 89.00 1016.00 356.00 8.00 158.65 465.12 436.02 548.17 2.92 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 261.00 114.00 1044.00 456.00 8.00 156.64 395.21 440.19 292.23 2.67 100.00
开始模拟: cfq对SYNC, ASYNC的影响
Case1: fio 使用-direct=1
这里read write都是SYNC, 由于cfq 的影响,保SYNC, 因为线上的场景是 SYNC 的read, 和ASYNC的 writeback,所以这样模拟是不对的
command:
#fio -filename=/apsarapangu/disk3/test -direct=1 -iodepth=130 -thread -rw=randrw -rwmixread=70 -rwmixwrite=30 -ioengine=libaio -bs=420k -size=8G -numjobs=4 -name="EBS 4K randwrite test" -group_reporting -runtime=50000
performance:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 106.00 56.00 43084.00 23868.00 826.57 297.76 609.85 539.71 742.61 6.17 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 100.00 57.00 40740.00 22752.00 808.82 307.53 1015.72 893.46 1230.21 6.37 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 95.00 50.00 37556.00 20160.00 796.08 278.35 1181.94 1041.71 1448.40 6.90 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 1.00 59.00 74.00 23940.00 28568.00 789.59 223.16 2312.37 1595.39 2884.01 7.52 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 79.00 32.00 32340.00 12956.00 816.14 299.97 1007.95 744.37 1658.66 9.01 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 124.00 41.00 50616.00 17656.00 827.54 303.84 1060.12 906.26 1525.46 6.06 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 106.00 47.00 43368.00 18532.00 809.15 290.17 1676.39 1099.78 2976.83 6.54 100.00
Analyze: Not I want!
Case2: fio 不使用-direct=1
这里read write都是SYNC, 由于cfq 的影响,保SYNC, 因为线上的场景是 SYNC 的read, 和ASYNC的 writeback,这里就和线上比较相似。
command:
#fio -filename=/apsarapangu/disk3/test -iodepth=130 -thread -rw=randrw -rwmixread=70 -rwmixwrite=30 -ioengine=libaio -bs=420k -size=8G -numjobs=4 -name="EBS 4K randwrite test" -group_reporting -runtime=50000
when cfq:
#echo cfq > /sys/block/sdc/queue/scheduler
Performance:
- when read and writeback reproduce at the same time:
- cfq have a good performance better than noop at this scene!
- Cause cfq and split SYNC and ASYNC, SYNC have a better priority!
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 353.00 8.00 41768.00 3504.00 250.81 148.39 91.06 40.39 2326.88 2.77 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 374.00 4.00 45348.00 1864.00 249.80 145.76 64.60 30.51 3251.75 2.65 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 2.00 201.00 32.00 19400.00 12756.00 276.02 175.74 581.51 100.38 3603.59 4.29 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 384.00 1.00 46524.00 420.00 243.86 171.37 48.15 34.22 5396.00 2.60 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 346.00 0.00 50388.00 0.00 291.26 167.22 29.55 29.55 0.00 2.89 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 417.00 0.00 46424.00 0.00 222.66 168.39 26.64 26.64 0.00 2.40 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 365.00 1.00 47996.00 420.00 264.57 166.98 50.49 30.11 7492.00 2.73 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 9.00 271.00 101.00 30148.00 41796.00 386.80 161.59 2375.33 30.86 8665.95 2.69 100.00
when noop:
#echo noop > /sys/block/sdc/queue/scheduler
Performance:
- When read and writeback reproduce at the same time
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 3.00 69.00 248.00 1864.00 100800.00 647.72 178.71 580.56 537.20 592.62 3.15 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 2.00 63.00 246.00 1568.00 100412.00 660.06 173.11 583.21 523.25 598.57 3.24 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.00 33.00 90.00 912.00 36544.00 609.04 181.04 1077.03 1079.82 1076.01 8.13 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 2.00 59.00 242.00 1436.00 100800.00 679.31 183.44 732.01 565.46 772.62 3.32 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 1.00 66.00 250.00 2364.00 102060.00 660.91 176.00 567.93 513.26 582.36 3.16 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 2.00 71.00 251.00 1700.00 104160.00 657.52 177.67 569.05 513.06 584.88 3.11 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 6.00 44.00 233.00 1764.00 96180.00 707.18 161.17 604.32 542.25 616.04 3.61 100.00
如何使用fio模拟线上环境的更多相关文章
- [Nginx笔记]关于线上环境CLOSE_WAIT和TIME_WAIT过高
运维的同学和Team里面的一个同学分别遇到过Nginx在线上环境使用中会遇到TIME_WAIT过高或者CLOSE_WAIT过高的状态 先从原因分析一下为什么,问题就迎刃而解了. 首先是TIME_WAI ...
- (转) 线上环境部署MongoDB的官方建议
本文主要内容来自MongoDB官方文档http://docs.mongodb.org/manual/administration/production-notes/.并结合了实际工作情况进行分享. 1 ...
- 使用Fabric一键批量部署上线/线上环境监控
本文讲述如何使用fabric进行批量部署上线的功能 这个功能对于小应用,可以避免开发部署上线的平台,或者使用linux expect开发不优雅的代码. 前提条件: 1.运行fabric脚本的机器和其他 ...
- BUG在线上环境中出现的原因总结
1.线上环境数据的复杂度以及数据量是测试环境不能比拟的. 2.业务操作的不可控性,用户错误的使用习惯. 3.实际场景的复杂性. 上线之后,测试人员需要做好以下二件事: 第一,灰度测试 项目上线之后 ...
- CAS (15) — CAS 线上环境 Ehcache Replication 的非稳定重现错误 java.util.ConcurrentModificationException
CAS (15) - CAS 线上环境 Ehcache Replication 的非稳定重现错误 摘要 线上环境在 EhCache Replication 过程中出现 java.util.Concur ...
- 【微信小程序】---线上环境搭建
一.前言 通常我们在本地电脑上开发微信小程序,调用和访问小程序会有很多问题.特别是在配有自己后端的情况下,我们通过真机访问我们的小程序会出现不可访问的问题 二.线上环境搭建 在这里我们主要以腾讯云给大 ...
- robot framework 测试/预发/线上环境快捷切换
通常情况下布署的三套环境:测试.预发及线上环境.调试或者辅助验证测试时,切环境改变量甚是麻烦.这些变量包括但不限于:一些url信息,数据库信息,预置用户信息等. 切换环境方法一:使用变量文件,通过判断 ...
- Openssl的编译安装以及Vs2012上环境搭建教程
Openssl的编译安装以及Vs2012上环境搭建教程 一.Openssl的编译安装 一.准备工作 1.Openssl下载地址:https://www.openssl.org/source/ 2.Ac ...
- Appium+python自动化16-appium1.6在mac上环境搭建启动ios模拟器上Safari浏览器
前言 在mac上搭建appium踩了不少坑,先是版本低了,启动后无限重启模拟器.后来全部升级最新版本,就稳稳的了. 环境准备: 1.OS版本号10.12 2.xcode版本号8.3.2 3.appiu ...
随机推荐
- JavaScript基础 -- 定时器
js 定时器有以下两个方法: setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式.方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭. set ...
- flask装饰器route实现路由功能理解
利用装饰器的方式实现了路由函数,这是一个十分简单清晰的结构,而这个功能的实现,有着很大的学习意义 @appweb.route('index',methods=['GET','POST'] def st ...
- Python Matplotlib模块--pyplot
#-*- coding: utf- -*- ''' numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=No ...
- sql语句如何查询当天,一周,一月的数据的语句
sql查询当天,一周,一个月数据的语句 --查询当天: select * from info where DateDiff(dd,datetime,getdate())=0 --查询24小时内的: ...
- HTML和JSP的不同及优缺点
HTML(Hypertext Markup Language)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性语言呢?因为,只要你有一个浏览器那么它就可以正常显示出来 ...
- tp5增加验证的自定义规则
- Java多线程(九) synchronized 锁对象的改变
public class MyService { private String lock = "123"; public void testMethod() { synchroni ...
- 最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
题目传送门 /* KM:裸题第一道,好像就是hungary的升级版,不好理解,写点注释 KM算法用来解决最大权匹配问题: 在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接Xi,Yj有权w(i ...
- 《编写可维护的Javascript》学习总结
第一部分 一.基本规范 1.缩进:一般以四个空格为一个缩进. 2.语句结尾:最好加上分号,因为虽然“自动分号插入(ASI)”机制在没有分号的位置会插入分号,但是ASI规则复杂而且会有特殊情况发生 // ...
- Spring.Net学习笔记(3)-创建对象
一.开发环境 编译器:VS2013 .Net版本:.net framework4.5 二.涉及程序集 Spring.Core.dll:1.3 Common.Logging 三.开发过程 1.项目结构 ...