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 vacsvFile = 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 = 0for 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 vava = 1#上文提到的一个类,实例化它myclass = saveFio()#将处理过的数据返回并赋值,readData与writeData都是字典类型的readData,writeData = myclass.run()#调用本文的函数进行处理,将结果写到csv档案中writeToCSV(readData,"read")writeToCSV(writeData,"write")
执行完毕后,我们得到一个fioData.csv的档案,打开后的效果是这样的: