一种实时性能测试方法与系统的制作方法

文档序号:7810171阅读:178来源:国知局
一种实时性能测试方法与系统的制作方法
【专利摘要】本发明公开了一种实时性能测试方法,应用于嵌入式系统的实时性能测试。所述方法包括以下步骤:在上位机中对应用程序源代码进行时间特征建模;利用所述建模过程得到的时间特征模型完成对源代码的插桩操作;将所述源代码编译链接好后下载到下位机,并通过所述上位机启动所述应用程序;所述应用程序在运行期间采集测试数据,并根据预先设定的传输规则将实时存储到特定数据容器的数据传回所述上位机;经过数据分析后得到所述应用程序的实时性能测试报告。本发明实现了对嵌入式实时应用程序的实时性能测试,具有测试过程全自动化、误差小和结果详尽的优点。本发明同时还公开了一种应用上述方法的系统。
【专利说明】一种实时性能测试方法与系统

【技术领域】
[0001] 本发明涉及嵌入式系统性能测试领域,尤其涉及嵌入式系统上对实时性有较高要 求的应用程序的时间性能测试。

【背景技术】
[0002] 嵌入式系统中的实时应用程序的正确性不仅依赖于系统计算的逻辑结果,还依赖 于产生这个结果的时间。嵌入式实时应用程序要求能够在确定的时间内或在指定的时刻完 成特定的系统功能或能够与外部或内部的组件同步或异步地做出响应。因此,在设计和实 现嵌入式实时应用程序时,需要对程序中的每一个组件的运行时间都能够做到必要精度的 预估,否则很难保证在确定的时间内获得想要的处理结果。
[0003] 现在嵌入式实时应用程序开发人员在进行应用程序开发时,为了预估应用程序中 的每一个组件确切地运行时间,只能通过在每个需要预估运行时间的组件前后插入桩语 句,并在多次人工运行程序之后才能确定该组件是否满足实时性要求。这样做的缺点非常 明显:人工插装很繁琐,相当浪费精力,无法做到对同一条件多次验证,而且得到多次运行 程序相关组件的运行时间的统计结果;很难对源代码中出现的递归、循环、扇出等语句块的 运行时间进行预估;获取时间的精度与程序员所掌握的获取系统时间的技能相关,一般程 序员无法保证获取到高精度的时间数值。所以,需要有一种可以能够对用户所关心的嵌入 式实时应用程序中的多个组件进行自动实时性能分析的方法和工具来解放相关开发人员。


【发明内容】

[0004] 本发明的技术用于解决问题:克服现有技术的不足,提供一种能够自动对嵌入式 实时应用程序进行实时性能进行检测的方法和系统,应用这个方法完成的系统可以根据用 户的需要,自动完成对应用程序中的函数、任务,以及函数或任务中的循环、递归或扇出调 用等组件运行时间的测量,并能根据测量的结果和用户预先输入的实时性能预期结果,给 出该应用程序的实时性能分析报告,以便用户能够根据分析报告优化应用程序中不符合要 求的组件。本发明实现了对嵌入式实时应用程序的实时性能全自动测试,具有测试过程全 自动化、误差小和结果详尽的优点,完全能够满足用户对于嵌入式实时应用程序实时性能 测试的需求。
[0005] 为了实现上述目的,本发明提供了一种能够自动对嵌入式实时应用程序进行实时 性能进行检测的方法,该方法包括以下步骤:
[0006] A.在上位机中对应用程序源代码进行时间特征建模,以便能够得到该应用程序源 代码的所有关键时间节点的信息。如图2所示,所述应用程序的时间特征模型的关键时间 节点包括时间起始节点、时间截止节点、递归关键时间节点、循环关键时间节点、扇出关键 时间节点、函数或任务结束节点、return结束节点;其中循环关键时间节点又包含for循环 关键时间节点、while循环关键时间节点和do…while关键时间节点。其中,return是指 程序语言中的返回语句的关键字;for、while和do…while是程序编程语言中常见的三种 循环控制结构的关键字。
[0007] B.利用所述建模过程得到的应用程序时间特征模型完成所述源代码的插桩操作。 在对源代码插桩时,需要考虑时间特征模型中的每一个关键时间节点的运行时特征和该节 点前后是否有其他语法结构来确定桩语句的位置;影响桩语句插入位置的原因包括关键时 间节点前后是否存在其他语句、关键节点前后是否存在圆括号或花括号、关键节点中是否 存在return语句等。
[0008] C.将所述源代码编译链接好后下载到下位机,并通过所述上位机启动所述应用 程序。利用上位机启动所述下位机上的应用程序需要搭建上位机与下位机的专用通信渠 道,可以利用串口通信协议或TCP/IP协议完成启动指令的传输和反馈信息的回传。这里的 TCP/IP指的是因特网最基本的网络通讯协议,由网络层的IP协议和传输层的TCP协议组 成。
[0009] D.所述应用程序在运行期间采集测试数据,并根据预先设定的传输规则将实时存 储到特定数据容器的数据传回所述上位机。由于只关注函数或任务,以及时间特征模型关 键节点的运行时间,故在所述应用程序运行期间采集到的每一条记录只需包含时间信息归 属对象编号和运行时间信息;运行时间的检测精度可以根据需要设定为毫秒或纳秒。下位 机中用于存储前述记录的数据容器可以采用消息栈、消息队列或消息邮箱来充当,但推荐 使用消息栈来存储运行时间记录。所述的传输规则指的是下位机向上位机传输采集到的测 试数据的上传时间和上传频率的定义;由于下位机的存储器容量有限,再加上频繁上传数 据对应用程序的实时性能有极大的影响,故需要对传输规则进行定义,最理想的情况是在 下位机上的应用程序运行完毕后再将所有存储到的数据回传到上位机中处理。
[0010] E.经过数据分析后得到所述应用程序的实时性能测试报告。所述的数据分析主 要包括对回传到上位机的数据进行归属分析、周期分析和异常分析,最后将数据分析得到 的结果与用户在检测前输入的预期运行时间、预期运行周期、预期完成时刻等数据进行匹 配分析,即可生成该应用程序中用户所关心的函数或任务,以及时间特征模型中关键节点 的实时性能测试结果,最终呈现给用户的是相关统计图表和该应用程序的实时性能优化建 议。
[0011] 一种实时性能测试系统,包括部署在所述上位机上的测试终端和部署在所述下位 机上的测试代理:所述上位机包括时间特征建模器、插桩位置分析器、插桩器、交叉编译工 具链、数据上传下载器和数据分析与报告生成器;所述下位机包括数据上传下载器、测试任 务调度器;上位机和下位机之间通过串口或TCP/IP信道来完成通信。其中,在上位机中:
[0012] 时间特征建模器,用于对工程源代码进行时间特征建模,并将生成的时间特征模 型基础数据送外插桩位置分析器;
[0013] 插桩位置分析器,用于对时间特征模型基础数据进行分析,并将生成的插桩信息 数据文件送往插桩器;
[0014] 插桩器,利用输入的插桩信息数据文件和桩函数库完成对工程源代码的插桩操 作,并将插桩后的工程源代码送外交叉编译工具链;
[0015] 交叉编译工具链,用于编译、链接插桩后的工程源代码,并将生成的二进制文件送 外数据上传下载器;
[0016] 数据上传下载器,用于完成在上位机与下位机之间的控制指令与数据文件的传输 操作;
[0017] 数据分析与报告生成器,用于完成对下位机传回的测试采集数据进行分析整理, 并生成方便用户查看的实时性能测试报告。
[0018] 在下位机中:
[0019] 数据上传下载器,用于接收来自上位机的测试指令和测试配置数据,并将下位机 采集到的测试数据上传到上位机。
[0020] 测试任务调度器,用于对下载到下位机中的测试任务进行排队,在接收到上位机 传输来的测试启动指令后调度测试任务运行,以采集该测试任务所需要的测试数据。
[0021] 本发明利用对所述应用程序的时间特征建模,完成了对所述应用程序中所有关键 时间节点的识别与记录,并支持对测试任务多次运行结果的统计分析,使得本发明与现有 技术相比有以下三个优点:
[0022] (1)无需用户人工干预,全自动完成所述应用程序实时性能测试操作;
[0023] (2)对多次运行的测试任务的测试结果进行统计分析,最大限度地降低测试误 差;
[0024] (3)测试目标颗粒小,可得到所述过程的所有影响时间性能的关键时间节点不同 层次的运行时间信息,对用户进一步优化工程源代码提供强大的数据支持。

【专利附图】

【附图说明】
[0025] 图1为本发明中的一种实时性能测试方法流程图;
[0026] 图2为本发明中的时间特征模型示意图;
[0027] 图3为本发明应用场景中的一种实时性能测试系统结构示意图。

【具体实施方式】
[0028] 需要完成对嵌入式应用程序实时性能的检测,就需要获取应用程序中用户所关心 的函数、任务及其内关键时间节点的位置信息,以便能够将获取系统时间戳的桩语句插入 到适当的位置。而为了最大可能地减少用户在检测过程中所需耗费的工作量,本发明提供 的技术解决方案能够完成应用程序所关心的函数和任务及其内关键时间节点位置信息的 自动获取、系统时间戳桩语句插入位置的分析和自动插入、应用程序中关键时间节点运行 时间统计报告的自动生成等一系列容易出现错误或遗漏的操作。
[0029] 下面将结合本发明中的附图,对本发明的技术解决方案进行详细而完整的阐述, 显然,以下所阐述的具体实施案例仅仅是本发明的一部分实施案例,而不是全部的实施案 例。
[0030] 如图1所示,为本发明中的一种实时性能测试方法流程图,应用于包括上位机和 下位机的嵌入式实时系统中,该方法包括以下步骤:
[0031] 步骤101,在上位机中对嵌入式应用程序的源代码进行时间特征建模。
[0032] 其中,要完成时间特征建模,需要对源代码进行词法分析和语法分析。利用开源 的GNU GCC编译器完成这一过程,首先生成该工程源代码的抽象语法树,然后遍历这棵语法 树,将所关注的函数或任务的声明和调用、包含文件语句的定义、函数或任务中的循环、递 归调用、扇出调用和return语句的位置和类型信息解析出来,并为每条信息添加一个唯一 的标识符,写入到插桩位置基础数据文件中。
[0033] 步骤102,在上位机中利用所述应用程序时间特征模型完成所述应用程序源代码 的自动插桩过程。
[0034] 其中,首先,需要分析步骤101得到的插桩位置基础数据文件,得到用户所关注的 函数或任务起止行号和循环、递归、扇出等关键时间节点的插桩信息集。特别需要注意的 是,由于每个程序员的编码习惯不一样,函数或任务的起始花括号" 和结束花括号"可 能会与其他的语句混在同一行,所以在分析的时候需要将函数或任务的起止符号、return 语句的前后是否存在语句的信息记录下来,以便插桩时做相应的处理,否则插桩时会出现 插桩位置错乱的问题。同理,return语句在源代码中可能是自成一行,但也有可能其前后 都有语句的存在。针对这种情况,一种处理办法是在插桩过程中,自动先将源代码中用于 标识一个语句块的开始和结束的符号,包括return语句单独成一行,这时候再将桩函数插 入到源代码中,如此便能很好地解决由于程序员编码不够规范而造成的插桩位置错乱的问 题。其次,利用插桩器在读入源代码的同时匹配插桩信息集中的桩位置和桩类型的定义,将 桩函数库中的桩函数实时插入源代码中,从而生成已插桩的源代码工程。
[0035] 步骤103,利用上位机中的交叉编译工具链完成对已插桩的源代码工程的编译和 链接,生成可在下位机上运行的二进制文件,并将这个二进制文件通过专用的数据上传下 载器下载到下位机中。
[0036] 其中,上位机中的交叉编译工具链要求与目标机上的处理器的型号相匹配。与二 进制文件一同下载到下位机中的,还包括一个包含了检测次数和测试数据回传地址等数据 的测试配置文件。
[0037] 步骤104,下位机接收到测试任务后,由测试任务调度器来统一调度运行测试任 务。测试任务在运行的过程中采集测试数据,并适时回传数据到上位机。
[0038] 其中,下位机的数据上传下载器接收到上位机传输过来的二进制文件和测试配 置文件后,测试任务调度器需要创建一个新的测试任务,并将测试任务的启动地址记录到 测试任务链表中,一旦其他测试任务完成测试或接收到上位机传送过来的立即启动测试任 务,即可运行该测试任务。测试任务在运行的过程中,会将采集到的包含了系统时间戳的时 间信息记录写入到数据采集容器,待采集容器中的数据达到总体容量的2/3或测试任务完 成时,需要将时间信息记录自动上传到上位机中。
[0039] 步骤105,回传到上位机的测试数据需要经过分析后,并与用于事先输入的预期运 行时间、预期运行周期等数据进行匹配,最后完成该应用程序的实时性能测试报告。
[0040] 本发明在提供了上述实时性能测试方法的【具体实施方式】之外,还提供了应用上述 实时性能测试方法的系统。
[0041] 如图3所示,为本发明应用场景中的实时性能测试系统结构示意图,该测试系统 包含上位机中的测试终端和下位机中的测试代理。
[0042] 其中,所述上位机包括时间特征建模器、插桩位置分析器、插桩器、交叉编译工具 链、数据上传下载器和数据分析与报告生成器;所述下位机包括数据上传下载器、测试任务 调度器;上位机和下位机之间通过串口或TCP/IP信道来完成通信。
[0043] 以下结合图3,对本发明应用场景中的实时性能测试系统进行说明。
[0044] (1)将应用程序源代码送入时间特征建模器中,以完成对该应用程序源代码的时 间特征建模,并生成时间特征模型基础数据文件;
[0045] (2)插桩位置分析器接收到时间特征模型基础数据文件后,需要根据时间特征模 型中不同关键时间节点的类型,完成对所述应用程序源代码插桩位置的确定,并生成插桩 信息数据文件;
[0046] 其中,在确定插桩位置时,不同关键时间节点的插桩位置按下表进行定义:
[0047]

