1. https://www.cnblogs.com/ishmaelwanglin/p/10839702.html

一个实时显示磁盘io延时的工具,以类似ping 的输出一样展示输出结果

常用参数:

  1. -c count
  2. stop after count requests.
  3. -i interval
  4. Set time between requests to interval(Default 1s).
  5. -l 速度
  6. default size(-s size)/speed = interval(-i)
  7. 如果size=4k 如果要实现80iops则-l 320k
  8. -L 顺序,同时每次操作块大小会变成256k.(即-s 256k
  9. -D Derect IO
  10. -s size
  11. 指定请求数据块的大小(默认:4k)
  12. 4k时那么平均每次读写的扇区就是8
  13. -S wsize
  14. 指定工作路径的大小,如果不指定,默认是1m的,也就是io会只在这个1m的块上执行,指定该参数执行ioping会先创建一个指定大小的块文件,再开始读写。
  15. -W io。会从0磁道开始写,要与-WWW一起使用。
  16. -G 混合读写
  17. -k 在使用目录做测试时,保留ioping.tmp(-S 创建的文件,默认会完成测试后自动删除)。
  18. -Y sync IO

把要测试的盘挂载到一个目录比如/test,cd /test开始测试

测试4k随机写(写测试必须使用目录或者文件)

  1. ioping -W -WWW -S 1G -D -c 100 .

测试顺序读(读可以测试设备)

  1. ioping -L -D -S 1G -c 100 .

以下是man page方法:

简单用法:

使用默认值和当前目录显示磁盘I / O延迟,直到被中断

  1. [root@node-1 ops]# ioping -D /dev/sda
  2. 4 KiB <<< /dev/sda (block device 557.9 GiB): request=1 time=56.1 ms (warmup)
  3. 4 KiB <<< /dev/sda (block device 557.9 GiB): request=2 time=8.89 ms
  4. 4 KiB <<< /dev/sda (block device 557.9 GiB): request=3 time=9.45 ms
  5. 4 KiB <<< /dev/sda (block device 557.9 GiB): request=4 time=5.37 ms
  6. 4 KiB <<< /dev/sda (block device 557.9 GiB): request=5 time=5.34 ms
  7. 4 KiB <<< /dev/sda (block device 557.9 GiB): request=6 time=7.24 ms
  8. 4 KiB <<< /dev/sda (block device 557.9 GiB): request=7 time=2.62 ms (fast)
  9. 4 KiB <<< /dev/sda (block device 557.9 GiB): request=8 time=8.16 ms
  10. 4 KiB <<< /dev/sda (block device 557.9 GiB): request=9 time=10.2 ms (slow)
  11. 4 KiB <<< /dev/sda (block device 557.9 GiB): request=10 time=7.02 ms
  12. ^C
  13. --- /dev/sda (block device 557.9 GiB) ioping statistics ---
  14. 9 requests completed in 64.3 ms, 36 KiB read, 140 iops, 560.3 KiB/s
  15. generated 10 requests in 9.11 s, 40 KiB, 1 iops, 4.39 KiB/s
  16. min/avg/max/mdev = 2.62 ms / 7.14 ms / 10.2 ms / 2.24 ms

测量磁盘搜索率(iops,avg)

  1. $ ioping -R /dev/sda
  2. --- /dev/sda (device 465.8 GiB) ioping statistics ---
  3. 186 requests completed in 3004.6 ms, 62 iops, 0.2 MiB/s
  4. min/avg/max/mdev = 6.4/16.0/26.8/4.7 ms

测量磁盘顺序速度(MiB / s)

  1. $ ioping -RL /dev/sda
  2. --- /dev/sda (device 465.8 GiB) ioping statistics ---
  3. 837 requests completed in 3004.1 ms, 292 iops, 72.9 MiB/s
  4. min/avg/max/mdev = 2.0/3.4/28.9/2.0 ms

获取磁盘每秒顺序速度(bytes)

  1. [root@node-1 ops]# ioping -RLB . | awk '{printf "%s MB\n",$4/1024/1024}'
  2. 1129.74 MB

raw 统计

  1. ioping -p 100 -c 200 -i 0 -q .
  2. 100 26694 3746 15344272 188 267 1923 228 100 26694
  3. 100 24165 4138 16950134 190 242 2348 214 100 24165
  4. (1) (2) (3) (4) (5) (6) (7) (8) (9) (10)
  5. (1) 请求次数统计
  6. (2) 运行时间 (usec)
  7. (3) 每秒的请求次数 (iops)
  8. (4) 传输速度 (bytes/sec)
  9. (5) 最低的请求时长 (usec)
  10. (6) 平均请求时长 (usec)
  11. (7) 最大的请求时长 (usec)
  12. (8) request time standard deviation (usec)
  13. (9) 总的请求数 (including too slow and too fast)
  14. (10) 总的运行时长 (usec)

名词解释

tps: 每秒接收的I/O请求数,等于r/s + w/s

avgrq-sz: 平均每次io请求扇区数

avgqu-sz: 平均每次io等待队列数

maxsect: max sectors per request

​ 通过blockdev --getmaxsect /dev/sdx获取,sas默认值512,sata默认值128

sector: 扇区,每个扇区512Bytes,1k=2sect

iops: 每秒的io次数

此次测试使用的硬盘为sas 10k, iops为140, 平均io time/per为14ms

写测试实例

同步IO写

测试一:

  1. ioping -DWWW -S 1G -s 4k -l 560k .
  1. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  2. sdb4 0.00 0.00 0.00 140.00 0.00 0.55 8.00 0.02 0.15 0.00 0.15 0.15 2.10

扇区达到8之后,tps、avgrq、avgqu和await符合预期

测试二:

  1. 测试命令:
  2. ioping -DWWW -S 1g -s 256k -l 35m .
  1. 04/20/2019 03:07:59 PM
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdb4 0.00 0.00 0.00 140.00 0.00 35.00 512.00 0.03 0.20 0.00 0.20 0.20 2.80

Note:

扇区达到512后,符合预期

size为256k时,刚好avgrq为512个sector;

此时tps = 35m / 256k = 140 , 与测试结果w/s相符,也于10k sas盘的iops参数相符;

观察此时avgqu为0.04,几乎没有队列等待, iops = 140 / (1 + 0.04) = 134;

w_wait: 0.29;

且util值为4%,接近0;

可以认为此时是硬盘的最佳io处理状态,可以作为基准状态;

测试三:

  1. ioping -DWWW -S 1g -s 256k -l 70m .
  1. 正常的盘:
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdb4 0.00 0.00 0.00 280.00 0.00 70.00 512.00 0.05 0.18 0.00 0.18 0.17 4.80
  1. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  2. sdc1 0.00 0.00 0.00 153.00 0.00 38.25 512.00 0.95 6.21 0.00 6.21 6.19 94.70

Note:

稳定后,wMB/s和avgrq达到参数值后,也符合预期,此时如果wMB达不到参数值的话就会增加util,并tps也会达不到预期。

正常的盘和异常的盘在这个压力下,已经显现了差距

size不变,增加数据量及加快给数据的速度,speed为70m,此时util开始接近100%;

此时计算tps = 70m / 256 k = 280 ,与实际测出结果有一定差距,

但是此时avgqu-sz已经达到0.95,接近1,

根据avgqu,计算iops ≈ 280 / (1 + 0.95) = 143 接近153;

w_wait: 6.21有所增加,但是依然符合io time;

再增加speed,后实际结果也没有大的变化,只增加这个值此时已经没有测试效果;

测试四:

  1. 增加size
  2. 测试命令:
  3. ioping -DWWW -S 1g -s 512k -l 35m .
  4. iostat输出:
  1. 正常的盘:
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdb4 0.00 0.00 0.00 140.00 0.00 35.00 512.00 0.02 0.16 0.00 0.16 0.09 1.20
  1. 异常的盘
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdc1 0.00 0.00 0.00 140.00 0.00 35.00 512.00 0.06 0.42 0.00 0.42 0.24 3.40

Note:

wMB/s和avgrq达到参数值后,符合预期

低压力的情况下,正常的盘和异常的盘区别不大

size为512k=1024sector,为测试一的两倍,也就是每次request都要分成两次完成,因为每次是512个sector;

计算tps = 35m / 512k = 70 , 但是结果是140, 结合size,那么新的tps计算方法就应该是: tps = speed / size × (size_k *2 /maxsect)

tps = 35 * 1024 / 512 * (512 * 2 / 512) = 140

avgqu-sz: 0.06

w_wait: 0.42;

数据总量不变的情况下,增加request的size,会增加tps,并保持io处理能力不下降。

测试五:

  1. ioping -DWWW -S 1g -s 512k -l 70m .
  1. 正常的盘:
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdb4 0.00 0.00 0.00 280.00 0.00 70.00 512.00 0.05 0.17 0.00 0.17 0.11 3.00
  1. 异常的盘:
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdc1 0.00 0.00 0.00 220.00 0.00 55.00 512.00 1.44 6.52 0.00 6.52 4.15 91.20

Note:

正常的盘在wMB/s avgrq达到参数值后符合预期,如果达不到参数值则会出现iops降低,util增加和avgqu增加,以及await增加

异常的盘已经基本上达不到参数值了

size: 512k

计算tps: 70 * 1024 / 512 * 2 = 280, 与实际测试的值略有差距;

avgqu: 1.44 , 根据avgqu 没有avgqu时的tps = 280 / (1 + 1.44) = 114;

此时w_wait: 6.52,处于合理状态的范围;

测试六:

  1. ioping -DWWW -S 1g -s 5m -l 150m .
  1. 正常的盘:
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdb4 0.00 0.00 0.00 600.00 0.00 150.00 512.00 1.07 1.79 0.00 1.79 0.14 8.30
  1. 异常的盘:
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdc1 0.00 0.00 0.00 460.00 0.00 115.00 512.00 9.31 20.33 0.00 20.33 1.99 91.60

Note:

此时正常的盘,达到参数值后,依然符合预期,而异常的盘已经远远达不到了。

size: 5m

计算tps: 150 / 50 * (5 * 1024 * 2 / 512) = 600

由于有avgqu值偏大,此时已经不具有生产使用意义

测试名称 size speed 测试tps 计算tps avgqu-sz wait util MB/s
256k 35m 140 140 0.04 0.29 4% 35
256k 70m 153 280 0.95 6.21 94.7% 38.25
512k 35m 140 140 0.06 0.42 3.4% 35
512k 70m 220 280 1.44 6.52 91.2% 55
5m 150m 460 600 9.31 20.33 91.6% 115

当size为256k时 avgrq-sz就已经等于maxsect,此时增加-l speed的值并不能提升iops了,只能增加-s的size,
而增加size必然会带来增加avgqu-sz即等待队列,也就会导致wait上升.

10k的sas的iops为140,此时140256k = 140/4m = 35m 此时-l 35m,基本上就是硬盘最高繁忙度了util接近100%,此时要降低util,就必须增加-s的size(增加了等待的队列,也可以理解是增加了io通道或者iodepth), 比如size=512k,此时util降低一半,tps=35m/0.5m2 =140

io供给速度快时,util增加的情况下,tps就达不到计算的结果。

读测试实例

  1. ioping -D -S 100g -s 4m -l 160m /dev/sdc1
  2. iostat输出
  3. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  4. sdc1 0.00 0.00 486.00 0.00 121.50 0.00 512.00 9.66 19.78 19.78 0.00 2.04 99.30
  5. 此时看wait开始增加到较高的值了,且avgqu-sz已经很高了。

磁盘测试可以根据计算的方式获取预期的瓶颈范围

avgqu-sz开始接近1的时候就是盘的性能最佳状态。

即最佳状态为-s 256k -l 35m此时tps 140 util接近100%

磁盘在等待队列avgqu-sz <= 4的情况下处于较好的状态,最终获取最大承受范围约 -s 1.5m -l 150m,此时承载能里达到最大承载临界值。(队列avgqu-sz每增加1几乎tps就增加一倍)

  1. 04/19/2019 12:03:34 AM
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdc1 0.00 0.00 388.00 0.00 97.00 0.00 512.00 4.32 11.20 11.20 0.00 2.56 99.50
  4. 04/19/2019 12:03:35 AM
  5. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  6. sdc1 0.00 0.00 370.00 0.00 92.50 0.00 512.00 4.37 11.83 11.83 0.00 2.68 99.10

异步IO 写

测试一:

  1. ioping -ADWWW -S 1g -s 4k -l 560k .
  1. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  2. sdb4 0.00 0.00 0.00 140.00 0.00 0.55 8.00 0.00 0.01 0.00 0.01 0.01 0.20

wMB/s和 avgrq达到预期后,其他的输出都符合预期

  1. ioping -AD -W -WWW -S 1G -s 256k -l 35m .
  1. 04/20/2019 02:42:57 PM
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdb4 0.00 0.00 0.00 140.00 0.00 35.00 512.00 0.02 0.16 0.00 0.16 0.16 2.20

符合预期

  1. ioping -AD -W -WWW -S 1G -s 256k -l 70m .
  1. 04/20/2019 02:46:11 PM
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdb4 0.00 0.00 0.00 280.00 0.00 70.00 512.00 0.05 0.17 0.00 0.17 0.17 4.90

开始阶段avgrq只能到达256,此时iops为500左右

异步io的util不高

  1. ioping -AD -W -WWW -S 1G -s 512k -l 35m .
  1. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  2. sdb4 0.00 0.00 0.00 140.00 0.00 35.00 512.00 0.03 0.21 0.00 0.21 0.11 1.60

表现与sync io一样,此时iops一致

  1. ioping -AD -W -WWW -S 1G -s 512k -l 70m .
  1. 04/20/2019 02:50:49 PM
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdb4 0.00 0.00 0.00 280.00 0.00 70.00 512.00 0.07 0.26 0.00 0.26 0.14 3.90

符合预期

  1. ioping -AD -W -WWW -S 1G -s 512k -l 140m .

  1. 04/20/2019 02:52:43 PM
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdb4 0.00 0.00 0.00 542.00 0.00 135.50 512.00 0.21 0.39 0.00 0.39 0.24 12.80
  4. 04/20/2019 02:52:44 PM
  5. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  6. sdb4 0.00 0.00 0.00 440.00 0.00 110.00 512.00 0.85 1.93 0.00 1.93 1.43 62.80

数据量增大后,tps就很难稳定了

  1. ioping -AD -W -WWW -S 1G -s 2m -l 140m .
  1. 04/20/2019 02:54:11 PM
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdb4 0.00 3.00 0.00 623.00 0.00 140.20 460.88 0.44 0.70 0.00 0.70 0.12 7.50
  1. ioping -AD -W -WWW -S 1G -s 5m -l 140m .
  1. 04/20/2019 02:55:19 PM
  2. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  3. sdb4 0.00 0.00 0.00 540.00 0.00 135.00 512.00 2.54 4.71 0.00 4.71 0.29 15.40
异步IO读

[转帖]ioping测试的更多相关文章

  1. ioping测试

    ioping 一个实时显示磁盘io延时的工具,以类似ping 的输出一样展示输出结果 常用参数: -c count stop after count requests. -i interval Set ...

  2. [转帖]phoronix-test-suite测试云服务器

    phoronix-test-suite测试云服务器 https://www.cnblogs.com/tanyongli/p/7767804.html centos系统 phoronix-test-su ...

  3. distri.lua重写开源手游服务器框架Survive

    Survive之前采用的是C+lua的设计方式,其中网关服务器全部由C编写,其余服务全部是C框架运行lua回调函数的方式编写游戏逻辑. 鉴于一般的手游对服务器端的压力不会太大,便将Survive用di ...

  4. asp.net web api 跨域问题

    缘起 以前在asp.net mvc时代,很少出现跨域问题 自从使用了asp.net web api + angular (1/2)之后,开始有跨域问题了. 简单普及下跨域: 我的理解是只要是前台页面与 ...

  5. 浅谈提升C#正则表达式效率

     摘要:说到C#的Regex,谈到最多的应该就是RegexOptions.Compiled这个东西,传说中在匹配速度方面,RegexOptions.Compiled是可以提升匹配速度的,但在启动速度上 ...

  6. php phppowerpoint

    今天早上从订阅的 Zend DevZone 看到篇很有意思的文章. Creating PowerPoint 2007 files using PHP. 试了一下. 果然很又意思, 分享给大家吧. 程序 ...

  7. [转帖].MegaRAID SAS 9361-8i 开箱 极简测试

    [配件开箱] 谁说raid0软硬没多大区别的...MegaRAID SAS 9361-8i 开箱 极简测试 [复制链接] https://www.chiphell.com/thread-1810952 ...

  8. 转帖Jmeter中的几个重要测试指标释义

    Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...

  9. [转帖]linux下的CPU、内存、IO、网络的压力测试

    linux下的CPU.内存.IO.网络的压力测试 https://www.cnblogs.com/zhuochong/p/10185881.html 一.对CPU进行简单测试: 1.通过bc命令计算特 ...

  10. [转帖]PG的简单备份恢复 找时间进行测试

    转帖PG的简单使用 https://blog.csdn.net/lk_db/article/details/77971634 一: 纯文件格式的脚本: 示例:1. 只导出postgres数据库的数据, ...

随机推荐

  1. 文心一言 VS 讯飞星火 VS chatgpt (52)-- 算法导论6.2 4题

    四.当i>A.heap-size/2 时,调用 MAX-HEAPIFY(A,i)会有什么结果? 文心一言: 当 i > A.heap-size/2 时,调用 MAX-HEAPIFY(A, ...

  2. 密码加密处理MD5与Salt

    作用:一般用来加密或者签名(校验和) 特点: MD5算法不可逆如何内容相同无论执行多少次md5生成结果始终是一致 生成结果:始终是一个16进制32位长度字符串 //使用MD5 + salt +hash ...

  3. 火山引擎DataLeap数据质量解决方案和最佳实践(三):最佳实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 最佳实践 前面介绍了DataLeap数据质量平台的一些实现方式,下面为大家介绍一些我们在数据量和资源这两个方面的最 ...

  4. 助力信创国产化,Solon v2.2.9 发布

    Solon 是一个高效的 Java 应用开发框架:更快.更小.更简单.它不是 Spring.没有使用 Servlet.JavaEE 接口,是一个有自己接口标准的开放生态.可以为应用软件国产化提供支持, ...

  5. Solon Web 开发,十、签权

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  6. (error) MOVED 12706 10.176.246.204:9736

    使用redis-cli连接上redis后,执行get命令报错: (error) MOVED 12706 10.176.246.204:9736 百度到原因是未以集群模式连接,在连接时加上-c参数就可以 ...

  7. 基于分发与计算的GRTN全球实时传输网络

    一张能同时满足「分发」与「计算」需求的网. 从直播趋势看「分发」与「计算」 阿里云直播产品架构图中,主要分为端和云两个部分:在端侧,主要包含推流端和播放端:在云侧,一是基于分布式节点构建的传输网,二是 ...

  8. luoguP1419 寻找段落(二分答案+单调队列)单调队列DP求在区间[l,r] 中长度至少为 m 的最大平均值

    模板:单调队列DP求在区间\([l,r]\) 中长度至少为 \(m\) 的最大平均值 题目链接:Here 题意 给定一个长度为 \(n\) 的序列 \(a_1\) ~ \(a_n\) ,从中选取一段长 ...

  9. [VS Code] 入门-自定键盘快捷键

    Keyboard Shortcuts 自訂鍵盤快捷鍵 開啟設定面板 :點擊左下角管理圖示〉選擇「鍵盤快速鍵」. 編輯器開啟後,滑鼠移至變更項目上,點擊出現的變更圖示(橘框處),輸入要變更的快捷鍵組合. ...

  10. 【SpringBoot】 启动后会调用执行的方法的 (五种方式)

    在 SpringBoot 工程 启动后, 会调用执行方法的五种方式: 亲自测试, 按照执行顺序如下: 第一种: @Component public class SpringContext1 { @Po ...