存储系统基准评测程序生成方法及装置的制造方法
【技术领域】
[0001]本发明总体地涉及高性能计算集群的存储系统性能评测技术领域,更具体地涉及存储系统基准测试程序生成方法和装置。
【背景技术】
[0002]并行存储系统的性能评测对于存储系统架构人员、高性能程序开发人员、高性能用户都特别重要。对于大规模高性能计算程序的开发人员来说,性能评测可以帮助快速评价输入输出模式、参数;对于高性能存储系统的设计人员来说,性能评测可以指导采购、选择系统配置和调优参数;对于高性能应用程序用户来说,可以选择最优的输入输出中间件、对应用程序的内置参数进行设置。
[0003]但是高性能存储系统的性能评测是具有挑战性的工作。从存储设备、硬件缓存、系统内核和上层中间件,各层次之间的交互特别复杂,很难建立简单有效的评价模型。同时,系统的评测需要结合不同目标应用程序的具体特征,对一类程序较为友好的存储系统运行另外一类程序时,可能不能发挥最佳性能。
[0004]因此,高性能存储系统的评测需要根据目标程序的负载特征,选取合适的评测程序,设定代表性参数,进行重复多次试验综合评价。高性能存储系统性能评测的主要方法有:
[0005].最精准的性能评测应该是选取目标应用程序直接多次运行并收集、分析性能结果,缺点是太耗费时间和资源,而不适合迭代式配置、评测、优化、配置的模式。
[0006].与此相反,读写带宽专项项测试程序使用简单,缺点是不考虑具体应用程序的特点,只关心能达到最优性能的情况。
[0007].采用人工合成的测试程序进行评测,通过运行参数来模拟不同应用程序的负载行为。考虑到高性能程序的负载特征多样性,设计一个具有功能多样的、具有代表性的、可配置的基准测试程序是十分困难的。
[0008].运行大型应用程序的核心精简程序,代替原始应用程序运行,作为性能评测的参考。这种方法的优点是运行时间和占用资源都明显降低,同时又能相对准确反映原始应用的输入输出特征。另外,这种方法也适合提供给第三方用来评测而无需担心知识产权问题。
[0009]综上,比较理想的存储系统性能评测方式是通过运行和原始程序输入输出特征完全一致的精简程序,快速、准确地评价存储系统。这里的主要挑战是:传统上生成精简程序依赖手工进行,目前没有一种自动生成此类精简程序的有效方法。手工对大型程序进行删减费时费力,而且容易出错。一般来说,由于代码结构和模块的复杂性,这类工作仅适合系统开发人员完成,普通用户难以胜任。
[0010]在高性能计算领域,一种比较流行的生成此类精简程序的方法是依靠分析、重放高性能程序的执行踪迹,合成精简程序用于评测。这种方法的显著缺点是收集执行踪迹的时间和资源开销太大、扩展性不好,而且不能适应不同参数配置的情况,比如输入输出模式、缓冲区大小和读写进程分组粒度等。另外,朴素的踪迹回放不能处理好生成评测程序的可移植性,不能适应平台配置的重要改变。
[0011]因此,迫切需要一种能够自动生成原始应用程序的精简程序的方法,以便使用这样的精简程序快速、准确地评价高性能存储系统的性能。
【发明内容】
[0012](—)发明目的
[0013]本发明的目的是为了快速、准确评测高性能存储系统的性能、辅助存储系统设计。旨在提出一种自动化的评测程序生成方法,既能节省评测程序的运行时间和资源开销,又能保持较高精度,准确反应原始应用程序在高性能存储系统上面的性能。
[0014](二)
【发明内容】
[0015]本发明提出基于程序切片技术的此类精简程序生成方法,针对原始应用程序编译后的中间代码,通过在编译器中分析数据依赖、控制依赖、和通信依赖自动抽取所有和输入输出相关的语句操作,组成一个可编译、可运行、人工可读、可移植的精简程序。本发明建立在一个重要观察基础之上,即高性能程序读写操作的内容通常和程序的读写行为特征往往无关,而绝大部分计算和通信操作又是为了计算读写操作的内容而进行的,因而绝大部分计算和通信操作是与本发明所关注的程序的读写行为特征无关的。因此通过删除那些不相关的语句,从原始程序中生成精简程序可以有效实现本发明的目的。
[0016]根据本发明的一个方面,提供了一种计算机执行的通过对源应用程序进行精简,生成用于对存储系统进行评测的精简程序的存储系统基准评测程序生成方法,可以包括:从规范化后的源程序获得中间代码;识别中间代码中的切片起点;基于识别得到的切片起点进行静态程序切片;以及基于得到的各个静态程序切片生成精简代码。
[0017]在存储系统基准评测程序生成方法中,基于得到的各个静态程序切片生成精简代码可以包括在生成精简代码过程中进行插粧操作,由此能够在该存储系统基准评测程序被执行时统计读写操作次数、数据块大小、所需时间信息,从而生成读写带宽信息。
[0018]在存储系统基准评测程序生成方法中,在从源程序获得中间代码之前,还可以包括源代码规范化步骤,使得每一个独立的代码语句单独成行,包括将原本在一行的多条源代码语句分拆成多行连续的源代码。
[0019]在存储系统基准评测程序生成方法中,识别中间代码中的切片起点可以包括识别中间代码中的读写操作语句。
[0020]在存储系统基准评测程序生成方法中,识别中间代码中的切片起点可以包括:识别采用MP1-1O接口、POSIX接口、AD1S接口中的任何一个的读写函数调用作为切片起点。
[0021]在存储系统基准评测程序生成方法中,所述基于识别得到的切片起点进行静态程序切片可以包括:基于识别到的每个切片起点,对程序中间代码进行迭代式静态分析,计算程序切片。
[0022]在存储系统基准评测程序生成方法中,所述基于切片起点对程序中间代码进行迭代式静态分析以计算程序切片过程可以包括:对于每个切片起点:根据数据依赖迭代式计算和该切片起点直接相关的变量和语句;根据控制依赖和通信依赖迭代式计算间接相关的变量和程序语句;以及收集所有直接相关和间接相关的语句作为程序切片。。
[0023]在存储系统基准评测程序生成方法中,根据数据依赖迭代式计算和该切片起点直接相关的变量和语句可以包括:根据不同读写函数的定义,将相关调用参数变量加入相应的初始相关变量集合,包括:1)将读写操作的数据内容变量作为无关变量,后续计算依赖时只保留包括声明、指针赋值在内相关操作;以及2)将其它所有变量视为读写行为控制变量,加入初始相关变量集合。
[0024]在存储系统基准评测程序生成方法中,基于得到的各个静态程序切片生成精简代码可以包括:记录切片后要删除的语句行号信息;基于所记录的切片后要删除的语句行号信息,从原始应用程序源代码中删除所述要删除的语句行号信息所指示的语句。
[0025]在存储系统基准评测程序生成方法中,基于得到的各个静态程序切片生成精简代码还可以包括:从原始应用程序源代码中识别并删除对应无关的计算和通信操作的语句。
[0026]存储系统基准评测程序生成方法还可以包括:代码精简时标记源程序中被删除的循环语句;以及在最终精简程序中标记位置处,插入休眠语句。
[0027]在存储系统基准评测程序生成方法中,生成精简代码还可以包括:处理精简源代码中各种兼容的语法、条件表达式、函