本发明涉及存储产品性能测试技术领域,具体涉及一种vdbench性能测试结果分析方法、系统及设备。
背景技术:
vdbench是一种用于裸盘或文件系统的io负载生成工具,可用与存储阵列的压力测试、数据一致性测试及性能测试。
python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。python采用动态类型系统。在编译的时候,python不会检查对象是否拥有被调用的方法或者属性,而是直至运行时,才做出检查。所以操作对象时可能会抛出异常。不过,虽然python采用动态类型系统,它同时也是强类型的。python禁止没有明确定义的操作,比如数字加字符串。
mysql是一个关系型数据库管理系统,由瑞典mysqlab公司开发,目前属于oracle旗下公司。mysql最流行的关系型数据库管理系统。
性能是存储产品极为重要的考核指标,因此各存储厂家及用户都会对存储进行严格的性能测试,可用于完成该项测试的测试工具有很多,例如vdbench、iometer、iozone、fio等等,这其中,vdbench由于其功能的强大、测试的专业性而普遍受到青睐。对于存储厂商而言,通常有多款产品、或者同款产品的不同配置及不同版本需要进行性能测试,并进行性能的对比,而vdbench存在一定的缺陷,即:vdbench不能将测试结果进行结构化的保存和管理;vdbench不能自动将测试数据图形化。
技术实现要素:
针对vdbench不能将测试结果进行结构化的保存和管理;vdbench不能自动将测试数据图形化的问题,本发明提供一种vdbench性能测试结果分析方法、系统及设备。
本发明采用的是技术方案是:
第一方面,本发明技术方案提供一种vdbench性能测试结果分析方法,包括如下步骤:
获取vdbench测试结果并对vdbench测试结果html文件进行解析处理;
将解析处理后的数据导入数据库;
对数据库表单进行的查询并形成字典,根据字典生成折线图并导出保存。
进一步的,所述的获取vdbench测试结果并对vdbench测试结果html文件进行解析处理的步骤中,vdbench测试结果包括parmfile.html及totals.html;
parmfile.html:记录vdbench测试脚本,其中包括hd、sd、wd、rd配置信息;
totals.html:记录所有rd运行结束后的性能测试结果平均值,其中关键指标信息包括iops、带宽、延时、iodepth;
totals.html中的关键指标信息通过rd的id与parmfile.html文件中的各个配置参数对应。
进一步的,所述的获取vdbench测试结果并对vdbench测试结果html文件进行解析处理的步骤具体包括:
对html文件进行爬虫抓取关键字形成字典;其中关键字包括wd、rd;
对字典中关键字匹配进行两个解析结果的合并;
将合并结果形成csv文件。
进一步的,所述的将解析处理后的数据导入数据库的步骤包括:
s21:获取产品型号确定数据库名称;
s22:获取测试配置及日期确定数据库表单名称;
s23:判断数据库是否已经存在;若否,执行步骤s24;若是,执行步骤s27;
s24:创建数据库;
s25:在数据库中创建表;
s26:将csv文件导入表;
s27:判断表是否存在,若是,执行步骤s28,若否,执行步骤s25;
s28:输出重复信息程序中断运行。
进一步的,所述的对数据库表单进行的查询并形成字典,根据字典生成折线图并导出保存的步骤具体包括:
针对已有的数据库表单,对表格进行groupby的查询形成每项的数据集;
遍历所有数据集项目组合条件下的iops、mbps及art,并形成字典;
根据字典绘制折线图,以组合值作为图名,保存到指定目录。
第二方面,本发明技术方案提供一种vdbench性能测试结果分析系统,通过python和mysql两种工具实现测试结果分析,包括解析处理模块、导入模块、折线图生成模块;;
解析处理模块,用于获取vdbench测试结果并对vdbench测试结果html文件进行解析处理;
导入模块,用于将解析处理后的数据导入数据库;
折线图生成模块,用于对数据库表单进行的查询并形成字典,根据字典生成折线图并导出保存。
进一步的,所述的vdbench测试结果包括parmfile.html及totals.html;
parmfile.html:记录vdbench测试脚本,其中包括hd、sd、wd、rd配置信息;
totals.html:记录所有rd运行结束后的性能测试结果平均值,其中关键指标信息包括iops、带宽、延时、iodepth;
totals.html中的关键指标信息通过rd的id与parmfile.html文件中的各个配置参数对应。
进一步的,所述的解析处理模块包括关键字抓取单元、匹配单元、csv生成单元;
关键字抓取单元,用于对html文件进行爬虫抓取关键字形成字典;其中关键字包括wd、rd;
匹配单元,用于对字典中关键字匹配进行两个解析结果的合并;
csv生成单元,用于将合并结果形成csv文件。
进一步的,所述的折线图生成模块包括数据集生成单元、遍历处理单元和折线图绘制单元;
数据集生成单元,用于针对已有的数据库表单,对表格进行groupby的查询形成每项的数据集;
遍历处理单元,用于遍历所有数据集项目组合条件下的iops、mbps及art,并形成字典;
折线图绘制单元,用于根据字典绘制折线图,以组合值作为图名,保存到指定目录。
python对vdbench结果html文件的解析和数据合并。python远程登陆并管理mysql数据库,实现数据导入、查询及生成数据字典python根据数据字典生成折线图并导出保存。
第三方面,本发明技术方案还提供一种电子设备,包括存储器和处理器,所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如第一方面所述的一种vdbench性能测试结果分析方法。
从以上技术方案可以看出,本发明具有以下优点:测试结果进行有效处理,并调用mysql,创建数据库,将处理结果导入数据库进行结构化保存;python通过对数据库的数据查询,使用其各种库完成相关折线图的实现,并将折线图导出、保存,以便测试人员分析。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种vdbench性能测试结果分析方法的示意性流程图。
图2是本发明实施例提供的一种vdbench性能测试结果分析方法的示意性流程图。
图3为本发明实施例提供的一种电子设备的实体结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
实施例一
如图1所示,本发明实施例提供一种vdbench性能测试结果分析方法,在linux系统服务器中装python开发平台以及mysql数据库,将vdbench测试结果存放于指定路径。其中python需要远程安装如下库:beautifulsoup、argparse、csv、matplotlib、pandas、pymysql、numpy、codecs,基于以上库,确保python可远程登陆mysql数据库;分析方法包括如下步骤:
s1:获取vdbench测试结果并对vdbench测试结果html文件进行解析处理;
vdbench保存的结果中包括大量的html文件,其中最为重要的有两个:parmfile.html及totals.html。
parmfile.html:记录vdbench测试脚本,其中包括hd、sd、wd、rd等配置信息。其中hd记录的是测试压力机信息、sd记录的是待测裸盘或文件系统配置信息、wd记录的是workload,即压力负载模型,例如顺序8k读业务、rd记录的是测试项,通过调用wd实现,每个rd最终会体现为如下几个关键字段:seekpct(顺序/随机)、readpct(读操作比例)、rhpct(读缓存命中比例)、whpct(写缓存命中比例)、blocksize(io操作块大小)。
totals.html:记录所有rd运行结束后的性能测试结果平均值,其中关键指标包括iops、带宽、延时、iodepth等信息,这些信息通过rd的id与parmfile.html文件中的各个关键配置参数对应。
vdbench测试结果的html格式不利于数据库维护及保存,并且由于其格式限制,totals.html文件中每个性能值与parmfile.html文件中的测试项是通过链接进行绑定,无法性能表格化绑定显示。
结果的解析与处理的目的在于,将totals.html中的每一条性能测试结果,与其对应的测试模型进行一一绑定,并形成csv表格,便于后期导入数据库。
对于两个html文件进行解析的方式是:利用python的beautifulsoup及字典功能,对html进行爬虫抓取,抓取wd、rd等关键字,形成两个字典,并通过对字典中关键字匹配进行两个解析结果的合并,然后通过python的csv_write功能形成csv文件。
s2:将解析处理后的数据导入数据库;
本发明目的之一是希望能长期保存性能测试结果,因此采用数据库保存及管理的方式。为了确定数据库导入时数据的唯一性,即不会覆盖已有数据,需要明确数据库即表的命名规范。
通过python的pymysql可实现对mysql数据库的远程登陆及管理。
本发明中,以产品型号作为数据库名称,用以区别不通产品的性能测试结果。在此之下以产品配置(如cpu、内存、硬盘)、系统版本、raid类型及数量、卷类型及数量、测试时间组合为表名,以区分同产品下不同配置、不同版本及不同轮次的测试结果。以上信息通过python的input功能提示测试人员输入。组合生成数据库名称及表名称后,会对已有数据库和表的名称进行检查,避免出现名称相同而导致导入数据覆盖已有数据的问题。创建相应数据库及表后,通过python调用mysql的loaddatalocalinfile语句,将已有的csv文件导入到表中,完成性能数据的长期结构化保存;如图2所示,具体步骤包括:
s21:获取产品型号确定数据库名称;
s22:获取测试配置及日期确定数据库表单名称;
s23:判断数据库是否已经存在;若否,执行步骤s24;若是,执行步骤s27;
s24:创建数据库;
s25:在数据库中创建表;
s26:将csv文件导入表;
s27:判断表是否存在,若是,执行步骤s28,若否,执行步骤s25;
s28:输出重复信息程序中断运行。
s3:对数据库表单进行的查询并形成字典,根据字典生成折线图并导出保存;
需要说明的是,本实施例中,通过python的matplotlib.pyplot库,可实现绘图功能。经过上述步骤,已经导入数据库表中的性能数据格式如表1所示,其中前5项来自于parmfile.html的处理结果,后三项来自于totals.html的处理结果;
表1
针对已有的数据库表单,通过python执行select语句,对该表格中前5项进行groupby的查询,并形成字典,以此形成每项的数据集,如下:
seekpct={s1,s2,s3…}
readpct={rdp1,rdp2,rdp3…}
rhpct={rhp1,rhp2,rhp3…}
whpct={whp1,whp2,whp3…}
blocksize={bs1,bs2,bs3…}
以此为条件进行前5项目的for遍历组合,然后通过select语句遍历所有组合条件下的iops、mbps及art,并形成字典,通过matplotlib.pyplot实现该字典的折线图绘制,以组合值作为图名,保存到指定目录。实现了对vdbench结果的数据库保存以及初步分析,并生成折线图保存。
需要说明的是,通过上述方案,可进一步对vdbench的更详细结果进行分析处理并保存,比如同一测试项,长时间内每秒延时波动的折线图分析等等。
实施例二
本发明技术方案提供一种vdbench性能测试结果分析系统,通过python和mysql两种工具实现测试结果分析,包括解析处理模块、导入模块、折线图生成模块;
解析处理模块,用于获取vdbench测试结果并对vdbench测试结果html文件进行解析处理;
导入模块,用于将解析处理后的数据导入数据库;
折线图生成模块,用于对数据库表单进行的查询并形成字典,根据字典生成折线图并导出保存。
所述的vdbench测试结果包括parmfile.html及totals.html;
parmfile.html:记录vdbench测试脚本,其中包括hd、sd、wd、rd配置信息;
totals.html:记录所有rd运行结束后的性能测试结果平均值,其中关键指标信息包括iops、带宽、延时、iodepth;
totals.html中的关键指标信息通过rd的id与parmfile.html文件中的各个配置参数对应。
所述的解析处理模块包括关键字抓取单元、匹配单元、csv生成单元;
关键字抓取单元,用于对html文件进行爬虫抓取关键字形成字典;其中关键字包括wd、rd;
匹配单元,用于对字典中关键字匹配进行两个解析结果的合并;
csv生成单元,用于将合并结果形成csv文件。
所述的折线图生成模块包括数据集生成单元、遍历处理单元和折线图绘制单元;
数据集生成单元,用于针对已有的数据库表单,对表格进行groupby的查询形成每项的数据集;
遍历处理单元,用于遍历所有数据集项目组合条件下的iops、mbps及art,并形成字典;
折线图绘制单元,用于根据字典绘制折线图,以组合值作为图名,保存到指定目录。
python对vdbench结果html文件的解析和数据合并。python远程登陆并管理mysql数据库,实现数据导入、查询及生成数据字典python根据数据字典生成折线图并导出保存。
实施例三
图3为本发明实施例提供的一种电子设备的实体结构示意图,该电子设备可以包括:处理器(processor)510、通信接口(communicationsinterface)520、存储器(memory)530和总线540,其中,处理器510,通信接口520,存储器530通过总线540完成相互间的通信。总线540可以用于电子设备与传感器之间的信息传输。处理器510可以调用存储器530中的逻辑指令,以执行如下方法:获取vdbench测试结果并对vdbench测试结果html文件进行解析处理;将解析处理后的数据导入数据库;对数据库表单进行的查询并形成字典,根据字典生成折线图并导出保存。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。