fio数据简单抓取
上文我们完成了一些fio output数据的简单抓取,本文将针对抓取的数据做进一步的处理,输出到表格之中,方便我们查看,统计结果。
本文先使用最简单的方法创建csv档案
我们现有个基本认知,在csv档案中,默认列用 逗号(,)进行分隔。也就是假如你在Linux下使用shell 命令 echo "1,2" > test.csv
,你用表格软件打开test.csv的话,它是这样的
OK,所以,已知用逗号隔开字符串,再输出到csv档案中就能得到一个简单的表格,求:如何将我们需要的fio数据再放到表格中?
解:
我先放上上文我们得到的两个字典,也就是本文中readData,writeData = myclass.run()
得到的两个字典(PS:细心的小伙伴应该发现了,相较上文,修改了字典中Key的名字,这里是为了方便后续取值)
readData
{‘IOPS’: ‘527k’, ‘BW’: ‘2158MB/s’, ‘BiW’: ‘2058MiB/s’, ‘clatv’: ‘usec’, ‘clatavg’: ‘180.34’, ‘clatmin’: ‘6’, ‘clatmax’: ‘27758’, ‘qos9’: ‘486’, ‘qos29’: ‘865’, ‘qos39’: ‘1336’}
writeData
{‘IOPS’: ‘527k’, ‘BW’: ‘2158MB/s’, ‘BiW’: ‘2058MiB/s’, ‘clatv’: ‘usec’, ‘clatavg’: ‘58.22’, ‘clatmin’: ‘8’, ‘clatmax’: ‘31750’, ‘qos9’: ‘81’, ‘qos29’: ‘130’, ‘qos39’: ‘206’}
详细代码:
def writeToCSV(data,rwType):
global va
csvFile = os.path.join(os.getcwd(),"fioData.csv")
#设定一下表格中需要展示的项目,我这里只筛选了四项
dataType = ["item","IOPS","BW","clatavg","qos39"]
#先创建表头
if va == 1:
msg = ""
for key in dataType:
msg += f"{key},\n"
with open(csvFile,'w') as f:
f.write(msg)
va += 1
#读取表格中的文件,readlines()会按行列成List格式,即myData的类型是列表
with open(csvFile,'r') as f:
myData = f.readlines()
# n 代表行号
n = 0
for line in myData:
#第一行显示的是 item ,read , write这些标题
if n == 0:
#利用 replace 替换掉换行符
msg = line.replace("\n","%s,\n"%rwType)
else:
#同样可以用re 来进行替换动作,dataType[n]读到我们要显示的项目名,如IOPS,再用 data["IOPS"]抓到之前字典内对应的数据, +=让msg慢慢完整
msg += re.sub("\n",f"{data[dataType[n]]},\n",line)
n += 1
#把完整的msg数据直接覆盖写进csv档案里面
with open(csvFile,'w') as f:
f.write(msg)
if __name__ == "__main__":
#创建一个全局变量用于判断是否需要先写一个头文件,就是列表需要显示的ITEM名之类的
global va
va = 1
#上文提到的一个类,实例化它
myclass = saveFio()
#将处理过的数据返回并赋值,readData与writeData都是字典类型的
readData,writeData = myclass.run()
#调用本文的函数进行处理,将结果写到csv档案中
writeToCSV(readData,"read")
writeToCSV(writeData,"write")
执行完毕后,我们得到一个fioData.csv的档案,打开后的效果是这样的: