一种性能事件监控方法、装置、设备和存储介质转让专利

申请号 : CN202311511068.1

文献号 : CN117234859B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李龙翔刘羽

申请人 : 苏州元脑智能科技有限公司

摘要 :

本申请涉及一种性能事件监控方法、装置、设备和存储介质。主要技术方案包括:通过获取硬件平台支持运行的性能事件列表,根据性能事件列表,获取性能事件列表中性能事件的监控信息,根据监控信息,对性能事件进行分类,得到性能事件分组,根据性能事件分组,自动监控硬件平台支持运行的性能事件,能够全面、准确地判断应用程序在硬件平台运行的性能瓶颈。

权利要求 :

1.一种性能事件监控方法,其特征在于,所述方法包括:

获取硬件平台支持运行的性能事件列表;

根据所述性能事件列表,获取所述性能事件列表中性能事件的监控信息;

根据所述监控信息,对所述性能事件进行分类,得到性能事件分组,具体包括:根据所述监控信息,计算所述性能事件列表中性能事件之间的相关系数;根据所述相关系数构造事件相关矩阵;根据所述事件相关矩阵,对所述性能事件进行分类,得到性能事件分组;其中,所述根据所述事件相关矩阵,对所述性能事件进行分类,得到性能事件分组,包括:确定所述事件相关矩阵中的最大相关系数对应的第一性能事件和第二性能事件为第一事件组和第二事件组的一级事件;分别计算剩余性能事件与所述第一性能事件和所述第二性能事件的相似系数,所述剩余性能事件为所述性能事件列表中除第一性能事件和第二性能事件之外的性能事件;将与所述第一性能事件的相似系数最大的第一剩余性能事件确定为所述第一事件组的二级事件,将与所述第二性能事件的相似系数最大的第二剩余性能事件确定为所述第二事件组的二级事件;依次类推,直至计算剩余性能事件中的性能事件与事件组中性能事件的最大相关系数超过预设阈值,停止分类,得到性能事件分组;

根据所述性能事件分组,自动监控所述硬件平台支持运行的性能事件。

2.根据权利要求1所述的方法,其特征在于,所述根据所述性能事件列表,获取所述性能事件列表中性能事件的监控信息,包括:响应于用户发送的测试请求信息,启动中央处理器的运行;

在中央处理器处于运行状态下,监控所述性能事件列表中的每个性能事件,得到所述每个性能事件的监控信息。

3.根据权利要求2所述的方法,其特征在于,每次监控性能事件的个数与所述硬件平台部署的性能计数器的个数相同,所述性能事件列表中性能事件的个数与每次监控性能事件的个数的比值为循环监控的次数。

4.根据权利要求1所述的方法,其特征在于,所述监控信息包括每个性能事件在监控周期内的监控值;所述根据所述监控信息,计算所述性能事件列表中性能事件之间的相关系数,包括:对所述每个性能事件在监控周期内的监控值进行归一化处理,得到每个性能事件的归一化序列值;

根据所述归一化序列值,计算每个性能事件的频域序列值;

根据所述频域序列值,计算所述性能事件列表中性能事件之间的相关系数。

5.根据权利要求1所述的方法,其特征在于,所述根据所述性能事件分组,自动监控所述硬件平台支持运行的性能事件,包括:监控所述性能事件分组中多个事件组的预设级别事件,得到监控结果代表值;

根据所述监控结果代表值,搜索热点性能事件;

根据所述热点性能事件,判断应用程序的性能瓶颈。

6.根据权利要求5所述的方法,其特征在于,所述根据所述热点性能事件,判断性能瓶颈,包括:根据所述热点性能事件,确定目标事件组;

监控所述目标事件组中的预设级别事件,判断应用程序的性能瓶颈。

7.根据权利要求1所述的方法,其特征在于,所述根据所述性能事件分组,自动监控所述硬件平台支持运行的性能事件,包括:监控所述性能事件分组中满足预设条件的事件组中所有性能事件,判断应用程序的性能瓶颈。

8.根据权利要求1所述的方法,其特征在于,所述方法还包括:

通过预设命令获取中央处理器的型号,在性能事件数据库中查找所述中央处理器的型号对应的性能事件列表。

9.根据权利要求8所述的方法,其特征在于,所述方法还包括:

当在所述性能事件数据库中未查找到所述中央处理器的型号时,向用户终端发送反馈信息,所述反馈信息用于表示不支持在当前平台进行自动监控性能操作。

10.根据权利要求1所述的方法,其特征在于,所述方法还包括:

将监控信息按照csv格式保存在结果文件中,将每组性能事件保存在单个json文件中。

11.一种性能事件监控装置,其特征在于,所述装置应用于硬件平台,所述装置包括:性能事件分类模块和自动性能监控模块,所述性能事件分类模块包括性能事件获取单元、事件监控结果获取单元和性能事件分类单元;

所述性能事件获取单元,用于获取所述硬件平台支持运行的性能事件列表;

所述事件监控结果获取单元,用于根据所述性能事件列表,获取所述性能事件列表中性能事件的监控信息;

