[转帖]dd 自动压测与结果解析脚本

dd,自动,结果,解析,脚本 · 浏览次数 : 0

小编点评

```bash #!/bin/bash # 1、串行写 # 定义测试串行列表和计数列表 bs_list=(256k 1024k 10M 20M 50M 100M 1G) cnt_list=(40000 10000 1000 500 200 100 10) # 循环执行测试 for i in {0..6}do for j in {0..2}do # 创建日志文件名称 logfile=dd_${bs_list[$i]}_cnt${cnt_list[$i]}_${j}.txt # 写入测试开始日志 echo -e "test ${j} started\\" >> $logfile echo -e "started time `date`\\" >> $logfile # 模拟 dd 命令的写入操作 dd if=/dev/zero of=testfile1 bs=${bs_list[$i]} count=${cnt_list[$i]} oflag=direct,nonblock 2 >> $logfile echo -e "finished time `date`\" >> $logfile # 打印测试结果 echo -e "test ${j} finished\" >> $logfile done done # 2、4并发写 # 定义测试串行列表和计数列表 bs_list=(256k 1024k 10M 20M 50M 100M 1G) cnt_list=(40000 10000 1000 500 200 100 10) # 循环执行测试 for i in {0..6}do for j in {0..2}do # 创建日志文件名称 logfile=dd_conc_${bs_list[$i]}_cnt${cnt_list[$i]}_${j}.txt # 写入测试开始日志 echo -e "test ${j} started\\" >> $logfile echo -e "started time `date`\\" >> $logfile # 并发执行 dd 命令的写入操作 for conc in {0..3}; do dd if=/dev/zero of=testfile1 bs=${bs_list[$i]} count=${cnt_list[$i]} oflag=direct,nonblock 2 >> $logfile done # 打印测试结果 echo -e "finished time `date`\" >> $logfile echo -e "test ${j} finished\" >> $logfile done done # 3、串行读 # 定义测试串行列表和计数列表 bs_list=(256k 1024k 10M 20M 50M 100M 1G) cnt_list=(40000 10000 1000 500 200 100 10) # 循环执行测试 for i in {0..6}do for j in {0..2}do # 创建日志文件名称 logfile=dd_${bs_list[$i]}_cnt${cnt_list[$i]}_${j}.txt # 写入测试开始日志 echo -e "test ${j} started\\" >> $logfile echo -e "started time `date`\\" >> $logfile # 模拟 dd 命令的读取操作 dd if=testfile1 of=/dev/null bs=${bs_list[$i]} count=${cnt_list[$i]} iflag=direct,nonblock 2 >> $logfile echo -e "finished time `date`\" >> $logfile # 打印测试结果 echo -e "test ${j} finished\" >> $logfile done done # 4、4并发读 # 定义测试串行列表和计数列表 bs_list=(256k 1024k 10M 20M 50M 100M 1G) cnt_list=(40000 10000 1000 500 200 100 10) # 循环执行测试 for i in {0..6}do for j in {0..2}do # 创建日志文件名称 logfile=dd_conc_${bs_list[$i]}_cnt${cnt_list[$i]}_${j}.txt # 写入测试开始日志 echo -e "test ${j} started\\" >> $logfile echo -e "started time `date`\\" >> $logfile # 并发执行 dd 命令的读取操作 for conc in {0..3}; do dd if=/dev/null of=testfile1 bs=${bs_list[$i]} count=${cnt_list[$i]} iflag=direct,nonblock 2 >> $logfile done # 打印测试结果 echo -e "finished time `date`\" >> $logfile echo -e "test ${j} finished\" >> $logfile done done # 5、输出解析 # 获取执行时间 cat dd_* | grep -E 'MB/s|GB/s' | awk '{ print $6 }' # 获取吞吐量 cat dd_* | grep -E 'MB/s|GB/s' | awk '{ print $8 }' ```

正文

测试串行、并发、读、写 4类操作,每类操作又可以指定各种bs及count值,循环压测。每种场景一般执行3次,取平均值。 

一、 串行写

  1. #!/bin/sh
  2. bs_list=(256k 1024k 10M 20M 50M 100M 1G)
  3. cnt_list=(40000 10000 1000 500 200 100 10)
  4. for i in {0..6}
  5. do
  6. for j in {0..2}
  7. do
  8. logfile=dd_${bs_list[$i]}_cnt${cnt_list[$i]}_${j}.txt
  9. echo -e "test ${j} started\n" > $logfile
  10. echo -e "started time `date`\n" >> $logfile
  11. dd if=/dev/zero of=testfile1 bs=${bs_list[$i]} count=${cnt_list[$i]} oflag=direct,nonblock 2>> $logfile
  12. echo -e "\nfinished time `date`" >> $logfile
  13. echo -e "\ntest ${j} finished" >> $logfile
  14. sleep 5
  15. done
  16. sleep 30
  17. done


二、 4并发写

  1. #!/bin/sh
  2. # ddtest_write_conc.sh
  3. bs_list=(256k 1024k 10M 20M 50M 100M 1G)
  4. cnt_list=(40000 10000 1000 500 200 100 10)
  5. for i in {0..6}
  6. do
  7. for j in {0..2}
  8. do
  9. logfile=dd_conc_${bs_list[$i]}_cnt${cnt_list[$i]}_${j}.txt
  10. echo -e "test ${j} started\n" > $logfile
  11. echo -e "started time `date`\n" >> $logfile
  12. for conc in {0..3}
  13. do
  14. {
  15. dd if=/dev/zero of=testfile1 bs=${bs_list[$i]} count=${cnt_list[$i]} oflag=direct,nonblock 2>> $logfile
  16. } &
  17. done
  18. wait
  19. echo -e "\nfinished time `date`" >> $logfile
  20. echo -e "\ntest ${j} finished" >> $logfile
  21. sleep 5
  22. done
  23. sleep 30
  24. done


三、 串行读

  1. #!/bin/sh
  2. # ddtest_read_serial.sh
  3. bs_list=(256k 1024k 10M 20M 50M 100M 1G)
  4. cnt_list=(40000 10000 1000 500 200 100 10)
  5. for i in {0..6}
  6. do
  7. for j in {0..2}
  8. do
  9. logfile=dd_${bs_list[$i]}_cnt${cnt_list[$i]}_${j}.txt
  10. echo -e "test ${j} started\n" > $logfile
  11. echo -e "started time `date`\n" >> $logfile
  12. dd if=testfile1 of=/dev/null bs=${bs_list[$i]} count=${cnt_list[$i]} iflag=direct,nonblock 2>> $logfile
  13. echo -e "\nfinished time `date`" >> $logfile
  14. echo -e "\ntest ${j} finished" >> $logfile
  15. sleep 5
  16. done
  17. sleep 30
  18. done

四、 4并发读

  1. #!/bin/sh
  2. bs_list=(256k 1024k 10M 20M 50M 100M 1G)
  3. cnt_list=(40000 10000 1000 500 200 100 10)
  4. for i in {0..6}
  5. do
  6. for j in {0..2}
  7. do
  8. logfile=dd_conc_${bs_list[$i]}_cnt${cnt_list[$i]}_${j}.txt
  9. echo -e "test ${j} started\n" > $logfile
  10. echo -e "started time `date`\n" >> $logfile
  11. for conc in {0..3}
  12. do
  13. {
  14. dd if=testfile1 of=/dev/null bs=${bs_list[$i]} count=${cnt_list[$i]} iflag=direct,nonblock 2>> $logfile
  15. } &
  16. done
  17. wait
  18. echo -e "\nfinished time `date`" >> $logfile
  19. echo -e "\ntest ${j} finished" >> $logfile
  20. sleep 5
  21. done
  22. sleep 30
  23. done

五、 输出解析

取执行时间

cat dd_* | grep -E 'MB/s|GB/s' | awk '{ print $6 }'

取吞吐量

cat dd_* | grep -E 'MB/s|GB/s' | awk '{ print $8 }'

与[转帖]dd 自动压测与结果解析脚本相似的内容:

[转帖]dd 自动压测与结果解析脚本

测试串行、并发、读、写 4类操作,每类操作又可以指定各种bs及count值,循环压测。每种场景一般执行3次,取平均值。 一、 串行写 #!/bin/sh bs_list=(256k 1024k 10M 20M 50M 100M 1G)cnt_list=(40000 10000 1000 500 20

[转帖]FIO磁盘性能测试工具

https://www.cnblogs.com/lyhabc/p/16708771.html 简介 一般我们测试硬盘或者存储的性能的时候,会用Linux系统自带的dd命令,因为是自带命令,简单易使用,因此一些客户喜欢使用dd命令来测试磁盘的读写性能。 但是用dd命令来测试性能,有如下问题: 1. d

[转帖]FIO磁盘性能测试工具

https://www.cnblogs.com/lyhabc/p/16708771.html 简介 一般我们测试硬盘或者存储的性能的时候,会用Linux系统自带的dd命令,因为是自带命令,简单易使用,因此一些客户喜欢使用dd命令来测试磁盘的读写性能。 但是用dd命令来测试性能,有如下问题: 1. d

[转帖]perf学习-linux自带性能分析工具

存储技术为满足层出不穷应用的海量数据存储需求,从物理介质到技术架构也同样发生了天翻地覆的变革。无论技术如何更新换代,其目的都是为了更好的提供高性能,高容量,高可用的数据服务。本系列文章会对存储系统的测试和调试工具做一个介绍。 dd - Linux世界中的搬运工 FIO – IO压力测试工具 vdbe

[转帖]磁盘的基准测试

https://www.jianshu.com/p/0e25657d016d 参考 摘抄自 对永久性磁盘的性能进行基准化分析 正文 如需对永久性磁盘的性能进行基准化分析,请使用 FIO,而不是 dd 等其他磁盘基准化分析工具。默认情况下,dd 使用非常低的 I/O 队列深度,因此难以确保基准生成足够

[转帖]磁盘的基准测试

https://www.jianshu.com/p/0e25657d016d 参考 摘抄自 对永久性磁盘的性能进行基准化分析 正文 如需对永久性磁盘的性能进行基准化分析,请使用 FIO,而不是 dd 等其他磁盘基准化分析工具。默认情况下,dd 使用非常低的 I/O 队列深度,因此难以确保基准生成足够

[转帖]磁盘的基准测试

https://www.jianshu.com/p/0e25657d016d 参考 摘抄自 对永久性磁盘的性能进行基准化分析 正文 如需对永久性磁盘的性能进行基准化分析,请使用 FIO,而不是 dd 等其他磁盘基准化分析工具。默认情况下,dd 使用非常低的 I/O 队列深度,因此难以确保基准生成足够

[转帖]dd命令祥解

http://blog.chinaunix.net/uid-11728685-id-5825650.html 先简要介绍dd的参数,后边通过几个实例介绍dd的应用,参考了其他网友的资料,在此一并感谢 小菜水平有限文中有什么错误请大家指正,关于dd还有什么好的使用方法,可以贴出来,小菜会及时更新 dd

[转帖]dd命令中dsync和fsync区别

在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及几个常用参数:sync、dsync、fsync与fdatasync # dd if=/dev/zero of=/tmp/1G bs=4k count=256000 oflag=dsync # dd if=/dev/zero of=/

[转帖]DD硬盘性能相关因素

https://www.jianshu.com/p/a15d7a65c876 本文简单介绍下DD测试硬盘性能时,各个因素的影响 首先列出测试结果 image.png oflag分析--/home dd默认测试会使用buffer io,oflag=direct参数则会跳过buffer I/O,因此通常