当前位置: 首页 > 专利查询>清华大学专利>正文

利用应用程序检测计算机系统性能变化的方法和系统技术方案

技术编号:18710787 阅读:40 留言:0更新日期:2018-08-21 22:40
提供了利用应用程序检测系统性能变化的方法、计算装置和计算机存储介质。在应用程序的源程序中定位探针代码段,探针代码是在一段时间内被多次执行,且每次执行时的工作量固定不变的代码;在定位的探针代码段前后插入自定义的代码,这些插入的代码将在运行时采集性能数据。在源程序中定位探针代码段包括:将源程序的源代码编译成中间码;识别中间码中的探针代码;基于识别得到的中间码中的探针代码,在源程序中定位探针代码段。本发明专利技术的系统性能变化检测技术能够低开销地在程序运行中及时检测并定位系统的性能变化。

Method and system for detecting performance change of computer system by application program

A method, a computing device, and a computer storage medium for detecting system performance changes using an application program are provided. Locate the probe code in the source program of the application. The probe code is executed many times over a period of time, and the workload is fixed at each execution. Insert custom code before and after the probe code segment, which will collect performance data at runtime. Locating probe code segment in source program includes: compiling source code into intermediate code; identifying probe code in intermediate code; locating probe code segment in source program based on probe code in identified intermediate code. The system performance change detection technique of the invention can detect and locate the system performance change in time during program running with low overhead.

【技术实现步骤摘要】
利用应用程序检测计算机系统性能变化的方法和系统
本专利技术总体地涉及高性能计算系统,特别是涉及检测计算机系统性能变化的方法和系统。
技术介绍
在当前的高性能计算(HPC)系统中,性能变化是一个非常严重的问题。在当前的大规模HPC系统上,由于受到系统性能变化的影响,程序不同次运行的时间可能会差别很大。在大型计算机上,这种情况是很常见的。无论是普通的用户还是专业的程序开发者都会受到这种性能变化的不良影响。性别变化会影响不可预测的性能下降,这会耗费更多的时间和资源,甚至无法满足用户对性能的要求。此外,对于不同应用程序的性能比较也变得更为困难。而对于程序开发者而言,新加入的优化产生的效果可能会被系统的性能变化所掩盖。根据前人的研究,有许多原因都可以引起性能变化,包括硬件故障,网络拥堵,僵尸进程,操作系统调度,等等。取决于具体的原因,有一些种类的性能变化是可以避免的;但另一些种类却无法避免。例如,如果性能变化是由坏结点造成的,那只要换一个好的就可以了。但是,如果是由网络拥堵造成的,因为网络是一个多用户共享的资源,单一的用户很难去阻止或规避网络拥堵。因此,在抱怨系统或者重新提交作业之前,我们需要先回答两个问题:(1)性能变化有多大;(2)性能变化的原因是什么。因此对于系统性能变化进行快速有效的检测非常重要。截至目前,检测和处理性能变化的方法大致可以分为四类,但它们无一能够很好地回答上面的两个问题。这四类方法是:(1)重跑。这是一种非常简单的检测性能变化的方法,只要重复运行多次并比较它们的运行时间,就能发现性能的变化。显而易见的是,这种方法将会耗费大量的时间和系统资源,运行时间长的程序尤甚。(2)性能模型。如果有一个准确的性能模型,我们就能准确预测程序的运行时间。这样当实测时间与预测时间不符时,就检测到了性能变化。然而大多数性能模型都着眼于预测程序整体的运行时间,而无法确定性能变化来自何方。此外,性能模型通常需要针对具体程序具体平台进行构建,这使得这种方法的可移植性较差。(3)Profile和Trace。在程序运行过程中通过某些手段收集性能数据,并在程序结束后进行分析。这种方法最大的不足之处在于,如果采集过多数据,将会使得程序性能下降,并对存储系统产生巨大压力;反之,如果采集的数据太少,又无法获得足够的细节来检测和定位系统性能变化。(4)基准测试。通过在计算机系统上运行一系列精心设计的基准测试程序,可以检测出系统的性能变化。但是这种方法因为是专门的一个测试,所以无法在系统上已经运行着应用程序的时候进行,否则将极大影响应用程序的性能。总而言之,如何低开销地在程序运行中及时检测并定位系统的性能变化,仍是一个尚未解决的问题。
技术实现思路
鉴于上述情况,提出了本专利技术。根据本专利技术的一个方面,提出了一种利用应用程序检测系统性能变化的方法,包括:在应用程序的源程序中定位探针代码段,探针代码是在一段时间内被多次执行,且每次执行时的工作量固定不变的代码;在定位的探针代码段前后插入自定义的代码,这些插入的代码将在运行时采集性能数据。进一步地,在源程序中定位探针代码段可以包括:将源程序的源代码编译成中间码;识别中间码中的探针代码;基于识别得到的中间码中的探针代码,在源程序中定位探针代码段。进一步地,识别中间码中的探针代码可以包括:识别位于循环内部的工作量固定的子循环或函数调用作为探针代码。进一步地,探针代码的工作量不受相关联的控制语句和/或函数参数影响。进一步地,性能变化检测方法还可以包括:将插桩后的程序源代码编译为可执行文件;按照原有的方式来运行应用程序;基于插入的插桩代码采集到的性能数据,得到系统性能变化检测结果。进一步地,性能检测方法还可以包括:将检测结果以可视化的形式展示。进一步地,性能检测方法还可以包括进行下列项目之一:通过比较单个机器上的单个进程内的探针代码的运行时间来发现所述单个机器的性能随时间变化的关系;对于运行在多个机器上的多进程程序,比较不同进程上的同样代码段的运行时间来检测机器间的性能差异。根据本专利技术的另一方面,还提供了一种计算装置,包括存储器和处理器,存储器上存储有计算机可执行指令,所述计算机可执行指令当被处理器执行时执行前述系统性能变化检测方法。根据本专利技术的另一方面,还提供了一种计算机可读存储介质,其上存储有计算机可执行指令,当所述计算机可执行指令被计算装置执行时,可操作来执行前述系统性能变化检测方法。根据本专利技术的另一方面,还提供了一种利用应用程序检测系统性能变化的方法,包括:在应用程序的源代码或中间码中定位探针代码段,探针代码是在一段时间内被多次执行,且每次执行时的工作量固定不变的代码;在源代码或中间码中,在定位的探针代码段前后插入自定义的代码,这些插入的代码将在运行时采集和/或分析性能数据。本专利技术的系统性能变化检测技术能够低开销地在程序运行中及时检测并定位系统的性能变化。附图说明从下面结合附图对本专利技术实施例的详细描述中,本专利技术的这些和/或其它方面和优点将变得更加清楚并更容易理解,其中:图1示出了根据本专利技术实施例的利用应用程序获得能够检测系统性能变化的代码100的方法的总体流程图。图2示出了根据本专利技术实施例的在源程序中定位探针代码段的方法的流程图。图3示出了一段代码中一个子循环作为探针代码段的示意性例子。图4示出了涉及函数调用的情况下作为探针代码段的子循环的例子。图5示出了多进程程序情况下的探针代码段的示例。图6示出了根据本专利技术实施例的基于一个应用程序得到系统性能变化报告的完整过程200的示意图。图7示出了一个系统性能检测结果可视化表示示例。具体实施方式为了使本领域技术人员更好地理解本专利技术,下面结合附图和具体实施方式对本专利技术作进一步详细说明。在介绍之前,解释一下有关术语在本文中的含义。探针代码是在一段时间内被多次执行,且每次执行时的工作量固定不变的代码。在详细描述前,为便于本领域技术人员透彻把握本专利技术,首先阐述总体专利技术构思。专利技术人的观察到,在大部分应用程序中,都包含着一些工作量固定且会被反复执行的代码段,我们将这样的代码段称为“探针代码段”或“探针代码”。因为探针代码每次被执行时的工作量是固定不变的,因此如果它们的运行时间发生了变化,那只能是由于系统本身的性能变化引起的,基于此发现,提出了如下技术方案:识别程序中的探针代码,以及针对探针代码进行插桩操作。由此后面执行插桩后的程序时,能够采集探针代码的运行时间数据,分析数据,从而发现系统性能变化以及性能变化的原因。后面首先结合图1描述总体流程,然后结合图2给出一个更具体的实施流程,接下来给出探针代码识别的具体实施例,最后给出一个检测性能变化的结果示例。图1示出了根据本专利技术实施例的利用应用程序获得能够检测系统性能变化的代码100的方法的总体流程图。在步骤S110中,在应用程序的源程序中定位探针代码段,探针代码是在一段时间内被多次执行,且每次执行时的工作量固定不变的代码。在步骤S120中,在定位的探针代码段前后插入自定义的代码,这些插入的代码将在运行时采集性能数据。作为插入的自定义代码,可以是采集运行时间的代码,还可以是性能异常分析代码,即将已采集到的运行时间进行对比分析。下面结合图2描述步骤S110的在源程序中定位探针代码段的一个实现例子。如图2所示,在步本文档来自技高网
...