【权利要求】
1. 一种实时性能测试方法,应用于嵌入式系统的实时性能测试,其特征在于:所述方 法包括以下步骤: (1) 在上位机中对应用程序源代码进行时间特征建模; (2) 利用所述建模过程得到的时间特征模型完成对所述源代码的插桩操作; (3) 将所述源代码编译链接好后下载到下位机,并通过所述上位机启动所述应用程 序; (4) 所述应用程序在运行期间采集测试数据,并根据预先设定的传输规则将特定数据 容器中的数据传回所述上位机; (5) 经过数据分析后得到所述应用程序的实时性能测试报告。
2. 根据权利要求1所述的方法,其特征在于:所述步骤(1)中,所述上位机对所述应用 程序的源代码进行时间特征建模,需要对所述源代码中各个函数、任务、循环、递归、扇出和 return语句位置信息的识别,并利用这些位置信息完成所述应用程序的时间特征模型。其 中,return指的是程序语言中的返回语句的关键字。
3. 根据权利要求2所述的方法,其特征在于:所述步骤(2)中,所述时间特征模型中 的关键节点包括时间起始节点、时间截止节点、递归关键时间节点、循环关键时间节点、扇 出关键时间节点、函数或任务结束节点和return结束节点;其中循环关键时间节点又包含 for循环关键时间节点、while循环关键时间节点和do…while关键时间节点;其中,for、 while和do…while是程序编程语目中常见的二种循环控制结构的关键字。
4. 根据权利要求1所述的方法,其特征在于:所述步骤(2)中,所述嵌入式应用程序的 时间特征模型包括过程的两个层面的时间特征,一是过程的运行绝对时间,二是过程的周 期运行时间;其中,所述的过程指的是嵌入式应用程序中的函数和任务。
5. 根据权利要求1所述的方法,其特征在于:所述步骤(2)中,所述源代码插桩操作是 在指定位置上插入用于获取下位机当前系统时间戳和对获取到的数据存储到指定数据容 器中或传回所述上位机的桩函数的过程。
6. 根据权利要求1所述的方法,其特征在于:所述步骤(3)中,在将所述源代码构建好 后下载到所述下位机的同时,还需下载测试配置数据文件;测试配置数据文件中包含了对 测试次数、测试对象个数、相邻两次测试延迟时间、所述上位机IP地址和通信端口号等配 置数据。
7. 根据权利要求1所述的方法,其特征在于:所述步骤(3)中,所述传输规则是将所述 下位机上采集到的时间数据优先存储在所述下位机上开设的测试数据栈上,当所述测试数 据栈存满或待测应用程序在所述下位机上运行结束时,所述时间数据会被传输回所述上位 机数据接收器中。
8. 根据权利要求1或6所述的方法,其特征在于:所述步骤(3)中,测试数据栈中存储 的每一条数据都包括唯一的数据采集标识号和系统时间戳两部分信息;所述数据采集标识 号由对象分类标识、对象名称和对象序号组成;所述对象指的是所述源代码中出现的函数、 任务、循环、递归或扇出。
9. 根据权利要求1或6所述的方法,其特征在于:所述步骤(4)中,所述数据分析是根 据所述测试配置文件和从所述下位机传输回来的测试数据进行分析的过程,从而得到包含 各测试对象每次绝对运行时间、周期运行时间、平均运行时间、最长运行时间、最短运行时 间、与预期运行时间和周期运行时间的差值等信息的测试报告,所述测试报告中还能够对 所述应用程序的关键运行时间因素进行分析,并给出相应的代码优化建议。
10. -种应用于权利要求1所述方法的系统,其特征在于,所述系统包括部署在所述上 位机上的测试终端和部署在所述下位机上的测试代理:所述上位机包括时间特征建模器、 插桩位置分析器、插桩器、交叉编译工具链、数据上传下载器和数据分析与报告生成器;所 述下位机包括数据上传下载器、测试任务调度器;上位机和下位机之间通过串口或TCP/IP 信道来完成通信;这里的TCP/IP指的是因特网最基本的网络通讯协议,由网络层的IP协议 和传输层的TCP协议组成;其中,在上位机中: 时间特征建模器,用于对工程源代码进行时间特征建模,并将生成的时间特征模型基 础数据送外插桩位置分析器; 插桩位置分析器,用于对时间特征模型基础数据进行分析,并将生成的插桩信息数据 文件送往插桩器; 插桩器,利用输入的插桩信息数据文件和桩函数库完成对工程源代码的插桩操作,并 将插桩后的工程源代码送外交叉编译工具链; 交叉编译工具链,用于编译、链接插桩后的工程源代码,并将生成的二进制文件送外数 据上传下载器; 数据上传下载器,用于完成在上位机与下位机之间的控制指令与数据文件的传输操 作; 数据分析与报告生成器,用于完成对下位机传回的测试采集数据进行分析整理,并生 成方便用户查看的实时性能测试报告; 在下位机中: 数据上传下载器,用于接收来自上位机的测试指令和测试配置数据,并将下位机采集 到的测试数据上传到上位机; 测试任务调度器,用于对下载到下位机中的测试任务进行排队,在接收到上位机传输 来的测试启动指令后调度测试任务运行,以采集该测试任务所需要的测试数据。
【文档编号】H04L29/06GK104111890SQ201410367384
【公开日】2014年10月22日 申请日期:2014年7月29日 优先权日:2014年7月29日
【发明者】康一梅, 张浩中 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1