原创-性能测试篇-最终版 -利用shell和python混合编写优化iozone测试硬盘读写性能测试并且处理数据脚本

本贴原创-请勿复制转载,需经本人同意

shell和python混合编写优化iozone测试硬盘读写性能测试脚本

适用平台:linux

编程语言:shell、python

 

测试流程:

将iozone源码包解压,将iozone_Test.sh和read_iozone.py脚本放到源码包的/src/current目录下,

打开终端 输入: chmod +x iozone_Test.sh

然后运行  ./iozone_Test.sh 即可,等待测试数据打印到终端和iozone_result.txt文件导出

编写思路:

通过shell脚本运行iozone,并添加人性化功能,例如提示语,分部分测试等。

通过python脚本来处理生成的数据,然后单纯打印和导出来

shell脚本:

iozone_Test.sh

#!/bin/sh

##################################################################
#																 #	
#			#     #     #####     #     #   #     #				 #
# 			#   #   #     #     #   #   # # #   # # #			 #
#			#     #     #####     #     #   #    # #             #
#                                                                #
#		帮助:													 #
#		将此脚本iozone_Test.sh放到解压后的iozone源码包中\	 #
#		的src/current目录下面									 #
#		然后执行chmod +x iozone_Test.sh 						 #
#		并运行 ./iozone_Test.sh  								 #
# 																 #
cd .
make linux
chmod +x Run_iozone.sh
Num=$1
Num2=$2
if [ !$Num ]
then
 if [ $Num > 0 ]
 then
echo "测试开始"
echo "iozone..."
SIZE=$Num 
NUM=2
SIZE1=`expr $SIZE / $NUM`
SIZE2=`expr $SIZE \* $NUM`
if [ $Num2 -eq 4 ]
then
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE1}G >> ./iozone${SIZE1}G_res1
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE1}G >> ./iozone${SIZE1}G_res2
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE1}G >> ./iozone${SIZE1}G_res3
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE}G >> ./iozone${SIZE}G_res1
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE}G >> ./iozone${SIZE}G_res2
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE}G >> ./iozone${SIZE}G_res3
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE2}G >> ./iozone${SIZE2}G_res1
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE2}G >> ./iozone${SIZE2}G_res2
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE2}G >> ./iozone${SIZE2}G_res3
 chmod +x read_iozone.py
 ./read_iozone.py $SIZE
 echo "测试完毕,导出数据成功"
elif [ $Num2 -eq 1 ]
then
./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE1}G >> ./iozone${SIZE1}G_res1
./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE1}G >> ./iozone${SIZE1}G_res2
./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE1}G >> ./iozone${SIZE1}G_res3
elif [ $Num2 -eq 2 ]
then
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE}G >> ./iozone${SIZE}G_res1
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE}G >> ./iozone${SIZE}G_res2
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE}G >> ./iozone${SIZE}G_res3
elif [ $Num2 -eq 3 ]
then	
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE2}G >> ./iozone${SIZE2}G_res1
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE2}G >> ./iozone${SIZE2}G_res2
 ./iozone -a -i 0 -i 1 -i 2 -r 16m -s ${SIZE2}G >> ./iozone${SIZE2}G_res3
else
 echo “请输入两个参数 ./iozone_Test.sh \<参数一,参数二\>”
fi 
else
 echo "请输入测试内存的1倍大小及其选择自动生成的部分,参数1为内存1倍大小,1/2倍参数2为1,1倍参数2为2,2倍参数为3,三个都测参数2为4,测试单位为G"
 fi
else
 echo "请输入测试内存的1倍大小及其选择自动生成的部分,参数1为内存1倍大小,1/2倍参数2为1,1倍参数2为2,2倍参数为3,三个都测参数2为4,测试单位为G"
fi

read_iozone.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import os
import re
import commands
p=sys.argv[1]
#print type(p)

NUM=int(p)
#print type(NUM)
NUM1=NUM/2
NUM2=NUM*2
print "文件自动生成中..."
#---------------1/2 倍------------------
str_NUM1 = str(NUM1)
n=1
str_n = str(n)
list1 = ['./iozone',str_NUM1,'G_res',str_n] 
str1 = ''.join(list1)
#print str1
f = open(str1,"r")
line_f = f.readlines()
line_26_f = line_f[25]
#print line_26_f
#print line_26_f.split()
write_f = line_26_f.split()[2]
rewrite_f = line_26_f.split()[3]
read_f = line_26_f.split()[4]
reread_f = line_26_f.split()[5]
radom_read_f = line_26_f.split()[6]
radom_write_f = line_26_f.split()[7]

#print write_f,rewrite_f,read_f,reread_f,radom_read_f,radom_write_f

#print "正常退出"
f.close()

n=2
str_n = str(n)
list1 = ['./iozone',str_NUM1,'G_res',str_n] 
str1 = ''.join(list1)
#print str1
f = open(str1,"r")
line_f = f.readlines()
line_26_f = line_f[25]
#print line_26_f
#print line_26_f.split()
write_f2 = line_26_f.split()[2]
rewrite_f2 = line_26_f.split()[3]
read_f2 = line_26_f.split()[4]
reread_f2 = line_26_f.split()[5]
radom_read_f2 = line_26_f.split()[6]
radom_write_f2 = line_26_f.split()[7]

