线上表现

这里我想通过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
  1. avgrq-sz: 和fio的-bs=参数关联, 单位是扇区数,一个扇区的大小是512KB,因此, 841.56 代表大小是: 841.56/2 = 420.78KB.
  2. 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 比较合适。

需要注意的:

  1. 如果测试/dev/sdc, so, mount /dev/sdc /mnt/sdc , fio目标是/mnt/sdc/test, 而不是 /dev/sdc
  2. 线上差不多4个线程, numjobs = 4
  3. 线上读写比例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模拟线上环境的更多相关文章

  1. [Nginx笔记]关于线上环境CLOSE_WAIT和TIME_WAIT过高

    运维的同学和Team里面的一个同学分别遇到过Nginx在线上环境使用中会遇到TIME_WAIT过高或者CLOSE_WAIT过高的状态 先从原因分析一下为什么,问题就迎刃而解了. 首先是TIME_WAI ...

  2. (转) 线上环境部署MongoDB的官方建议

    本文主要内容来自MongoDB官方文档http://docs.mongodb.org/manual/administration/production-notes/.并结合了实际工作情况进行分享. 1 ...

  3. 使用Fabric一键批量部署上线/线上环境监控

    本文讲述如何使用fabric进行批量部署上线的功能 这个功能对于小应用,可以避免开发部署上线的平台,或者使用linux expect开发不优雅的代码. 前提条件: 1.运行fabric脚本的机器和其他 ...

  4. BUG在线上环境中出现的原因总结

    1.线上环境数据的复杂度以及数据量是测试环境不能比拟的. 2.业务操作的不可控性,用户错误的使用习惯. 3.实际场景的复杂性. 上线之后,测试人员需要做好以下二件事:   第一,灰度测试 项目上线之后 ...

  5. CAS (15) — CAS 线上环境 Ehcache Replication 的非稳定重现错误 java.util.ConcurrentModificationException

    CAS (15) - CAS 线上环境 Ehcache Replication 的非稳定重现错误 摘要 线上环境在 EhCache Replication 过程中出现 java.util.Concur ...

  6. 【微信小程序】---线上环境搭建

    一.前言 通常我们在本地电脑上开发微信小程序,调用和访问小程序会有很多问题.特别是在配有自己后端的情况下,我们通过真机访问我们的小程序会出现不可访问的问题 二.线上环境搭建 在这里我们主要以腾讯云给大 ...

  7. robot framework 测试/预发/线上环境快捷切换

    通常情况下布署的三套环境:测试.预发及线上环境.调试或者辅助验证测试时,切环境改变量甚是麻烦.这些变量包括但不限于:一些url信息,数据库信息,预置用户信息等. 切换环境方法一:使用变量文件,通过判断 ...

  8. Openssl的编译安装以及Vs2012上环境搭建教程

    Openssl的编译安装以及Vs2012上环境搭建教程 一.Openssl的编译安装 一.准备工作 1.Openssl下载地址:https://www.openssl.org/source/ 2.Ac ...

  9. Appium+python自动化16-appium1.6在mac上环境搭建启动ios模拟器上Safari浏览器

    前言 在mac上搭建appium踩了不少坑,先是版本低了,启动后无限重启模拟器.后来全部升级最新版本,就稳稳的了. 环境准备: 1.OS版本号10.12 2.xcode版本号8.3.2 3.appiu ...

随机推荐

  1. websphere修改jsp不生效的解决办法

    最近在给客户部署系统后,进行UAT测试的时候,发现一些小问题(是一些jsp文件),改好后,就进行增量发布了,可是后来在页面刷新的时候,怎么都是显示不出来效果,后来就把服务websphere重启后,页面 ...

  2. hadoop分布式安装部署具体视频教程(网盘附配好环境的CentOS虚拟机文件/hadoop配置文件)

    參考资源下载:http://pan.baidu.com/s/1ntwUij3视频安装教程:hadoop安装.flvVirtualBox虚拟机:hadoop.part1-part5.rarhadoop文 ...

  3. 编译android framework的例子【转】

    本文转载自:http://blog.csdn.net/brucexu1978/article/details/7610358 在开发过程中,尤其是Framework相关开发时,有时候需要重新编译资源文 ...

  4. docker 清理容器和镜像

    在docker运行过程中,会不知不觉造出很多容器,很多都是不用的,需要清理. 下面就是一些清理办法,一个个清理肯定很低效,批量清理很有意思. 查看正在运行的容器 # docker ps -q 9b9f ...

  5. 通过绑定ip地址可以暂时解决抢占ip问题

    以前设置的路由器密码都忘记了 admin重复,在工作上遇到了 一个去除str左右两边的空格换行符回车等 trim

  6. 最短路径(Dijkstra算法)

    当用图结构来表示通信.交通等网络,权重代表距离或者成本,寻找最短路径就成为了一个重要的任务. 给定带权网络G=(V;E),源点s,对于其他所有顶点v,寻找s到v的最短路径,连接成一颗最短路径树.可以证 ...

  7. jquery plupload上传插件

    http://www.jianshu.com/p/047349275cd4 http://www.cnblogs.com/2050/p/3913184.html demo地址: http://chap ...

  8. bzoj 1594: [Usaco2008 Jan]猜数游戏【二分+线段树】

    写错一个符号多调一小时系列-- 二分答案,然后判断这个二分区间是否合法: 先按值从大到小排序,然后对于值相同的一些区间,如果没有交集则不合法:否则把并集在线段树上打上标记,然后值小于这个值的区间们,如 ...

  9. P3043 [USACO12JAN]牛联盟Bovine Alliance(并查集)

    P3043 [USACO12JAN]牛联盟Bovine Alliance 题目描述 Bessie and her bovine pals from nearby farms have finally ...

  10. 统一微信公众号、小程序、APP的用户信息

     上次接手一个项目需要整合公众号.小程序以及APP的用户,查阅了微信文档以及一些作者的文章,中间踩了不少坑,在此记录一下解决的流程. 要点  实现统一信息的有以下几点:  1. 在微信开放平台绑定需要 ...