CN114510419A - 性能分析编程框架、方法和装置 - Google Patents
性能分析编程框架、方法和装置 Download PDFInfo
- Publication number
- CN114510419A CN114510419A CN202210105952.4A CN202210105952A CN114510419A CN 114510419 A CN114510419 A CN 114510419A CN 202210105952 A CN202210105952 A CN 202210105952A CN 114510419 A CN114510419 A CN 114510419A
- Authority
- CN
- China
- Prior art keywords
- program
- performance analysis
- performance
- analysis
- graph
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种性能分析编程框架、方法和装置,所述方法包括:根据从待测程序中提取出的应用数据,构建程序抽象图;根据用户定义的性能分析数据流图,基于程序抽象图进行性能分析,得到性能分析报告,性能分析数据流图是根据用户定义的子任务函数生成的,能够对特定场景下的应用性能进行自动分析,实现用户定义的性能分析任务。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种性能分析编程框架、方法和装置。
背景技术
目前,对于大规模并行应用中存在的负载不平衡、通信等待和资源争用等性能问题,需要富于背景知识的程序员进行大量的手动编码才能进行有效的性能分析。相关技术中,通过开发的通用性能分析工具以实现应用的自动性能分析,但现有的通用性能工具存在各种各样的问题,例如:无法针对特定场景进行定制化分析,开销较大等。
发明内容
本发明的一个目的在于提供一种性能分析方法,能够对特定场景下的应用性能进行自动分析,实现用户定义的性能分析任务且保证较低开销。本发明的另一个目的在于提供一种性能分析编程框架。本发明的还一个目的在于提供一种性能分析装置。本发明的再一个目的在于提供一种计算机可读介质。本发明的还一个目的在于提供一种计算机设备。
为了达到以上目的,本发明一方面公开了一种性能分析方法,包括:
根据从待测程序中提取出的应用数据,构建程序抽象图;
通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告,性能分析数据流图是根据用户定义的子任务函数生成的。
优选的,在根据从待测程序中提取出的应用数据,构建程序抽象图之前,还包括:
通过静动态结合技术,提取待测程序的应用数据。
优选的,应用数据包括控制流图、函数调用图和性能数据;
通过静动态结合技术,提取待测程序的应用数据,包括:
通过第一解析工具,从待测程序中提取出待测程序的控制流图和函数调用图;
通过第二解析工具,从运行中的待测程序中提取出待测程序的性能数据。
优选的,根据从待测程序中提取出的应用数据,构建程序抽象图,包括:
根据控制流图,生成每个函数的函数结构子图;
根据函数调用图,将各函数结构子图进行合并,得到程序结构图;
根据性能数据对应的调用上下文,将性能数据与程序结构图相关联,得到程序抽象图。
优选的,在通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告之前,还包括:
接收用户通过预设接口输入的对程序抽象图的子任务操作;
根据子任务操作,生成多个分析子任务函数;
将多个分析子任务函数进行组合,生成性能分析数据流图。
优选的,在通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告之前,还包括:
从预设的分析子任务函数库中调用用户选取的多个目标子任务函数;
将多个目标子任务函数进行组合,生成性能分析数据流图。
优选的,性能分析数据流图包括多个分析子任务函数;
通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告,包括:
将程序抽象图输入性能分析数据流图,执行多个分析子任务函数,输出性能分析报告。
本发明还公开了一种性能分析编程框架,装置编程框架包括:
程序性能编程抽象层,用于根据从待测程序中提取出的应用数据,构建程序抽象图;
性能分析过程编程抽象层,用于根据用户定义的子任务函数,生成性能分析数据流图。
本发明还公开了一种性能分析装置,包括:
构建单元,用于根据从待测程序中提取出的应用数据,构建程序抽象图;
性能分析单元,用于通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告,性能分析数据流图是根据用户定义的子任务函数生成的。
本发明还公开了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述方法。
本发明还公开了一种计算机设备,包括存储器和处理器,所述存储器用于存储包括程序指令的信息,所述处理器用于控制程序指令的执行,所述处理器执行所述程序时实现如上所述方法。
本发明根据从待测程序中提取出的应用数据,构建程序抽象图;通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告,性能分析数据流图是根据用户定义的子任务函数生成的,能够对特定场景下的应用性能进行自动分析,实现用户定义的性能分析任务且保证较低开销。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种性能分析编程框架的结构示意图;
图2为本发明实施例提供的一种性能分析方法的流程图;
图3为本发明实施例提供的又一种性能分析方法的流程图;
图4为本发明实施例提供的一种程序抽象图的结构示意图;
图5为本发明实施例提供的一种分析子任务函数运行的逻辑示意图;
图6a为本发明实施例提供的一种待测程序过程内结构提取的示意图;
图6b为本发明实施例提供的一种过程间分析得到的程序结构图的示意图;
图6c为本发明实施例提供的一种数据关联的到的程序抽象图的示意图;
图7a为本发明实施例提供的一个各线程的线程流示意图;
图7b为本发明实施例提供的一个程序抽象图的并行视图的示意图;
图8为本发明实施例提供的一个以通信分析为例的性能分析数据流图;
图9为本发明实施例提供的一种性能分析装置的结构示意图;
图10为本发明实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了便于理解本申请提供的技术方案,下面先对本申请技术方案的相关内容进行说明。性能分析(Performance analysis)对于理解和优化应用程序是必不可少的,它广泛应用于科学计算、机器学习和大数据处理等不同领域,具体是指以收集程序运行时信息为手段研究程序行为的分析方法。自动分析并行应用程序的性能可以有效提高程序员用户理解和优化应用程序的效率。目前,通用性能分析工具主要包括基于程序剖面和基于事件轨迹的性能分析工具两类。其中,基于程序剖面的性能分析工具定期记录程序快照,分析程序的整体统计性能数据,其开销非常低。例如:典型的基于程序剖面的性能分析工具为HPCToolkit,HPCToolkit是一个用于测量和分析计算机上的程序性能的通用性能分析工具。该工具基于程序剖面的方法进行运行时性能数据采集。具体地,HPCToolkit通过使用计时器和性能监控单元的采样功能,收集程序运行时间,性能监控单元(如执行指令数,缓存丢失率等)的统计值,并将它们关联至对应的完整调用上下文。由于HPCToolkit使用以上提及的基于程序剖面的方法(也称作采样技术),因此测量开销较低(大约为1-5%)并可扩展到大型并行系统。HPCToolkit支持串行代码、多线程代码(例如pthreads、OpenMP)、MPI和多线程混合并行代码的测量和分析。另一方面,由于HPCToolkit采用基于程序剖面的方法,它仅记录了某些时间点的程序快照,而时间点之间的程序行为未被完整地记录下来,因此该工具丢失了进行深入分析的关键信息,例如:数据依赖,通信模式等。这些信息的缺失导致该工具只支持通用的性能分析,例如:热点分析、均衡性分析等,而无法支持复杂场景下的深入分析。此外,HPCToolkit是一款端到端的性能分析工具,不支持用户利用该工具采集的性能数据进行进一步分析。这意味着如果用户有超出于HPCToolkit功能的分析需求,则需要结合性能分析的专项技能进行大量手动编码,浪费人工劳动力,自动化程度较低,导致程序性能分析效率较低。
基于事件轨迹的工具跟踪并记录程序执行期间的所有事件,其日志中包含丰富的信息,包括计算、内存访问和通信特性,但是其运行时开销和日志存储开销很大。典型的基于事件轨迹的工具包括Scalasca、Vampir和TAU等。以Scalasca为例,Scalasca是一个支持性能数据采集和分析的软件,基于事件轨迹的技术在运行时对程序进行性能数据采集。具体地,在指定函数每次被调用或结束返回时,Scalasca会进行记录当前的性能监控单元以及特定函数的调用参数等,该工具可以记录指定函数在运行时间轴上的所有事件轨迹,并分析相关的锁和通信模式。根据日志中的信息,Scalasca分析进程间的性能问题的依赖关系,深入分析性能问题。但由于Scalasca在运行时频繁中断程序并记录事件和相应的参数,引入了极大的运行时开销,通常可以达到一至数百倍。此外,记录运行过程中所有的事件轨迹的日志占用了极大的存储空间,通常可达GB至TB量级。尤其是面对大规模并行程序,其记录日志引入的存储开销更为巨大。此外,该工具同样不支持用户对其记录日志进行定制化的性能分析,用户仍需大量手动编码进行定制化深入分析,导致程序性能分析效率较低且开销过大,浪费资源。
此外,大规模并行应用中包含复杂的数据和控制依赖,以及复杂的线程间锁和进程间通信模式,这些因素导致性能问题更加复杂。定位这些复杂场景下的性能问题根因,需要用户进一步深入分析,通用性能分析工具无法针对特定场景进行深入性能分析以及根因定位。然而,目前的许多针对特定场景的深入性能分析方法能够自动定位不同场景下不同类型的性能问题,例如:关键路径分析,根本原因分析等。但是这些性能分析方法只关注了并行程序性能问题的某一个特定场景,但是并行程序的性能问题可能涉及以复杂方式交织的多个因素并衍生出各种各样的场景,例如:复杂的通信、锁模式和数据依赖以一种不可预测的方式隐藏了性能问题;再例如:不同类型的性能问题之间相互影响。针对上述复杂场景,用户需设计特定性能分析任务以定位性能问题。然而,实现特定性能分析任务需大量的专业知识和手动编码,导致用户开发效率低下。
综上所述,为解决上述技术问题,本发明实施例提供一个面向性能分析的编程框架(Programming framework),可以帮助用户高效地实现针对特定场景的深入性能分析方法。图1为本发明实施例提供的一种性能分析编程框架的结构示意图,如图1所示,性能分析编程框架包括程序性能编程抽象层和性能分析过程编程抽象层。程序性能编程抽象层包括静动态分析和程序抽象图的构建,用于根据从待测程序中提取出的应用数据,构建程序抽象图,具体地,对待测程序进行静动态分析,提取和采集程序性能相关的数据,并结合所有数据将程序性能行为转化为程序抽象图。性能分析过程编程抽象层包括分析子任务函数库和性能分析数据流图,用于根据用户定义的子任务函数,生成性能分析数据流图,具体地,提供了底层编程接口以访问程序性能数据和实现自定义分析子任务;同时提供了高层编程接口协助构建性能分析数据流图,以表示具体分析任务的流程。通过以上接口,用户可以高效实现性能分析任务。
值得说明的是,图1所示的性能分析编程框架还适用于图2或图3的性能分析编程框架方法,具体过程请参见图2或图3的性能分析编程框架方法,在此不过多赘述。
下面以性能分析装置作为执行主体为例,说明本发明实施例提供的性能分析方法的实现过程。可理解的是,本发明实施例提供的性能分析方法的执行主体包括但不限于性能分析装置。
图2为本发明实施例提供的一种性能分析方法的流程图,如图2所示,该方法包括:
步骤101、根据从待测程序中提取出的应用数据,构建程序抽象图。
步骤102、通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告,性能分析数据流图是根据用户定义的子任务函数生成的。
本发明实施例提供的技术方案中,根据从待测程序中提取出的应用数据,构建程序抽象图;通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告,性能分析数据流图是根据用户定义的子任务函数生成的,能够对特定场景下的应用性能进行自动分析,实现用户定义的性能分析任务且保证较低开销。
图3为本发明实施例提供的又一种性能分析方法的流程图,如图3所示,该方法包括:
步骤201、通过静动态结合技术,提取待测程序的应用数据。
本发明实施例中,各步骤由性能分析装置执行。
本发明实施例中,应用数据包括但不限于控制流图、函数调用图和性能数据。
本发明实施例中,步骤201具体包括:
步骤2011、通过第一解析工具,从待测程序中提取出待测程序的控制流图和函数调用图。
本发明实施例中,可根据实际需求对第一解析工具进行选取,本发明实施例对此不作限定。作为一种可选方案,第一解析工具为Dyninst工具。具体地,在待测程序静态时,通过Dyninst工具从待测程序的二进制可执行文件中提取出控制流图和函数调用图。
步骤2012、通过第二解析工具,从运行中的待测程序中提取出待测程序的性能数据。
本发明实施例中,可根据实际需求对第二解析工具进行选取,本发明实施例对此不作限定。作为一种可选方案,第二解析工具为PAPI工具和PMPI工具。具体地,在待测程序动态运行时,通过PAPI工具和PMPI工具对运行中的待测程序进行采样和动态插桩,收集性能数据和动态结构信息。其中,动态结构信息为待测程序静态时无法获取的结构信息,例如:间接调用、锁、通信等。
本发明实施例中,通过静动态结合技术提取待测程序的应用数据,相比于纯动态分析,能够显着降低运行开销。
步骤202、根据从待测程序中提取出的应用数据,构建程序抽象图。
本发明实施例中,构建程序抽象图的过程包括过程内分析、过程间分析和数据关联。具体地,过程内分析为根据控制流图,生成每个函数的函数结构子图;过程间分析为根据函数调用图,将各函数结构子图进行合并,得到程序结构图;数据关联的过程为根据性能数据对应的调用上下文,将性能数据与程序结构图相关联,得到程序抽象图,其中,每条性能数据对应有一个调用上下文,通过调用上下文在程序结构图中进行顶点匹配,将性能数据与匹配的顶点进行关联,得到程序抽象图。图4为本发明实施例提供的一种程序抽象图的结构示意图,如图4所示,调用上下文为_start、main、foo、pthread_create,表示该调用上下文从main函数开始,到pthread_create函数为止;按照调用上下文从程序结构图中从根节点开始向下搜索,即:从根节点开始向下搜索main函数,直至搜索至pthread_create函数,将匹配出的函数对应的顶点与性能数据进行关联,构成程序抽象图。如图4所示,匹配出的调用上下文函数对应的顶点在图中进行线条加粗表示。
本发明实施例中,程序抽象图是一个加权有向图G=(V,E),表示程序运行的性能。程序抽象图包括顶点和边,每个顶点v∈V表示代码片段或一个程序的控制结构顶点的标签表示该顶点的类型,包括但不限于函数、调用、循环和指令,调用类型包括但不限于自定义函数调用、通信函数调用、外部函数调用、递归调用、间接调用等;属性表示该顶点上记录的性能数据,包括但不限于执行时间、性能监控单元数据、通信数据、函数调用次数、迭代次数等,具体取决于分析任务的具体要求,本发明实施例对此不作限定。
程序抽象图中每条边e=(vsrc,vdest)∈E连接源顶点(vsrc)和目的顶点(vdest),边的标签表示边的类型,具体包括过程内、过程间、线程间和进程间四种类型。过程内边代表函数的控制流;过程间边表示函数调用关系;线程间边代表不同线程间的数据依赖,例如:锁引起的等待事件;进程间边代表不同进程之间的通信,包括同步点对点通信、异步点对点通信和集体通信。边的属性表示边上记录的数据,可以是性能数据、通信的执行时间、通信数据量以及等待事件的时间等,具体取决于边的类型和运行时数据,本发明对此不作限定。
值得说明的是,程序抽象图包括两种视图,分别为自顶向下视图和并行视图,自顶向下视图仅包含过程内和过程间边;并行视图包含所有类型的边,包括过程内、过程间、线程间和进程间的边。
步骤203、生成性能分析数据流图。
本发明实施例中,步骤203具体包括:
步骤2031、接收用户通过预设接口输入的对程序抽象图的子任务操作。
本发明实施例中,设置有不同应用程序编程接口(API)接口,以便用户可以通过API接口方便快捷地实现一个分析子任务函数,API接口包括但不限于图操作接口、图算法接口和集合操作接口。其中,图操作接口为用户访问程序抽象图上的顶点和边提供通道,用户可以通过图操作接口访问程序抽象图中顶点和边的名称、类型、性能数据、调试信息。用户还可以通过图操作接口对程序抽象图进行修改。图算法接口为用户在程序抽象图上执行多种图算法提供通道,图算法包括但不限于广度优先搜索、子图匹配、社区发现等。用户可以使用这些算法并结合自定义约束来实现特定的分析子任务函数。集合操作接口为用户对程序抽象图的点和边集合进行操作提供通道,用户操作包括但不限于元素排序、过滤、分类,以及集合的交、并、补、差的计算。
步骤2032、根据子任务操作,生成多个分析子任务函数。
具体地,用户通过API接口输入子任务操作,子任务操作包括但不限于对程序抽象图中的集合的计算操作、对程序抽象图的图算法操作等,生成子任务操作对应的分析子任务函数。以分析子任务函数为热点检测为例,热点检测是指找出具有特定指标最高值的代码片段,例如总执行周期、缓存未命中和指令数等。最常见的热点检测是识别最耗时的代码片段,其具体指标是总执行时间。通过热点检测函数hotspot按照热点排序所用的指标m对热点顶点进行检测,返回指标m和检测出的前n个热点顶点,即:返回最严重的n个热点。通过指标m可以检测不同类型的热点,指标m的具体设定可根据实际需求进行设定,本发明实施例对此不作限定。
步骤2033、将多个分析子任务函数进行组合,生成性能分析数据流图。
本发明实施例中,将多个分析子任务函数按照子任务操作的先后顺序进行连接组合,生成性能分析数据流图。
作为另一种可选方案,步骤203具体包括:
步骤3031、从预设的分析子任务函数库中调用用户选取的多个目标子任务函数。
本发明实施例中,分析子任务函数库是根据常见的性能分析场景构建的,分析子任务函数库包括多个内置的分析子任务函数。用户可以根据场景需求,从分析子任务函数库中选取目标子任务函数。
步骤3032、将多个目标子任务函数进行组合,生成性能分析数据流图。
本发明实施例中,用户可以据场景需求,将多个目标子任务函数进行组合,生成性能分析数据流图。
值得说明的是,若分析子任务函数库中内置的分析子任务函数不足以支持用户的需求,用户采用步骤2031至步骤2033提供的方法实现自定义的分析子任务函数,再结合自定义分析子任务函数和内置分析子任务函数构建性能分析数据流图。
进一步地,对于一些通用场景下的性能分析任务,本发明实施例还提供多个内置性能分析模型,表示为性能分析数据流图作为内置性能分析模型,例如:信息传递接口(MPI)通信分析模型、关键路径分析模型和可扩展性分析模型。用户在面对通用场景的性能分析任务时,可以直接调用对应的内置性能分析模型进行性能分析,提高性能分析效率。
本发明实施例中,将性能分析过程抽象为性能分析数据流图。性能分析数据流图中的每个顶点表示一个分析子任务函数,例如:运行阶段、分析子任务和结果报告阶段等。每条边代表顶点的输入或输出,具体地,每个分析子任务函数的分析结果通过边作为输入进入下一个分析子任务函数。性能抽象图中包括顶点集和边集,集合中的元素在集合流经性能分析数据流图的顶点时进行更新。集合中包含的点和边表示一个分析子任务的结果,对应的是代码段或者代码段之间的关联性。每个分析子任务函数的具体输入集合和输出集合的种类及个数都由函数本身定义,但每个集合是顶点集或者边集。
图5为本发明实施例提供的一种分析子任务函数运行的逻辑示意图,如图5所示,以一个分析子任务函数为例,将输入集合(V1,E1)输入至分析子任务函数,执行分析子任务函数,并生成输出集合(V2,E2)。输入集合的格式和输出集合的格式由分析子任务函数的设计决定。用户可以灵活使用和组合分析子任务函数来构建性能分析数据流图的结构。
步骤204、通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告,性能分析数据流图是根据用户定义的子任务函数生成的。
本发明实施例中,性能分析数据流图是为一般的分析任务或常见的场景而设计的。性能分析数据流图包括多个分析子任务函数,以完成特定的性能分析任务。用户可以直接使用性能分析数据流图以获取相关的性能分析报告。此外,用户也可以将分析子任务函数添加到现有性能分析数据流图中以满足特定分析需求。
具体地,将程序抽象图输入性能分析数据流图,执行多个分析子任务函数,输出性能分析报告。性能分析报告包括具有性能问题的通信函数的关键属性,包括但不限于函数名称、通信模式、调试信息和执行时间。
下面以一个具体的实施例详细对性能分析方法进行说明:
待测程序为MPI和Pthreads的并行程序,该并行程序包括main、foo和add三个函数。图6a为本发明实施例提供的一种待测程序过程内结构提取的示意图,如图6a所示,main函数的函数结构子图以main为根节点,Loop_1节点和printf节点为根节点的子节点,foo、pthread_mute_lock、pthread_mute_unlock和pthread_join节点为Loop_1节点的子节点。foo函数的函数结构子图以foo为各节点,pthread_create、Loop_1和MPI_Sendrecv为foo节点的子节点。add函数的函数结构子图以add为根节点,pthread_mute_lock、Loop_1和pthread_mute_unlock为add节点的子节点。将各函数的函数结构子图进行合并,得到程序结构图。图6b为本发明实施例提供的一种过程间分析得到的程序结构图的示意图,如图6b所示,采用的调用关系为pthread_create函数调用add函数,程序结构图包括main节点、foo节点、pthread_create节点和add节点。根据性能数据对应的调用上下文,将性能数据与程序结构图相关联,得到程序抽象图,图6c为本发明实施例提供的一种数据关联的到的程序抽象图的示意图,如图6c所示,调用上下文包括pthread_mute_lock、Loop_1.2、MPI_Sendrecv和Loop_1.1,按照调用上下文从程序结构图中从根节点开始向下搜索,将匹配出的函数对应的顶点与性能数据进行关联,构成程序抽象图。如图6c所示,匹配出的调用上下文函数对应的顶点在图中进行线条加粗表示。作为另一种可选方案,若是进行热点检测,还可以将顶点以不同颜色示出,以表示热点的严重程度,热点的严重程序是根据该顶点占总时间的比例进行归一化计算的,便于用户直观得到结论。图6c所示的程序抽象图为自顶向下视图,仅包含过程内和过程间边。
图7a为本发明实施例提供的一个各线程的线程流示意图,如图7a所示,为每个线程生成一个流,流是程序抽象图的自顶向下视图的特定部分进行先序遍历而记录的顶点访问序列。遍历以线程为粒度,具体地,当遍历过程中遇到pthread_create节点或OMP_parallel函数(这两个函数会新创建线程)将会新建一个前序遍历流,在新的遍历流结束后,将继续之前的遍历流,从而保证每个遍历流表示的是单个线程。为线程流添加线程间和进程间边,得到程序流图。其中,线程间和进程间边代表跨进程和线程流的锁、通信等;将性能数据与程序流图进行关联,生成程序流图的并行视图。图7b为本发明实施例提供的一个程序抽象图的并行视图的示意图,如图7b所示,两个并行的程序流通过MPI_Sendrecv节点进行关联。并行视图包含所有类型的边,包括过程内、过程间、线程间和进程间的边。
以通信分析任务为例,在分析程序运行的通信性能时,通信的均衡性是关键点之一。如果检测到通信存在不均衡行为,用户需要进一步分解性能以确定不均衡的原因,不均衡的原因有很多,包括不同的消息大小、通信前的计算负载不均衡等等。面对通信分析任务,图8为本发明实施例提供的一个以通信分析为例的性能分析数据流图,该针对通信分析的性能分析数据流图称为MPI通信分析模型,如图8所示,MPI通信分析模型运行,将程序抽象图输入MPI通信分析模型,经过过滤器、热点检测、均衡性分析、分解分析的分析子任务函数,输出性能分析报告。性能分析报告包括但不限于函数名称、通信模式、调试信息和执行时间。
经过实际测试,本发明提供的性能分析方法仅引入约1.56%的运行时开销和约2.4MB存储开销,通过极少量代码和设置的不同等级抽象接口即可实现用户定义的性能分析任务且保证较低开销。其中,用户定义的性能分析任务包括但不限于可扩展性分析任务、根本原因分析任务和关键路径分析任务。
本发明实施例提供的性能分析方法的技术方案中,根据从待测程序中提取出的应用数据,构建程序抽象图;通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告,性能分析数据流图是根据用户定义的子任务函数生成的,能够对特定场景下的应用性能进行自动分析,实现用户定义的性能分析任务且保证较低开销。其中,用户定义的性能分析任务包括但不限于可扩展性分析任务、根本原因分析任务和关键路径分析任务。
图9为本发明实施例提供的一种性能分析装置的结构示意图,该装置用于执行上述性能分析方法,如图9所示,该装置包括:构建单元11和性能分析单元12。
构建单元11用于根据从待测程序中提取出的应用数据,构建程序抽象图。
性能分析单元12用于通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告,性能分析数据流图是根据用户定义的子任务函数生成的。
本发明实施例中,该装置还包括:提取单元13。
提取单元13用于通过静动态结合技术,提取待测程序的应用数据。
本发明实施例中,提取单元13具体用于通过第一解析工具,从待测程序中提取出待测程序的控制流图和函数调用图;通过第二解析工具,从运行中的待测程序中提取出待测程序的性能数据。
本发明实施例中,提取单元13具体用于根据控制流图,生成每个函数的函数结构子图;根据函数调用图,将各函数结构子图进行合并,得到程序结构图;根据性能数据对应的调用上下文,将性能数据与程序结构图相关联,得到程序抽象图。
本发明实施例中,该装置还包括:接收单元14、第一生成单元15和第二生成单元16。
接收单元14用于接收用户通过预设接口输入的对程序抽象图的子任务操作。
第一生成单元15用于根据子任务操作,生成多个分析子任务函数。
第二生成单元16用于将多个分析子任务函数进行组合,生成性能分析数据流图。
本发明实施例中,该装置还包括:选取单元17和组合单元18。
选取单元17用于从预设的分析子任务函数库中调用用户选取的多个目标子任务函数。
组合单元18用于将多个目标子任务函数进行组合,生成性能分析数据流图。
本发明实施例中,性能分析单元12具体用于将程序抽象图输入性能分析数据流图,执行多个分析子任务函数,输出性能分析报告。
本发明实施例的方案中,根据从待测程序中提取出的应用数据,构建程序抽象图;通过用户定义的性能分析数据流图,根据程序抽象图进行性能分析,得到性能分析报告,性能分析数据流图是根据用户定义的子任务函数生成的,能够对特定场景下的应用性能进行自动分析,实现用户定义的性能分析任务且保证较低开销。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机设备,具体的,计算机设备例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
本发明实施例提供了一种计算机设备,包括存储器和处理器,存储器用于存储包括程序指令的信息,处理器用于控制程序指令的执行,程序指令被处理器加载并执行时实现上述性能分析方法的实施例的各步骤,具体描述可参见上述性能分析方法的实施例。
下面参考图10,其示出了适于用来实现本申请实施例的计算机设备600的结构示意图。
如图10所示,计算机设备600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM))603中的程序而执行各种适当的工作和处理。在RAM603中,还存储有计算机设备600操作所需的各种程序和数据。CPU601、ROM602、以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶反馈器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡,调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口606。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装如存储部分608。
特别地,根据本发明的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包括用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请技术方案中对数据的获取、存储、使用、处理等均符合国家法律法规的相关规定。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (11)
1.一种性能分析方法,其特征在于,所述方法包括:
根据从待测程序中提取出的应用数据,构建程序抽象图;
通过用户定义的性能分析数据流图,根据所述程序抽象图进行性能分析,得到性能分析报告,所述性能分析数据流图是根据用户定义的子任务函数生成的。
2.根据权利要求1所述的性能分析方法,其特征在于,在所述根据从待测程序中提取出的应用数据,构建程序抽象图之前,还包括:
通过静动态结合技术,提取所述待测程序的应用数据。
3.根据权利要求2所述的性能分析方法,其特征在于,所述应用数据包括控制流图、函数调用图和性能数据;
所述通过静动态结合技术,提取所述待测程序的应用数据,包括:
通过第一解析工具,从所述待测程序中提取出待测程序的控制流图和函数调用图;
通过第二解析工具,从运行中的所述待测程序中提取出待测程序的性能数据。
4.根据权利要求3所述的性能分析方法,其特征在于,所述根据从待测程序中提取出的应用数据,构建程序抽象图,包括:
根据所述控制流图,生成每个函数的函数结构子图;
根据所述函数调用图,将各函数结构子图进行合并,得到程序结构图;
根据所述性能数据对应的调用上下文,将所述性能数据与所述程序结构图相关联,得到程序抽象图。
5.根据权利要求1所述的性能分析方法,其特征在于,在所述通过用户定义的性能分析数据流图,根据所述程序抽象图进行性能分析,得到性能分析报告之前,还包括:
接收用户通过预设接口输入的对所述程序抽象图的子任务操作;
根据所述子任务操作,生成多个分析子任务函数;
将多个所述分析子任务函数进行组合,生成性能分析数据流图。
6.根据权利要求1所述的性能分析方法,其特征在于,在所述通过用户定义的性能分析数据流图,根据所述程序抽象图进行性能分析,得到性能分析报告之前,还包括:
从预设的分析子任务函数库中调用用户选取的多个目标子任务函数;
将多个所述目标子任务函数进行组合,生成性能分析数据流图。
7.根据权利要求1所述的性能分析方法,其特征在于,所述性能分析数据流图包括多个分析子任务函数;
所述通过用户定义的性能分析数据流图,根据所述程序抽象图进行性能分析,得到性能分析报告,包括:
将所述程序抽象图输入所述性能分析数据流图,执行多个所述分析子任务函数,输出所述性能分析报告。
8.一种性能分析编程框架,其特征在于,所述编程框架包括:
程序性能编程抽象层,用于根据从待测程序中提取出的应用数据,构建程序抽象图;
性能分析过程编程抽象层,用于根据用户定义的子任务函数,生成性能分析数据流图。
9.一种性能分析装置,其特征在于,所述装置包括:
构建单元,用于根据从待测程序中提取出的应用数据,构建程序抽象图;
性能分析单元,用于通过用户定义的性能分析数据流图,根据所述程序抽象图进行性能分析,得到性能分析报告,所述性能分析数据流图是根据用户定义的子任务函数生成的。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至7任一项所述的性能分析方法。
11.一种计算机设备,包括存储器和处理器,所述存储器用于存储包括程序指令的信息,所述处理器用于控制程序指令的执行,其特征在于,所述程序指令被处理器加载并执行时实现权利要求1至7任一项所述的性能分析方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210105952.4A CN114510419A (zh) | 2022-01-28 | 2022-01-28 | 性能分析编程框架、方法和装置 |
PCT/CN2023/073289 WO2023143426A1 (zh) | 2022-01-28 | 2023-01-20 | 性能分析编程框架、方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210105952.4A CN114510419A (zh) | 2022-01-28 | 2022-01-28 | 性能分析编程框架、方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114510419A true CN114510419A (zh) | 2022-05-17 |
Family
ID=81550515
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210105952.4A Pending CN114510419A (zh) | 2022-01-28 | 2022-01-28 | 性能分析编程框架、方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114510419A (zh) |
WO (1) | WO2023143426A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023143426A1 (zh) * | 2022-01-28 | 2023-08-03 | 清华大学 | 性能分析编程框架、方法和装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7627671B1 (en) * | 2004-05-22 | 2009-12-01 | ClearApp, Inc. | Monitoring and performance management of component-based applications |
US20090089805A1 (en) * | 2007-09-28 | 2009-04-02 | Microsoft Corporation | Profiling techniques and systems for computer programs |
CN111611158A (zh) * | 2020-05-08 | 2020-09-01 | 中国原子能科学研究院 | 一种应用性能分析系统及方法 |
CN111782266B (zh) * | 2020-06-28 | 2023-08-25 | 中国工商银行股份有限公司 | 软件性能基准确定方法及装置 |
CN114510419A (zh) * | 2022-01-28 | 2022-05-17 | 清华大学 | 性能分析编程框架、方法和装置 |
-
2022
- 2022-01-28 CN CN202210105952.4A patent/CN114510419A/zh active Pending
-
2023
- 2023-01-20 WO PCT/CN2023/073289 patent/WO2023143426A1/zh unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023143426A1 (zh) * | 2022-01-28 | 2023-08-03 | 清华大学 | 性能分析编程框架、方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2023143426A1 (zh) | 2023-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Bielik et al. | Scalable race detection for android applications | |
EP2992431B1 (en) | Activity based sampling of diagnostics data | |
US8166464B2 (en) | Analysis and detection of soft hang responsiveness program errors | |
EP2671161B1 (en) | System and method for determining an objects lifetime in an object oriented environment | |
US20190102278A1 (en) | Memory leak profiling events | |
EP2609501B1 (en) | Dynamic calculation of sample profile reports | |
WO2013148145A1 (en) | Logical grouping of profile data | |
WO2020248511A1 (zh) | 一种基于运行时模型实现对终端应用控制的方法 | |
Swarna et al. | Apache Pig-a data flow framework based on Hadoop Map Reduce | |
Rabl et al. | Apache Flink in current research | |
Drebes et al. | Aftermath: A graphical tool for performance analysis and debugging of fine-grained task-parallel programs and run-time systems | |
WO2023143426A1 (zh) | 性能分析编程框架、方法和装置 | |
US20110321001A1 (en) | Visualization of runtime analysis across dynamic boundaries | |
US11768754B2 (en) | Parallel program scalability bottleneck detection method and computing device | |
Asaduzzaman et al. | Recommending framework extension examples | |
Liu et al. | Automatic performance debugging of SPMD-style parallel programs | |
Sfaxi et al. | Babel: a generic benchmarking platform for Big Data architectures | |
Malony et al. | A plugin architecture for the TAU performance system | |
Li et al. | Multicore profiling for Erlang programs using Percept2 | |
Mohr et al. | Performance measurement and analysis tools for extremely scalable systems | |
CN110908870A (zh) | 一种大型机的资源监控方法、装置、存储介质及设备 | |
de Oliveira Stein et al. | Pajé trace file format | |
Rosales et al. | Characterizing Java Streams in the Wild | |
WO2021036987A1 (zh) | 一种实现运维监控的方法及装置 | |
Tallent et al. | Identifying performance bottlenecks in work-stealing computations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |