CN104216812A - 一种性能监控单元多事件统计的方法和装置 - Google Patents

一种性能监控单元多事件统计的方法和装置 Download PDF

Info

Publication number
CN104216812A
CN104216812A CN201410437648.5A CN201410437648A CN104216812A CN 104216812 A CN104216812 A CN 104216812A CN 201410437648 A CN201410437648 A CN 201410437648A CN 104216812 A CN104216812 A CN 104216812A
Authority
CN
China
Prior art keywords
register
event
performance
performance event
counting
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.)
Granted
Application number
CN201410437648.5A
Other languages
English (en)
Other versions
CN104216812B (zh
Inventor
王辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Huawei Digital Technologies Co Ltd
Original Assignee
Hangzhou Huawei Digital Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Huawei Digital Technologies Co Ltd filed Critical Hangzhou Huawei Digital Technologies Co Ltd
Priority to CN201410437648.5A priority Critical patent/CN104216812B/zh
Publication of CN104216812A publication Critical patent/CN104216812A/zh
Application granted granted Critical
Publication of CN104216812B publication Critical patent/CN104216812B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明实施例公开了一种性能监控单元多事件统计的方法和装置,用于在不修改系统时钟频率的前提下,动态精确的调整事件切换的频率,提高性能统计的准确性。本发明实施例方法包括:当触发PMU中第一寄存器和第二寄存器计数后,监测该第一寄存器是否溢出,当确定该第一寄存器溢出时,发起PMI中断,在该PMI中断中,保存各寄存器对各性能事件计数的时长和数目,切换第二寄存器记录的第二性能事件,并重置第一寄存器和第二寄存器计数的数目,重新触发该第一寄存器和第二寄存器计数,结束该PMI中断;最终统计保存的各性能事件每次计数的时长和数目,得到统计结果。

Description

一种性能监控单元多事件统计的方法和装置
技术领域
本发明涉及通信领域,尤其涉及一种性能监控单元多事件统计的方法和装置。
背景技术
性能一直是衡量系统和程序好坏的重要标准。近年来伴随着互联网的快速发展,用户数量激增,为了保证服务质量,一个网站往往是由成百上千台的服务器集群及运行在其之上的分布式系统软件组成,软件性能愈发变得格外重要。一方面,由于系统庞大,软件性能的些许提升,往往能节约大量的硬件成本;另一方面,通过对系统性能的监控,可以做到负载均衡,保证业务的稳定性。
在衡量系统和程序性能时,中央处理器(Central Processing Unit,CPU)性能又是一个非常重要的指标,程序耗费的CPU时间,执行的指令数,缓存访问命中次数,分支预测正确次数等CPU相关的性能参数可以较为直观的反映出程序优劣。Intel CPU中自带了性能监控单元(Performance Monitor Unit,PMU),用于记录这些事件发生的次数。
性能监控单元由CPU中的一组寄存器组成,按照功能划分为事件控制寄存器,事件计数寄存器,全局控制寄存器,全局溢出状态寄存器和全局溢出位控制寄存器等。事件控制寄存器负责指定要记录的事件(比如CPU时钟周期数,执行指令数等),而事件计数寄存器则负责记录由控制寄存器所指定事件的发生次数,并可以在记录达到设定的次数时,发生溢出,产生一个性能监控单元产生的中断(Performance Monitoring Interrupt,PMI)。事件计数寄存器在同一时刻只能记录一个性能事件。全局控制寄存器,全局溢出状态寄存器和全局溢出位控制寄存器是为了辅助计数,方便中断处理。
事件控制寄存器和事件计数寄存器的数量是有限的,且同一时刻仅能记录一个性能事件,而进行性能调优和系统性能监控时经常需要关注多个性能事件,比如常见的CPU非空闲时钟周期数、执行指令周期数、分支数、分支miss、缓存存取次数、缓存存取失败次数等。所以在同时记录多个事件时,为了解决寄存器不足的问题,当前通用的方法是,先选择部分事件进行监控,当达到系统的时钟周期,触发系统的时钟中断时,读取计数寄存器中的计数进行保存,然后切换所记录的事件,选择剩余事件进行监控,如此循环切换,直至监控程序终止。最后对各性能事件的计数结果求平均,获取最终计数结果。
然而,在实际应用中,采用系统的时钟频率作为事件切换机制的触发周期,虽然可以解决由寄存器数量不足导致无法同时监控多个事件的问题,但牺牲了计数精确性。例如,如图1所示为执行指令数随系统时钟周期变化的一个示意图,其中系统的时钟频率为250Hz,即一个时钟周期为4ms。假设要求同时记录8个性能事件,但寄存器只有4个,为了解决寄存器不足的问题,只能将所有事件分成两批,一批在奇数次时钟周期中计数,一批在偶数次时钟周期中计数。设执行指令数为第一批监控的事件,则分别在时钟周期1、时钟周期3、时钟周期5等奇数时钟周期中进行计数。而通过图1可以发现执行指令数在时钟周期1和时钟周期3中较少,而时钟周期2中较多,由于仅在时钟周期1和时钟周期3中统计了执行指令数,时钟周期2中并没有监控,则前12ms中执行指令数的平均值为:(时钟周期1计数+时钟周期3计数)/时钟周期大小(4ms)×2=(1000×4+1000×4)/(4×2)=1000次/ms。而实际数值应为:(时钟周期1计数+时钟周期2计数+时钟周期3计数)/时钟周期大小(4ms)×3=(1000×4+2000×4+1000×4)/(4×3)=1333.3次/ms。由此可见,采用这种事件切换机制存在一定误差。
发明内容
本发明实施例提供了一种性能监控单元多事件统计的方法和装置,用于在不修改系统时钟频率的前提下,动态精确的调整事件切换的频率,提高性能统计的准确性。
本发明实施例第一方面提供了一种性能监控单元多事件统计的方法,包括:
当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出,其中,所述第一寄存器用于记录第一性能事件,所述第一寄存器对所述第一性能事件计数的数目达到设定值时溢出,所述第二寄存器用于记录第二性能事件,所述第二性能事件包括多个性能事件,所述第一性能事件与所述第二性能事件相关;
当确定所述第一寄存器溢出时,发起PMI中断;
在所述PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器和所述第二寄存器计数,结束所述PMI中断;
统计保存的各性能事件每次计数的时长和数目,得到统计结果。
结合本发明实施例的第一方面,本发明实施例第一方面的第一种实现方式中,所述当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出的步骤之前还包括:
配置PMU中所述第一寄存器记录所述第一性能事件,开启所述第一寄存器的中断位,所述第一寄存器为所述PMU中的一个寄存器,所述第一性能事件为一个性能事件;
配置PMU中所述第二寄存器记录所述第二性能事件,所述第二寄存器包括所述PMU中除所述第一寄存器外的多个寄存器,所述第二性能事件包括除所述第一性能事件外的多个性能事件,所述第二寄存器中寄存器的数目少于所述第二性能事件中性能事件的数目。
结合本发明实施例第一方面的第一种实现方式,本发明实施例第一方面的第二种实现方式中,所述方法还包括:
调整所述第一寄存器的所述设定值。
结合本发明实施例第一方面的第一种实现方式,本发明实施例第一方面的第三种实现方式中,所述按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件的步骤之前还包括:
获取所述预置事件切换顺序,所述预置事件切换顺序用于表示切换所述第二性能事件中各性能事件的顺序。
结合本发明实施例的第一方面至第一方面的第三种实现方式中任一种实现方式,本发明实施例第一方面的第四种实现方式中,
所述第一性能事件为指令instructions事件,所述instructions事件表示执行指令数,所述第二性能事件为与执行指令相关的事件;
或,
所述第一性能事件为缓存存取cache-references事件,所述cache-references事件用于表示最后一级缓存存取操作的次数,所述第二性能事件为与缓存相关的事件。
结合本发明实施例的第一方面,本发明实施例第一方面的第五种实现方式中,所述第一寄存器包括所述PMU中的第三寄存器和第四寄存器,所述第三寄存器用于记录第三性能事件,所述第四寄存器用于记录第四性能事件,所述第三性能事件为与所述第四性能事件不同的性能事件;
所述重置所述第一寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器和所述第二寄存器计数具体包括:
重置所述第一寄存器中溢出的寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器中溢出的寄存器和所述第二寄存器计数;
所述当确定所述第一寄存器溢出时,发起PMI中断具体包括:
当确定所述第三寄存器溢出后,所述第四寄存器溢出时,发起所述PMI中断;
或,
所述当确定所述第一寄存器溢出时,发起PMI中断具体包括:
当确定所述第四寄存器溢出后,所述第三寄存器溢出时,发起所述PMI中断;
或,
所述当确定所述第一寄存器溢出时,发起PMI中断具体包括:
当确定所述第三寄存器或所述第四寄存器溢出时,发起所述PMI中断。
本发明实施例第二方面提供了一种装置,包括:
监测模块,用于当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出,其中,所述第一寄存器用于记录第一性能事件,所述第一寄存器对所述第一性能事件计数的数目达到设定值时溢出,所述第二寄存器用于记录第二性能事件,所述第二性能事件包括多个性能事件,所述第一性能事件与所述第二性能事件相关;
中断模块,用于当所述监测模块确定所述第一寄存器溢出时,发起PMI中断;
执行模块,用于在所述中断模块发起的PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器和所述第二寄存器计数,结束所述PMI中断;
统计模块,用于统计保存的各性能事件每次计数的时长和数目,得到统计结果。
结合本发明实施例的第二方面,本发明实施例第二方面的第一种实现方式中,所述装置还包括:
第一配置模块,用于配置PMU中所述第一寄存器记录所述第一性能事件,开启所述第一寄存器的中断位,所述第一寄存器为所述PMU中的一个寄存器,所述第一性能事件为一个性能事件;
第二配置模块,用于配置PMU中所述第二寄存器记录所述第二性能事件,所述第二寄存器包括所述PMU中除所述第一寄存器外的多个寄存器,所述第二性能事件包括除所述第一性能事件外的多个性能事件,所述第二寄存器中寄存器的数目少于所述第二性能事件中性能事件的数目。
结合本发明实施例第二方面的第一种实现方式,本发明实施例第二方面的第二种实现方式中,所述装置还包括:
调整模块,用于调整所述第一寄存器的所述设定值。
结合本发明实施例第二方面的第一种实现方式,本发明实施例第二方面的第三种实现方式中,所述装置还包括:
获取模块,用于获取所述预置事件切换顺序,所述预置事件切换顺序用于表示切换所述第二性能事件中各性能事件的顺序。
结合本发明实施例第二方面的第一种实现方式,本发明实施例第二方面的第四种实现方式中,所述第一寄存器包括所述PMU中的第三寄存器和第四寄存器,所述第三寄存器用于记录第三性能事件,所述第四寄存器用于记录第四性能事件,所述第三性能事件为与所述第四性能事件不同的性能事件;
所述中断模块具体包括:
第一中断单元,用于当确定所述第三寄存器溢出后,所述第四寄存器溢出时,发起所述PMI中断;
或,
第二中断单元,用于当确定所述第四寄存器溢出后,所述第三寄存器溢出时,发起所述PMI中断;
或,
第三中断单元,用于当确定所述第三寄存器或所述第四寄存器溢出时,发起所述PMI中断;
所述执行模块具体用于,在所述中断模块发起的PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器中溢出的寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器中溢出的寄存器和所述第二寄存器计数,结束所述PMI中断。
从以上技术方案可以看出,本发明实施例具有以下优点:本发明实施例中,第二寄存器切换性能事件的频率取决于第一寄存器溢出的设定值和第一性能事件发生的频率,而第一性能事件又与第二寄存器记录的第二性能事件相关,便实现了第二寄存器对性能事件切换的频率的动态调整,例如当第一性能事件的发生频率提高时,第一性能事件发生的次数达到第一寄存器溢出的设定值的时间会减少,便自动的提高了第二寄存器切换性能事件的频率,进一步的,由于第一性能事件与第二性能事件的相关性,第一性能事件的发生频率提高,意味着第二性能事件的发生频率也会提高,此时提高第二寄存器切换性能事件的频率,正好能提高对第二性能事件的抽样频率,提高了对第二性能事件计数的准确性;当第一性能事件的发生频率降低时,第一性能事件发生的次数达到第一寄存器溢出的设定值的时间会增加,便自动的降低了第二寄存器切换性能事件的频率,由于第一性能事件与第二性能事件的相关性,第一性能事件的发生频率降低,意味着第二性能事件的发生频率也会降低,此时降低第二寄存器切换性能事件的频率不会影响对第二性能事件的计数精度,而又节省了系统开销。
附图说明
图1为执行指令数随系统时钟周期变化的一个实例示意图;
图2为本发明实施例中性能监控单元多事件统计的方法一个流程示意图;
图3为执行指令数随系统时钟周期变化的另一个实例示意图;
图4为本发明实施例中性能监控单元多事件统计的方法另一个流程示意图;
图5为本发明实施例中特殊事件控制寄存器一个结构示意图;
图6为本发明实施例中通用事件控制寄存器一个结构示意图;
图7为本发明实施例中全局控制寄存器一个结构示意图;
图8为本发明实施例中性能监控单元多事件统计的方法另一个流程示意图;
图9为本发明实施例中装置一个结构示意图;
图10为本发明实施例中装置另一个结构示意图;
图11为本发明实施例中装置另一个结构示意图;
图12为本发明实施例中装置另一个结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,尽管在本发明实施例中可能采用术语第一、第二等来描述各个寄存器和性能事件,但寄存器和性能事件不应限于这些术语。这些术语仅用来将寄存器或性能事件彼此区分开。例如,在不脱离本发明实施例范围的情况下,第一寄存器也可以被称为第二寄存器,类似地,第二寄存器也可以被称为第一寄存器;同样的,第二性能事件也可以被称为第三性能事件等等,本发明实施例对此不做限制。
请参阅图2,本发明实施例中性能监控单元多事件统计的方法一个实施例包括:
201、当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出;
其中,所述第一寄存器用于记录第一性能事件,所述第一寄存器对所述第一性能事件计数的数目达到设定值时溢出,所述第二寄存器用于记录第二性能事件,所述第二性能事件包括多个性能事件,所述第一性能事件与所述第二性能事件相关;
第一寄存器与第二寄存器计数的数目会根据记录的性能事件发生的次数而增加,当寄存器计数的数目增加达到预设值,就表示该寄存器溢出,通过调整该预设值,即可控制寄存器的溢出周期。
其中,第一性能事件与第二性能事件相关关系具体可以表现为:第一性能时间发生的频率增加时,第二性能事件发生的频率也会增加;第一性能事件发生的频率降低时,第二性能事件发生的频率也会降低。
202、当确定所述第一寄存器溢出时,发起PMI中断;
当确定该记录第一性能事件的第一寄存器溢出时,发起PMI中断。
第一寄存器对第一性能事件计数的数目达到设定值时,该第一性能事件溢出,会发起PMI中断,第一性能事件发生的频率高,则发起PMI中断的频率高,第一性能事件发生的频率低,则发起PMI中断的频率低。
203、在所述PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器和所述第二寄存器计数,结束所述PMI中断;
可以理解的是,重新触发该第一寄存器和第二寄存器计数后,会再次自动执行步骤201,监测该第一寄存器是否溢出,从而形成一个循环,可以根据第一寄存器相对于第一性能事件的溢出周期,自动的切换第二寄存器记录的第二性能事件。当程序结束,或者不再进行性能监测时,会结束该循环切换记录的过程。
204、统计保存的各性能事件每次计数的时长和数目,得到统计结果。
当需要对性能事件进行统计,或者性能监测的程序停止运行时,可以统计保存的各性能事件每次计数的时长和数目,得到统计结果。
本发明实施例中,第二寄存器切换性能事件的频率取决于第一寄存器溢出的设定值和第一性能事件发生的频率,而第一性能事件又与第二寄存器记录的第二性能事件相关,便实现了第二寄存器对性能事件切换的频率的动态调整,例如当第一性能事件的发生频率提高时,第一性能事件发生的次数达到第一寄存器溢出的设定值的时间会减少,便自动的提高了第二寄存器切换性能事件的频率,进一步的,由于第一性能事件与第二性能事件的相关性,第一性能事件的发生频率提高,意味着第二性能事件的发生频率也会提高,此时提高第二寄存器切换性能事件的频率,正好能提高对第二性能事件的抽样频率,提高了对第二性能事件计数的准确性;当第一性能事件的发生频率降低时,第一性能事件发生的次数达到第一寄存器溢出的设定值的时间会增加,便自动的降低了第二寄存器切换性能事件的频率,由于第一性能事件与第二性能事件的相关性,第一性能事件的发生频率降低,意味着第二性能事件的发生频率也会降低,此时降低第二寄存器切换性能事件的频率不会影响对第二性能事件的计数精度,而又节省了系统开销。
下面对提高性能事件的抽样频率(切换频率)能降低误差,提高性能统计的准确性进行说明:
如图3所示为执行指令数随系统时钟周期变化的另一个示意图,若将记录性能事件的切换频率(也即抽样频率)由250Hz提升至1000Hz,则切换周期缩短为1ms,前12ms中分别在1ms、3ms、5ms、7ms、9ms、11ms处进行了执行指令周期数的统计,则平均值为:(时钟周期1计数+时钟周期3计数+时钟周期5计数+时钟周期7计数+时钟周期9计数+时钟周期11计数)/时钟周期大小(1ms)×6=(1000×1+1000×1+2000×1+2000×1+1000×1+1000×1)/(1×6)=1333.3次/ms。可以看出,在执行指令数波动较大的情况下,切换频率越高,抽样越频繁,所统计的事件计数的平均值与实际值越加接近。提高切换频率,提高了计数精度。
上面实施例中,通过监测所述第一寄存器是否溢出来确定第二寄存器切换性能事件的时机,在实际应用中,可以先对该第一寄存器与第二寄存器进行配置,下面对本发明实施例中性能监控单元多事件统计的方法进行具体描述,请参阅图4,本发明实施例中性能监控单元多事件统计的方法另一个实施例包括:
401、配置PMU中第一寄存器记录第一性能事件,开启所述第一寄存器的中断位;
在进行性能监控前,先配置PMU中第一寄存器记录第一性能事件,开启所述第一寄存器的中断位,该第一寄存器为PMU中的一个寄存器,该第一性能事件为一个性能事件。
可以理解的是,一个寄存器同一时间只能记录一个性能事件,而记录一个性能事件是需要多个寄存器的配合,例如配置记录一个性能事件,需要配置一个事件控制寄存器指定一个事件计数寄存器对该性能事件进行记录,而计数寄存器对该性能事件进行计数,还可以通过全局控制寄存器来触发该计数寄存器开始计数。
配置第一寄存器记录第一性能事件,具体为配置一个事件控制寄存器指定一个计数寄存器来记录该第一性能事件,该事件控制寄存器与该计数寄存器都是PMU中的寄存器,对该第一性能事件计数的该计数寄存器即为第一寄存器,而开启第一寄存器的中断位,具体为在该第一寄存器对应的事件控制寄存器中开启中断位,使得第一寄存器溢出时会产生PMI中断。
可以理解的是,寄存器的中断位开启之后,若寄存器记录的性能事件溢出,则按照Intel CPU的特性,会自动产生PMI中断。而判断一个性能事件是否溢出的设定值,通过在计数寄存器中设置计数初始值来体现,性能事件每发生一次,计数寄存器的值增加1,当计数寄存器的值从负数增加到0,则表示该计数寄存器溢出。
配置完事件控制寄存器后,需初始化第一寄存器的值(即计数寄存器的值),假设希望每执行1000条指令切换一次记录的性能事件,可将第一寄存器的计数初始值设为-1000,代表着每执行1000条指令,第一寄存器溢出产生PMI中断,具体的技术初始值的设定,即溢出的设定值的设定,可以根据实际需求和情况来定,此处不作限定。
可以理解的是,第二寄存器切换记录性能事件的频率与第一性能事件发生的频率和第一寄存器设定的计数初始值相关,所以,该第一性能事件也可以称之为用于打点抽样的事件。
402、配置PMU中第二寄存器记录第二性能事件;
配置PMU中第二寄存器记录第二性能事件,该第二寄存器中包括多个寄存器,该第二性能事件中包含有除第一性能事件外的多个性能事件,该第二寄存器中寄存器的数目少于第二性能事件中性能事件的数目,所以,第二寄存器必须要切换记录性能事件才能完成对所有第二性能事件的记录。
可以理解的是,类似于配置第一寄存器记录第一性能事件的过程,该第二寄存器都为设定为计数寄存器,每个计数寄存器对应一个PMU中的事件控制寄存器,配置第二寄存器记录第二性能事件,具体为配置各事件控制寄存器指定第二寄存器中各对应的计数寄存器去记录第二性能事件中的各性能事件。而切换第二寄存器记录的性能事件,实际上是事件控制寄存器重新指定第二寄存器中对应的计数寄存器记录的性能事件。
403、当触发第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出;
当性能监控开始时,可以触发第一寄存器和第二寄存器计数,在实际应用中,可以采用全局控制寄存器来控制PMU中其他寄存器的启动,可以设定为当全局控制寄存器启动时,触发第一寄存器和第二寄存器开始计数。当触发第一寄存器和第二寄存器计数后,监测该第一寄存器是否溢出,即监测第一寄存器的值是否达到0。
404、调整所述第一寄存器的所述设定值;
配置第一寄存器溢出的设定值后,可以对该设定值进行调整,从而可以根据需要来控制第一寄存器的溢出周期。具体的,可以调整该第一寄存器的计数初始值。
405、当确定所述第一寄存器溢出,发起PMI中断;
由于开启了第一寄存器的中断位,当确定该第一寄存器溢出时,会发起PMI中断。
406、在所述PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目;
将记录该第一性能事件的第一寄存器是否溢出作为作为第二寄存器切换性能事件的触发源,在该第一寄存器发起的PMI中断中,保存PMU中各寄存器堆各性能事件计数的时长和数目。
可以理解的是,记录一个性能事件需要事件控制计数器和计数寄存器的配合,所以保存对各性能事件的记录时,可以保存事件控制计数器中记录的性能事件,再保存对应的计数寄存器记录的该性能事件的数目,从系统时钟得到记录该性能事件的时长。
407、获取所述预置事件切换顺序;
保存各寄存器堆性能事件的计数后,可以获取预置事件切换顺序,该预置事件切换顺序用于表示切换第二性能事件中各性能事件的顺序。
408、按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件;
获取到预置事件切换顺序后,按照预置事件切换顺序,切换该第二寄存器记录的第二性能事件。
可以理解的是,第二寄存器中各计数寄存器对应的事件控制寄存器切换第二寄存器记录的第二性能事件时,不一定需要对所有的计数寄存器记录的性能事件都进行切换,可以根据预先设定,只对其中一部分记录的第二性能事件进行切换,而切换的顺序,可以由该预置事件切换顺序给出。
409、重置所述第一寄存器和所述第二寄存器计数的数目;
切换了第二寄存器记录的第二性能事件后,可以重置第一寄存器和第二寄存器计数的数目。重置第一寄存器计数的数目是为了重新计算溢出周期,而重置第二寄存器计数的数目是因为要对新切换的性能事件进行计数。
410、重新触发所述第一寄存器和所述第二寄存器计数,结束所述PMI中断;
重置第一寄存器和第二寄存器计数的数目后,重新触发该第一寄存器和第二寄存器计数,结束该PMI中断。具体可以为,再次设置全局控制寄存器触发第一寄存器和第二寄存器开始计数。
411、统计保存的各性能事件每次计数的时长和数目,得到统计结果。
当需要对性能事件进行统计,或者性能监测的程序终止运行时,统计保存的各性能事件每次计数的时长和数目,得到统计结果。
具体可以为,对每个性能事件计数的数目之和除以计数的时长之和,得到每个性能事件的计数的平均值,然后采用平均值乘以程序运行的总时长即可以得到程序运行过程中该性能事件发生的总次数,可以理解的是,根据保存的数据,还可以有其他的统计方法,此处不作限定。
本发明实施例中,在对性能事件进行监测前,可以先配置第一寄存器和第二寄存器,并且,还可以调整第一寄存器的设定值,这样可以控制第一寄存器的溢出周期,从而可以灵活的控制第二寄存器切换性能事件的频率。同时记录多个性能事件时,使用一个PMU寄存器记录打点用性能事件,用以定期触发中断,并在中断处理中切换所监控的事件,通过指定打点性能事件以及该事件的溢出周期,精确调整打点频率。
为了便于理解下面以两个具体应用场景分别对本发明实施例中性能监控单元多事件统计的方法进行具体描述:
一、一个具体应用场景的实施例如下:
第一性能事件为instructions事件,该instructions事件表示执行指令数,第二性能事件为与执行指令相关的事件,此处选取cache-references、cache-misses、branch-instructions、branch-misses、L1-dcache-loads、L1-dcache-load-misses、L1-dcache-stores、L1-dcache-store-misses、L1-dcache-prefetches、L1-dcache-prefetch-misses这十个性能事件作为需要监测的第二性能事件;
其中,cache-references事件用于表示最后一级缓存存取操作的次数;
cache-misses事件用于表示存取最后一级缓存时,对应数据不在最后一级缓存中的次数;
branch-instructions事件用于表示程序执行分支指令的次数;
branch-misses事件用于表示分支预测失败的次数;
L1-dcache-loads事件用于表示L1数据缓存的读取次数;
L1-dcache-load-misses事件用于表示读取L1数据缓存时,对应数据不在L1缓存中的次数;
L1-dcache-stores事件用于表示L1数据缓存的写入次数;
L1-dcache-store-misses事件用于表示写入L1数据缓存时,对应数据不在L1缓存中的次数;
L1-dcache-prefetches事件用于表示预读取L1数据缓存的次数;
L1-dcache-prefetch-misses事件用于表示预读取L1数据缓存时,对应数据不在L1缓存中的次数。
假设CPU型号为Intel Xeon E56202.4GHz,该CPU中包含4个通用计数寄存器(PMC0、PMC1、PMC2、PMC3)和3个特殊计数寄存(FIXED_CTR0、FIXED_CTR1、FIXED_CTR2),其中通用计数寄存器通过编程,可以用于记录多种性能事件;每个特殊计数寄存器只能记录一种特殊事件,FIXED_CTR0专门记录instructions事件,FIXED_CTR1专门记录cpu-cycles事件,FIXED_CTR2专门记录reference-cycles事件。
具体步骤如下:
1、配置FIXED_CTR0(上述实施例中第一寄存器)记录instructions事件(上述实施例中第一性能事件)。需设置特殊控制寄存器并初始化计数寄存器FIXED_CTR0的数值。
如图5所示为特殊事件控制寄存器一个示意图,通过配置该特殊事件控制寄存器的值为0xb可以配置特殊计数寄存器FIXED_CTR0记录instructions事件,具体含义为:
寄存器上的数字表示的是第几位;
Bit0-1位(第0位到第1位)表示的是ENABLE,即是否开启同时统计用户态和内核态下的计数,设为11,代表同时统计用户态和内核态下的计数;
Bit3位(第3位)表示是否开启PMI中断,设为1,代表FIXED_CTR0溢出时产生PMI中断。
设置完特殊控制寄存器后,需初始化计数寄存器FIXED_CTR0的值,假设希望每执行1000条指令切换一次记录的性能事件,可将计数寄存器FIXED_CTR0的初始计数值设为-1000,代表着每执行1000条指令,FIXED_CTR0溢出产生PMI中断;
2、再配置通用事件计数寄存器(上述实施例中第二寄存器)记录其他需要监控的性能事件(上述实施例中第二性能事件):
如图6所示为通用事件控制寄存器一个示意图,寄存器上的数字表示的是第几位;
按照预置事件切换顺序,四个通用计数寄存器分别配置记录cache-references、cache-misses、branch-instructions、branch-misses四个事件,对应的控制寄存器应设为0x434F2E、0x43412E、0x4300C4、0x4300C5,含义如下:
Event Select和Unit Mask两项用于指定所监控的性能事件。记录cache-references事件时,Event Select设置为0x2e,Unit Mask设为0x4f;记录cache-misses事件时,Event Select设置为0x2e,Unit Mask设为0x41;记录branch-instrutions事件时,Event Select设置为0xc4,Unit Mask设为0x00;记录branch-misses事件时,Event Select设置为0xc5,Unit Mask设为0x00;
USR:代表统计用户态计数,设置为1;
OS:代表统计内核态计数,设置为1;
EN:代表启用计数寄存器,设置为1(此时并不会开始计数,需要配合全局控制寄存器才会启动计数)。
3、设置PMU全局控制寄存器,触发各PMU中各寄存器开始计数。
如图7所示为全局控制寄存器一个示意图,全局控制寄存器的值应设为0x10000000f,代表启动通用计数寄存器PMC0、PMC1、PMC2、PMC3,特殊计数寄存器FIXED_CTR0的计数。
4、instructions计数伴随着指令运行而增长,根据设置的初始值,执行完1000条指令后计数寄存器溢出,产生PMI中断,进入中断处理;
5、在中断处理中,配置全局控制寄存器,设其值为0x0,停止一切计数。接着重新设置FIXED_CTR0的初值为-1000,保证下次也是执行1000条指令后产生1次PMI中断。接着保存cache-references、cache-misses、branch-instructions、branch-misses四个事件的计数以及此次计数的时长Ti,切换记录L1-dcache-loads、L1-dcache-load-misses、L1-dcache-stores、L1-dcache-store-misses四个事件。每次切换性能事件时,按照事件列表顺序、循环切换,比如下次中断处理就会切换记录L1-dcache-prefetches、L1-dcache-prefetch-misses、cache-references、cache-misses事件;
6、中断处理结束后,再次设置全局控制寄存器为0x10000000f,再次开始计数。重复步骤3,4,5,直至监控程序终止运行;
7、计算最终统计结果。以branch-instructions为例,设每次的计数值为C1,C2,C3……,每次计数的时长为T1,T2,T3……,则其平均值为每次计数值之和处以计数时长(C1+C2+C3+……+Cn)/(T1+T2+T3+……+Tn)=Cavg,最终计数结果等于Cavg×程序运行总时长。其它性能事件的最终统计结果,亦可以根据此公式算出。
所有指令的执行,instructions事件计数均会增加,所以CPU单位时间内执行指令越多,instructions事件计数越多,相应的也会产生大量其它性能事件(如缓存读写,分支预测),更容易产生计数波动,此时如果要求记录多个事件(>计数寄存器个数),应该更加频繁的切换所统计的性能事件,才能获取较为准确的性能计数平均值。相反的,CPU单位时间内执行的指令越少,产生的其它性能事件也会很少,不易产生较大波动,此时可以降低打点频率,从而降低系统性能损耗。指定instructions事件打点刚好可以满足这种需求,执行指令越多,打点切换操作越频繁;执行指令越少,打点切换操作频率也会随之下降。
二、另一个具体应用场景的实施例如下:
第一性能事件为cache-references事件,用于表示最后一级缓存存取操作的次数,所述第二性能事件为与缓存相关的事件,此处选取L1-dcache-loads、L1-dcache-load-misses、L1-dcache-stores、L1-dcache-store-misses、L1-dcache-prefetches、L1-dcache-prefetch-misses、L1-icache-loads、L1-icache-load-misses、L1-icache-prefetches、L1-icache-prefetch-misses这十个性能事件作为需要监测的第二性能事件;
其中,L1-icache-loads事件用于表示L1指令缓存的读取次数;
L1-icache-load-misses事件用于表示读取L1指令缓存时,对应指令不在L1缓存中的次数;
L1-icache-stores事件用于表示L1指令缓存的写入次数;
L1-icache-store-misses事件用于表示写入L1指令缓存时,对应指令不在L1缓存中的次数。
假设CPU型号为Intel Xeon E5620,该CPU中包含4个通用计数寄存器和3个特殊计数寄存器。现对系统性能进行监控,使用通用计数寄存器PMC0专门记录cache-references事件,其余通用计数寄存器用于记录剩余性能事件。
具体步骤如下:
1、配置PMC0记录cache-references事件。需要同时配置事件控制寄存器和事件计数寄存器,如图6所示为通用事件控制寄存器一个示意图。
事件控制寄存器应设为0x534f2e,含义如下:
Event Select和Unit Mask两项用于指定所监控的性能事件,指定记录cache-references事件时,Event Select设置为0x2e,Unit Mask设为0x4f
USR:代表统计用户态计数,设置为1
OS:代表统计内核态计数,设置为1
INT:代表溢出时产生PMI中断,设置为1
EN:代表启用计数寄存器,设置为1(此时并不会开始计数,需要配合全局控制寄存器才会启动计数)
接着设置计数寄存器PMC0的初始计数值,假设希望500次缓存读写产生1次PMI中断,那么将计数寄存器PMC0初始计数值设为-500,即可保证程序执行500此缓存读写后,PMC0溢出产生PMI中断;
2、剩余三个寄存器先配置记录L1-dcache-loads、L1-dcache-load-misses、L1-dcache-stores三个事件,对应的控制寄存器应设为0x43010b、0x430151、0x43020b;
3、启动程序A的同时,设置PMU全局控制寄存器,触发各PMU中各寄存器开始计数。
全局控制寄存器的值应设为0x00000000f,代表启动通用计数寄存器PMC0、PMC1、PMC2、PMC3的计数。
4、缓存读写500次后,PMC0溢出,产生PMI中断,此时程序A暂停执行,进入中断处理;
5、中断处理中,先设置全局控制寄存器的值为0x0,停止所有计数。然后重新配置cache-references事件,不更改事件控制寄存器的配置,但需再次设置计数寄存器初值为-500,保证下次也是执行500次缓存读写后产生1次PMI中断。保存L1-dcache-loads、L1-dcache-load-misses、L1-dcache-stores三个事件的计数以及此次计数的时长Ti,然后切换记录L1-dcache-store-misses、L1-dcache-prefetches、L1-dcache-prefetch-misses三个事件。每次切换性能事件时,按照事件列表顺序、循环切换;
6、中断处理结束后,程序A再次开始执行,设置全局控制寄存器的值为0x00000000f,再次开始计数。重复步骤4,5,6,直至程序A终止运行。
7、计算统计结果,以L1-dcache-loads为例,设每次的计数值为C1,C2,C3……,计数时长为T1,T2,T3……,则其平均值为计数值之和处以计数时长(C1+C2+C3+……+Cn)/(T1+T2+T3+……+Tn)=Cavg,最终计数结果就等于Cavg×程序运行总时长。其它性能事件的最终统计结果,亦可以根据此公式算出。
cache-references事件与缓存操作的相关性更强,如果记录的性能事件均为缓存相关,则可以使用cache-references事件作为打点性能事件,从而获取更精确的计数。
上面实施例中,第一寄存器为一个寄存器,第一性能事件也为一个性能事件,即采用一个性能事件作为打点性能事件,将记录该打点性能事件的寄存器溢出发起的中断作为条件触发源来控制性能事件的切换,在实际应用中,该第一寄存器可以包括多个寄存器,例如可以包括第三寄存器和第四寄存器,相应的,其可以记录多个不同的性能事件,例如第三性能事件和第四性能事件,这样可以采用多个性能事件溢出中断配合构成条件触发源,请参阅图8,本发明实施例中监控单元多事件统计的方法另一个实施例包括:
801、当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出,其中,所述第一寄存器包括所述PMU中的第三寄存器和第四寄存器,所述第三寄存器用于记录第三性能事件,所述第四寄存器用于记录第四性能事件,所述第三性能事件为与所述第四性能事件不同的性能事件;
本实施例中,该第一寄存器包括PMU中的多个寄存器:第三寄存器和第四寄存器,第一性能事件包括多个性能事件:第三性能事件和第四性能事件;第三寄存器用于记录第三性能事件,第四寄存器用于记录第四性能事件。可以理解的是,该第三寄存器可以为一个寄存器,也可以为多个寄存器,该第四寄存器可以为一个寄存器,也可以为多个寄存器,相应的,第三性能事件可以为一个性能事件,也可以为多个性能事件,此处不作限定。
第二性能事件与第一性能事件相关,所以,第二性能事件可以与第三性能事件和第四性能事件中至少一个性能事件相关。
可以理解的是,本实施例中的第一寄存器表示的是PMU中某些寄存器的集合,例如,本实施例中,该第一寄存器为包括有第三寄存器和第四寄存器的寄存器的集合。同样的,第一性能事件表示的是某些性能事件的集合,例如,本实施例中,该第一性能事件为包括有第三性能事件和第四性能事件的性能事件的集合。
可以理解的是,在步骤801之前,可以先配置第一寄存器中第三寄存器记录第三性能事件,第一寄存器中第四寄存器记录第四性能事件,第二寄存器记录第二性能事件,具体的配置过程与步骤401中配置第一寄存器记录第一性能事件的过程或步骤402中配置第二寄存器记录第二性能事件的过程类似,此处不作赘述。
802、当确定所述第三寄存器溢出后,所述第四寄存器溢出时,发起所述PMI中断;
当确定该记录第三性能事件的第三寄存器溢出后,记录第四性能事件的第四寄存器溢出时,发起PMI中断。
可以理解的是,本实施例中,采用多个性能事件共同作为打点抽样用性能事件,配合寄存器设定的设定值,组成复合条件来确定切换第二寄存器记录的性能事件的时机。
除了可以设定第三寄存器溢出后,第四寄存器溢出时,发起所述PMI中断,也可以设定为当确定所述第四寄存器溢出后,所述第三寄存器溢出时,发起所述PMI中断,也可以将前两个条件结合起来,第三寄存器溢出后第四寄存器溢出时,或第四寄存器溢出后第三寄存器溢出时,均产生所述PMI中断,这些条件都表示需要第三寄存器和第四寄存器都溢出后,才产生所述PMI中断,执行步骤803,还可以设定为当确定所述第一寄存器或所述第三寄存器溢出时,发起所述PMI中断,即可以为第三寄存器或第三寄存器中任一个溢出时,就产生所述PMI中断,执行步骤803,进一步的,还可以设定更多个性能事件作为打点抽样用性能事件,构建更加复杂的实现特定目的的复合条件来切换该第二寄存器记录的性能事件的时机,从而可以满足对性能事件监测统计的各种需求。
可以理解的是,在构建复合条件时,可能会开启多个寄存器的中断位,例如当确定所述第三寄存器溢出后,所述第四寄存器溢出时,发起所述PMI中断的情况中,若第三寄存器和第四寄存器的中断位都被开启了,则由于溢出后会自动产生PMI中断,第三寄存器也会产生PMI中断,然而,在这种情况中,即使第三寄存器溢出产生了PMI中断,也不会触发后续第二寄存器切换性能事件的步骤,只有当条件都满足时发起的PMI中断,即第三寄存器溢出后,第四寄存器溢出时产生的PMI中断,才会触发后续第二寄存器切换性能事件的步骤。具体实现方式可以为第三寄存器溢出时可以产生一个溢出标识,第四寄存器溢出时可以检测是否存在该溢出标识,若存在,即可确定满足了该第三寄存器溢出后,第四寄存器溢出时的条件。
803、在所述PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器中溢出的寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器中溢出的寄存器和所述第二寄存器计数,结束所述PMI中断;
可以理解的是,重新触发该所述第一寄存器中溢出的寄存器和所述第二寄存器计数后,会再次自动执行步骤801,监测该第一寄存器是否溢出,从而形成一个循环,可以根据第一寄存器中第三寄存器相对于第一性能事件的溢出周期与第一寄存器中第四寄存器相对于第四性能事件的溢出周期,自动的切换第二寄存器记录的第二性能事件。当程序结束,或者不再进行性能监测时,会结束该循环切换记录的过程。
可以理解的是,第一寄存器中溢出的寄存器根据构建的复合条件不同而会有所不同,例如,若条件为:第三寄存器溢出后,第四寄存器溢出时,发起所述PMI中断,则在PMI中断处理时,第一寄存器中溢出的寄存器为第三寄存器和第四寄存器;若条件为:第三寄存器或第四寄存器溢出时,发起所述PMI中断,则在PMI中断处理时,第一寄存器中溢出的寄存器为第三寄存器或者第四寄存器中的一个;则重置寄存器中计数的数目和重新触发寄存器计数时,根据复合条件的不同,不一定会重置第一寄存器,第二寄存器中所有寄存器计数的数目,可以只重置第一寄存器中溢出的寄存器和第二寄存器。例如,若条件为:第三寄存器溢出后,第四寄存器溢出时,发起所述PMI中断,则在PMI中断处理时,会重置第一寄存器和第二寄存器中所有寄存器计数的数目;而若条件为:第三寄存器或第四寄存器溢出时,发起所述PMI中断,则在PMI中断处理时,只会重置第一寄存器中溢出的寄存器和第二寄存器。
805、统计保存的各性能事件每次计数的时长和数目,得到统计结果。
当需要对性能事件进行统计,或者性能监测的程序停止运行时,可以统计保存的各性能事件每次计数的时长和数目,得到统计结果。
本发明实施例中,记录第三性能事件的第三寄存器可以与记录第四性能事件的第四寄存器共同构成触发第二寄存器切换性能事件的触发源,能更灵活的控制第二寄存器切换性能事件的条件,满足性能事件统计的各种需求。
下面对本发明实施例中用于多事件统计的装置进行描述,请参阅图9,本发明实施例中装置一个实施例包括:
监测模块901,用于当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出,其中,所述第一寄存器用于记录第一性能事件,所述第一寄存器对所述第一性能事件计数的数目达到设定值时溢出,所述第二寄存器用于记录第二性能事件,所述第二性能事件包括多个性能事件,所述第一性能事件与所述第二性能事件相关;
中断模块902,用于当所述监测模块901确定所述第一寄存器溢出时,发起PMI中断;
执行模块903,用于在所述中断模块902发起的PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器和所述第二寄存器计数,结束所述PMI中断;
统计模块904,用于统计保存的各性能事件每次计数的时长和数目,得到统计结果。
本发明实施例中,执行模块903控制第二寄存器切换性能事件的频率取决于第一寄存器溢出的设定值和第一性能事件发生的频率,而第一性能事件又与第二寄存器记录的第二性能事件相关,便实现了第二寄存器对性能事件切换的频率的动态调整,例如当第一性能事件的发生频率提高时,第一性能事件发生的次数达到第一寄存器溢出的设定值的时间会减少,便自动的提高了第二寄存器切换性能事件的频率,进一步的,由于第一性能事件与第二性能事件的相关性,第一性能事件的发生频率提高,意味着第二性能事件的发生频率也会提高,此时提高第二寄存器切换性能事件的频率,正好能提高对第二性能事件的抽样频率,提高了对第二性能事件计数的准确性;当第一性能事件的发生频率降低时,第一性能事件发生的次数达到第一寄存器溢出的设定值的时间会增加,便自动的降低了第二寄存器切换性能事件的频率,由于第一性能事件与第二性能事件的相关性,第一性能事件的发生频率降低,意味着第二性能事件的发生频率也会降低,此时降低第二寄存器切换性能事件的频率不会影响对第二性能事件的计数精度,而又节省了系统开销,并且,性能事件的发生频率远大于时钟频率,只要设定值合理,无论第一性能事件发生的频率提高还是降低,第二寄存器的切换频率都远大于按照系统的时钟频率,提高了性能统计的准确性。
上面实施例中,中断模块902通过监测所述第一寄存器是否溢出来确定执行模块903控制第二寄存器切换性能事件的时机,在实际应用中,可以先对该第一寄存器与第二寄存器进行配置,请参阅图10,本发明实施例中装置另一个实施例包括:
监测模块1001,用于当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出,其中,所述第一寄存器用于记录第一性能事件,所述第一寄存器对所述第一性能事件计数的数目达到设定值时溢出,所述第二寄存器用于记录第二性能事件,所述第二性能事件包括多个性能事件,所述第一性能事件与所述第二性能事件相关;
中断模块1002,用于当所述监测模块1001确定所述第一寄存器溢出时,发起PMI中断;
执行模块1003,用于在所述中断模块1002发起的PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器和所述第二寄存器计数,结束所述PMI中断;
统计模块1004,用于统计保存的各性能事件每次计数的时长和数目,得到统计结果;
本实施例中,该装置还包括:
第一配置模块1005,用于配置PMU中所述第一寄存器记录所述第一性能事件,开启所述第一寄存器的中断位,所述第一寄存器为所述PMU中的一个寄存器,所述第一性能事件为一个性能事件;
第二配置模块1006,用于配置PMU中所述第二寄存器记录所述第二性能事件,所述第二寄存器包括所述PMU中除所述第一寄存器外的多个寄存器,所述第二性能事件包括除所述第一性能事件外的多个性能事件,所述第二寄存器中寄存器的数目少于所述第二性能事件中性能事件的数目;
可选的,该装置还可以包括:
调整模块1007,用于调整所述第一寄存器的所述设定值;
可选的,该装置还可以包括:
获取模块1008,用于获取所述预置事件切换顺序,所述预置事件切换顺序用于表示切换所述第二性能事件中各性能事件的顺序。
本发明实施例中,在对性能事件进行监测前,第一配置模块1005和第二配置模块1006可以先配置第一寄存器和第二寄存器,并且,调整模块1007还可以调整第一寄存器的设定值,这样可以控制第一寄存器的溢出周期,从而可以灵活的控制第二寄存器切换性能事件的频率。同时记录多个性能事件时,使用一个PMU寄存器记录打点用性能事件,用以定期触发中断,并在中断处理中切换所监控的事件,通过指定打点性能事件以及该事件的溢出周期,精确调整打点频率。
上面实施例中,第一寄存器为一个寄存器,第一性能事件也为一个性能事件,采用监测模块901监测一个性能事件作为打点性能事件,中断模块902将记录该打点性能事件的寄存器溢出发起的中断作为条件触发源来使执行模块903控制性能事件的切换,在实际应用中,该第一寄存器可以包括多个寄存器,例如可以包括第三寄存器和第四寄存器,相应的,其可以记录多个不同的性能事件,例如第三性能事件和第四性能事件,这样中断模块902可以采用多个性能事件溢出中断配合构成条件触发源,请参阅图11,本发明实施例中装置另一个实施例包括:
监测模块1101,用于当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出,其中,所述第一寄存器用于记录第一性能事件,所述第一寄存器对所述第一性能事件计数的数目达到设定值时溢出,所述第二寄存器用于记录第二性能事件,所述第二性能事件包括多个性能事件,所述第一性能事件与所述第二性能事件相关;
中断模块1102,用于当所述监测模块1101确定所述第一寄存器溢出时,发起PMI中断;
执行模块1103,用于在所述中断模块1102发起的PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器和所述第二寄存器计数,结束所述PMI中断;
统计模块1104,用于统计保存的各性能事件每次计数的时长和数目,得到统计结果;
本实施例中,所述第一寄存器包括所述PMU中的第三寄存器和第四寄存器,所述第三寄存器用于记录第三性能事件,所述第四寄存器用于记录第四性能事件,所述第三性能事件为与所述第四性能事件不同的性能事件;
所述中断模块1102具体包括:
第一中断单元11021,用于当确定所述第三寄存器溢出后,所述第四寄存器溢出时,发起所述PMI中断;
或,
第二中断单元11022,用于当确定所述第四寄存器溢出后,所述第三寄存器溢出时,发起所述PMI中断;
或,
第三中断单元11023,用于当确定所述第三寄存器或所述第四寄存器溢出时,发起所述PMI中断;
所述执行模块1103具体用于,在所述中断模块1102发起的PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器中溢出的寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器中溢出的寄存器和所述第二寄存器计数,结束所述PMI中断。
本发明实施例中,第一寄存器中的第三寄存器和第四寄存器共同构成中断模块1102触发第二寄存器切换性能事件的触发源,能更灵活的控制第二寄存器切换性能事件的条件,满足性能事件统计的各种需求。
上面从单元化功能实体的角度对本发明实施例中的装置进行了描述,下面从硬件处理的角度对本发明实施例中的装置进行描述,请参阅图12,本发明实施例中的装置1200另一实施例包括:
输入装置1201、输出装置1202、处理器1203和存储器1204(其中装置1200中的处理器1203的数量可以一个或多个,图12中以一个处理器1203为例)。在本发明的一些实施例中,输入装置1201、输出装置1202、处理器1203和存储器1204可通过总线或其它方式连接,其中,图12中以通过总线连接为例。
其中,通过调用存储器1204存储的操作指令,处理器1203,用于执行如下步骤:
当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出,其中,所述第一寄存器用于记录第一性能事件,所述第一寄存器对所述第一性能事件计数的数目达到设定值时溢出,所述第二寄存器用于记录第二性能事件,所述第二性能事件包括多个性能事件,所述第一性能事件与所述第二性能事件相关;
当确定所述第一寄存器溢出时,发起PMI中断,;
在所述PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器和所述第二寄存器计数,结束所述PMI中断;
统计保存的各性能事件每次计数的时长和数目,得到统计结果;
本发明的一些实施例中,该处理器1203还用于执行如下步骤:
配置PMU中所述第一寄存器记录所述第一性能事件,开启所述第一寄存器的中断位,所述第一寄存器为所述PMU中的一个寄存器,所述第一性能事件为一个性能事件;
配置PMU中所述第二寄存器记录所述第二性能事件,所述第二寄存器包括所述PMU中除所述第一寄存器外的多个寄存器,所述第二性能事件包括除所述第一性能事件外的多个性能事件,所述第二寄存器中寄存器的数目少于所述第二性能事件中性能事件的数目;
本发明的一些实施例中,该处理器1203还用于执行如下步骤:
调整所述第一寄存器的所述设定值;
本发明的一些实施例中,该处理器1203还用于执行如下步骤:
获取所述预置事件切换顺序,所述预置事件切换顺序用于表示切换所述第二性能事件中各性能事件的顺序;
本发明的一些实施例中,所述第一寄存器包括所述PMU中的第三寄存器和第四寄存器,所述第三寄存器用于记录第三性能事件,所述第四寄存器用于记录第四性能事件,所述第三性能事件为与所述第四性能事件不同的性能事件,该处理器1203具体执行如下步骤:
重置所述第一寄存器中溢出的寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器中溢出的寄存器和所述第二寄存器计数;
当确定所述第三寄存器溢出后,所述第四寄存器溢出时,发起所述PMI中断;
或,当确定所述第四寄存器溢出后,所述第三寄存器溢出时,发起所述PMI中断;
或,当确定所述第三寄存器或所述第四寄存器溢出时,发起所述PMI中断。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (11)

1.一种性能监控单元多事件统计的方法,其特征在于,包括:
当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出,其中,所述第一寄存器用于记录第一性能事件,所述第一寄存器对所述第一性能事件计数的数目达到设定值时溢出,所述第二寄存器用于记录第二性能事件,所述第二性能事件包括多个性能事件,所述第一性能事件与所述第二性能事件相关;
当确定所述第一寄存器溢出时,发起PMI中断;
在所述PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器和所述第二寄存器计数,结束所述PMI中断;
统计保存的各性能事件每次计数的时长和数目,得到统计结果。
2.根据权利要求1所述的方法,其特征在于,所述当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出的步骤之前还包括:
配置PMU中所述第一寄存器记录所述第一性能事件,开启所述第一寄存器的中断位,所述第一寄存器为所述PMU中的一个寄存器,所述第一性能事件为一个性能事件;
配置PMU中所述第二寄存器记录所述第二性能事件,所述第二寄存器包括所述PMU中除所述第一寄存器外的多个寄存器,所述第二性能事件包括除所述第一性能事件外的多个性能事件,所述第二寄存器中寄存器的数目少于所述第二性能事件中性能事件的数目。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
调整所述第一寄存器的所述设定值。
4.根据权利要求2所述的方法,其特征在于,所述按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件的步骤之前还包括:
获取所述预置事件切换顺序,所述预置事件切换顺序用于表示切换所述第二性能事件中各性能事件的顺序。
5.根据权利要求1至4中任一项所述的方法,其特征在于,
所述第一性能事件为指令instructions事件,所述instructions事件表示执行指令数,所述第二性能事件为与执行指令相关的事件;
或,
所述第一性能事件为缓存存取cache-references事件,所述cache-references事件用于表示最后一级缓存存取操作的次数,所述第二性能事件为与缓存相关的事件。
6.根据权利要求1所述的方法,其特征在于,所述第一寄存器包括所述PMU中的第三寄存器和第四寄存器,所述第三寄存器用于记录第三性能事件,所述第四寄存器用于记录第四性能事件,所述第三性能事件为与所述第四性能事件不同的性能事件;
所述重置所述第一寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器和所述第二寄存器计数具体包括:
重置所述第一寄存器中溢出的寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器中溢出的寄存器和所述第二寄存器计数;
所述当确定所述第一寄存器溢出时,发起PMI中断具体包括:
当确定所述第三寄存器溢出后,所述第四寄存器溢出时,发起所述PMI中断;
或,
所述当确定所述第一寄存器溢出时,发起PMI中断具体包括:
当确定所述第四寄存器溢出后,所述第三寄存器溢出时,发起所述PMI中断;
或,
所述当确定所述第一寄存器溢出时,发起PMI中断具体包括:
当确定所述第三寄存器或所述第四寄存器溢出时,发起所述PMI中断。
7.一种装置,其特征在于,包括:
监测模块,用于当触发性能监控单元PMU中第一寄存器和第二寄存器计数后,监测所述第一寄存器是否溢出,其中,所述第一寄存器用于记录第一性能事件,所述第一寄存器对所述第一性能事件计数的数目达到设定值时溢出,所述第二寄存器用于记录第二性能事件,所述第二性能事件包括多个性能事件,所述第一性能事件与所述第二性能事件相关;
中断模块,用于当所述监测模块确定所述第一寄存器溢出时,发起PMI中断;
执行模块,用于在所述中断模块发起的PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器和所述第二寄存器计数,结束所述PMI中断;
统计模块,用于统计保存的各性能事件每次计数的时长和数目,得到统计结果。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第一配置模块,用于配置PMU中所述第一寄存器记录所述第一性能事件,开启所述第一寄存器的中断位,所述第一寄存器为所述PMU中的一个寄存器,所述第一性能事件为一个性能事件;
第二配置模块,用于配置PMU中所述第二寄存器记录所述第二性能事件,所述第二寄存器包括所述PMU中除所述第一寄存器外的多个寄存器,所述第二性能事件包括除所述第一性能事件外的多个性能事件,所述第二寄存器中寄存器的数目少于所述第二性能事件中性能事件的数目。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
调整模块,用于调整所述第一寄存器的所述设定值。
10.根据权利要求8所述的装置,其特征在于,所述装置还包括:
获取模块,用于获取所述预置事件切换顺序,所述预置事件切换顺序用于表示切换所述第二性能事件中各性能事件的顺序。
11.根据权利要求7所述的装置,其特征在于,所述第一寄存器包括所述PMU中的第三寄存器和第四寄存器,所述第三寄存器用于记录第三性能事件,所述第四寄存器用于记录第四性能事件,所述第三性能事件为与所述第四性能事件不同的性能事件;
所述中断模块具体包括:
第一中断单元,用于当确定所述第三寄存器溢出后,所述第四寄存器溢出时,发起所述PMI中断;
或,
第二中断单元,用于当确定所述第四寄存器溢出后,所述第三寄存器溢出时,发起所述PMI中断;
或,
第三中断单元,用于当确定所述第三寄存器或所述第四寄存器溢出时,发起所述PMI中断;
所述执行模块具体用于,在所述中断模块发起的PMI中断中,保存PMU中各寄存器对各性能事件计数的时长和数目,按照预置事件切换顺序,切换所述第二寄存器记录的第二性能事件,重置所述第一寄存器中溢出的寄存器和所述第二寄存器计数的数目,重新触发所述第一寄存器中溢出的寄存器和所述第二寄存器计数,结束所述PMI中断。
CN201410437648.5A 2014-08-29 2014-08-29 一种性能监控单元多事件统计的方法和装置 Expired - Fee Related CN104216812B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410437648.5A CN104216812B (zh) 2014-08-29 2014-08-29 一种性能监控单元多事件统计的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410437648.5A CN104216812B (zh) 2014-08-29 2014-08-29 一种性能监控单元多事件统计的方法和装置

Publications (2)

Publication Number Publication Date
CN104216812A true CN104216812A (zh) 2014-12-17
CN104216812B CN104216812B (zh) 2017-04-05

Family

ID=52098329

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410437648.5A Expired - Fee Related CN104216812B (zh) 2014-08-29 2014-08-29 一种性能监控单元多事件统计的方法和装置

Country Status (1)

Country Link
CN (1) CN104216812B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106227641A (zh) * 2016-07-29 2016-12-14 北京润科通用技术有限公司 一种硬件性能监控方法及系统
CN111209155A (zh) * 2018-11-21 2020-05-29 华夏芯(北京)通用处理器技术有限公司 一种便于扩展和配置的性能检测方法
CN113064804A (zh) * 2021-03-30 2021-07-02 深圳市广和通无线股份有限公司 记忆设备识别时间的统计方法、模组及存储介质
CN113722174A (zh) * 2021-07-28 2021-11-30 苏州浪潮智能科技有限公司 一种PCIe带宽实时监控系统及其监控方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100468561B1 (ko) * 1996-01-17 2005-06-21 텍사스 인스트루먼츠 인코포레이티드 중앙처리장치의동작특성에따라컴퓨터의동작을제어하는방법및시스템
US7694164B2 (en) * 2002-09-20 2010-04-06 Intel Corporation Operating system-independent method and system of determining CPU utilization
US7062684B2 (en) * 2002-12-19 2006-06-13 International Business Machines Corporation Enabling tracing of a repeat instruction
US20070139421A1 (en) * 2005-12-21 2007-06-21 Wen Chen Methods and systems for performance monitoring in a graphics processing unit
CN102750219B (zh) * 2011-04-22 2015-05-20 清华大学 基于cpu硬件性能监控计数器的cpi精确测量方法

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106227641A (zh) * 2016-07-29 2016-12-14 北京润科通用技术有限公司 一种硬件性能监控方法及系统
CN106227641B (zh) * 2016-07-29 2019-01-29 北京润科通用技术有限公司 一种硬件性能监控方法及系统
CN111209155A (zh) * 2018-11-21 2020-05-29 华夏芯(北京)通用处理器技术有限公司 一种便于扩展和配置的性能检测方法
CN111209155B (zh) * 2018-11-21 2022-09-23 华夏芯(北京)通用处理器技术有限公司 一种便于扩展和配置的性能检测方法
CN113064804A (zh) * 2021-03-30 2021-07-02 深圳市广和通无线股份有限公司 记忆设备识别时间的统计方法、模组及存储介质
CN113064804B (zh) * 2021-03-30 2022-12-16 深圳市广和通无线股份有限公司 记忆设备识别时间的统计方法、模组及存储介质
CN113722174A (zh) * 2021-07-28 2021-11-30 苏州浪潮智能科技有限公司 一种PCIe带宽实时监控系统及其监控方法
CN113722174B (zh) * 2021-07-28 2023-07-25 苏州浪潮智能科技有限公司 一种PCIe带宽实时监控系统及其监控方法

Also Published As

Publication number Publication date
CN104216812B (zh) 2017-04-05

Similar Documents

Publication Publication Date Title
Jeon et al. Analysis of {Large-Scale}{Multi-Tenant}{GPU} clusters for {DNN} training workloads
US8850236B2 (en) Power gating of cores by an SoC
US8402232B2 (en) Memory utilization tracking
US8347119B2 (en) System and method for processor utilization adjustment to improve deep C-state use
CN104216812A (zh) 一种性能监控单元多事件统计的方法和装置
EP2790106A2 (en) Performance measurement unit, processor core including the same and process profiling method
CN104102543A (zh) 一种云计算环境中负载调整的方法和装置
Wang et al. Improving mapreduce performance with partial speculative execution
US20130332933A1 (en) Performance monitoring resources programmed status
US9971603B2 (en) Causing an interrupt based on event count
Bertran et al. Application-level power and performance characterization and optimization on IBM Blue Gene/Q systems
US9575766B2 (en) Causing an interrupt based on event count
Yu et al. System-wide trade-off modeling of performance, power, and resilience on petascale systems
US20230195315A1 (en) Nonvolatile memory scheduling method, system and device, and readable storage medium
Park et al. Daos: Data access-aware operating system
Geldenhuys et al. Chiron: Optimizing fault tolerance in qos-aware distributed stream processing jobs
Yu et al. {ADOC}: Automatically Harmonizing Dataflow Between Components in {Log-Structured}{Key-Value} Stores for Improved Performance
US20130060730A1 (en) Adjusting one or more trace filters in a database system
CN114610817B (zh) 数据同步方法、装置、多活系统、电子设备及存储介质
CN102495763B (zh) 计算机程序内存动态配置方法
US11507427B2 (en) Application program management method and apparatus
Zhu et al. Optimizing the fault-tolerance overheads of HPC systems using prediction and multiple proactive actions
CN107423206A (zh) 一种衡量系统管理中断时间的方法及装置
Larysch Fine-grained estimation of memory bandwidth utilization
Hu et al. Application of OMAT in HTCondor resource management

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170405

Termination date: 20190829

CF01 Termination of patent right due to non-payment of annual fee