【技术保护点】
1.一种利用应用程序检测系统性能变化的方法,包括:在应用程序的源程序中定位探针代码段,探针代码是在一段时间内被多次执行,且每次执行时的工作量固定不变的代码;在定位的探针代码段前后插入自定义的代码,这些插入的代码将在运行时采集性能数据。

【技术特征摘要】
1.一种利用应用程序检测系统性能变化的方法,包括:在应用程序的源程序中定位探针代码段,探针代码是在一段时间内被多次执行,且每次执行时的工作量固定不变的代码;在定位的探针代码段前后插入自定义的代码,这些插入的代码将在运行时采集性能数据。2.根据权利要求1的方法,在源程序中定位探针代码段包括:将源程序的源代码编译成中间码;识别中间码中的探针代码;基于识别得到的中间码中的探针代码,在源程序中定位探针代码段。3.根据权利要求2的方法,识别中间码中的探针代码包括:识别位于循环内部的工作量固定的子循环或函数调用作为探针代码。4.根据权利要求3的方法,所述探针代码的工作量不受相关联的控制语句和/或函数参数影响。5.根据权利要求1到4任一项的方法,还包括:将插桩后的程序源代码编译为可执行文件;按照原有的方式来运行应用程序;基于插入的插桩代码采集到的性能数据,得到系统性能变化检测结果。6.根据权利要求5的方法,还包括:...

【专利技术属性】
技术研发人员:汤雄超翟季冬陈文光
申请(专利权)人:清华大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1