这两天在测试Dell的PS6000存储,在linux下也懒得去找测试工具了,就直接使用dd命令进行I/O测试,但因为需要测试的数据很多,从512b到4M的块,每一档都要进行读写的测试,这要是人肉来做,那就太累了,于是就产生了下面这个脚本。

本脚本使用perl编写,根据测试用例,完成每次读或写测试。

本脚本共有3个参数,两个是必选参数,一个是可选参数

-r 测试读性能

-w 测试写性能

-c 可选参数,用于关闭文件系统的缓存

#!/bin/evn perl

use JSON;

use Data::Dumper;

use Cwd;

use File::Basename;

our $cache_flag = '';

# 获取脚本所在目录

my $cwd;

if ( $0 =~ m{^/} ) {

$cwd = dirname($0);

}

else {

my $dir = getcwd();

$cwd = dirname("$dir/$0");

}

# 获得参数

if ( @ARGV < 1 ) {

&usage;

exit;

}

elsif ( @ARGV == 1 ) {

if ( ( $ARGV[0] ne "-r" ) && ( $ARGV[0] ne "-w" ) ) {

print "Unrecognized Option\n";

&usage;

exit;

}

}

elsif ( @ARGV == 2 ) {

if ( $ARGV[0] eq "-r" ) {

$cache_flag = "iflag=direct,nonblock";

}

elsif ( $ARGV[0] eq "-w" ) {

$cache_flag = "oflag=direct,nonblock";

}

elsif ( ( $ARGV[0] ne "-r" ) || ( $ARGV[0] ne "-w" ) ) {

print "Unrecognized Option\n";

&usage;

exit;

}

}

my $opt = $ARGV[0];

# 使用帮助

sub usage {

print "Usage: iotest.pl [OPTION] [OPTION]\n";

print "\n";

print "-r\texecute read test\n";

print "-w\texecute write test\n";

print "-c\tiotest with local filesystem cache\n\n";

}

# 检查测试文件是否存在

sub check_file {

if ( !-e "./iotest" ) {

print "The test file dose not exist,please run write test first\n";

exit;

}

}

# 打开测试用例

open FH, "

# Main #

while () {

chomp;

$json = new JSON;

# 将测试用例的json格式转成hash

my %strings = %{ $json->decode($_) };

if ( $opt eq "-r" ) {

&check_file;

while ( ( $key, $value ) = each %strings ) {

open rfh, '>>iotestr.log';

my $cmd =

"/bin/dd if=./iotest of=/dev/null bs=$key count=$value $cache_flag >> iotestr.log 2>&1";

print rfh "IOTest Block: $key\n";

`$cmd`;

print rfh "\n";

}

}

elsif ( $opt eq "-w" ) {

while ( ( $key, $value ) = each %strings ) {

open wfh, '>>iotestw.log';

my $cmd =

"/bin/dd if=/dev/zero of=./iotest bs=$key count=$value $cache_flag >> iotestw.log 2>&1";

print wfh "IOTest Block: $key\n";

`$cmd`;

print wfh "\n";

}

}

}

下面来看下测试用例的编写格式。这里蚊子采用了json串的方式,这样便于perl读取,文件内容如下

{"512":"4096000","1K":"2048000","2K":"1024000","4K":"512000","8K":"256000","16K":"128000","32K":"64000","64k":"32000","128k":"16000","256k":"8000","512k":"4000","1M":"2000","2M":"1000","4M":"500"}

该文件主要就分两个字段,冒号前的是块大小,冒号后的count数,通过块大小和count数就能创建文件,蚊子这里统一生成的是2G大小的文件。该文件保存文件名为iotest.json,将测试用例和测试脚本放到同一个目录下即可。使用方面很简单,进入到要测试的磁盘或目录下,执行

#perl /dir/to/iotest.pl –w

即可完成开启文件系统换的磁盘写测试。程序执行完毕后会在当前目录下创建.log文件用于记录测试结果,下图是蚊子测试的结果,我做成了表格。

