即时编译参数优化方法及装置的制造方法
【专利摘要】本发明实施例提供一种即时编译参数优化方法及装置,其中,所述方法包括:A、使用即时编译参数的当前值,对目标应用程序进行性能测试,得到目标应用程序的性能指标的当前值;B、根据目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断目标应用程序的性能指标是否收敛;若未收敛,则将即时编译参数的当前值调整至少N个步长,得到即时编译参数的当前值的随机变异值;将随机变异值作为下一次性能测试中即时编译参数的当前值,再次执行A和B;其中,步长为即时编译参数的最小单位。本发明实施例能够提升即时编译参数的选值准确度和选择效率,提升虚拟机的性能。
【专利说明】
即时编译参数优化方法及装置
技术领域
[0001]本发明实施例涉及虚拟机技术,尤其涉及一种即时编译参数优化方法及装置。
【背景技术】
[0002]虚拟机(Virtual Machine,简称VM)通常是现代高性能服务器上运行的核心软件系统。虚拟机主要通过软件(或者辅以少量硬件支持)的方法来虚拟出一台计算机,并且这台虚拟的计算机通常还支持一套自己的指令集,称为虚拟机指令集。虚拟机依托于本地的物理机,通过其执行引擎对给定的虚拟机指令序列(也称目标程序)在本地物理机器上模拟执行。虚拟机的执行引擎一般包括解释器和编译器两种类型:解释器以一条虚拟机指令为单位进行取指令、译码和执行;编译器以一组连续的虚拟机指令序列(基本块、函数或方法)为单位一次性编译成本地CPU指令序列,所生成的本地机器指令称为本地方法,然后由硬件直接执行本地方法。编译器由于避免了大量重复的取指令和译码的过程,同时又在编译时进行了大量卓有成效的优化,因而其性能可以达到解释器性能的10倍以上。
[0003]和传统C/C++等静态编译不同,编译器是在虚拟机运行过程中进行动态编译的,故又称为即时编译器(Just-1n-time Compiler,简称JIT)。即时编译算法经过近30年的发展,现在已经非常复杂,在算法中往往引入大量参数。最常用的即时编译参数包括以下几种:
[0004]1、热点方法执行次数的最小值:
[0005]由于即时编译行为会影响程序的性能和响应时间,虚拟机一般仅对执行频度较高的部分方法进行编译,这些方法称为热点方法或程序热点,通常根据方法执行的次数大小来筛选热点方法,这样就引入了一个参数:热点方法执行次数的最小值(记为Hot_Method_Invocat1n_Limit)。
[0006]2、方法内部循环次数的最小值:
[0007]还有一种热点方法,方法本身的执行次数不高,但是在方法内部有循环结构,因此也能够成为耗时方法。这样就引入了一个参数:方法内部循环次数的最小值(记为Hot_Loop_Invocat1n_Limit)。
[0008]3、被内联方法的最大体积、内联的最大深度:
[0009]在即时编译的过程中,编译器通常会使用内联(Inline)优化方法。内联优化是指,对于存在调用关系的两个方法,如果方法A调用方法B,那么在编译方法A时,可以将方法B的内容嵌入到方法A中共同编译,这样在执行方法A的编译后代码时,可以省略一次调用。内联优化方法的优点是节省执行时间,但是缺点是增大了编译后代码的规模,因此,一般不允许无限制的进行内联优化。一般会引入两个参数:一个是被内联方法的最大体积(记为 Inline_Max_Method_Size),另一个是内联的最大深度(记为 Inline_Max_Depth)。
[0010]对于不同的应用程序,即时编译参数的不同取值会影响虚拟机的最终性能,因此如何高效地选择即时编译参数的最优值成为亟待解决的问题。
[0011]—种常见的即时编译参数优化方案是:虚拟机定义即时编译参数的默认值。由虚拟机的编写者考察实际中绝大多数应用程序的特点,人为选择一个尽可能适用于大多数情况的参数值。例如在虚拟机OpenJDK中,默认将Hot_Method_Invocat1n_Limit定义为1500,Inline_Max_Method_Size定义为35。但是,设置并采用默认值的方案存在如下缺陷:现实的应用程序千差万别,默认值无法保证对所有应用程序都是最优的。尤其是对于用户的新应用程序,很可能不能运行出最好效果。例如,针对标准测试集SpecJVM2008,对于测试项sunflow,如果把参数Hot_Method_Invocat1n_Limit由默认值1500改为1600,则性能能够有10%的提升;而对于测试项mpegaud1,只有把参数Hot_Method_Invocat1n_Limit设置为1700,才能运行出最好的性能。可见,对于不同的应用程序,即时编译参数的最优值并不一定相同。
[0012]另一种常见的即时编译参数优化方案是:用户通过遍历即时编译参数的所有可能值以确定最优值。用户每次将选择的值输入到虚拟机中,虚拟机按照用户选择的值执行,例如,针对标准测试集SpecJVM2008,如果用户运行测试项mpegaud1,则用户通过大量测试,遍历 Hot_Method_Invocat1n_Limit 的所有可能值,找到 Hot_Method_Invocat1n_Limit的最优值1700,把这个值输入到虚拟机中,在此过程中每次即时编译参数的取值固定的变化一个单位。这种方法的缺点是,由于每个即时编译参数的取值范围都很大,例如,仅对Hot_Method_Invocat1n_Limit这一个参数来讲,这是一个整数,理论上有无限多种取值,用户只能选择有限的一些样本值来进行实验,例如选择100的整数倍,S卩100、200、……、1600、1700、……,等等,即使简化了样本点,也仍然要进行几十组测试。而SpecJVM2008运行一次要4个小时,总的时间至少要几天,并且,实际中,即时编译参数的个数非常多,为了找到最优值需要进行组合测试,其工作量更是巨大的,对用户的代价过高。
【发明内容】
[0013]本发明实施例提供一种即时编译参数优化方法及装置,以提升即时编译参数的选值准确度和选择效率,提升虚拟机的性能。
[0014]第一方面,本发明实施例提供一种即时编译参数优化方法,其中,所述方法包括:
[0015]A、使用即时编译参数的当前值,对目标应用程序进行性能测试,得到所述目标应用程序的性能指标的当前值;
[0016]B、根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标是否收敛;
[0017]若未收敛,则将所述即时编译参数的当前值调整至少N个步长,得到所述即时编译参数的当前值的随机变异值;将所述即时编译参数的当前值的随机变异值作为下一次性能测试中所述即时编译参数的当前值,再次执行A和B;其中,所述步长为所述即时编译参数的最小单位。
[0018]根据第一方面,在第一方面的第一种可能的实现方式中,所述根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标是否收敛,包括:
[0019]判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值;
[0020]若是,则确定所述目标应用程序的性能指标未收敛。
[0021]根据第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标是否收敛,包括:
[0022]判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值;若否,并且在连续M次的性能测试中分别得到的差值都未超过所述阈值,则确定所述目标应用程序的性能指标已收敛。
[0023]根据第一方面、第一方面的第一种至第二种可能的实现方式中的任意一种,在第一方面的第三种可能的实现方式中,所述将所述即时编译参数的当前值调整至少N个步长,包括:根据所述即时编译参数的启发规则,将所述即时编译参数的当前值调整至少N个步长。
[0024]根据第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,若所述即时编译参数为热点方法执行次数的最小值或方法内部循环次数的最小值,则所述根据所述即时编译参数的启发规则,将所述即时编译参数的当前值调整至少N个步长包括:
[0025]若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值减少至少N个步长,反之,则将所述即时编译参数的当前值增大至少N个步长;
[0026]若所述即时编译参数为被内联方法的最大体积或内联的最大深度,则所述根据所述即时编译参数的启发规则,将所述即时编译参数的当前值调整至少N个步长包括:
[0027]若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值增大至少N个步长,反之,则将所述即时编译参数的当前值减少至少N个步长。
[0028]第二方面,本发明实施例提供一种即时编译参数优化装置,其中,所述装置包括:
[0029]性能测试模块,用于使用即时编译参数的当前值,对目标应用程序进行性能测试,得到所述目标应用程序的性能指标的当前值;
[0030]判断模块,用于根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标是否收敛;
[0031]随机变异模块,用于若所述判断模块根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标未收敛,则将所述即时编译参数的当前值调整至少N个步长,得到所述即时编译参数的当前值的随机变异值;将所述即时编译参数的当前值的随机变异值作为下一次性能测试中所述即时编译参数的当前值;其中,所述步长为所述即时编译参数的最小单位。
[0032]根据第二方面,在第二方面的第一种可能的实现方式中,所述判断模块,具体用于判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值;若是,则确定所述目标应用程序的性能指标未收敛。
[0033]根据第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述判断模块,具体用于判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值;若否,并且在连续M次的性能测试中分别得到的差值都未超过所述阈值,则确定所述目标应用程序的性能指标已收敛。
[0034]根据第二方面、第二方面的第一种至第二种可能的实现方式中的任意一种,在第二方面的第三种可能的实现方式中,所述随机变异模块,具体用于根据所述即时编译参数的启发规则,将所述即时编译参数的当前值调整至少N个步长。
[0035]根据第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述随机变异模块,具体用于:
[0036]在所述即时编译参数为热点方法执行次数的最小值或方法内部循环次数的最小值时,若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值减少至少N个步长,反之,则将所述即时编译参数的当前值增大至少N个步长;
[0037]在所述即时编译参数为被内联方法的最大体积或内联的最大深度时,若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值增大至少N个步长,反之,则将所述即时编译参数的当前值减少至少N个步长。
[0038]本发明实施例提供的即时编译参数优化方法及装置,若根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标判定未收敛,则对即时编译参数的当前值进行随机变异,通过随机变异将即时编译参数的取值变化一个较大的范围,快速的略过该较大的范围内的所有样本,降低测试工作量。本发明实施例通过随机变异的方法以更快的速度逼近即时编译参数的最优值,提升即时编译参数的选值准确度和选择效率,提升虚拟机的性能。
【附图说明】
[0039]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0040]图1为本发明实施例提供的即时编译参数优化方法的流程图;
[0041]图2为本发明实施例提供的即时编译参数优化方法的另一流程图;
[0042]图3为本发明实施例提供的即时编译参数优化装置的结构示意图。
【具体实施方式】
[0043]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0044]图1为本发明实施例提供的即时编译参数优化方法的流程图。本发明实施例提供的即时编译参数优化方法的执行主体为即时编译参数优化装置,所述即时编译参数优化装置例如可以是即时编译器或虚拟机。如图1所示,本发明实施例提供的即时编译参数优化方法,包括:
[0045]101、使用即时编译参数的当前值,对目标应用程序进行性能测试,得到所述目标应用程序的性能指标的当前值。
[0046]102、根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标是否收敛。
[0047]103、若未收敛,则将所述即时编译参数的当前值调整至少N个步长,得到所述即时编译参数的当前值的随机变异值;将所述即时编译参数的当前值的随机变异值作为下一次性能测试中所述即时编译参数的当前值,再次执行101和102 ;其中,所述步长为所述即时编译参数的最小单位。
[0048]具体地,目标应用程序可以为虚拟机中待运行的任意一个应用程序。目标应用程序的性能指标例如可以是反映虚拟机运行目标应用程序时性能水平的一些指标,例如,对于标准测试集SpecJVM2008,其性能指标可以是SpecJVM2008的分值。实际中,所述即时编译参数可以为以下任意一种:热点方法执行次数的最小值,方法内部循环次数的最小值,被内联方法的最大体积,内联的最大深度。本发明实施例在即时编译参数的优化过程中确定即时编译参数的最优值,在执行本发明实施例的初始阶段,需要为即时编译参数选择初始值,并将初始值作为第一次性能测试中所述即时编译参数的当前值。实际中,即时编译参数的初始值可以为:虚拟机预先定义的默认值、用户指定值,也可以是任何随机值。
[0049]本发明实施例提供的即时编译参数优化方法,通过迭代训练的方式寻找即时编译参数的最优值,每完成一次性能测试就进行一次目标应用程序的性能指标是否收敛的判断;若根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标未收敛,则对即时编译参数的当前值进行随机变异,将即时编译参数的当前值调整至少N个步长,通过随机变异每次将即时编译参数的取值变化一个较大的范围,快速的略过该较大的范围内的所有样本,降低测试工作量。本发明实施例通过随机变异的方法以更快的速度逼近即时编译参数的最优值,提升即时编译参数的选值准确度和选择效率,提升虚拟机的性能。
[0050]在上述实施例的基础上,在本发明一实施例中,所述根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标是否收敛的一种可行的实现方式为:判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值;若是,则确定所述目标应用程序的性能指标未收敛;若否,则可以确定所述目标应用程序的性能指标已收敛。其中,所述阈值为预先设定的收敛范围,即性能的变化幅度,例如可以为I %。在本发明实施例中,判定目标应用程序的性能指标已收敛的条件是:所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值未超过阈值。
[0051]进一步可选的,在本发明另一实施例中,判定目标应用程序的性能指标已收敛的条件可以为:判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值;若判定所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值未超过所述阈值,并且在连续M次的性能测试中分别得到的差值都未超过所述阈值,则确定目标应用程序的性能指标已收敛。其中,所述M的取值可以根据用户需求进行设置。其中,每次性能测试时当前值与上一次性能测试中得到的性能指标的测试值可以参考步骤103中的当前值与测试值的规律变化。具体地,该实施例中的每次性能测试可以包括:
[0052]1012、使用即时编译参数的当前值,对目标应用程序进行性能测试,得到所述目标应用程序的性能指标的当前值。
[0053]1022、判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值。
[0054]1032、若判定所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值未超过所述阈值,则将所述即时编译参数的当前值调整至少N个步长,得到所述即时编译参数的当前值的随机变异值;将所述即时编译参数的当前值的随机变异值作为下一次性能测试中所述即时编译参数的当前值。其中,所述步长为所述即时编译参数的最小单位。
[0055]例如,假设性能测试已经做了 1000次,目标应用程序的性能指标均未收敛;接着又做了 200次性能测试,若差值一直小于I % (此处以阈值设为I %为例),则认为目标应用程序的性能指标已经收敛,对于该目标应用程序,将即时编译参数的当前值确定为即时编译参数的最优值。
[0056]需要说明的是,根据即时编译算法的原理,每个即时编译参数取值大小都会影响性能,但同时也可能带来负面代价。以热点方法执行次数的最小值(Hot_Method_Invocat1n_Limit)为例,这个参数从原理上来讲,取值是越小越好,因为这个参数越小,则被判别为热点方法的方法个数越多,那么整个程序中以编译方式执行的规模会比以解释方式执行的规模更大,显然是有利于提升性能的;但是Hot_Method_Invocat1n_Limit也不是越小越好,因为如果Hot_Method_Invocat1n_Limit非常小,虚拟机用于编译方法的代价会变大,反而有可能超过编译方法带来的好处,使得最终的性能变坏。可见,任何参数的最优值都有一个临界值,临界值就是事实上使性能最好的值,在越过临界值之后反而会带来负面代价,使性能降低。只有找到这个临界值才能算是找到了最优结果。另外,各个即时编译参数之间并不是完全独立的,而是有一定的约束关系。也就是说,一个参数取某个值时,另一个参数的最优值会随之变化。这也导致了整体上的最优值是很难预测的,只能通过机器学习的方法,以迭代训练的方式在所有可能的空间中找到最优解。在上述实施例的基础上,本发明的一个实施例提出了针对各个即时编译参数的启发规则;与此对应,上述103和1032中的将即时编译参数的当前值调整至少N个步长的实现方式可以为:根据即时编译参数的启发规则,将即时编译参数的当前值调整至少N个步长。
[0057]本发明实施例为了减少性能测试的工作量,本发明的一个实施例提出了针对各个即时编译参数的启发规则;与此对应,上述将即时编译参数的当前值调整至少N个步长的实现方式可以为:根据即时编译参数的启发规则,将即时编译参数的当前值调整至少N个步长,生成下一次性能测试中即时编译参数的当前值。
[0058]值得一提的是,在本发明实施例中,不同的即时编译参数所对应的启发规则并不完全相同。例如,与热点方法执行次数的最小值、或方法内部循环次数的最小值对应的启发规则为:越小越好,具体为:若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值减少至少N个步长,反之,则将所述即时编译参数的当前值增大至少N个步长。再例如,与被内联方法的最大体积、或所述内联的最大深度对应的启发规则为:越大越好,具体为:若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值增大至少N个步长,反之,则将所述即时编译参数的当前值减少至少N个步长。本发明实施例根据启发规则对即时编译参数的当前值进行随机变异,使得即时编译参数能够更快的向最优值逼近,提高找到最优值的收敛速度,从而使即时编译参数的选值成本远小于现有技术。
[0059]在实际中,对于N的取值,根据具体情况,可以将所述至少N个步长设置为:所述即时编译参数的取值上限的10%、5%、1%或0.1%等。可以理解的是,在优化测试的过程中,N的取值并不是固定不变的,而是可以随着优化过程的推进根据实际情况进行更新,例如:在优化的初期将所述至少N个步长设置为较大的数值,到优化的后期将所述至少N个步长设置较小的数值,以保证向即时编译参数的最优值逼近的精度越来越高。可以理解的是,对于N的取值也可以设置为10、50或100等。本领域技术人员可以理解,上述列举的N的可能取值,只是示例,其并不对本发明技术方案的保护范围构成限定。N的取值也可以根据用户需求进行设置。可选的,每一次性能测试完成后,可以对至少一个即时编译参数的取值进行调整。
[0060]图2为本发明实施例提供的即时编译参数优化方法的另一流程图。如图2所示,本发明实施例的即时编译参数优化方法可以包括三个步骤:选择参数、训练参数、输出参数。具体为:
[0061]1、选择参数:为每一个即时编译参数分别选择初始值,将初始值作为第一次性能测试中即时编译参数的当前值。
[0062]2、训练参数:
[0063]2.1、根据即时编译参数的当前值,测试目标应用程序,得到所述目标应用程序的性能指标的当前值;
[0064]2.2、判断结果是否收敛:判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值。如果在完成连续若干轮性能测试后,即使继续调整即时编译参数的取值,目标应用程序的性能指标的变化幅度不大,则认为目标应用程序的性能指标已经收敛,转到步骤3。否则,说明最优值还没有找到,需要继续迭代训练,转到步骤2.3。
[0065]2.3、根据启发规则随机变异参数:根据启发规则,将所述即时编译参数的当前值调整至少N个步长,得到下一次性能测试中所述即时编译参数的当前值,转到步骤2.1。
[0066]3、输出参数:将即时编译参数的当前值确定为即时编译参数的最优值。
[0067]本发明实施例提供的即时编译参数优化方法,利用机器学习的自动化迭代训练原理,使用机器学习方法来寻找虚拟机即时编译参数的最优值,与已有方法相比,更加自动化,搜索效率更高,参数值的准确性更高。
[0068]图3为本发明实施例提供的即时编译参数优化装置的结构示意图。如图3所示,本发明实施例提供的即时编译参数优化装置300,包括:
[0069]性能测试模块301,用于使用即时编译参数的当前值,对目标应用程序进行性能测试,得到所述目标应用程序的性能指标的当前值。
[0070]判断模块302,用于根据所述性能测试模块301得到的所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标是否收敛。
[0071]随机变异模块303,用于若所述判断模块302根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标未收敛,则将所述即时编译参数的当前值调整至少N个步长,得到所述即时编译参数的当前值的随机变异值;将所述即时编译参数的当前值的随机变异值作为下一次性能测试中所述即时编译参数的当前值;其中,所述步长为所述即时编译参数的最小单位。
[0072]本发明实施例提供的即时编译参数优化装置,若根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标未收敛,则对即时编译参数的当前值进行随机变异,随机变异每次将即时编译参数的取值变化一个较大的范围,快速的略过该较大的范围内的所有样本,降低测试工作量。本发明实施例通过随机变异的方法以更快的速度逼近即时编译参数的最优值,提升即时编译参数的选值准确度和选择效率,提升虚拟机的性能。
[0073]在本发明一实施例中,所述判断模块302,具体用于判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值;若是,则确定所述目标应用程序的性能指标未收敛。
[0074]在上述实施例的基础上,所述判断模块302,具体用于若判定所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值未超过所述阈值,并且,在连续M次的性能测试中分别得到的差值都未超过所述阈值,则确定所述目标应用程序的性能指标已收敛。
[0075]在上述实施例的基础上,所述随机变异模块303,具体用于根据所述即时编译参数的启发规则,将所述即时编译参数的当前值调整至少N个步长。
[0076]在上述实施例的基础上,所述随机变异模块303,具体用于:
[0077]在所述即时编译参数为热点方法执行次数的最小值或方法内部循环次数的最小值时,若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值减少至少N个步长,反之,则将所述即时编译参数的当前值增大至少N个步长;或者,
[0078]在所述即时编译参数为被内联方法的最大体积或内联的最大深度时,若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值增大至少N个步长,反之,则将所述即时编译参数的当前值减少至少N个步长。
[0079]本发明实施例根据启发规则对即时编译参数的当前值进行随机变异,使得即时编译参数能够更快的向最优值逼近,提高找到最优值的收敛速度,从而使即时编译参数的选值成本远小于现有技术。
[0080]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
【主权项】
1.一种即时编译参数优化方法,其特征在于,包括: A、使用即时编译参数的当前值,对目标应用程序进行性能测试,得到所述目标应用程序的性能指标的当前值; B、根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标是否收敛; 若未收敛,则将所述即时编译参数的当前值调整至少N个步长,得到所述即时编译参数的当前值的随机变异值;将所述即时编译参数的当前值的随机变异值作为下一次性能测试中所述即时编译参数的当前值,再次执行A和B;其中,所述步长为所述即时编译参数的最小单位。2.根据权利要求1所述的方法,其特征在于,所述根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标是否收敛,包括: 判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值; 若是,则确定所述目标应用程序的性能指标未收敛。3.根据权利要求1所述的方法,其特征在于,所述根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标是否收敛,包括: 判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值; 若否,并且在连续M次的性能测试中分别得到的差值都未超过所述阈值,则确定所述目标应用程序的性能指标已收敛。4.根据权利要求1-3任一项所述的方法,其特征在于,所述将所述即时编译参数的当前值调整至少N个步长,包括: 根据所述即时编译参数的启发规则,将所述即时编译参数的当前值调整至少N个步长。5.根据权利要求4所述的方法,其特征在于, 若所述即时编译参数为热点方法执行次数的最小值或方法内部循环次数的最小值,则所述根据所述即时编译参数的启发规则,将所述即时编译参数的当前值调整至少N个步长包括: 若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值减少至少N个步长,反之,则将所述即时编译参数的当前值增大至少N个步长; 若所述即时编译参数为被内联方法的最大体积或内联的最大深度,则所述根据所述即时编译参数的启发规则,将所述即时编译参数的当前值调整至少N个步长包括: 若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值增大至少N个步长,反之,则将所述即时编译参数的当前值减少至少N个步长。6.一种即时编译参数优化装置,其特征在于,包括: 性能测试模块,用于使用即时编译参数的当前值,对目标应用程序进行性能测试,得到所述目标应用程序的性能指标的当前值; 判断模块,用于根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标是否收敛; 随机变异模块,用于若所述判断模块根据所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值判断所述目标应用程序的性能指标未收敛,则将所述即时编译参数的当前值调整至少N个步长,得到所述即时编译参数的当前值的随机变异值;将所述即时编译参数的当前值的随机变异值作为下一次性能测试中所述即时编译参数的当前值;其中,所述步长为所述即时编译参数的最小单位。7.根据权利要求6所述的装置,其特征在于,所述判断模块,具体用于判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值;若是,则确定所述目标应用程序的性能指标未收敛。8.根据权利要求6所述的装置,其特征在于,所述判断模块,具体用于判断所述目标应用程序的性能指标的当前值与上一次性能测试中得到的性能指标的测试值的差值是否超过阈值;若否,并且在连续M次的性能测试中分别得到的差值都未超过所述阈值,则确定所述目标应用程序的性能指标已收敛。9.根据权利要求6-8任一项所述的装置,其特征在于,所述随机变异模块,具体用于根据所述即时编译参数的启发规则,将所述即时编译参数的当前值调整至少N个步长。10.根据权利要求9所述的装置,其特征在于,所述随机变异模块,具体用于: 在所述即时编译参数为热点方法执行次数的最小值或方法内部循环次数的最小值时,若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值减少至少N个步长,反之,则将所述即时编译参数的当前值增大至少N个步长; 在所述即时编译参数为被内联方法的最大体积或内联的最大深度时,若所述目标应用程序的性能指标的当前值大于所述上一次性能测试中得到的性能指标的测试值,则将所述即时编译参数的当前值增大至少N个步长,反之,则将所述即时编译参数的当前值减少至少N个步长。
【文档编号】G06F9/455GK105988855SQ201510084788
【公开日】2016年10月5日
【申请日】2015年2月16日
【发明人】靳国杰, 高翔
【申请人】龙芯中科技术有限公司