一种火焰图的分析方法、装置、电子设备和介质
文献发布时间:2023-06-19 12:10:19
技术领域
本发明涉及计算机技术领域,特别是涉及一种火焰图的分析方法、一种火焰图的分析装置、一种电子设备和一种计算机可读存储介质。
背景技术
目前对各类游戏的运行情况进行性能分析时,是通过采集、绘制对应的性能火焰图实现的,火焰图以一种全局的视野来展示程序中各函数运行的时间分布,使得程序开发者能够清晰的发现所有可能导致性能瓶颈的函数,是性能分析和调试优化的利器。由于平台上的大部分游戏进程是长期不间断运行的,在该过程中,会产生大量的火焰图,则需要耗费大量的人工成本进行火焰图的筛选和分析工作。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种火焰图的分析方法和相应的一种火焰图的分析装置、一种电子设备,以及一种计算机可读存储介质。
本发明实施例公开了一种火焰图的分析方法,所述方法包括:
获取用于程序性能分析的多个火焰图;所述火焰图包括多条调用链;所述调用链为程序执行过程中的函数调用路径;所述调用链包括多条函数调用子路径;
提取各火焰图中的所述子路径的子路径特征信息;
基于两两火焰图之间的子路径特征信息,确定两两火焰图之间的相似度,以确定所述多个火焰图中所有的所述火焰图之间的相似度;
基于所述所有的所述火焰图之间的相似度对所有的所述火焰图分别进行聚类。
可选地,所述基于两两火焰图之间的子路径特征信息,确定两两火焰图之间的相似度,包括:
基于两两火焰图之间的子路径特征信息,对两两火焰图之间的调用链进行两两配对,并确定配对后的两两调用链之间的最长共有子路径;
计算所有的所述配对后的两两调用链之间的最长共有子路径的长度总和,并将所述长度总和作为所述两两火焰图之间的相似度。
可选地,所述基于两两火焰图之间的子路径特征信息,对两两火焰图之间的调用链进行两两配对,并确定配对后的两两调用链之间的最长共有子路径,包括:
将两两火焰图之间的子路径特征信息一致的子路径确定为两两火焰图之间的共有子路径;
按照所述两两火焰图之间的共有子路径的长度的递减次序,依次对两两火焰图之间的调用链进行两两配对,并确定配对后的两两调用链之间的最长共有子路径。
可选地,所述基于两两火焰图之间的子路径特征信息,确定两两火焰图之间的相似度,包括:
基于两两火焰图之间的子路径特征信息,计算两两火焰图中的每条子路径分别在所处于的火焰图中的路径权重,得到对应的子路径权重值;
将两两火焰图之间的子路径特征信息一致的子路径确定为两两火焰图之间的共有子路径,并计算两两火焰图之间的每条共有子路径在所述两两火焰图中的路径权重,得到对应的共有子路径权重值;
将所有的所述共有子路径权重值的权重总和与所有的所述子路径权重值的权重总和的比值,作为所述两两火焰图之间的相似度。
可选地,所述子路径特征信息包括子路径的路径长度,所述基于两两火焰图之间的子路径特征信息,计算两两火焰图中的每条子路径分别在所处于的火焰图中的路径权重,得到对应的子路径权重值,包括:
统计两两火焰图之间的每条子路径分别在所处于的火焰图中的出现次数;
将所述每条子路径分别在所处于的火焰图中的出现次数与所述每条子路径的路径长度的平方的乘积作为所述每条子路径分别在所处于的火焰图中的子路径权重值。
可选地,所述计算两两火焰图之间的每条共有子路径在所述两两火焰图中的路径权重,得到对应的共有子路径权重值,包括:
统计两两火焰图之间的每条共有子路径在所述两两火焰图中的总出现次数,并确定所述两两火焰图之间的每条共有子路径的路径长度和所述两两火焰图之间的每条共有子路径分别在所述两两火焰图中的路径标号;
获取预设的衰减系数;
基于所述总出现次数、所述路径长度、所述路径标号和所述衰减系数,计算两两火焰图之间的每条共有子路径在所述两两火焰图中的路径权重,得到对应的所述共有子路径权重值。
可选地,所述基于两两火焰图之间的子路径特征信息,确定两两火焰图之间的相似度,包括:
基于两两火焰图之间的子路径特征信息,确定两两火焰图中的每条子路径分别在所处于的火焰图中的子路径权重系数;
按照所述子路径权重系数将所述两两火焰图中的每条子路径进行哈希映射,得到对应的子路径向量;
将属于同一火焰图的所有的所述子路径向量,确定为表征所述火焰图的火焰图向量;
计算两两火焰图向量之间的余弦距离值,并将所述余弦距离值作为所述两两火焰图之间的相似度。
本发明实施例还公开了一种火焰图的分析装置,所述装置包括:
获取模块,用于获取用于程序性能分析的多个火焰图;所述火焰图包括多条调用链;所述调用链为程序执行过程中的函数调用路径;所述调用链包括多条函数调用子路径;
提取模块,用于提取各火焰图中的所述子路径的子路径特征信息;
确定模块,用于基于两两火焰图之间的子路径特征信息,确定两两火焰图之间的相似度,以确定所述多个火焰图中所有的所述火焰图之间的相似度;
聚类模块,用于基于所述所有的所述火焰图之间的相似度对所有的所述火焰图分别进行聚类。
可选地,所述确定模块,包括:
配对子模块,用于基于两两火焰图之间的子路径特征信息,对两两火焰图之间的调用链进行两两配对,并确定配对后的两两调用链之间的最长共有子路径;
第一确定子模块,用于计算所有的所述配对后的两两调用链之间的最长共有子路径的长度总和,并将所述长度总和作为所述两两火焰图之间的相似度。
可选地,所述配对子模块,包括:
第一确定单元,用于将两两火焰图之间的子路径特征信息一致的子路径确定为两两火焰图之间的共有子路径;
配对单元,用于按照所述两两火焰图之间的共有子路径的长度的递减次序,依次对两两火焰图之间的调用链进行两两配对,并确定配对后的两两调用链之间的最长共有子路径。
可选地,所述确定模块,包括:
第一计算子模块,用于基于两两火焰图之间的子路径特征信息,计算两两火焰图中的每条子路径分别在所处于的火焰图中的路径权重,得到对应的子路径权重值;
第二计算子模块,用于将两两火焰图之间的子路径特征信息一致的子路径确定为两两火焰图之间的共有子路径,并计算两两火焰图之间的每条共有子路径在所述两两火焰图中的路径权重,得到对应的共有子路径权重值;
第二确定子模块,用于将所有的所述共有子路径权重值的权重总和与所有的所述子路径权重值的权重总和的比值,作为所述两两火焰图之间的相似度。
可选地,所述子路径特征信息包括子路径的路径长度,所述第一计算子模块,包括:
统计单元,用于统计两两火焰图之间的每条子路径分别在所处于的火焰图中的出现次数;
第一计算单元,用于将所述每条子路径分别在所处于的火焰图中的出现次数与所述每条子路径的路径长度的平方的乘积作为所述每条子路径分别在所处于的火焰图中的子路径权重值。
可选地,所述第二计算子模块,包括:
第二确定单元,用于统计两两火焰图之间的每条共有子路径在所述两两火焰图中的总出现次数,并确定所述两两火焰图之间的每条共有子路径的路径长度和所述两两火焰图之间的每条共有子路径分别在所述两两火焰图中的路径标号;
获取单元,用于获取预设的衰减系数;
第二计算单元,用于基于所述总出现次数、所述路径长度、所述路径标号和所述衰减系数,计算两两火焰图之间的每条共有子路径在所述两两火焰图中的路径权重,得到对应的所述共有子路径权重值。
可选地,所述确定模块,包括:
第三确定子模块,用于基于两两火焰图之间的子路径特征信息,确定两两火焰图中的每条子路径分别在所处于的火焰图中的子路径权重系数;
映射子模块,用于按照所述子路径权重系数将所述两两火焰图中的每条子路径进行哈希映射,得到对应的子路径向量;
第四确定子模块,用于将属于同一火焰图的所有的所述子路径向量,确定为表征所述火焰图的火焰图向量;
第五确定子模块,用于计算两两火焰图向量之间的余弦距离值,并将所述余弦距离值作为所述两两火焰图之间的相似度。
本发明实施例还公开了一种电子设备,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的一种火焰图的分析方法的步骤。
本发明实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如上所述的一种火焰图的分析方法的步骤。
本发明实施例包括以下优点:
在本发明实施例中,可以通过两两火焰图之间的子路径特征信息确定两两火焰图之间的相似度。通过采用上述方法,提供一种利用火焰图中的子路径特征衡量火焰图之间的相似度的方法,从而能够对相似度高的火焰图进行聚类,使得分析人员在对火焰图进行分析时,对于属于同一类的火焰图只需抽取其中的一份或者几份进行人工分析,大幅度降低火焰图的人工分析成本。
附图说明
图1是本发明实施例提供的一种火焰图的分析方法的步骤流程图;
图2是一种绘制火焰图的原理图;
图3是本发明实施例提供的另一种火焰图的分析方法的步骤流程图;
图4是本发明实施例的两个火焰图的示意图;
图5是本发明实施例提供的再一种火焰图的分析方法的步骤流程图;
图6是本发明实施例提供的又一种火焰图的分析方法的步骤流程图;
图7是本发明实施例提供的一种火焰图的分析装置的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
火焰图以一种全局的视野来展示各函数运行的时间分布,使得程序开发者能够清晰的发现所有可能导致性能瓶颈的函数,是性能分析和调试优化的利器。火焰图以可视化的方式直观地展现出程序中的函数调用链。火焰图中的每一列代表一条调用链(或者称为调用栈),每一层中的每一个格子代表一个函数。火焰图中的纵轴展示了调用链的深度,调用链中函数的调用关系按照从下往上进行排列,即火焰图中的顶部就是正在执行的函数,下方都是它的父函数。火焰图中的横轴表示抽样数,如果一个函数在横轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长,说明它是性能瓶颈的可能性就越大。
目前在对程序性能进行优化时,除去采用特定的IDE(Integrated DevelopmentEnvironment)工具进行辅助分析之外,更多是采用Perf、Pprof等性能分析工具对程序进行采样,然后通过分析采样的数据找出性能问题。分析的方式主要有两种方:一种是通过工具自身提供的数据展示或者交互方式进行分析;另一种是通过将其转换成火焰图之后将性能问题更好地呈现出来。
目前对游戏运行平台进行性能优化时,也是通过采集,绘制每个游戏进程的性能火焰图,通过对性能火焰图进行分析找出导致性能瓶颈的具体问题。但是由于游戏进程是长期不间断运行的,需要记录不同时间段的性能运行情况,在该过程中,会产生大量的火焰图数据。对于海量的火焰图数据,需要耗费大量的人工成本进行火焰图的筛选和分析工作。
本发明实施例的核心构思之一在于,可以通过两两火焰图之间的子路径特征信息确定两两火焰图之间的相似度。通过采用上述方法,提供一种利用火焰图中的子路径特征衡量火焰图之间的相似度的方法,从而能够对相似度高的火焰图进行聚类,使得分析人员在对火焰图进行分析时,对于属于同一类的火焰图只需抽取其中的一份或者几份进行人工分析,大幅度降低火焰图的人工分析成本。
参照图1,示出了本发明实施例提供的一种火焰图的分析方法的步骤流程图,具体可以包括如下步骤:
步骤101,获取用于程序性能分析的多个火焰图。
其中,火焰图包括多条调用链;调用链为程序执行过程中的函数调用路径;调用链包括多条函数调用子路径。
参照图2所示为一种绘制火焰图的原理图,假设某个进程在4秒的时间内的函数调用情况如图2左边所示,其中,A,B,C,D等都是具体的函数名称,将这些函数按照调用的先后顺序连接起来,组成了调用链,分别为A→B→C→D;A→B→C→F;A→B→G和A→K。将这4条调用链从下往上排列,可以得到如图2右边所示的火焰图,这就是火焰图的绘制原理。
在本发明实施例中,对程序进行性能分析可以是通过分析程序对应的火焰图实现的。在获取某个程序在不同时间段采集的多个火焰图后,可以确定每个火焰图中的调用链,以及调用链中的函数调用子路径。举例而言,对于一条调用链A→B→C→D,其中包含的函数调用子路径包括:A;A→B;A→B→C;A→B→C→D;B;B→C;B→C→D;C;C→D;D。
步骤102,提取各火焰图中的所述子路径的子路径特征信息。
在本发明实施例中,在确定每个火焰图中的子路径后,可以提取子路径特征信息。其中,子路径特征信息包括子路径的路径长度,子路径中的调用函数名称,子路径中的函数调用顺序中的至少一种,其中,子路径的路径长度也就是子路径中的调用函数个数。举例而言,假设某条子路径为B→C→D,则该条子路径对应的路径长度为3。
步骤103,基于两两火焰图之间的子路径特征信息,确定两两火焰图之间的相似度,以确定所述多个火焰图中所有的所述火焰图之间的相似度。
在本发明实施例中,可以通过两两火焰图之间的子路径特征信息,确定两两火焰图之间的相似度,进而确定用于程序性能分析的多个火焰图中所有的火焰图之间的相似度。在一种示例中,可以比较两两火焰图之间的子路径特征信息,根据比较结果确定两两火焰图中子路径特征信息之间的相似度,进而确定两两火焰图之间的相似度。
步骤104,基于所述所有的所述火焰图之间的相似度对所有的所述火焰图分别进行聚类。
在本发明实施例中,可以利用火焰图中的子路径特征信息计算所有的火焰图之间的相似度,并根据相似度的值对火焰图进行聚类。在一种示例中,可以预先设置相似度阈值,若两两火焰图之间的相似度大于该相似度阈值,则可以判断该两两火焰图为相似火焰图,可以将该两两火焰图分为一类。
综上,在本发明实施例中,可以通过两两火焰图之间的子路径特征信息确定两两火焰图之间的相似度。通过采用上述方法,提供一种利用火焰图中的子路径特征衡量火焰图之间的相似度的方法,从而能够对相似度高的火焰图进行聚类,使得分析人员在对火焰图进行分析时,对于属于同一类的火焰图只需抽取其中的一份或者几份进行人工分析,大幅度降低火焰图的人工分析成本。
参照图3,示出了本发明实施例提供的另一种火焰图的分析方法的步骤流程图,具体可以包括如下步骤:
步骤301,获取用于程序性能分析的多个火焰图。
其中,火焰图包括多条调用链;调用链为程序执行过程中的函数调用路径;调用链包括多条函数调用子路径。
步骤302,提取各火焰图中的所述子路径的子路径特征信息。
子路径特征信息包括子路径的路径长度,子路径中的调用函数名称,子路径中的函数调用顺序中的至少一种,其中,子路径的路径长度也就是子路径中的调用函数个数。
步骤303,基于两两火焰图之间的子路径特征信息,对两两火焰图之间的调用链进行两两配对,并确定配对后的两两调用链之间的最长共有子路径。
在本发明实施例中,可以根据两两火焰图之间的子路径特征信息,对两两火焰图之间的调用链进行两两配对,对于配对后的两两调用链,可以确定它们之间的最长共有子路径。其中,最长共有子路径是指两两调用链之间的共有子路径中路径长度最长的。举例而言,假设两两配对后的两条调用链分别为A→B→C和A→B,这两条调用链之间的共有子路径有:A;A→B;B。它们之间的最长共有子路径为A→B,对应长度为2。
针对步骤303,可以执行以下子步骤:
子步骤S11,将两两火焰图之间的子路径特征信息一致的子路径确定为两两火焰图之间的共有子路径。
子步骤S12,按照所述两两火焰图之间的共有子路径的长度的递减次序,依次对两两火焰图之间的调用链进行两两配对,并确定配对后的两两调用链之间的最长共有子路径。
在本发明实施例中,可以将两两火焰图之间具有相同的子路径特征信息的子路径确定为两两火焰图之间的共有子路径。在确定两两火焰图之间的共有子路径之后,可以按照两两火焰图之间的共有子路径的长度的递减次序,依次对两两火焰图之间的调用链进行两两配对。
为了使本领域技术人员能够更好地理解两两火焰图之间的调用链的配对过程,下面通过一个例子加以说明:
参照图4所示为本发明实施例的两个火焰图的示意图。火焰图F1的调用链A→B→C→D与火焰图F2的调用链A→B→C→F的最长共有子路径为A→B→C,对应长度为3;但是火焰图F1的调用链A→B→C→F与火焰图F2的调用链A→B→C→F的最长共有子路径为A→B→C→F,其长度为4,因此,火焰图F1的调用链A→B→C→F只能与火焰图F2的调用链A→B→C→F进行配对;火焰图F1的调用链A→B→C→D只能与火焰图F2的调用链A→B→C→H进行配对。
步骤304,计算所有的所述配对后的两两调用链之间的最长共有子路径的长度总和,并将所述长度总和作为所述两两火焰图之间的相似度。
在本发明实施例中,可以对两两配对后的调用链之间的最长共有子路径的长度求和,将该长度总和作为两两火焰图之间的相似度。其中,长度总和越长,则表示两两火焰图之间的相似度越高。如图4所示,火焰图F1和火焰图F2的调用链配对情况为(A→B→C→D,A→B→C→H)、(A→B→C→F,A→B→C→F)、(A→B→G,A→E)和(A→K,A→K),得到的最长共有子路径的长度总和为4+3+1+2=10。
假设每个火焰图调用链的平均数量为p,调用链的平均长度为l,则采用上述算法计算火焰图相似度,时间复杂度为O(p
步骤305,基于所述所有的所述火焰图之间的相似度对所有的所述火焰图分别进行聚类。
在本发明实施例中,可以根据火焰图之间的相似度对火焰图进行聚类。在一种示例中,可以采用凝聚式层次聚类算法(Hierarchical Agglomerative Clustering,简称HAC)进行聚类,可以预先设置0.6为相似度阈值,将相似度大于0.6的两两火焰图归属到相同的类别中。
凝聚式层次聚类算法的主要流程是,首先把每一个样本数据都视为一个类,然后计算各类之间的距离,选取距离最相近的两个类,将它们合并为一个类。新的类再继续计算距离,合并距离最相近的两个类。如此往复,如果没有终止条件判断,最后就会合并成只有一个类。凝聚式层次聚类算法通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。
综上,在本发明实施例中,可以通过两两火焰图之间的子路径特征信息确定两两火焰图之间的相似度。通过采用上述方法,提供一种利用火焰图中的子路径特征衡量火焰图之间的相似度的方法,从而能够对相似度高的火焰图进行聚类,使得分析人员在对火焰图进行分析时,对于属于同一类的火焰图只需抽取其中的一份或者几份进行人工分析,大幅度降低火焰图的人工分析成本。
参照图5,示出了本发明实施例提供的另一种火焰图的分析方法的步骤流程图,具体可以包括如下步骤:
步骤501,获取用于程序性能分析的多个火焰图。
其中,火焰图包括多条调用链;调用链为程序执行过程中的函数调用路径;调用链包括多条函数调用子路径。
步骤502,提取各火焰图中的所述子路径的子路径特征信息。
子路径特征信息包括子路径的路径长度,子路径中的调用函数名称,子路径中的函数调用顺序中的至少一种,其中,子路径的路径长度也就是子路径中的调用函数个数。
步骤503,基于两两火焰图之间的子路径特征信息,计算两两火焰图中的每条子路径分别在所处于的火焰图中的路径权重,得到对应的子路径权重值。
在本发明实施例中,可以通过两两火焰图之间的子路径特征信息,计算两两火焰图中的每条子路径分别在各自所处的火焰图中的路径权重。
其中,子路径特征信息包括子路径的路径长度,针对步骤503,可以执行以下子步骤:
子步骤S21,统计两两火焰图之间的每条子路径分别在所处于的火焰图中的出现次数。
子步骤S22,将所述每条子路径分别在所处于的火焰图中的出现次数与所述每条子路径的路径长度的平方的乘积作为所述每条子路径分别在所处于的火焰图中的子路径权重值。
在本发明实施例中,可以先统计两两火焰图中的每条子路径分别在各自所处的火焰图中的出现次数,将该出现次数与对应的子路径的路径长度的平方的乘积作为子路径在所处的火焰图中的子路径权重值,即在本申请中,子路径权重值是根据子路径的出现次数和路径长度确定的。
需要说明的是,上述确定子路径权重值的方法只是本发明实施例中一种优选的计算方法,本领域技术人员可以采用其他的方法确定子路径权重值,对此,本发明实施例不加以具体限制。
步骤504,将两两火焰图之间的子路径特征信息一致的子路径确定为两两火焰图之间的共有子路径,并计算两两火焰图之间的每条共有子路径在所述两两火焰图中的路径权重,得到对应的共有子路径权重值。
在本发明实施例中,可以将两两火焰图之间具有相同的子路径特征信息的子路径确定为两两火焰图之间的共有子路径,并计算该共有子路径在两两火焰图中的路径权重。
针对步骤504,可以执行以下子步骤:
子步骤S23,统计两两火焰图之间的每条共有子路径在所述两两火焰图中的总出现次数,并确定所述两两火焰图之间的每条共有子路径的路径长度和所述两两火焰图之间的每条共有子路径分别在所述两两火焰图中的路径标号。
子步骤S24,获取预设的衰减系数。
子步骤S25,基于所述总出现次数、所述路径长度、所述路径标号和所述衰减系数,计算两两火焰图之间的每条共有子路径在所述两两火焰图中的路径权重,得到对应的所述共有子路径权重值。
在本发明实施例中,提供了一种确定共有子路径权重值的计算方法,通过共有子路径在两两火焰图中的总出现次数,共有子路径的路径长度,共有子路径分别在两两火焰图中的路径标号以及预设的衰减系数可以确定共有子路径在两两火焰图中的共有子路径权重值。
在一段时间内,函数被调用的次数越多,那么该函数在火焰图中的位置也会越偏向右侧。基于火焰图的该特性,可以为火焰图中的每条调用链设置路径标号,即可以定义调用链从右往左有一个从0开始递增的路径标号,路径标号表示调用链在火焰图中的所处位置。子路径的路径标号为该子路径所属于的调用链的路径标号,若该子路径为火焰图中的多条调用链的子路径,则将处于火焰图最右侧的调用链的路径标号作为该子路径的路径标号。
如图4所示,火焰图F1中的函数B和函数C在被采样的时间段内的调用次数多,因此处于火焰图中的右侧。火焰图F1中的调用链A→B→C→F的路径标号为1。火焰图F1中的子路径A→B→C的路径标号为0。
衰减系数用于表示调用链的重要程度从右往左递减,可以预先设定衰减系数为0.9。以图4为例,火焰图F1与火焰图F2的共有子路径包括:A→B→C→F和A→B→C等。对于共有子路径A→B→C→F,对应的共有子路径权重值为1×4
需要说明的是,上述确定共有子路径权重值的方法只是本发明实施例中一种优选的计算方法,本领域技术人员可以采用其他的方法确定共有子路径权重值,对此,本发明实施例不加以具体限制。
步骤505,将所有的所述共有子路径权重值的权重总和与所有的所述子路径权重值的权重总和的比值,作为所述两两火焰图之间的相似度。
在本发明实施例中,将共有子路径权重值的权重总和与子路径权重值的权重总和的比值作为两两火焰图之间的相似度。其中,该比值越接近于1,则表示两个火焰图越相似。火焰图F
其中,该公式分子中的p表示火焰图F
该公式分母中的p
本发明实施例的火焰图相似度计算方法需要遍历火焰图的调用链,并确定所有调用链中的子路径,其时间复杂度为O(V+E),其中,V表示火焰图中的函数个数,E表示边的数量(调用链中相邻的两个函数形成一条边)。由于可以使用字典结构存储子路径特征信息,因此,计算共有子路径是线性的时间复杂度,即O(Num
步骤506,基于所述所有的所述火焰图之间的相似度对所有的所述火焰图分别进行聚类。
在本发明实施例中,可以根据火焰图之间的相似度对火焰图进行聚类,具体的,可以采用凝聚式层次聚类算法。
综上,在本发明实施例中,可以通过两两火焰图之间的子路径特征信息确定两两火焰图之间的相似度。通过采用上述方法,提供一种利用火焰图中的子路径特征衡量火焰图之间的相似度的方法,从而能够对相似度高的火焰图进行聚类,使得分析人员在对火焰图进行分析时,对于属于同一类的火焰图只需抽取其中的一份或者几份进行人工分析,大幅度降低火焰图的人工分析成本。
参照图6,示出了本发明实施例提供的另一种火焰图的分析方法的步骤流程图,具体可以包括如下步骤:
步骤601,获取用于程序性能分析的多个火焰图。
其中,火焰图包括多条调用链;调用链为程序执行过程中的函数调用路径;调用链包括多条函数调用子路径。
步骤602,提取各火焰图中的所述子路径的子路径特征信息。
子路径特征信息包括子路径的路径长度,子路径中的调用函数名称,子路径中的函数调用顺序中的至少一种,其中,子路径的路径长度也就是子路径中的调用函数个数。
步骤603,基于两两火焰图之间的子路径特征信息,确定两两火焰图中的每条子路径分别在所处于的火焰图中的子路径权重系数。
在本发明实施例中,可以根据子路径特征信息,确定每条子路径分别在所处于的火焰图中的子路径权重系数。在一种示例中,子路径权重系数Path
Path
其中,count表示子路径在火焰图中的出现次数(该数据可以从火焰图中观察得到),l表示子路径的路径长度,i表示该条子路径在火焰图中处于从右往左数的第i条路径中,decay表示0-1之间的衰减系数(默认为0.9),代表该子路径的重要程度从右往左递减。即可以根据子路径在火焰图中的出现次数、子路径的路径长度、子路径的路径标号和衰减系数确定子路径在所处于的火焰图中的子路径权重系数。
举例而言,对于图4的火焰图F1中的子路径A→B→C,对应的子路径权重系数为2×3
步骤604,按照所述子路径权重系数将所述两两火焰图中的每条子路径进行哈希映射,得到对应的子路径向量。
在本发明实施例中,可以将火焰图中的每条子路径按照子路径权重系数进行哈希映射,用向量表示火焰图中的子路径。由于子路径对应的子路径向量的长度可以是根据子路径在火焰图中的出现次数预先设置为素数的,为了避免哈希冲突,可以通过按照子路径权重系数的大小进行排序后,再对子路径进行哈希映射,赋值的时候可以按照子路径权重系数从小到大进行赋值,从而可以保证权重大的子路径不会被覆盖。子路径向量的转化过程可以通过如下公式表示:
Vector[hash(path)]=Path
步骤605,将属于同一火焰图的所有的所述子路径向量,确定为表征所述火焰图的火焰图向量。
在本发明实施例中,当火焰图中所有的子路径都转化为对应的子路径向量后,可以根据所有的子路径向量确定表征该火焰图的火焰图向量。
步骤606,计算两两火焰图向量之间的余弦距离值,并将所述余弦距离值作为所述两两火焰图之间的相似度。
在将火焰图转化为对应的火焰图向量后,火焰图之间的相似度计算可以转化为向量间的余弦距离计算。其中,余弦距离值越接近于1,则表示两两火焰图之间越相似。即两两火焰图之间的相似度Similarity(V
其中,V
本发明实施例的火焰图相似度计算方法的时间复杂度可以表示为O(V+E+Num
步骤607,基于所述所有的所述火焰图之间的相似度对所有的所述火焰图分别进行聚类。
在本发明实施例中,可以根据火焰图之间的相似度对火焰图进行聚类,具体的,可以采用凝聚式层次聚类算法。
综上,在本发明实施例中,可以通过两两火焰图之间的子路径特征信息确定两两火焰图之间的相似度。通过采用上述方法,提供一种利用火焰图中的子路径特征衡量火焰图之间的相似度的方法,从而能够对相似度高的火焰图进行聚类,使得分析人员在对火焰图进行分析时,对于属于同一类的火焰图只需抽取其中的一份或者几份进行人工分析,大幅度降低火焰图的人工分析成本。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图7,示出了本发明实施例提供的一种火焰图的分析装置的结构框图,具体可以包括如下模块:
获取模块701,用于获取用于程序性能分析的多个火焰图;
其中,所述火焰图包括多条调用链;所述调用链为程序执行过程中的函数调用路径;所述调用链包括多条函数调用子路径;
提取模块702,用于提取各火焰图中的所述子路径的子路径特征信息;
确定模块703,用于基于两两火焰图之间的子路径特征信息,确定两两火焰图之间的相似度,以确定所述多个火焰图中所有的所述火焰图之间的相似度;
聚类模块704,用于基于所述所有的所述火焰图之间的相似度对所有的所述火焰图分别进行聚类。
在本发明实施例中,所述确定模块,包括:
配对子模块,用于基于两两火焰图之间的子路径特征信息,对两两火焰图之间的调用链进行两两配对,并确定配对后的两两调用链之间的最长共有子路径;
第一确定子模块,用于计算所有的所述配对后的两两调用链之间的最长共有子路径的长度总和,并将所述长度总和作为所述两两火焰图之间的相似度。
在本发明实施例中,所述配对子模块,包括:
第一确定单元,用于将两两火焰图之间的子路径特征信息一致的子路径确定为两两火焰图之间的共有子路径;
配对单元,用于按照所述两两火焰图之间的共有子路径的长度的递减次序,依次对两两火焰图之间的调用链进行两两配对,并确定配对后的两两调用链之间的最长共有子路径。
在本发明实施例中,所述确定模块,包括:
第一计算子模块,用于基于两两火焰图之间的子路径特征信息,计算两两火焰图中的每条子路径分别在所处于的火焰图中的路径权重,得到对应的子路径权重值;
第二计算子模块,用于将两两火焰图之间的子路径特征信息一致的子路径确定为两两火焰图之间的共有子路径,并计算两两火焰图之间的每条共有子路径在所述两两火焰图中的路径权重,得到对应的共有子路径权重值;
第二确定子模块,用于将所有的所述共有子路径权重值的权重总和与所有的所述子路径权重值的权重总和的比值,作为所述两两火焰图之间的相似度。
在本发明实施例中,所述子路径特征信息包括子路径的路径长度,所述第一计算子模块,包括:
统计单元,用于统计两两火焰图之间的每条子路径分别在所处于的火焰图中的出现次数;
第一计算单元,用于将所述每条子路径分别在所处于的火焰图中的出现次数与所述每条子路径的路径长度的平方的乘积作为所述每条子路径分别在所处于的火焰图中的子路径权重值。
在本发明实施例中,所述第二计算子模块,包括:
第二确定单元,用于统计两两火焰图之间的每条共有子路径在所述两两火焰图中的总出现次数,并确定所述两两火焰图之间的每条共有子路径的路径长度和所述两两火焰图之间的每条共有子路径分别在所述两两火焰图中的路径标号;
获取单元,用于获取预设的衰减系数;
第二计算单元,用于基于所述总出现次数、所述路径长度、所述路径标号和所述衰减系数,计算两两火焰图之间的每条共有子路径在所述两两火焰图中的路径权重,得到对应的所述共有子路径权重值。
在本发明实施例中,所述确定模块,包括:
第三确定子模块,用于基于两两火焰图之间的子路径特征信息,确定两两火焰图中的每条子路径分别在所处于的火焰图中的子路径权重系数;
映射子模块,用于按照所述子路径权重系数将所述两两火焰图中的每条子路径进行哈希映射,得到对应的子路径向量;
第四确定子模块,用于将属于同一火焰图的所有的所述子路径向量,确定为表征所述火焰图的火焰图向量;
第五确定子模块,用于计算两两火焰图向量之间的余弦距离值,并将所述余弦距离值作为所述两两火焰图之间的相似度。
综上,在本发明实施例中,可以通过两两火焰图之间的子路径特征信息确定两两火焰图之间的相似度。通过采用上述方法,提供一种利用火焰图中的子路径特征衡量火焰图之间的相似度的方法,从而能够对相似度高的火焰图进行聚类,使得分析人员在对火焰图进行分析时,对于属于同一类的火焰图只需抽取其中的一份或者几份进行人工分析,大幅度降低火焰图的人工分析成本。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明实施例还提供了一种电子设备,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述一种火焰图的分析方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现上述一种火焰图的分析方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种火焰图的分析方法和一种火焰图的分析装置、一种电子设备和一种计算机可读存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
- 一种火焰图的分析方法、装置、电子设备和介质
- 一种图数据分析方法、装置及计算机可读存储介质