linux测试磁盘io脚本,脚本分享:Linux下磁盘io测试相关推荐

  1. 实现Media config的切换,使得Loki-100G-5S-2P测试板卡可以链接在50GbE模式下进行流量测试

    实现Media config的切换,使得测试板卡那个链接在50GbE模式下进行流量测试 main.py # coding=UTF-8 import time, json, random, queue, ...

  2. win10磁盘100官方解释_Win10系统下磁盘占用100%常用处理方法

    操作步骤: 1.Windows10的应用商店更新 进程名称是windowsapps.在任务管理器中找到并设置为禁用即可. 也可以打开Microsoft store程序---右上角三个小点---设置-- ...

  3. 一个测试人员,在现阶段的环境下如何在测试行业发展和自我价值。

    前言 周末和几个测试圈子里的大佬饭局上聊了一些职场和测试职业发展相关的话题,我将聊天的内容做了整理和阐述. .朋友圈有测试同学对这篇文章提了比较深刻的建议,下面是他的评价和建议: 评价: 据说是大佬饭 ...

  4. 北风网 linux,linux进程控制笔记北风网分享.doc

    linux进程控制笔记北风网分享 linux 进程控制笔记 进程创建 普通函数调用完成后,最多返回 return 一次,但fork/vfork会返回二次,一次返回给父进程,一次返回给子进程 父进程的返 ...

  5. Linux教程:10条秘诀确保Linux桌面安全性

    Linux教程:10条秘诀确保Linux桌面安全性 linux教程资料由兄弟连官方分享 Linux教程:10条秘诀确保Linux桌面安全性,很容易知道,Linux桌面比其他大多数桌面都更安全.不过,这 ...

  6. 可用性测试易用性和有用性_选择您的可用性测试和参与者

    可用性测试易用性和有用性 In my last article, we talked about ways to really nail down your usability goals befor ...

  7. BLOCK层代码分析(9)IO下发之IO下发

    看着题目是不是很奇怪,想不出好的名字,就这样将就吧. 前面bio bounce过程,bio的切分和合并,request的获取是为IO请求下发做准备工作.当这些准备工作完成后,才进入到真正的IO下发过程 ...

  8. 视频教程-Kali Linux渗透测试全程课与脚本语言编程系列课程-渗透测试

    Kali Linux渗透测试全程课与脚本语言编程系列课程 本人有多年的服务器高级运维与开发经验,擅长计算机与服务器攻防及网络攻防技术!对网络安全领域有持续的关注和研究! 林晓炜 ¥899.00 立即订 ...

  9. linux中time命令详解、脚本监控记录系统硬盘io值、定位linux系统中await值过高占用的盘、定位占用硬盘IO高的程序、iotop命令说明、lsof使用说明【可定位端口所占用程序等】

    文章目录 文章说明 linux中的time命令 说明&常规用法 bash中使用time,将运行记录追加到文件中,-f后的参数说明 高阶用法 time 命令详细输出指标介绍 ime taken ...

最新文章

  1. ACM第一名:基于轨迹感知多模态特征的视频关系检测
  2. 二十七、连续分配管理方式
  3. loadrunner11 linux服务器,Loadrunner怎么执行linux服务器上的shell脚本?
  4. A query was run and no Result Maps were found
  5. python如何安装matplotlib_详解python安装matplotlib库三种失败情况
  6. python3精要(6)-string类的format()方法
  7. php SqlServer 中文汉字乱码
  8. QT 动态创建对象(第一种方法)
  9. svg 动画_根据AI导出的SVG path制作SVG线条动画
  10. 基础编程题目集 6-3 简单求和 (10 分)
  11. 机器学习实战(七)线性回归(Linear Regression)
  12. 查看python安装位置和已安装库的相关操作
  13. Windows下MySQL环境变量的配置及说明
  14. 【EasyAR实战项目】图像识别+模型交互(全网首发,保姆级教程)
  15. 快速排序(c语言实现)
  16. Js 实现颜色值转换_Js 实现十六进制颜色值和RGB颜色值转换整理
  17. 葡萄城报表介绍:自由报表
  18. 错误模块名称: KERNELBASE.dll 问题记录
  19. java数据仓库的生鲜配送系统
  20. cocos shader 之 黑白滤镜

热门文章

  1. java yyyy m d_日期-Java 8时间API:如何将格式“ MM.yyyy”的字符串解析为LocalD
  2. wpf的tabcontrol获取当前选中的名字_技巧:ANSA中如何快速批量修改PID名字
  3. 国外基于android的系统,基于Android的位置服务系统设计与实现
  4. centos 下载oracle_Linux镜像下载大全
  5. PHP简单操作Excel
  6. Ansible入门及组件介绍
  7. ubuntu14.04安装tun/tap网络设备
  8. 第二阶段个人工作总结04
  9. IT增值服务实践心得体会:企业客户的钱比个人客户好赚得多
  10. 多客户端异步通讯框架