所述性能事件分类单元,用于根据所述监控信息,对所述性能事件进行分类,得到性能事件分组,具体包括:根据所述监控信息,计算所述性能事件列表中性能事件之间的相关系数;根据所述相关系数构造事件相关矩阵;根据所述事件相关矩阵,对所述性能事件进行分类,得到性能事件分组;其中,所述根据所述事件相关矩阵,对所述性能事件进行分类,得到性能事件分组,包括:确定所述事件相关矩阵中的最大相关系数对应的第一性能事件和第二性能事件为第一事件组和第二事件组的一级事件;分别计算剩余性能事件与所述第一性能事件和所述第二性能事件的相似系数,所述剩余性能事件为所述性能事件列表中除第一性能事件和第二性能事件之外的性能事件;将与所述第一性能事件的相似系数最大的第一剩余性能事件确定为所述第一事件组的二级事件,将与所述第二性能事件的相似系数最大的第二剩余性能事件确定为所述第二事件组的二级事件;依次类推,直至计算剩余性能事件中的性能事件与事件组中性能事件的最大相关系数超过预设阈值,停止分类,得到性能事件分组;

所述自动性能监控模块,用于根据所述性能事件分组,自动监控所述硬件平台支持运行的性能事件。

12.一种计算机设备,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的计算机指令,所述计算机指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至10中任一项所述的方法。

13.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述计算机指令用于使计算机执行权利要求1至10中任一项所述的方法。

说明书 :

一种性能事件监控方法、装置、设备和存储介质

技术领域

[0001] 本申请涉及计算机技术领域,特别是涉及一种性能事件监控方法、装置、设备和存储介质。

背景技术

[0002]  现代处理器都集成了性能计数器(Performance Monitor Unit,PMU),其能够收集应用程序、操作系统以及处理器性能信息,这些信息可以帮助确认应用程序或操作系统内热点,分析软件运行瓶颈。PMU具有监控过程中额外开销较低,对目标应用干扰较小等优点,并且能够同时记录多个微架构性能事件特征。
[0003]  目前Linux系统内通过性能监控工具perf等可以对PMU监控事件进行读写,从而实现对用户运行程序性能进行监控。在Linux系统内常用的性能监控工具perf中,将性能监控指标分为了软件指标和硬件指标。对于一些常用的性能分析工具,如Intel Vtune、PAPI、TAU等,在新硬件平台运行时需要用户指定性能事件,无法对平台支持的性能监控事件进行判断与分类。对于使用者来说,在不同厂商的不同型号处理器上对软件进行性能分析时,需要参考硬件厂商提供的软件手册了解当前硬件平台支持的性能事件,用户无法确认在程序执行过程中需要监控的性能指标,导致无法准确判断程序在新平台运行过程中的性能瓶颈。

发明内容