#print write_f2,rewrite_f2,read_f2,reread_f2,radom_read_f2,radom_write_f2


#print "正常退出"
f.close()
n=3
str_n = str(n)
list1 = ['./iozone',str_NUM1,'G_res',str_n] 
str1 = ''.join(list1)
#print str1
f = open(str1,"r")
line_f = f.readlines()
line_26_f = line_f[25]
#print line_26_f
#print line_26_f.split()
write_f3 = line_26_f.split()[2]
rewrite_f3 = line_26_f.split()[3]
read_f3 = line_26_f.split()[4]
reread_f3 = line_26_f.split()[5]
radom_read_f3 = line_26_f.split()[6]
radom_write_f3 = line_26_f.split()[7]

#print write_f3,rewrite_f3,read_f3,reread_f3,radom_read_f3,radom_write_f3

#print "正常退出"
f.close()

aver_write = (int(write_f) + int(write_f2) + int(write_f3)) / 3 / 1024
aver_rewrite = (int(rewrite_f) + int(rewrite_f2) + int(rewrite_f3)) / 3 /1024
aver_read = (int(read_f) + int(read_f2) + int(read_f3)) / 3 / 1024
aver_reread = (int(reread_f) + int(reread_f2) + int(reread_f3)) / 3 /1024
aver_radom_read = (int(radom_read_f) + int(radom_read_f2) + int(radom_read_f3)) / 3 / 1024
aver_radom_write = (int(radom_write_f) + int(radom_write_f2) + int(radom_write_f3)) / 3 / 1024
print str(NUM1)+'G' ,'speed:Mb/s'
print 'write','rewrite','read','reread','radom_read','radom_write'
print aver_write,aver_rewrite,aver_read,aver_reread,aver_radom_read,aver_radom_write
#---------------1倍------------------
str_NUM = str(NUM)
n=1
str_n = str(n)
list1 = ['./iozone',str_NUM,'G_res',str_n] 
str1 = ''.join(list1)
#print str1
f = open(str1,"r")
line_f = f.readlines()
line_26_f = line_f[25]
#print line_26_f
#print line_26_f.split()
write_f = line_26_f.split()[2]
rewrite_f = line_26_f.split()[3]
read_f = line_26_f.split()[4]
reread_f = line_26_f.split()[5]
radom_read_f = line_26_f.split()[6]
radom_write_f = line_26_f.split()[7]

#print write_f,rewrite_f,read_f,reread_f,radom_read_f,radom_write_f

#print "正常退出"
f.close()

n=2
str_n = str(n)
list1 = ['./iozone',str_NUM,'G_res',str_n] 
str1 = ''.join(list1)
#print str1
f = open(str1,"r")
line_f = f.readlines()
line_26_f = line_f[25]
#print line_26_f
#print line_26_f.split()
write_f2 = line_26_f.split()[2]
rewrite_f2 = line_26_f.split()[3]
read_f2 = line_26_f.split()[4]
reread_f2 = line_26_f.split()[5]
radom_read_f2 = line_26_f.split()[6]
radom_write_f2 = line_26_f.split()[7]

#print write_f2,rewrite_f2,read_f2,reread_f2,radom_read_f2,radom_write_f2


#print "正常退出"
f.close()
n=3
str_n = str(n)
list1 = ['./iozone',str_NUM,'G_res',str_n] 
str1 = ''.join(list1)
#print str1
f = open(str1,"r")
line_f = f.readlines()
line_26_f = line_f[25]
#print line_26_f
#print line_26_f.split()
write_f3 = line_26_f.split()[2]
rewrite_f3 = line_26_f.split()[3]
read_f3 = line_26_f.split()[4]
reread_f3 = line_26_f.split()[5]
radom_read_f3 = line_26_f.split()[6]
radom_write_f3 = line_26_f.split()[7]

#print write_f3,rewrite_f3,read_f3,reread_f3,radom_read_f3,radom_write_f3

#print "正常退出"
f.close()

aver_write2 = (int(write_f) + int(write_f2) + int(write_f3)) / 3 / 1024
aver_rewrite2 = (int(rewrite_f) + int(rewrite_f2) + int(rewrite_f3)) / 3 /1024
aver_read2 = (int(read_f) + int(read_f2) + int(read_f3)) / 3 /1024
aver_reread2 = (int(reread_f) + int(reread_f2) + int(reread_f3)) / 3 / 1024
aver_radom_read2 = (int(radom_read_f) + int(radom_read_f2) + int(radom_read_f3)) / 3 / 1024
aver_radom_write2 = (int(radom_write_f) + int(radom_write_f2) + int(radom_write_f3)) / 3 / 1024
print str(NUM)+'G' ,'speed:Mb/s'
print 'write','rewrite','read','reread','radom_read','radom_write'
print aver_write2,aver_rewrite2,aver_read2,aver_reread2,aver_radom_read2,aver_radom_write2
#---------------2 倍------------------
str_NUM2 = str(NUM2)
n=1
str_n = str(n)
list1 = ['./iozone',str_NUM2,'G_res',str_n] 
str1 = ''.join(list1)
#print str1
f = open(str1,"r")
line_f = f.readlines()
line_26_f = line_f[25]
#print line_26_f
#print line_26_f.split()
write_f = line_26_f.split()[2]
rewrite_f = line_26_f.split()[3]
read_f = line_26_f.split()[4]
reread_f = line_26_f.split()[5]
radom_read_f = line_26_f.split()[6]
radom_write_f = line_26_f.split()[7]

#print write_f,rewrite_f,read_f,reread_f,radom_read_f,radom_write_f

#print "正常退出"
f.close()

n=2
str_n = str(n)
list1 = ['./iozone',str_NUM2,'G_res',str_n] 
str1 = ''.join(list1)
#print str1
f = open(str1,"r")
line_f = f.readlines()
line_26_f = line_f[25]
#print line_26_f
#print line_26_f.split()
write_f2 = line_26_f.split()[2]
rewrite_f2 = line_26_f.split()[3]
read_f2 = line_26_f.split()[4]
reread_f2 = line_26_f.split()[5]
radom_read_f2 = line_26_f.split()[6]
radom_write_f2 = line_26_f.split()[7]

#print write_f2,rewrite_f2,read_f2,reread_f2,radom_read_f2,radom_write_f2


#print "正常退出"
f.close()
n=3
str_n = str(n)
list1 = ['./iozone',str_NUM2,'G_res',str_n] 
str1 = ''.join(list1)
#print str1
f = open(str1,"r")
line_f = f.readlines()
line_26_f = line_f[25]
#print line_26_f
#print line_26_f.split()
write_f3 = line_26_f.split()[2]
rewrite_f3 = line_26_f.split()[3]
read_f3 = line_26_f.split()[4]
reread_f3 = line_26_f.split()[5]
radom_read_f3 = line_26_f.split()[6]
radom_write_f3 = line_26_f.split()[7]

#print write_f3,rewrite_f3,read_f3,reread_f3,radom_read_f3,radom_write_f3

#print "正常退出"
f.close()

aver_write3 = (int(write_f) + int(write_f2) + int(write_f3)) / 3 / 1024
aver_rewrite3 = (int(rewrite_f) + int(rewrite_f2) + int(rewrite_f3)) / 3 /1024
aver_read3 = (int(read_f) + int(read_f2) + int(read_f3)) / 3 / 1024
aver_reread3 = (int(reread_f) + int(reread_f2) + int(reread_f3)) / 3 / 1024
aver_radom_read3 = (int(radom_read_f) + int(radom_read_f2) + int(radom_read_f3)) / 3 / 1024
aver_radom_write3 = (int(radom_write_f) + int(radom_write_f2) + int(radom_write_f3)) / 3 / 1024
print str(NUM2)+'G' , 'speed:Mb/s'
print 'write','rewrite','read','reread','radom_read','radom_write'
print aver_write3,aver_rewrite3,aver_read3,aver_reread3,aver_radom_read3,aver_radom_write3

#---------------读写性能数据导出到文本 down-------------
datetime = commands.getoutput('date')
fw = file("iozone_result.txt","a+")
#fw.truncate()
fw.write("\r\n\r\n\r\n" + datetime + "\r\n" + "  V     V     V\r\n硬盘读写性能数据结果:\r\n")
fw.write(str(NUM1)+'G' + '  Speed:Mb/s\r\n')
fw.write('write  rewrite  read  reread  radom_read  radom_write\r\n')
fw.write(str(aver_write) + ' ' + str(aver_rewrite) + ' ' + str(aver_read) + ' ' + str(aver_reread) + ' ' + str(aver_radom_read) + ' ' + str(aver_radom_write))
fw.write('\r\n' + str(NUM)+'G' + '  Speed:Mb/s\r\n')
fw.write('write  rewrite  read  reread  radom_read  radom_write\r\n')
fw.write(str(aver_write2) + ' ' + str(aver_rewrite2) + ' ' + str(aver_read2) + ' ' + str(aver_reread2) + ' ' + str(aver_radom_read2) + ' ' + str(aver_radom_write2))
fw.write('\r\n' + str(NUM2)+'G' + '  Speed:Mb/s\r\n')
fw.write('write  rewrite  read  reread  radom_read  radom_write\r\n')
fw.write(str(aver_write3) + ' ' + str(aver_rewrite3) + ' ' + str(aver_read3) + ' ' + str(aver_reread3) + ' ' + str(aver_radom_read3) + ' ' + str(aver_radom_write3))
fw.close()





#---------------读写性能数据导出到文本 up--------------

运行结果:

这个数据就是得出了的平均结果

猜你喜欢

转载自blog.csdn.net/rong11417/article/details/87912559