[0004] 基于此,本申请提供了一种性能事件监控方法、装置、设备和存储介质,以全面、准确地判断应用程序在硬件平台运行的性能瓶颈。
[0005] 第一方面,提供一种性能事件监控方法,该方法包括:
[0006] 获取硬件平台支持运行的性能事件列表;
[0007] 根据性能事件列表,获取性能事件列表中性能事件的监控信息;
[0008] 根据监控信息,对性能事件进行分类,得到性能事件分组;
[0009] 根据性能事件分组,自动监控硬件平台支持运行的性能事件。
[0010] 根据本申请实施例中一种可实现的方式,根据性能事件列表,获取性能事件列表中性能事件的监控信息,包括:
[0011] 响应于用户发送的测试请求信息,启动中央处理器的运行;
[0012] 在中央处理器处于运行状态下,监控性能事件列表中的每个性能事件,得到每个性能事件的监控信息。
[0013] 根据本申请实施例中一种可实现的方式,每次监控性能事件的个数与硬件平台部署的性能计数器的个数相同,性能事件列表中性能事件的个数与每次监控性能事件的个数的比值为循环监控的次数。
[0014] 根据本申请实施例中一种可实现的方式,根据监控信息,对性能事件进行分类,得到性能事件分组,包括:
[0015] 根据监控信息,计算性能事件列表中性能事件之间的相关系数;
[0016] 根据相关系数构造事件相关矩阵;
[0017] 根据事件相关矩阵,对性能事件进行分类,得到性能事件分组。
[0018] 根据本申请实施例中一种可实现的方式,监控信息包括每个性能事件在监控周期内的监控值;根据监控信息,计算性能事件列表中性能事件之间的相关系数,包括:
[0019] 对每个性能事件在监控周期内的监控值进行归一化处理,得到每个性能事件的归一化序列值;
[0020] 根据归一化序列值,计算每个性能事件的频域序列值;
[0021] 根据频域序列值,计算性能事件列表中性能事件之间的相关系数。
[0022] 根据本申请实施例中一种可实现的方式,根据事件相关矩阵,对性能事件进行分类,得到性能事件分组,包括:
[0023] 确定事件相关矩阵中的最大相关系数对应的第一性能事件和第二性能事件为第一事件组和第二事件组的一级事件;
[0024] 分别计算剩余性能事件与第一性能事件和第二性能事件的相似系数,剩余性能事件为性能事件列表中除第一性能事件和第二性能事件之外的性能事件;
[0025] 将与第一性能事件的相似系数最大的第一剩余性能事件确定为第一事件组的二级事件,将与第二性能事件的相似系数最大的第二剩余性能事件确定为第二事件组的二级事件;
[0026] 依次类推,直至计算剩余性能事件中的性能事件与事件组中性能事件的最大相关系数超过预设阈值,停止分类,得到性能事件分组。
[0027] 根据本申请实施例中一种可实现的方式,根据性能事件分组,自动监控硬件平台支持运行的性能事件,包括:
[0028] 监控性能事件分组中多个事件组的预设级别事件,得到监控结果代表值;
[0029] 根据监控结果代表值,搜索热点性能事件;
[0030] 根据热点性能事件,判断应用程序的性能瓶颈。
[0031] 根据本申请实施例中一种可实现的方式,根据热点性能事件,判断性能瓶颈,包括:
[0032] 根据热点性能事件,确定目标事件组;
[0033] 监控目标事件组中的预设级别事件,判断应用程序的性能瓶颈。
[0034] 根据本申请实施例中一种可实现的方式,根据性能事件分组,自动监控硬件平台支持运行的性能事件,包括:
[0035] 监控性能事件分组中满足预设条件的事件组中所有性能事件,判断应用程序的性能瓶颈。
[0036] 根据本申请实施例中一种可实现的方式,该方法还包括:
[0037] 通过预设命令获取中央处理器的型号,在性能事件数据库中查找中央处理器的型号对应的性能事件列表。
[0038] 根据本申请实施例中一种可实现的方式,该方法还包括:
[0039] 当在性能事件数据库中未查找到中央处理器的型号时,向用户终端发送反馈信息,反馈信息用于表示不支持在当前平台进行自动监控性能操作。
[0040] 根据本申请实施例中一种可实现的方式,该方法还包括:
[0041] 将监控信息按照csv格式保存在结果文件中,将每组性能事件保存在单个json文件中。
[0042] 第二方面,提供了一种性能事件监控装置,该装置应用于硬件平台,该装置包括:性能事件分类模块和自动性能监控模块,性能事件分类模块包括性能事件获取单元、事件监控结果获取单元和性能事件分类单元;
[0043] 性能事件获取单元,用于获取硬件平台支持运行的性能事件列表;
[0044] 事件监控信息获取单元,用于根据性能事件列表,获取性能事件列表中性能事件的监控信息;
[0045] 性能事件分类单元,用于根据监控信息,对性能事件进行分类,得到性能事件分组;
[0046] 自动性能监控模块,用于根据性能事件分组,自动监控硬件平台支持运行的性能事件。
[0047]  第三方面,提供了一种计算机设备,包括:
[0048] 至少一个处理器;以及
[0049] 与所述至少一个处理器通信连接的存储器;其中,
[0050] 所述存储器存储有可被所述至少一个处理器执行的计算机指令,所述计算机指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述第一方面中涉及的方法。
[0051] 第四方面,提供了一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述计算机指令用于使计算机执行上述第一方面中涉及的方法。
[0052] 根据本申请实施例所提供的技术内容,通过获取硬件平台支持运行的性能事件列表,根据性能事件列表,获取性能事件列表中性能事件的监控信息,根据监控信息,对性能事件进行分类,得到性能事件分组,根据性能事件分组,自动监控硬件平台支持运行的性能事件,能够全面、准确地判断应用程序在硬件平台运行的性能瓶颈。

附图说明

[0053] 图1为一个实施例中性能事件监控方法的应用环境图;
[0054] 图2为一个实施例中性能事件监控方法的流程示意图;
[0055] 图3为一个实施例中性能事件监控装置的结构框图;
[0056] 图4为一个实施例中计算机设备的示意性结构图。

具体实施方式

[0057] 以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
[0058] 由于不同厂家制造处理器部件与流水线不同,PMU单元个数与支持监控性能事件也有较大差别。即使是同一厂家,在不同型号设备上支持的性能监控事件也有较大差异。随着处理器集成度越来越高,指令流水线越复杂,PMU支持的性能事件个数也越来越多。在目前Intel、AMD等主流处理器中,其发布软件手册内支持的性能事件多达200多种,而PMU支持的性能事件个数多达数万种,但是每个核心包含的PMU单元个数仅有个位数,远少于其所支持性能事件个数。对于硬件支持的所有性能监控事件,Linux系统内并没有对应的监控说明文档,用户在使用时无法了解当前硬件所支持的所有性能事件或是每个事件所支持性能指标具体含义。
[0059] 在使用Linux系统内的Perf工具对性能事件监控时,也可以通过多重复用方法,在有限的PMU单元中运行过程中多次编程性能事件从而获得更多性能指标结果。这种监控方法获得性能监控结果并不准确,由于不同指标并非在同一时刻时间获得结果,可能会有性能瓶颈分析错误情况。
[0060] 为了解决现有技术问题,本申请实施例提供了一种性能事件监控方法、装置、设备及计算机存储介质。
[0061] 为了方便理解,首先对本申请所适用的系统进行描述。本申请提供的性能事件监控方法,可以应用于如图1所示的系统架构中。其中,终端110通过网络与服务器120通过网络进行通信。服务器120获取硬件平台支持运行的性能事件列表,根据所述性能事件列表,获取所述性能事件列表中性能事件的监控信息,根据所述监控信息,对所述性能事件进行分类,得到性能事件分组,根据所述性能事件分组,自动监控所述硬件平台支持运行的性能事件。其中,终端110可以但不限于是各种个人计算机、笔记本电脑、智能手机和平板电脑,服务器120可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
[0062] 下面对本申请实施例所提供的性能事件监控方法进行介绍。图2示出了本申请一个实施例提供的性能事件监控方法的流程示意图。如图2所示,该方法可以包括以下步骤:
[0063] S210,获取硬件平台支持运行的性能事件列表。
[0064] 性能事件为影响中央处理器运行的性能指标,例如指令数、浮点计算速度。同一硬件平台的多个性能事件可以组成一个性能事件列表或者多个性能事件列表。每个硬件平台支持运行的性能事件列表可以预先保存在性能事件数据库中。
[0065] 当监控新硬件平台上的应用程序或操作系统时,从性能事件数据库中获取当前硬件平台支持运行的所有性能事件列表,该性能事件列表包括硬件平台支持运行的所有性能事件。
[0066]  S220,根据性能事件列表,获取性能事件列表中性能事件的监控信息。
[0067] 根据性能事件列表确定需要监控的性能事件,通过性能监控工具perf获取性能事件列表中性能事件的监控信息。监控信息包括性能事件的监控值、监控结果和性能事件相关参数,其中,监控结果包括满足监控条件和不满足监控条件,性能事件相关参数包括事件编号、掩码编号和性能事件名称等。在perf运行过程中,需要输入同时待监控性能事件的性能事件相关参数。
[0068]  S230,根据监控信息,对性能事件进行分类,得到性能事件分组。
[0069] 根据监控信息对性能事件按照自顶向下方法进行分类。首先,对性能事件的监控值进行归一化处理,接着,根据归一化后的监控值计算性能事件之间的相关系数,基于相关系数构造事件相关矩阵。根据性能事件之间的相关系数在事件相关矩阵中的位置划分性能事件的类别,得到性能事件分组。性能事件分组包括至少一个事件组,每个事件组中的性能事件也有其对应的事件类别。
[0070] 根据性能事件的相关性进行分组可以有效辅助用户分析当前硬件平台需要监控的典型性能事件,并判断主要性能瓶颈。
[0071]  S240,根据性能事件分组,自动监控硬件平台支持运行的性能事件。
[0072] 在获得性能事件分组之后,可以同时对多个事件组中的部分性能事件进行监控,判断出热点性能事件,也可以对单个性能事件组中的所有性能事件进行监控,确认具体性能热点,或者先对多个事件组中的部分性能事件进行监控,判断出大致的性能瓶颈,根据该性能瓶颈有针对性地监控单个性能事件组中的所有性能事件,确定该性能瓶颈中的具体性能热点。
[0073] 可以看出,本申请实施例通过获取硬件平台支持运行的性能事件列表,根据性能事件列表,获取性能事件列表中性能事件的监控信息,根据监控信息,对性能事件进行分类,得到性能事件分组,根据性能事件分组,自动监控硬件平台支持运行的性能事件,能够全面、准确地判断应用程序在硬件平台运行的性能瓶颈。
[0074]  下面对上述方法流程中的各步骤进行详细描述。首先结合实施例对上述S220 “根据性能事件列表,获取性能事件列表中性能事件的监控信息”进行详细描述。
[0075] 作为一种可实现的方式,响应于用户发送的测试请求信息,启动中央处理器的运行;
[0076] 在中央处理器处于运行状态下,监控性能事件列表中的每个性能事件,得到每个性能事件的监控信息。
[0077]  硬件平台预先安装有基准测试软件HPCG和性能监控工具perf,当接收到用户通过终端设备发送的测试请求信息时,HPCG自动开始执行测试。其中,测试请求信息可以包括中央处理器的型号、请求事项、预设条件等信息。HPCG的软件部署和测试采用如下脚本自动执行:
[0078] #!/bin/bash
[0079] # unzip file
[0080] unzip hpcg‑master.zip
[0081] # step into hpcg folder
[0082] cd hpcg‑master
[0083] # build target
[0084] cp Make.MPI_ICPC Make.Linux
[0085] ./configure Linux
[0086] make
[0087] # run target
[0088] mpirun –n $(nproc) ./xhpcg
[0089] 响应于用户发送的测试请求信息,HPCG启动中央处理器的运行,性能计数器PMU开始监控中央处理器,判断中央处理器在每个周期的运行状态是否符合监控条件,如果符合每隔一段时间读取下PMU值,得到监控信息。
[0090] 在中央处理器处于运行状态下,使用perf监控应用程序运行过程中各个性能事件的监控信息。通过perf可以获取性能事件列表中的每个性能事件由PMU监控生成的监控信息。
[0091]  perf运行过程中,需要输入同时监控的性能事件相关参数,包括事件编号eventX、掩码编号umaskX和性能事件名称nameX等,其运行脚本如下所示:
[0092] $ perf stat ‑e cpu/event=,umask=,name=/ \[0093] ‑e cpu/event=,umask=,name=/ \
[0094] ……
[0095] ‑e cpu/event=,umask=,name=/ ‑C0 ‑I1000[0096] 需要说明的是,每次监控性能事件的个数与硬件平台部署的性能计数器的个数相同,性能事件列表中性能事件的个数与每次监控性能事件的个数的比值为循环监控的次数。
[0097] 在监控过程中,同时监控性能事件的个数Nu按照当前硬件平台PMU个数相同,可以确保监控性能事件的准确性。性能事件列表中性能事件的个数Np与每次监控性能事件的个数Nu的比值Np/Nu为循环监控的次数,也就是HPCG运行次数。
[0098]  结合实施例对上述S230 “根据监控信息,对性能事件进行分类,得到性能事件分组”进行详细描述。
[0099] 作为一种可实现的方式,根据监控信息,计算性能事件列表中性能事件之间的相关系数;
[0100] 根据相关系数构造事件相关矩阵;
[0101] 根据事件相关矩阵,对性能事件进行分类,得到性能事件分组。
[0102] 其中,监控信息包括每个性能事件在监控周期内的监控值,监控值表示性能事件在监控周期内发生的次数,监控周期可以为设置为1s,每个监控周期对应一个监控值,在一个时间段内监控性能事件列表中的每个性能事件,可以得到每个性能事件的监控值序列,可以表示为 、 ,其中,xt表示一个性能事件在第t个周期内的监控值,yt表示另一个性能事件在第t个周期内的监控值,T表示监控周期的总个数。
[0103] 具体地,根据监控信息,计算性能事件列表中性能事件之间的相关系数的过程包括:
[0104] 对每个性能事件在监控周期内的监控值进行归一化处理,得到每个性能事件的归一化序列值;
[0105] 根据归一化序列值,计算每个性能事件的频域序列值;
[0106] 根据频域序列值,计算性能事件列表中性能事件之间的相关系数。
[0107]  通过以下公式对每个性能事件在监控周期内的监控值进行归一化处:x’t=(xt‑min(xt) )/(max(xt)‑min(xt) )(1)
[0108] 其中,x’t表示性能事件在第t个周期内的归一化值,xt表示性能事件在第t个周期内的监控值,min(xt)表示性能事件的监控值序列中最小监控值,max(xt)表示性能事件的监控值序列中最大监控值。
[0109]  在得到归一化序列值后,通过以下公式计算每个性能事件的频域序列值: (2)
[0110] 其中,  表示性能事件的频域序列值,x’t表示性能事件在第t个周期内的归一化值,T表示监控周期的总个数,λk表示对应频域编号。
[0111] 根据每两个性能事件对应的频域序列值,通过以下公式计算性能事件列表中性能事件之间的相关系数: (3)
[0112] 其中,(XT,YT)表示两个性能事件之间的相关系数,XT表示一个性能事件的监控值序列,YT表示另一个性能事件的监控值序列,T表示监控周期的总个数, 表示一个性能事件的频域序列值, 表示另一个性能事件的频域序列值,k表示循环变量。
[0113] 在得到性能事件列表中每两个性能事件之间的相关系数之后,构造事件相关矩阵Dp(i,j)=dp(XT,YT),i表示第i个性能事件,j表示第j个性能事件。
[0114] 在得到事件相关矩阵之后,根据事件相关矩阵对性能事件进行分组的步骤包括:
[0115] 确定事件相关矩阵中的最大相关系数对应的第一性能事件和第二性能事件为第一事件组和第二事件组的一级事件;
[0116] 分别计算剩余性能事件与第一性能事件和第二性能事件的相似系数,剩余性能事件为性能事件列表中除第一性能事件和第二性能事件之外的性能事件;
[0117] 将与第一性能事件的相似系数最大的第一剩余性能事件确定为第一事件组的二级事件,将与第二性能事件的相似系数最大的第二剩余性能事件确定为第二事件组的二级事件;
[0118] 依次类推,直至计算剩余性能事件中的性能事件与事件组中性能事件的最大相关系数超过预设阈值,停止分类,得到性能事件分组。
[0119] 在事件相关矩阵中找到数值最大的相关系数,确定该相关系数对应的两个性能事件,其中一个性能事件定义为第一性能事件,另一个性能事件定义为第二性能事件,将第一性能事件和第二性能事件作为两个性能事件组的一级事件,其中一个性能事件组定义为第一事件组,另一个性能事件组定义为第二事件组。
[0120] 分别计算剩余性能事件与第一性能事件和第二性能事件的相似系数,也就是性能事件列表中除第一性能事件和第二性能事件之外的性能事件与第一性能事件和第二性能事件的相似系数。
[0121] 将与第一性能事件的相似系数最大的剩余性能事件定义为第一剩余性能事件,将与第二性能事件的相似系数最大的剩余性能事件定义为第二剩余性能事件。第一剩余性能事件划分为第一事件组,作为第一事件组的二级事件,第二剩余性能事件划分为第二事件组,作为第二事件组的二级事件。
[0122] 确定二级事件之后,继续计算除一级事件和二级事件之外的剩余性能事件与第一剩余性能事件和第二剩余性能事件的相关系数,将与第一剩余性能事件的相似系数最大的剩余性能事件划分至第一事件组,作为第一事件组的三级事件,将与第二剩余性能事件的相似系数最大的剩余性能事件划分至第二事件组,作为第二事件组的三级事件。依次类推,直至计算剩余性能事件中的性能事件与事件组中性能事件的最大相关系数超过预设阈值,即,当前剩余性能事件与上一级事件的最大相关系数超过预设阈值,则停止分类,得到性能事件分组,其中,预设阈值可以根据实际需求设置,比如,0.2。重复上述步骤,直到获得不同时期内的所有性能事件分组。
[0123]  结合实施例对上述S240 “根据性能事件分组,自动监控硬件平台支持运行的性能事件”进行详细描述。
[0124] 作为一种可实现的方式,监控性能事件分组中多个事件组的预设级别事件,得到监控结果代表值;
[0125] 根据监控结果代表值,搜索热点性能事件;
[0126] 根据热点性能事件,判断应用程序的性能瓶颈。
[0127] 预设级别事件为用户根据对性能事件的搜索范围确定监控的性能事件,预设级别最好设置为最高级别。
[0128]  热点性能事件为对影响应用程序的性能具有决定性作用的主要性能指标。可以使用./auto_perf_scan –o命令运行,此时会调用perf对性能事件分组中多个事件组的预设级别事件进行监控,统计监控信息中一级事件的性能指标值作为监控结果代表值。基于监控结果代表值中结合运行环境和执行的具体性能选取一些影响较大的目标代表值,搜索包含这些目标代表值的性能事件,将这些性能事件确定为热点性能事件。通过热点性能事件可以判断应用程序大致的性能瓶颈。
[0129]  热点性能事件是对所有性能事件进行大范围搜索得到的,为了进一步判断具体的性能瓶颈,可以将包含热点性能事件的事件组确定为目标事件组,使用./auto_perf_analysis –n –o命令运行,调用perf监控目标事件组中的预设级别事件,此处的预设级别越多越好,可以是全部级别,也可以是部分级别,以更加准确地分析应用程序的性能瓶颈。
[0130] 作为另一种可实现的方式,监控性能事件分组中满足预设条件的事件组中所有性能事件,判断应用程序的性能瓶颈。
[0131] 预设条件为用户根据自身经验或者需求而设置的特定条件。满足预设条件的事件组可能不是热点性能事件所在的事件组,但是用户需要分析的性能事件。调用perf搜索到满足预设条件的事件组,获取该事件组中所有性能事件的监控信息,以判断应用程序的性能瓶颈。
[0132] 作为一种可实现的方式,该方法还包括:
[0133] 将监控信息按照csv格式保存在结果文件中,将每组性能事件保存在单个json文件中,以便于后续监控过程分析应用程序的性能瓶颈。
[0134] 作为一种可实现的方式,该方法还包括:
[0135] 通过预设命令获取中央处理器的型号,在性能事件数据库中查找中央处理器的型号对应的性能事件列表;
[0136] 当在性能事件数据库中未查找到中央处理器的型号时,向用户终端发送反馈信息,反馈信息用于表示不支持在当前平台进行自动监控性能操作。
[0137] 预设命令为一种读取命令,可以采用lscpu命令。通过lscpu命令获取中央处理器的型号,并在性能事件数据库中查找中央处理器的型号对应的性能事件列表,得到当前硬件平台支持运行的性能事件列表。
[0138] 当在性能事件数据库中未查找到中央处理器的型号时,表明不支持在当前硬件平台进行自动监控性能事件的操作,向用户终端发送反馈信息,以告知用户。
[0139]  以硬件平台为英特尔第六代微处理器架构Intel SkyLake CPU为例,获取Intel SkyLake CPU支持运行的性能事件列表,性能事件列表中包括至少一个性能事件,可以包括非停机状态的机器周期数、指令有效执行次数、计数过程中消耗的指令数、一个指令消耗的时钟周期等。
[0140] 根据性能事件列表,获取性能事件列表中性能事件的监控信息,根据监控信息,计算性能事件列表中性能事件之间的相关系数,并根据相关系数构造事件相关矩阵,按照自顶向下方法进行分组,得到性能事件分组。
[0141]  运行./auto_perf_scan ‑o skylake_event.csv命令调用perf对性能事件分组进行监控,可以得到性能事件组的具体情况。命令运行后生成性能事件的监控结果,在输出文件中列举出每组性能事件及其基本信息,如下所示:
[0142] $ cat skylake_event.csv
[0143] event_grp, event_name, event_code, event_umask
[0144] 1, INST_RETIRED.ANY, 00H, 01H
[0145] 1, CPU_CLK_UNHALTED.THREAD, 00H, 02H
[0146] 1, CPU_CLK_UNHALTED.REF_TSC, 00H, 03H
[0147] 1, CPU_CLK_THREAD_UNHALTED.REF_XCLK, 3CH, 01H
[0148] 1, CPU_CLK_UNHALTED.RING0_TRANS, 3CH, 00H
[0149] 1, LONGEST_LAT_CACHE.MISS, 2EH, 41H
[0150] 1, ARITH.DIVIDER_ACTIVE, 14H, 01H
[0151] 2, BR_INST_RETIRED.ALL_BRANCHES, C4H, 00H
[0152] 2, BR_MISP_RETIRED.ALL_BRANCHES, C5H, 00H......
[0153] 其中,第一列为event_grp,表示性能事件分组编号,例如,1表示第一事件组,2表示第二事件组,第二列为event_name,表示性能事件名称,第三列为event_code, event_umask第四列为event_umask,是十六进制数,表示性能事件的编号。
[0154] 不同的应用程序影响其性能的指标值不同,同一应用程序不同性能的标准指标值也不同,在确定热点性能事件时需结合运行环境和执行的具体性能进行判断。可以将包含热点性能事件的事件组确定为目标事件组,根据目标事件组判断具体的性能瓶颈。
[0155]  例如,第一事件组为目标事件组,在得到性能事件分组的监控结果后,运行./auto_perf_analysis skylake_event.csv ‑n 1 ‑o skylake_perf.csv命令,对第一事件组中的性能事件进行详细分析。监控结果文件内容如下所示:
[0156] $ cat skylake_perf.csv
[0157] time, events, counts
[0158] 1, INST_RETIRED.ANY,380456573
[0159] 1, CPU_CLK_UNHALTED.THREAD, 255838305
[0160] 1, CPU_CLK_UNHALTED.REF_TSC, 380456573
[0161] 1, CPU_CLK_THREAD_UNHALTED.REF_XCLK, 254798270
[0162] 1, CPU_CLK_UNHALTED.RING0_TRANS, 400967658
[0163] 1, LONGEST_LAT_CACHE.MISS,313243093
[0164] 1, ARITH.DIVIDER_ACTIVE, 333879988
[0165] 其中,第一列为time,表示性能事件的监控周期,第二列为events,表示性能事件名称,第二列为counts,表示性能事件的性能指标值。根据第一事件组中每个性能事件的性能指标值判断应用程序性能瓶颈。上述性能事件监控方法除了应用在Intel SkyLake CPU硬件平台上,还可以应用在其他型号的处理器上,例如Intel平台CascadeLake、IceLake、Sapphire Rapids,以及AMD平台Rome,Milan,Genoa等处理器型号。
[0166] 应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本申请中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
[0167] 图3为本申请实施例提供的一种性能事件监控装置的结构示意图,该装置可以设置于图1所示系统中的服务器120,用以执行如图2中所示的方法流程。如图3所示,该装置可以包括:性能事件分类模块310和自动性能监控模块320,其中,性能事件分类模块310包括性能事件获取单元311、事件监控结果获取单元312和性能事件分类单元313,还可以进一步包括:查找模块、储存模块。其中各组成模块的主要功能如下:
[0168] 性能事件获取单元311,用于获取硬件平台支持运行的性能事件列表;
[0169] 事件监控信息获取单元312,用于根据性能事件列表,获取性能事件列表中性能事件的监控信息;
[0170] 性能事件分类单元313,用于根据监控信息,对性能事件进行分类,得到性能事件分组;
[0171] 自动性能监控模块320,用于根据性能事件分组,自动监控硬件平台支持运行的性能事件。
[0172] 作为一种可实现的方式,事件监控信息获取单元312包括安装于硬件平台的基准测试软件和性能监控工具;
[0173] 基准测试软件,用于响应于用户发送的测试请求信息,启动中央处理器的运行;
[0174] 性能监控工具,用于在中央处理器处于运行状态下,监控性能事件列表中的每个性能事件,得到每个性能事件的监控信息。
[0175] 作为一种可实现的方式,性能监控工具每次监控性能事件的个数与硬件平台部署的性能计数器的个数相同,性能事件列表中的每个性能事件中性能事件的个数与性能监控工具每次监控性能事件的个数的比值为性能监控工具循环监控的次数。
[0176] 作为一种可实现的方式,性能事件分类单元313包括矩阵构造子单元和分类子单元;矩阵构造子单元,用于根据监控信息,计算性能事件列表中性能事件之间的相关系数,并根据相关系数构造事件相关矩阵;
[0177] 分类子单元,用于根据事件相关矩阵,对性能事件进行分类,得到性能事件分组。
[0178] 作为一种可实现的方式,监控信息包括每个性能事件在性能监控工具的监控周期内的监控值;矩阵构造子单元,具体用于:
[0179] 对每个性能事件在监控周期内的监控值进行归一化处理,得到每个性能事件的归一化序列值;
[0180] 根据归一化序列值,计算每个性能事件的频域序列值;
[0181] 根据频域序列值,计算性能事件列表中性能事件之间的相关系数。
[0182] 作为一种可实现的方式,分类子单元,具体用于:
[0183] 确定事件相关矩阵中的最大相关系数对应的第一性能事件和第二性能事件为第一事件组和第二事件组的一级事件;
[0184] 分别计算剩余性能事件与第一性能事件和第二性能事件的相似系数,剩余性能事件为性能事件列表中除第一性能事件和第二性能事件之外的性能事件;
[0185] 将与第一性能事件的相似系数最大的第一剩余性能事件确定为第一事件组的二级事件,将与第二性能事件的相似系数最大的第二剩余性能事件确定为第二事件组的二级事件;
[0186] 依次类推,直至计算剩余性能事件中的性能事件与事件组中性能事件的最大相关系数超过预设阈值,停止分类,得到性能事件分组。
[0187] 作为一种可实现的方式,自动性能监控模块320包括性能热点搜索单元和性能热点分析单元;
[0188] 性能热点搜索单元,用于监控性能事件分组中多个事件组的预设级别事件,得到监控结果代表值,并根据监控结果代表值,搜索热点性能事件。
[0189] 性能热点分析单元,用于根据热点性能事件,判断应用程序的性能瓶颈。
[0190] 作为一种可实现的方式,性能热点分析单元,具体用于根据热点性能事件,确定目标事件组;
[0191] 监控目标事件组中的预设级别事件,判断应用程序的性能瓶颈。
[0192] 作为一种可实现的方式,性能热点分析单元,还用于监控性能事件分组中满足预设条件的事件组中所有性能事件,判断应用程序的性能瓶颈。
[0193] 作为一种可实现的方式,该装置还包括查找模块,用于通过预设命令获取中央处理器的型号,在性能事件数据库中查找中央处理器的型号对应的性能事件列表。
[0194] 作为一种可实现的方式,查找模块,还用于当在性能事件数据库中未查找到中央处理器的型号时,向用户终端发送反馈信息,反馈信息用于表示不支持在当前平台进行自动监控性能操作。
[0195] 作为一种可实现的方式,该装置还包括储存模块,用于将监控信息按照csv格式保存在结果文件中,将每组性能事件保存在单个json文件中。
[0196] 根据本申请的实施例,本申请还提供了一种计算机设备、一种计算机可读存储介质。
[0197] 如图4所示,是根据本申请实施例的计算机设备的框图。计算机设备旨在表示各种形式的数字计算机或移动装置。其中数字计算机可以包括台式计算机、便携式计算机、工作台、个人数字助理、服务器、大型计算机和其它适合的计算机。移动装置可以包括平板电脑、智能电话、可穿戴式设备等。
[0198]  如图4所示,设备400包括计算单元401、ROM 402、 RAM 403 、总线404以及输入/输出(I/O)接口405 ,计算单元 401、ROM 402 以及 RAM 403 通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。
[0199]  计算单元401可以根据存储在只读存储器(ROM)402 中的计算机指令或者从存储单元408加载到随机访问存储器(RAM)403 中的计算机指令,来执行本申请方法实施例中的各种处理。计算单元401可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元401可以包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。在一些实施例中,本申请实施例提供的方法可被实现为计算机软件程序,其被有形地包含于计算机可读存储介质,例如存储单元408。
[0200]  RAM 403还可存储设备400操作所需的各种程序和数据。计算机程序的部分或者全部可以经由ROM 802和/或通信单元409而被载入和/或安装到设备400上。
[0201] 设备400中的输入单元406、输出单元407、存储单元408和通信单元409可以连接至I/O接口405。其中,输入单元406可以是诸如键盘、鼠标、触摸屏、麦克风等;输出单元407可以是诸如显示器、扬声器、指示灯等。设备400能够通过通信单元409与其他设备进行信息、数据等的交换。
[0202] 需要说明的是,该设备还可以包括实现正常运行所必需的其他组件。也可以仅包含实现本申请方案所必需的组件,而不必包含图中所示的全部组件。
[0203] 此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件和/或它们的组合中实现。
[0204] 用于实施本申请的方法的计算机指令可以采用一个或多个编程语言的任何组合来编写。这些计算机指令可以提供给计算单元401,使得计算机指令当由诸如处理器等计算单元401执行时使执行本申请方法实施例中涉及的各步骤。
[0205] 本申请提供的计算机可读存储介质可以是有形的介质,其可以包含或存储计算机指令,用以执行本申请方法实施例中涉及的各步骤。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的等形式的存储介质。
[0206] 上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。