CN115698957A - 由处理电路处理的采样操作的性能分析 - Google Patents

由处理电路处理的采样操作的性能分析 Download PDF

Info

Publication number
CN115698957A
CN115698957A CN202180037044.XA CN202180037044A CN115698957A CN 115698957 A CN115698957 A CN 115698957A CN 202180037044 A CN202180037044 A CN 202180037044A CN 115698957 A CN115698957 A CN 115698957A
Authority
CN
China
Prior art keywords
instruction
address
performance analysis
sampling
branch
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
Application number
CN202180037044.XA
Other languages
English (en)
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.)
ARM Ltd
Original Assignee
ARM 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 ARM Ltd filed Critical ARM Ltd
Publication of CN115698957A publication Critical patent/CN115698957A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/342Extension of operand address space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3419Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • G06F9/261Microinstruction address formation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Executing Machine-Instructions (AREA)
  • Numerical Control (AREA)
  • Machine Tool Copy Controls (AREA)

Abstract

处理电路4响应于从高速缓存16或存储器34提取的指令或从指令解码的微操作而执行数据处理操作。采样电路50选择指令或微操作的子集作为要进行性能分析的采样操作。性能分析电路52响应于选择为采样操作的指令或微操作的处理而捕获指定采样操作的操作类型的样本记录和关于直接归因于采样操作的采样操作行为的信息。该性能分析电路52可在针对对应于给定指令的采样操作的样本记录中包括指示参考指令的地址的参考指令地址指示符,该参考指令在程序顺序中比给定指令更早或更晚出现,针对其的控制流在程序顺序中的参考指令与给定指令之间发生的任何指令之间为顺序的。

Description

由处理电路处理的采样操作的性能分析
背景技术
本技术涉及数据处理领域。更具体地,本公开涉及性能分析。
处理电路响应于从高速缓存或存储器提取的指令或从指令解码的微操作而执行数据处理操作。所提取的指令表示被编写或编译以执行软件开发者所需的操作的程序。为了辅助软件开发,开发者可执行程序的性能分析,其中关于程序行为的信息在程序由处理电路处理时被捕获,使得可对该信息进行分析以识别程序的可导致不良性能的部分和不良性能的可能原因。软件工程师可使用性能分析的结果来优化其软件以减小执行时间并且允许更好地利用处理系统中的可用资源。
至少一些示例提供了一种装置,该装置包括:
处理电路,所述处理电路响应于从高速缓存或存储器提取的指令或从所述指令解码的微操作而执行数据处理操作;
采样电路,所述采样电路选择指令或微操作的子集作为要进行性能分析的采样操作;以及
性能分析电路,所述性能分析电路响应于由所述采样电路选择为采样操作的指令或微操作的处理而捕获指定所述采样操作的操作类型的样本记录和关于直接归因于所述采样操作的所述采样操作行为的信息;其中:
所述性能分析电路能够在针对对应于给定指令的采样操作捕获的所述样本记录中包括指示参考指令的地址的参考指令地址指示符,所述参考指令在程序顺序中比所述给定指令更早或更晚出现,针对其的控制流在程序顺序中的所述参考指令与所述给定指令之间发生的任何指令之间为顺序的。
至少一些示例提供了一种方法,该方法包括:
响应于从高速缓存或存储器提取的指令或从所述指令解码的微操作而执行数据处理操作;
选择指令或微操作的子集作为要进行性能分析的采样操作;以及
响应于由所述采样电路选择为采样操作的指令或微操作的处理而捕获指定所述采样操作的操作类型的样本记录和关于直接归因于所述采样操作的所述采样操作行为的信息;其中:
所述性能分析电路能够在针对对应于给定指令的采样操作捕获的所述样本记录中包括指示参考指令的地址的参考指令地址指示符,所述参考指令在程序顺序中比所述给定指令更早或更晚出现,针对其的控制流在程序顺序中的所述参考指令与所述给定指令之间发生的任何指令之间为顺序的。
附图说明
本技术的另外的方面、特征和优点将从结合附图阅读的示例的以下描述中显而易见,在这些附图中:
图1示意性地示出了具有性能分析电路的数据处理装置的示例;
图2示出了用于选择要针对其捕获样本记录的操作的指令或微操作的采样;
图3是示出采样操作的样本记录的捕获以及样本记录是否可访问以用于诊断分析的过滤的流程图;
图4示出了可包括在样本记录中的多个分组类型;
图5示出了包括多个分组的样本记录的示例;
图6示出了可包括在样本记录中的地址分组的示例;
图7示出了包括分支指令的程序指令序列的示例;
图8至图11示出了生成包括图7的示例性序列的参考指令地址的地址分组的示例;
图12是示出使用跟踪指令指示符来跟踪哪个地址应被指示为后续采样操作的参考指令地址的方法的流程图;
图13是示出用于设置采样操作的参考指令地址指示符的跟踪指令指示符的使用的流程图;以及
图14示出了示出设置参考指令地址指示符的第二示例的流程图,其中参考指令地址指示符指示在程序顺序中比与采样操作相关联的指令更晚的指令的地址。
具体实施方式
在处理器上的程序执行的性能分析中遇到的问题是处理器可每秒执行数百万个操作或数十亿个操作,并且因此详细记录有关所执行的每个指令的精确逐指令行为的信息是不可行的。用于进行性能分析的一种方法可限定一些性能监测计数器,其计数特定事件(诸如可影响不良性能的高速缓存缺失或分支缺失),并且当已经检测到给定数量的此类事件时,生成性能监测中断以致使异常处理例程读取来自寄存器的架构状态或其他性能监测信息,其然后可被访问以用于诊断分析。然而,有关这种方法的问题在于,它需要中断常规程序流以便以频繁采样间隔收集信息,这需要高中断速率,该高中断速率可能影响程序的正常运行并且使得诊断分析的结果不太有意义,因为所观察的行为可能不与在未执行性能分析时发生的行为一致。实际上,另一个问题在于,在发信号通知性能监测中断的时间与异常处理器开始收集捕获的建筑状态或性能监测信息的时间之间可能存在“滑道”延迟,并且在中间时间段内,处理器可能继续执行数百个其他指令,使得所捕获的信息不能直接归因于在触发中断的点正进行的操作。而且,随着性能分析信息的事件驱动的捕获,事件本身不会给出位置的非常准确的结果。为了优化代码,工程师可能需要关于以下的精确信息:问题在哪里(诸如控制平面问题)、精确地哪个指令、代码行、类别和/或模块受影响、或通向该指令的调用栈和/或路径,因为普通简档通常是无启发作用的;以及对于数据平面问题,哪个变量、阵列或对象受影响的指示。这可能难以通过典型的事件触发的采样技术来识别。
在下面描述的示例中,处理电路响应于从高速缓存存储器提取的指令或从指令解码的微操作而执行数据处理操作。采样电路选择指令或微操作的子集作为要进行性能分析的采样操作。性能分析电路响应于由采样电路选择为采样操作的指令或微操作的处理而捕获指定采样操作的操作类型的样本记录和关于直接归因于采样操作的采样操作行为的信息。
通过这种方法,当样本记录捕获直接归因于采样操作的信息时,这避免了由如上文所讨论的基于中断的性能分析机制引起的滑道问题。包括在样本记录中的信息可直接指示在采样操作的处理期间发生的事件,诸如在给定水平的高速缓存是否发生高速缓存缺失或是否针对给定分支发生分支误预测,或者可指示在采样操作的处理期间测量某些事件的延迟的周期计数。然而,当采样电路仅选择指令或微操作的子集作为采样操作时,这极大地减少了在采样操作上收集信息的硬件和功率开销。针对采样操作捕获的样本记录可提供作为整体的程序性能的统计视图,而不是尝试捕获每个操作的行为。通过指示对应样本记录中的每个采样操作的操作类型,不必提供关于采样电路将何种类型的采样操作选择为采样操作的任何限制,使得样本记录不限于在单个预定类型的采样操作上捕获信息。这可辅助使用单个性能分析执行运行来监测一个采样信息集中的两个或更多个不同问题(而不是使用其中固定类型的事件触发信息的捕获的事件触发采样)。此外,提供选择特定指令或微操作作为将进行性能分析的采样操作的采样电路可使得能够在采样操作通过管线时跟踪在管线的不同阶段发生的事件,这在性能分析基于特定事件的发生时的架构状态或性能监测计数器的捕获的示例中可能不是可能的,其中该信息可能不直接归因于特定操作而是可基于多个不同操作。
采样电路和性能分析电路可用于提供关于由处理电路处理的特定操作的结果和性能的详细信息,其对于在执行给定程序时识别不良性能的可能原因而言可能是有用的。然而,性能分析的另一个方面可以是识别程序代码的哪些部分比其他部分更频繁地执行。软件开发者可仅具有可用于代码优化的有限时间量,并且可能希望将其时间聚焦在将较频繁执行的代码部分的性能改善成优于不太频繁执行的代码部分。可能认为通过用于进行性能分析的基于采样的方法,将难以分析程序内的不同部分的执行频率,因为采样意味着在针对采样操作捕获的样本记录中未跟踪许多操作,使得每个样本记录仅提供执行单个指令的指示,并且将不提供关于如何程序达到该指令以及经由控制流的何种路径的信息。因此,可能认为基于采样的方法将要求捕获非常大量的样本以提供关于相对执行频率的有意义的热点性能分析信息,其可能在生成此类大量采样信息的存储和数据输出开销方面产生太高的成本。
在下文描述的示例中,性能分析电路能够在针对对应于给定指令的采样操作捕获的样本记录中包括指示参考指令的地址的参考指令地址指示符,该参考指令在程序顺序中比给定指令更早或更晚出现,针对其的控制流参考指令与给定指令之间发生的任何指令之间为顺序的。可禁止性能分析电路将参考指令地址指示符设置为针对其在参考指令与给定指令之间发生的任何两个指令之间存在控制流的非顺序变化的指令的地址(给定指令可以是采取分支指令,因此这不阻止给定指令与紧接的指令之间存在控制流的非顺序变化—在这种情况下,参考指令地址仍然可指示比给定指令更晚的指令的地址,只要在给定指令所采取的分支之后没有后续非顺序变化即可)。
因此,通过在给定采样操作的样本记录中包括针对其的控制流程按顺序直到给定指令或在给定指令之后的指令的地址的指示,这允许单个样本记录提供执行整个指令地址范围的证据,从而极大地减少了需要捕获以提供足够信息以产生指示执行程序不同部分的相对频率的统计上有意义的热点简档的样本记录的数量。与不支持参考指令地址指示符的使用的基于样本的性能分析方法相比,这减少了所需的性能分析数据的量。因此,软件开发者的程序优化可能更有效。然而,不同于用于生成仅捕获关于所采取的控制流路径的信息但不指示任何其他信息的程序流简档的另选的基于追踪的技术,所捕获的样本记录还可指示其他非控制流信息,诸如事件或周期计数,其可使得单个诊断执行运行能够收集性能分析信息以出于多个目的。
在一些示例中,性能分析电路可以能够设置参考指令地址指示符以指示在程序顺序中比给定指令更早出现的较早指令的地址,针对其的控制流从较早指令到给定指令为顺序的。在被设置用于跟踪参考指令地址的硬件电路逻辑方面,该方法的实现可能更简单。例如,可提供存储元件,该存储元件可在识别出表示可用于标记参考指令的事件的多种类型中的一者的指令的情况下重置,并且用于跟踪在重置点处的指令的地址或计数自重置点以来看到的指令的数量。当遇到后续采样操作时,然后可使用在该存储元件中跟踪的值以在采样操作的样本记录中设置参考指令地址指示符。
然而,其他示例可提供性能分析电路,该性能分析电路能够设置参考指令地址指示符以指示在程序顺序中比给定指令更晚出现的较晚指令的地址,针对其的控制流从给定指令之后的下一个指令到较晚指令为顺序的。利用这种方法,参考指令地址指示符有效地给出超出给定指令的多远的视图,控制流的下一个顺序框在到达控制流的非顺序变化或要求参考指令地址的跟踪停止的其他事件之前继续。
一些实施方案可支持这两个选项,其中参考指令地址指示符可提供较早指令的地址或较晚指令的地址的指示(例如,选择指示顺序执行的最长运行以提供热点简档的“指令执行计数”的最大可能数量的指示),或者可在相同样本记录中指示两种类型的参考指令地址指示符以在对应于采样操作的给定指令之前或之后提供关于控制流的更多信息。然而,在许多实施方案中,可能足够的是仅在相对于给定指令的一个方向上跟踪控制流(仅回看程序顺序中的较早指令,或者仅向前看程序顺序中的较晚指令)以限制参考指令地址的跟踪的硬件成本。
性能分析电路能够设置参考指令地址指示符以指示在给定指令之前的最近采取分支指令的分支目标地址或指示在给定指令之后的下一个采取分支指令的指令地址。由于采取分支指令表示存在控制流的非顺序变化的点,则使用参考指令地址指示符来给出最近或下一个分支的指示可给出关于在给定指令之前或之后执行的指令的顺序运行的大小的最大信息量,从而给出可对热点简档有贡献的较大数量的“指令执行计数”。因此,如果回看给定指令之前的较早指令,则参考指令可以是最近采取分支指令的分支目标地址处的指令,而如果参考指令地址指示符用于向前看在给定指令之后的较晚指令,则参考指令可以是给定指令本身之后的下一个采取分支指令。
然而,实际上,本发明人认识到尽管使用参考指令地址指示符来指示最近或下一个采取分支的位置可使得能够指示顺序处理指令的较大块,但在一些(而非全部)性能分析场景中,始终使用采取分支位置来设置参考指令地址指示符的方法可给出热点性能分析的偏差结果。因此,可能有用的是提供性能分析电路,其还支持设置参考指令地址指示符以指示除了以下指令之外的指令的指令地址的参考指令地址指示符的能力:在给定指令之前的最近采取分支指令的分支目标地址处,以及在给定指令之后的下一个采取分支指令的指令地址处的指令。更具体地,有时可能有用的是能够设置参考指令指示符以指示以下中的一者的指令地址:在给定指令之前的最近分支指令之后将程序流引导到的指令,而不管最近分支指令被采取还是不采取;或者在给定指令之后的下一个分支指令的指令地址,而不管下一个分支指令被采取还是不采取。
将希望使用参考指令地址指示符来指示先前/下一个不采取分支指令的位置可被视为反直觉的,因为将存在不采取分支之前或之后顺序执行的其他指令,因此这种方法似乎放弃了增加可被确认为已经由单个样本记录的内容执行的指令范围的机会。然而,如下文更详细地解释的,如果采取和不采取分支的样本仅参考采取分支记录参考指令地址指示符,并且所得参考指令地址指示符用于热点性能分析,则这可导致所得的热点性能分析错误地指示在一致不采取分支的一侧上的代码段与一致不采取分支的另一侧上的另一个代码段相比更频繁地执行,即使两个代码段被执行相等的次数。可通过使用先前分支或下一个分支的位置以设置参考指令地址指示符来防止偏斜性能分析结果的此问题,而不管该分支是否被采取。对于一些性能分析场景,这可给出执行特定指令集的相对频率的更准确指示。
然而,当没有出现此问题时(例如,如果不输出不采取分支的样本以用于分析),存在其他性能分析场景,并且在该情况下,可能优选使用较早/较晚分支作为用于生成参考指令地址指示符的参考。
在本申请中,除非另有说明,否则限定指令的相对排序的术语(诸如“较早”、“较晚”、“下一个”、“最近”、“前”、“之前”或“后”)指代指令在程序顺序中出现的顺序。程序顺序指代指令将在按顺序处理器中执行的顺序。换句话说,程序顺序对应于由创建程序的编程器或编译器定义的顺序。处理电路的提取阶段可提取用于以程序顺序执行的指令。一些具体实施可使用按顺序处理电路,其也以对应于程序顺序的顺序执行指令或微操作。然而,在其他示例中,处理电路可以是超序处理电路,该超序处理电路能够对指令/微操作进行重排序以使得允许以不同于程序顺序的顺序处理指令或微操作。例如,如果程序顺序中的较早指令在等待操作数变得可用时停止,则程序顺序中的较晚指令可在较早指令之前执行。因此,为了跟踪参考指令地址指示符的目的,指代指令之间的相对顺序的术语是指程序顺序。这不排除处理电路以不同顺序执行指令。例如,在一些情况下,程序顺序中的最近分支可实际上在程序顺序中的较早分支之后执行,这取决于操作数变得可用的定时以及指令之间的依赖性。
选择哪些地址来指示为参考指令地址的一种方式可以是定义特定类型的参考指令地址重置事件,其指示应将与参考指令地址重置事件相关联的地址记录为较晚或较早采样操作的参考指令地址。在样本记录指定比给定指令更早的指令的地址作为参考地址的示例中,参考指令地址指示符可被设置为与给定指令之前发生的最近参考指令地址重置事件相关联的地址。在样本记录指定比给定指令更晚的指令的地址作为参考地址的示例中,参考指令地址指示符可被设置为与给定指令之后发生的下一个参考指令地址重置事件相关联的地址。
如上所述,程序顺序中的最近或下一个采取分支指令相对于给定指令的位置通常可表示在将被允许使用参考指令地址指示符来识别的给定指令之前或之后的最大范围。因此,可能有用的是性能分析电路检测采取分支的处理作为参考指令地址重置事件。
然而,可能存在一个或多个其他类型的重置事件,其可重置参考指令地址的跟踪以使得如果参考指令地址重置事件在采取分支指令与给定指令之间发生,则替代地可设置参考指令地址指示符以标记对应于发生重置事件的点的指令的位置。
例如,也可检测不采取分支操作的处理作为参考指令地址重置事件,使得如果在给定指令与最近/下一个采取分支之间存在不采取分支,则参考指令地址可替代地指向与不采取分支操作相关联的地址。通过支持指代不采取分支的地址(或不采取分支之后的指令的地址)作为参考指令的选项,这可帮助改善热点性能分析结果的统计有效性,使得通过热点性能分析从样本记录集导出的热点性能分析测量表示不同指令块的实际相对执行频率。以下参考图7提供了使用不采取分支作为这种重置事件避免统计偏差的原因的更详细解释。
在一些具体实施中,不采取分支的处理可始终被视为参考指令地址重置事件。
然而,其他具体实施可提供配置信息(例如,存储在配置寄存器中),该配置信息可由软件或外部设备配置以限定不采取分支操作的处理是否应被检测为参考指令地址重置事件。性能分析电路可基于配置信息来确定不采取分支是否应被检测为参考指令地址重置事件。对于一些形式的分析(例如,当不采取样本记录将在输出之前被丢弃或者输出但不在分析中使用时),仅相对于采取分支指示参考指令地址指示符可以是可接受的,因此通过配置性能分析电路以使得不采取分支不被视为参考指令地址重置事件,这可允许参考指令地址指示符指示扩展经过不采取分支到采取分支的顺序执行指令的较大范围,从而给出可用于热点性能分析的更多指令计数。相比之下,如果要在存在使性能分析结果偏斜的风险(除非参考地址跟踪参考不采取分支)的情况下执行分析,则可设置配置信息以指示不采取分支应被检测为参考指令地址重置事件。通过提供配置信息以控制不采取分支是否被视为重置事件,这给出了改变所采取的方法以适应正在执行的分析的类型的灵活性。
在一些示例中,装置可具有过滤电路,该过滤电路基于采样操作是否满足至少一个过滤标准来控制由性能分析电路针对采样操作捕获的样本记录是否可用于诊断分析。并非由性能分析电路捕获的所有样本记录可能与正在执行性能分析的目的相关并且因此过滤电路可以是可配置的以确保仅特定类型的样本记录变得可用于诊断分析,以便节省用于存储和输出样本记录的资源的容量或带宽。例如,可以不同方式使样本记录可用于诊断分析,例如通过将样本记录写入存储器(可由进行调试的处理电路上执行的其他电路从该存储器读取样本记录)、通过将样本记录输出到芯片上的芯上追踪缓冲器,和/或通过将样本记录通过追踪端口输出到存储样本记录或使用样本记录来执行诊断分析的外部设备。一些系统可支持使样本记录可用于诊断分析的这些形式中的多于一者。无论支持哪种形式,通过基于至少一个过滤标准来提供过滤(该过滤标准可由用户通过调整存储在与性能分析电路相关联的配置寄存器中的过滤器配置数据来配置),这可允许软件开发者控制捕获何种类型的样本记录。
在一个示例中,用于确定不采取分支是否应被视为重置事件的配置信息可以是过滤标准配置信息,其还控制过滤电路的一个或多个过滤标准。例如,用户可将配置信息视为过滤标准,但对于过滤标准的某些设置,性能分析电路可将不采取分支视为重置事件,而对于过滤标准的其他设置,不采取分支可能不被视为重置事件。例如,如果设置过滤标准以使得允许不采取分支操作的样本记录可用于诊断分析,并且参考指令地址指示符将被包括在针对不采取分支操作捕获的样本记录中,则性能分析电路可检测不采取分支操作的处理作为参考指令地址重置事件(无论该不采取分支操作是否自身被选为采样操作)。如果设置过滤标准以指示不采用分支操作的样本记录将不一样诊断分析,或者如果不采取分支操作的样本记录将不包括参考指令地址指示符,则不需要将不采取分支操作的处理视为重置事件。
然而,在其他示例中,用于确定是否将不采取分支视为重置事件的配置信息可与设置过滤电路的过滤标准的任何配置信息分开定义。在这种情况下,可存在对将被检测为重置参考指令地址跟踪的重置事件的类型,以及将由过滤器使用的过滤标准的正交控制。当考虑到偏差性能分析结果的风险时,可由用户(或实现性能分析的软件)确定重置事件/过滤器设置的哪个组合是用于他们希望执行的分析的类型的设置。
其他类型的参考指令地址重置事件可包括:
·在性能分析被先前禁用之后由所述性能分析电路进行的性能分析的启用。如果在一定时间禁用性能分析,则可能没有跟踪任何先前发生的采取分支,因此参考指令地址的参考点可以是启用性能分析的点。
·采取异常和/或从异常返回。这认识到在中断正在进行性能分析的程序的处理的异常处理器的处理期间,有可能的是异常处理器内的指令可致使性能分析电路的一些跟踪资源改变状态(包括用于跟踪参考指令地址指示符的任何跟踪资源)并且因此从异常返回时,先前采取分支的跟踪可能不再可靠。因此,为了提供有效的性能分析结果,可能优选的是在采取异常时或在异常返回时重置参考指令地址的跟踪。
·而且,有时对采样操作的处理本身可被视为参考指令地址重置事件。例如,当采样操作是采取/不采取分支,以及在样本记录中捕获指示比采取分支指令更晚/更早的参考指令的地址的参考指令地址指示符时,可记录采取分支指令本身(或采取分支之后的下一个指令)的地址以用作另一采样操作的参考地址。
并非所有具体实施需要支持所有这些类型的重置事件。另外,一些具体实施可支持定义何种类型的事件引起重置的配置信息(至少针对一些形式的重置事件)。此外,对于一些类型的重置事件(例如,采样操作的处理),尽管有时事件可导致重置,但在其他情况下事件可能不会导致重置(例如,事件是否为重置事件还可取决于其他条件)。
用于响应于上文所讨论的其他类型的重置事件而重置参考指令地址的跟踪的另选方案(性能分析的启用、采取异常/从异常返回、采样操作的处理)可以是代替地在此类事件发生时可使参考指令地址的跟踪无效。在这种情况下,参考指令地址指示符可以是有效的,并且指示采取或不采取分支的位置(或采取或不采取分支之后的指令),或者如果发生指示参考地址指示符可能不可靠的无效事件中的一者(诸如当发生性能分析的启用或采取异常/返回事件时)则为无效。另外,为了简化样本记录内的信息的捕获的微架构具体实施,可有用的是(尽管不是必需的)将采样操作本身的处理视为参考指令地址无效事件,因为采样操作通常可具有与可被检测为参考指令的指令类型中的一者相同的类型(例如,采样操作本身可以是采取/不采取分支),因此采样操作本身可能导致如上所讨论的参考指令地址的重置。因此,可能期望确保在响应于采样操作本身而重置参考指令地址之前,针对要为采样操作输出的样本记录捕获任何先前设置的参考指令地址,但这可在管理捕获/重置的定时方面产生挑战。防止先前跟踪地址在其已经被捕获在样本记录中之前被覆写的一种方式可以是抑制采样操作本身用作参考指令,因为其被采样,并且因此响应于采样操作而保持参考指令地址不变。鉴于采样间隔通常预期显著大于连续参考指令地址重置事件(例如,分支)之间的间隔,非常不可能的是在遇到下一个采样操作之前,参考指令地址不被重置,但为了确定(并且避免后续采样操作潜在引用针对其存在程序流的中间非顺序变化的参考地址的风险),参考指令地址可响应于采样操作而无效,在其已经被转移到采样操作的样本记录之后。
应当注意,虽然性能分析电路能够指示程序顺序中的比存储在给定指令的样本记录中的参考指令地址指示符中的给定指令更早或更晚的指令的地址,但在一些情况下,参考指令地址指示符可能最终指示给定指令本身的地址。例如,在参考指令地址指示符被设置为指示采取/不采取分支指令的分支目标地址的示例中,则如果采样电路选择在采取分支的分支目标地址处的指令或顺序地在不采取分支之后的指令作为采样操作,则参考指令地址指示符将指示给定指令本身的地址。因此,虽然性能分析电路能够对参考指令地址指示符进行编码以使得其指示程序顺序中的比给定指令更早或更晚的指令的地址,但这并不排除有时性能分析电路可使用参考指令地址指示符来指示给定指令本身的地址。
在一些具体实施中,性能分析电路可以能够在针对任何类型的采样操作捕获的样本记录中包括参考指令地址指示符,而不管对应于采样操作的指令的类型如何。
然而,实际上,为了避免上文所讨论的类型的统计偏差,可能期望用于参考地址跟踪的参考点选自与针对其的样本记录将提供参考指令地址指示符的操作类型群体相同的操作类型群体。因此,如果允许任何操作类型提供包括参考指令地址指示符的样本记录,则当较大数量的样本将能够朝向热点性能分析进行计数时,实际上为了确保统计学上未偏差的结果,可能需要使参考指令地址指示符用作任何操作类型的最新/下一处理指令的位置的参考,这限制可由单个样本中的参考指令地址指示符指示的较早/较晚指令的范围。
因此,为了增加可被指示为在实现未偏差性能分析结果时由一个样本记录中的参考指令地址指示符执行的指令范围,可能优选的是将参考指令地址指示符限制为仅包括在指令类型的特定子集的样本记录中,使得参考指令地址指示符可在程序顺序中从给定指令进一步提前/向后查看而不会使性能分析结果偏斜。
在一个示例中,参考指令地址指示符可包括在从对应于给定指令的样本操作捕获的样本记录中,至少当给定指令是采取或不采取分支指令时。一些示例可仅包括采取分支指令的参考指令地址指示符,而非不采取分支指令的参考指令地址指示符。其他示例可支持在采取和不采取分支指令的样本记录中跟踪参考指令地址指示符(并且在这种情况下,可能期望使采样或未采样的不采取分支操作的处理重置参考指令地址的跟踪,如上文所讨论)。哪些类型的指令使参考指令地址指示符指示指令是否被选择为采样操作可在硬件中固定,或者可以是可变的,使得用户可配置(例如,通过设置配置寄存器中的配置信息)哪些类型的指令应使其样本记录包括参考指令地址指示符。
此类配置信息还可控制参考指令地址指示符是否应当根本包括在任何样本记录中(对于任何类型的操作)。因此,不必要使性能分析电路始终操作以使得参考指令地址指示符包括在样本记录中。当性能分析配置信息指定禁用参考指令地址指示符的捕获时,性能分析电路可省略参考指令地址指示符。当性能分析配置信息指定启用参考指令地址指示符的捕获时,可包括参考指令地址指示符(但也可出于其他原因省略,例如因为参考指令地址无效事件已经如上所述发生)。因此,用户可选择参考指令地址指示符是否感兴趣以折衷对诊断存储/带宽的节约执行热点性能分析的能力。
在一些示例中,样本记录可具有分组化格式,其中样本记录可包括一个或多个分组。一个样本记录中的分组的数量可以是固定的,或者取决于具体实施可以是可变的。通过提供分组化格式,这给出了不同微架构设计者根据需要选择不同格式的灵活性,同时仍然符合分组的特定架构定义,使得软件可以一致方式解释分组,而不管用于特定具体实施的样本记录的特定格式如何。可定义不同类型的分组以指示可记录在样本记录内的不同类型的信息。这些类型的分组中的一者可以是指定与采样操作相关联的地址的地址分组。地址分组可具有分组标头,其识别分组是地址分组(与未提供地址的其他类型的分组进行区分),但其也可指定何种类型的地址与采样操作相关联。这可以不同的方式完成,例如具有将该分组识别为地址分组的第一标头部分和用作地址类型指示符的第二部分,或通过具有单个组合标头值,其识别分组是地址分组并且还用作地址类型指示符(在该示例中,对应于不同地址类型指示符的分组标头的多个不同值可全部被视为地址分组的标头)。
地址分组的地址类型指示符可具有多个有效编码,包括指示对应地址分组指定参考指令地址指示符的参考指令地址编码,以及指示地址分组指定除参考指令地址指示符之外的地址的至少一个其他编码。通过分配用于识别地址分组指定参考指令地址的地址类型指示符的专用编码,这使得诊断分析工具能够从各种采样记录提取参考指令地址并且使用这些以进行性能分析。
如上所述,可使由性能分析电路捕获的样本记录可用于诊断分析。在一个示例中,可通过使用样本记录写入电路将样本记录写入存储器来使样本记录可用。样本记录写入电路可以能够将性能分析电路捕获的样本记录写入存储器,同时处理电路继续不间断的处理。因此,与先前讨论的基于中断的方法不同,样本记录最初可捕获在性能分析电路的硬件存储元件中,并且然后将其写出到存储器,该存储器通常由在处理电路上执行的加载/存储指令访问,而不需要由处理电路在软件中执行特定存储指令以致使样本记录被保存到存储器。这极大地减少了性能分析对在处理电路上执行的代码的性能的影响,并且避免了导致所收集的性能分析信息中的伪影的性能监测目标的中断。例如,缓冲器结构可被维持在足以存储特定数量的样本记录的特定大小的存储器中,并且一旦存储器中的缓冲器处于溢出风险,就需要触发中断,而不是每次生成样本记录时生成。
过滤电路可被设置为基于采样操作是否满足至少一个过滤标准来确定样本记录写入电路是否应将由性能分析电路针对采样操作捕获的样本记录写入存储器。过滤标准可基于采样操作的类型,或者基于样本记录本身内的信息。例如,如果软件开发者对例如误预测的探测原因感兴趣,则过滤标准可指定仅误预测分支的样本记录应被写入存储器,但不必将针对正确预测分支捕获的样本记录写入存储器。另选地,过滤标准可基于针对负载操作是否存在特定水平的高速缓存中的缺失,或者采样操作的指令地址是否处于给定地址范围内等。过滤电路可支持过滤标准的宽范围。
过滤标准的一个选项可以是对应于给定样本记录的采样操作是采取分支操作的标准。这对于热点性能分析可能很有用。通过仅记录表示非顺序程序流的点的采取分支的样本记录,这允许安全使用参考指令地址指示符来参考最近采取分支的分支目标地址或下一个采取分支的指令地址(而不会使热点性能分析结果偏斜),使得较早/较晚指令的最大可能范围可被指示为在每个样本中执行,从而实现给定数量的样本记录的热点性能分析的最大可能量。然而,除了热点性能分析之外,仅跟踪所采取分支可能不允许对相同样本记录集合执行其他形式的性能分析。
在另一个示例中,过滤电路可以是可配置的,以指定对应于给定样本记录的采样操作是采取分支操作或不采取分支操作的标准作为至少一个过滤标准中的一者。通过提供确保用于采取和不采取分支操作的样本记录被保存到存储器或以其他方式可用于诊断分析的能力,同时排除与不是采取分支或不采取分支的操作相关的其他样本记录,这可允许使用包括在采取/不采取分支的样本记录中的参考指令地址指示符来执行热点性能分析,同时还支持基于相同执行运行的其他类型的性能分析(例如,分析由误预测分支导致的不良性能,如果采取和不采取分支两者都包括在用于诊断分析的输出中,则该分析可能是更可靠的)。因此,针对执行程序的单个实例捕获的样本记录的集合可用于两个目的(而不是需要执行两个单独执行运行,一者跟踪采取分支以进行热点性能分析并且另一者跟踪误预测分支)。当过滤器被配置为输出采集和不采取分支两者的样本时,则如果参考指令地址指示符被包括在采取分支事件和未采取分支事件两者中,则期望参考指令地址跟踪相对于采取或不采取分支以出于上述原因来避免热点性能分析的系统偏斜。
采样电路对操作进行的采样可以不同方式控制。例如,采样电路可在处理管线的提取阶段或解码阶段或在稍后管线阶段选择指令。然而,通过在管线的相对早期阶段选择采样操作(如提取或解码),可以通过在后续阶段中的操作的处理的使用寿命来跟踪与那些采样操作相关联的事件。
采样电路可响应于由间隔计数器计数的采样间隔的过去而选择下一个采样操作。间隔计数器可计算不同形式的操作以确定何时接下来选择采样操作。例如,间隔可基于从高速缓存或存储器提取的指令的数量、由指令解码器解码的指令的数量、或由解码器生成以执行的微操作的数量来计数。
采样电路可支持采样间隔的随机扰动,使得如果采样间隔的随机扰动被启用,则性能分析电路可通过随机或伪随机值来调整采样间隔以设置在给定时段中由间隔计数器计数的采样间隔。例如,采样间隔可由用户配置(通过在寄存器中设置控制数据)以指定在两个连续采样操作之间要计数的指令或微操作的标称数量,但该标称值可通过随机/伪随机值调整以使一个计数周期中的确切间隔与下一者相比改变。这减小了以下的风险:采样电路可在通过循环的多次迭代中重复地选择程序循环内的相同操作,这可能有使性能分析结果偏斜的风险。
参考指令地址指示符可以多种方式表示。通常,参考指令地址指示符可以是使得能够识别参考指令的地址的任何值。在一个示例中,参考指令地址指示符可以是参考指令的地址的绝对值。另一个示例可以是参考指令地址指示符指定给定指令和参考指令中的一者的地址相对于另一者的地址的相对偏移。这种方法可帮助压缩样本记录中所需的数据量,因为通常可使用比参考指令的地址的绝对值更少的位来表达相对偏移。在另一个示例中,参考指令地址指示符可指示程序顺序中的给定指令与参考指令之间的指令的数量。
图1示意性地示出了包括用于执行数据处理的处理电路4的数据处理装置2的示例。处理电路4包括具有多个管线阶段的处理管线,在该示例中,包括数据6的提取、解码阶段8、发布阶段10、执行阶段12和写回阶段14。应当理解,这仅是可能管线配置的一个示例,并且其他示例可具有不同数量的阶段并且可包括另外类型的管线阶段。
提取阶段6从1级指令高速缓存16提取指令以用于由管线执行。分支预测器18提供了分支指令的结果的预测,其可由提取阶段6使用以决定要超出分支提取哪些指令。由提取阶段6提取的指令由解码阶段8进行解码以生成用于控制稍后管线阶段以执行由指令表示的操作的控制信号。解码阶段8可将指令映射到微操作,该微操作表示要以执行阶段12可执行微操作的粒度执行的操作。
在一些管线具体实施中,始终存在从存储器提取的指令和微操作之间的一对一映射,如在稍后阶段看到的,因此微操作可简单地看作等于或表示最初提取的指令本身(尽管仍然可以使微操作根据对应指令以不同形式表示—例如,可通过附加信息标记微操作,诸如下文描述的“采样操作”标签)。此类管线具体实施可被视为直接执行指令(无需将指令解码为微操作,因为没有映射的变化)或可被视为执行通过一对一映射根据指令解码的微操作。两个视图都可看作相同管线的等效描述。
在其他示例中,对于至少一些指令,管线可支持指令到微操作的一对多映射或多对一映射。一些指令仍可对应于单个微操作。其他指令可通过解码阶段8分成多个微操作。解码阶段8还可支持从高速缓存16提取的两个或更多个程序指令的融合以形成由执行阶段12支持的单个组合微操作。因此,由执行阶段12看到的微操作可不同于在由数据处理装置2支持的指令集架构中定义的指令的架构定义。
在以下描述中,术语“微操作”是指如在执行阶段所见的指令的形式。这可仅是一些管线的原始指令本身,或者可以是指令的修改形式或通过将一个指令分成多个微操作或将多个指令融合成组合微操作而获得的微操作。
发布阶段10使由解码器8生成的微操作排队并同时等待操作数变成可用,并且当其操作数可用时(或者当已知在微操作达到需要操作数的执行阶段的相关周期的时间,操作数将变得可用时)发布用于执行的微操作。执行阶段12包括用于执行不同类型的微操作的多个执行单元22-28。处理操作由执行单元22-28基于从寄存器20读取的操作数执行。例如,执行阶段12的执行单元可包括用于执行算术或逻辑操作的算术/逻辑单元(ALU)22、用于执行涉及表示为浮点值的数字的操作的浮点单元24、用于确定分支指令应当被采取还是不采取并且用于调整程序流以在采取分支时执行程序流的非顺序变化的分支单元26,以及用于处理负载操作(用于将数据从存储器系统加载到寄存器20)和存储操作(用于将数据从寄存器20存储到存储器系统)的加载/存储单元28。应当理解,图1的示例中的执行阶段12中示出的执行单元22-28的特定集合仅是一种可能布置,并且其他示例可具有不同类型的执行单元或者可具有相同类型的多个执行单元(例如,多个ALU 22)。写回阶段14将所执行的指令的结果写回到寄存器20。
处理管线4可以是按顺序的处理管线,其被限制为以对应于程序顺序的顺序执行微操作,其中指令由编程器或编译器限定并且其中指令由提取阶段6提取。另选地,处理管线4可支持不按顺序的处理,其中允许发布阶段10发布用于以可能与程序顺序不同的顺序执行的微操作。例如,虽然一个微操作停滞并等待其操作数变得可用,但可在停滞指令之前执行与程序顺序中的较晚指令相关联的稍后微操作。如果管线支持不按顺序的处理,则可提供附加管线阶段,诸如重命名阶段,以将由解码程序指令指定的架构寄存器说明符重映射到识别寄存器组20中的特定硬件寄存器的物理寄存器说明符。
在此示例中,存储器系统包括1级指令高速缓存16、1级数据高速缓存30、可用于数据和指令的共享2级高速缓存32以及主存储器34,其可包括多个存储器存储单元、外围设备和可经由管线4所执行的加载/存储指令访问的其他设备。应当理解,图1所示的特定高速缓存层级仅是一个示例,并且其他示例可具有不同数量的高速缓存级别,或者可提供指令高速缓存相对于数据高速缓存的不同布置(例如,2级高速缓存32可被分成单独的2级指令和数据高速缓存)。提供了存储器管理单元36,其用于控制虚拟地址(基于由处理管线4处理的指令的操作数生成)到识别要在存储器系统中访问的位置的物理地址之间的地址转换。MMU36可包括至少一个转换后备缓冲器(TLB)38,其用于高速缓存限定地址转换映射的取决于从存储器系统34获得的页表数据的信息,并且还可提供控制地址空间的某些区域对于在管线4上执行的特定过程是否可访问的访问权限。虽然为了简洁起见,MMU 36在图1中被示为连接到加载/存储单元28以用于数据访问,但MMU36还可用于在提取用于执行的指令时转换地址并且检查由提取单元6发出的指令提取地址的访问权限。
图1仅可能的处理器架构的是一个示例,并且其他示例可具有图1中未明确指示的其他部件。
为了辅助软件开发,处理器2被提供有硬件资源,该硬件资源允许收集关于由处理管线4处理的指令的行为的性能分析信息,软件开发者可使用该性能分析信息来执行代码优化,目的是修改其代码以更有效地运行。提供采样电路50以选择某些指令或微操作作为要由性能分析电路52进行性能分析的采样操作。采样电路50可在管线的不同阶段选择采样操作。例如,采样电路50可选择某些提取指令作为采样操作,并且在提取阶段6标记那些提取指令以将那些指令标记为指示当指令沿管线4向下进展时,性能分析电路52应收集关于采样操作的行为的信息。另选地,采样电路对采样操作的指令的标记可在解码阶段8或稍后阶段进行。也能够以单独微操作的粒度选择采样操作,而不是以从存储器提取的架构程序指令的粒度选择采样操作。
采样电路具有用于计数指令或微操作以确定应何时选择下一个采样操作的间隔计数器54。图2示出了示出采样电路50对操作的采样的流程图。在步骤60处,采样电路50选择特定采样间隔,该特定采样间隔表示在选择的两个连续采样操作之间要计数的指令或微操作的数量。采样间隔可由控制寄存器中的用户可配置参数定义或者可固定到特定间隔。任选地,采样电路50可支持随机扰动函数,其中由用户选择的设定采样间隔可由随机数生成器或伪随机数发生器56所生成的随机或伪随机值扰动。虽然图1示出了在采样电路50内的伪随机数生成器56,但在其他示例中,采样电路可重复使用由处理系统中的其他地方设置的(伪)随机数生成器生成的(伪)随机数,其也用于除指令或微操作采样之外的其他目的。例如,(伪)随机数生成器56可生成特定范围内的随机值,该随机值由用户添加到指定为标称采样间隔的采样间隔(或从其减去)以生成由间隔计数器54针对下一个操作周期计数的采样间隔。启用随机扰动可能是有用的,因为其减小了以下风险:当处理指令循环时,相同指令或微操作在循环的多次迭代上被选择为采样操作。在一些具体实施中,可是任选的是启用还是禁用随机扰动,其中用户可配置的控制参数是否启用随机扰动。
因此,在步骤60中,选择采样间隔(设置为固定值,或者由可变用户可配置参数直接指定,或随机地或伪随机地从固定/可变间隔值扰动),并且然后在步骤62处,间隔计数器54开始计数由处理电路4处理的操作的数量。计数的操作可以是提取指令、解码指令或解码微操作。一些系统可仅支持这些选项中的一者。其他系统可支持用户设置配置数据的能力,该配置数据选择由间隔计数器54计数哪种类型的操作。在步骤64处,采样电路50确定间隔计数器54是否指示在步骤60处选择的采样间隔已经经过,并且如果不是,则间隔计数器54继续计数操作。计数器是否已经指示采样间隔已经过的确定可以不同方式执行。例如,计数器可被设置为对应于在步骤60处的选定采样间隔的值,并且然后每次看到计数操作中的一者时递减,并且当计数器达到0或溢出超过0时可被认为经过。另选地,计数器可在步骤60处被重置为0并且然后响应于在步骤62处的每个计数操作而递增或递减,并且当在步骤64处,计数器与对应于采样间隔的值之间的比较指示已经计数足够数量的操作以达到采样间隔值时被认为经过。
无论采样间隔的经过如何确定,如果样本间隔已经经过,则在步骤66处,将下一个操作(例如,提取指令、解码指令或解码微操作)标记为样本操作。例如,可设置与指令相关联的标签位,并且当其沿管线4向下进展时,此标签位可伴随被选择为采样操作的指令或微操作。然后,采样电路50返回到步骤60以基于新采样间隔(如果不支持或禁用随机扰动,则其可与先前设定的采样间隔相同,或者如果启用随机扰动,则其可不同于先前设定的采样间隔)再一次重置计数器54。通过循环图2,采样操作继续以周期性间隔进行选择。
仅选择操作子集作为采样操作的优点在于,这极大地减少了跟踪用于性能分析的信息的开销。例如,采样间隔可被设置为足够长的,使得在管线4内的飞行中的仅单个操作一次被选择为采样操作,使得性能分析电路52仅需要被提供有足够硬件资源以一次跟踪单个采样操作的行为。这避免了以下的开销:必须基于与特定采样操作相关联的操作标识符来索引可存储多个操作的信息的存储结构,以基于特定采样操作的信息选择存储结构的哪个条目要更新。
然而,其他具体实施可选择带来较大硬件成本并且可选择支持一次选择多个采样操作。在那些实施方案中,作为采样操作的操作子集的采样仍然具有以下优点:与将尝试跟踪每个指令的具体实施相比极大地减小了所生成的性能分析信息的量,使得能够针对每个采样操作捕获更宽的数据范围并且因此用于执行更有意义的性能分析。
性能分析电路52包括监测电路70,其用于收集关于由采样电路50选择的采样操作的行为的信息。尽管监测电路70被示为性能分析电路52内的单个框,但实际上,监测电路可包括分布在处理器周围以收集来自处理器的不同部件的信息的多个元件。例如,监测电路70可包括事件检测电路以检测采样操作的各种类型的事件的发生。所检测的事件的类型可取决于采样操作的类型。例如,对于被选择为采样操作的分支操作,事件可跟踪分支误预测是否发生或分支预测器18是否正确地预测分支。对于加载/存储操作,事件可包括例如加载/存储操作是否在特定级别的高速缓存30、32中缺失,加载/存储指令的地址转换查找表在TLB 38中或在特定级别的TLB中是否缺失,或者是否为加载/存储指令发生地址故障。可监测的其他类型的事件可以是指令高速缓存16中缺失的指令提取,诸如未定义指令异常的故障,或某些指令是否由于对资源的竞争而延迟。监测电路70还可捕获关于特定指令的信息,诸如采样操作的指令地址、加载/存储操作的目标地址或分支操作的分支目标地址,以及在采样操作到达特定处理阶段的点捕获的来自寄存器20的架构状态项目(例如,识别其中处理采样操作的处理上下文的上下文标识符)。例如,监测电路70还可具有周期计数器,该周期计数器计数使某些操作完成所采取的处理周期的数量,诸如测量地址转换或高速缓存查找表的延迟,或者使操作在第一处理点与第二处理点之间进展的周期的数量。因此,应当理解,监测电路70可收集各种信息。
所捕获的监测信息可记录在样本记录中,该样本记录存储在性能分析电路52的样本记录存储电路72(例如,寄存器或缓冲器)中。可使用如下所述的分组化格式来生成样本记录。在针对给定采样操作捕获的样本记录内,记录可指定与采样操作相关联的操作类型(例如,其是否为分支、加载/存储操作或ALU操作等),并且还提供了直接归因于采样操作的各种信息。样本记录存储装置72中的样本记录的捕获在管线4上执行处理的背景中以硬件执行,因此不需要执行任何特定软件指令以收集样本记录内的信息。
提供过滤电路74以允许性能分析电路52选择针对特定采样操作捕获的样本记录是否可访问以用于诊断分析。在图1所示的实施方案中,可通过将样本记录写入存储在存储器系统34中的性能分析缓冲器结构76来使样本记录可访问以用于诊断分析。被分配以用作性能分析缓冲器76的地址范围可基于存储在性能分析电路52的配置寄存器78中的缓冲器地址识别信息来确定,该缓冲器地址识别信息可由用户在软件控制下设置。配置寄存器78还可包括配置信息,该配置信息指定何种类型的信息应包括在特定类型的采样操作的样本记录内,并且用于设置过滤电路74所使用的过滤标准以确定样本记录写入电路79是否应将所捕获的样本记录从样本记录存储装置72写入性能分析缓冲器76。可执行将样本记录写入存储器中的性能分析缓冲器76而无需中断管线4上的处理,使得不需要特定软件指令来致使样本记录存储到存储器系统。因此,可在没有发生任何中断的情况下输出特定数量的样本记录,直到已经生成和写出了足够数量的样本记录,该性能分析缓冲器有溢出这些样本记录的风险,并且在该点处,可触发性能监测中断以致使处理被中断并且使得异常处理器然后可采取行动以便确保先前存储到所述性能分析缓冲器76的样本记录可保持访问以确保先前存储到性能分析缓冲器76的样本记录可保持访问以用于诊断分析(例如,通过更新配置寄存器78中的样本记录以允许后续样本记录被存储到性能分析缓冲器并存储在地址空间的不同区域中,或者通过从性能分析缓冲器读出样本记录并且将其存储在别处或输出它们以用于外部分析)。尽管图1示出了通过将样本记录写入到存储器而使样本记录可访问以用于诊断分析的示例,但另选方案将是将它们输出到追踪缓冲器73(该追踪缓冲器是与存储器系统34分离以用于在芯片上存储诊断信息的专用硬件结构)和/或通过追踪输出端口75(直接或经由追踪缓冲器73)上输出所捕获的样本记录,其中追踪输出端口是集成电路引脚集合,样本记录可经由该集成电路引脚集合输出到外部片外追踪分析仪或存储设备。一些系统可支持此追踪输出功能来代替将样本记录写入存储器的能力,而其他系统可支持两种方法并且可使用寄存器78中的配置信息以选择要使用何种方法。
图3是示出由性能分析电路52进行的性能分析的流程图。在步骤80处,性能分析电路52确定是否正在处理采样操作。如果没有,则不需要监测。最终,一旦已经识别出由采样电路50选择的采样操作,则在步骤82处,监测电路70捕获指定采样操作的操作类型的样本记录和直接归因于采样操作的关于采样操作行为的信息。例如,样本记录还可包括不直接归因于采样操作的其他信息,诸如寄存器状态的快照(例如,可捕获用于确定条件指令的结果的条件代码标志的当前值,而不管这些条件代码标志值由采样操作直接引起)。所捕获的样本记录存储在样本记录存储装置72中。应当理解,步骤82可包括在处理系统的各个点处捕获监测信息的各个片段的多个单独实例,该片段可能不同时准备好。样本记录存储装置72中的样本记录可逐渐由在管线的不同点处收集的多个信息片段组成。另选地,监测电路70可包括一些临时寄存器,该临时寄存器在检测事件和信息片段时跟踪事件和信息片段,然后该事件和信息片段可用于以准备输出的已知样本记录格式构成样本记录。
在步骤84处,过滤电路确定采样操作是否满足配置寄存器78中指定的至少一个过滤标准。此过滤标准可基于采样操作的操作类型(例如,用户可能已经配置过滤器以收集仅关于分支操作的信息而不是不关于其他类型的操作的信息,如果选择它们作为采样操作)。另外,过滤标准可取决于由监测电路70捕获的一些监测信息和/或添加到样本记录的信息。例如,过滤标准可指定仅应允许与误预测分支相关联的记录通过过滤器,或者应跟踪在一级数据高速缓存30中缺失的加载/存储指令的样本记录。特定过滤标准集取决于寄存器78中的用户控制的配置数据并且可包括若干另选标准,该若干另选标准在或操作中组合以使得可允许满足多个标准中的任一者或多者的样本记录行进超过该过滤器,或者在与操作中进行组合以使得满足两个或更多个标准中的每一者的样本记录通过该过滤器,但仅通过这些标准中的一者的样本记录被拒绝。
如果采样操作不满足至少一个过滤标准,则在步骤86处,性能分析电路52允许所捕获的样本记录被丢弃或覆写而不使样本记录可用于诊断分析。因此,不需要将此样本记录写入存储器系统或将其输出到追踪缓冲器73或追踪输出端口75。在下一次处理采样操作时,则可覆写任何先前捕获的信息。
如果采样操作确实满足至少一个过滤标准,则在步骤88处,确定启用哪个选项以使样本记录可访问以用于诊断分析。如果系统具有样本记录写入电路79并且将样本记录写入存储器被启用时,则在步骤90处,性能分析电路52确定性能分析缓冲器76的当前占用是否超过设定阈值,并且如果这样,则在步骤92处触发性能监测中断以中断管线4上的处理并且调用异常处理器(在软件中)的执行,该异常处理器然后可采取行动以避免性能分析缓冲器溢出,使得样本记录捕获可继续。例如,异常处理器可更新性能分析缓冲器地址参数以指示不同地址范围,将附加容量分配给性能分析缓冲器76,或者将信息从性能分析缓冲器76转移到不同存储位置以允许继续使用相同的性能分析缓冲器位置。可设置在步骤90处使用的阈值以匹配性能分析缓冲器的容量,或者可将其设置为低于最大容量的水平,使得可在发生溢出之前触发性能监测中断。如果在步骤90处尚未达到阈值,则在步骤94处,可将样本记录存储装置72中捕获的样本记录写出到存储器中的性能分析缓冲器76,并且可更新跟踪当前缓冲器占用的参数以反映已更新的缓冲器占用。在步骤94处的写入由样本记录写入电路79触发,同时处理在管线4上不间断地继续。
另一方面,如果在步骤88处启用和支持追踪输出方法,则在步骤96处,通过将样本记录输出到追踪缓冲器73和/或通过追踪输出端口75将样本记录输出到外部设备来使得在样本记录存储装置72中捕获的样本记录可用于诊断分析(同时处理不间断继续)。一些系统可支持存储器写入和追踪输出选项两者并且其他系统可支持这些选项中的仅一者。
图4示出了针对给定采样操作捕获的样本记录100的分组化格式的示例。样本记录100可包括多个分组102,其中每个分组选自可使用的可用分组类型的集合。每个分组可至少包括识别分组的类型的标头部分104,并且任选地还可包括其他信息(例如,甚至在单个类型的分组内可存在许多可通过分组标头区分的变体,或关于采样操作本身的有限量的信息可在标头中指示)。标头还可指定提供与该分组相关联的监测数据的相关联有效负载106的大小。一些类型的分组可能不具有有效负载106并且可仅包括标头104。例如,分组类型可包括以下:
·标头分组:提供样本记录100的标头信息作为整体。例如,标头分组可指定识别捕获样本记录的源的性能分析源标识符。例如,在多处理器系统中可能存在各自具有性能分析电路52的多个处理器
核心,并且源ID可区分处理器核心的哪个实例处理针对其捕获样本记录的操作。
·时间戳分组:提供识别采样操作被处理的时间的系统定时器值。
·上下文分组:提供识别处理采样操作的处理上下文的一个或多个上下文标识符。例如,上下文标识符可包括区分与不同虚拟地址空间相关联的过程的地址空间标识符和/或识别其中处理采样操作的虚拟机的虚拟机标识符。
·事件分组:提供针对采样操作进行的一个或多个事件的总结。例如,事件分组可提供包括多个位的事件掩码,其中每个位指示是否发生对应类型的事件。事件分组的标头部分104可区分用于指示不同事件类型集的多个另选类型的事件掩码。这避免了对其中没有发生事件的事件类型集的事件掩码进行编码的需要。
·计数器分组:提供指示与针对采样操作所采取的特定动作相关联的延迟的至少一个计数器值。例如,延迟可与存储器访问操作或地址转换相关联。延迟还可指示采样操作到达管线的给定点与到达管线中的给定稍后点之间的周期的数量。
·操作类型:指示所采样的操作的类型的分组。例如,操作类型可区分加载/存储操作、分支操作或ALU操作。
·地址分组:指示与采样操作相关联的地址。
·结束标记分组:指示当前样本记录100的结束,使得任何后续包将被解释为下一个样本记录的一部分。结束标记分组102的使用可用于支持具有可变大小的样本记录格式,使得可包括可变数量的包,这取决于要记录多少感兴趣的信息。然而,其他方法可具有某个已知大小的样本记录的固定格式(或者可固定给定类型的采样操作的样本记录的大小,其可与其他类型的采样操作的固定大小不同)。如果使用固定大小的记录格式,则可能不需要结束标记102。
·填补分组:如果使用固定大小的格式,用于填充固定大小的样本记录的剩余部分。填补分组无有效负载。
用于标头部分104以识别表示哪种类型的分组的特定编码是任意的并且可根据特定系统的需要来选择。一些分组类型可支持可具有可变大小的标头,使得可提供前缀标头以提供除正常标头之外的额外信息,其中包括前缀是可选的,使得相同标头可与前缀一起包括以及不于前缀一起包括。在一些情况下,标头可指定有效负载106的大小,使得可变大小有效负载是可能的。给定类型的采样操作的样本记录中包括的分组的数量可变化,例如,一些记录可能与其他记录相比要求包括更大数量的事件、计数器或地址。
图5示出了用于负载指令(被选择为任意示例)的样本记录100的示例。具有带下划线文字的部分表示分组标头104,并且具有不带下划线文字的以下部分表示分组有效负载106。应当理解,样本记录的特定内容取决于当采样操作被这样处理时发生的情况,因此可显著变化。在图5的特定示例中,样本记录包括提供源ID的标头分组、提供系统定时器值的时间戳分组、两个地址分组(第一地址分组提供识别负载指令本身的指令地址的程序计数器地址,并且第二地址分组识别表示将根据其执行负载的目标地址的数据地址),以及分别指定地址空间标识符(CONTEXTIDR_EL1)和虚拟机标识符(CONTEXTIDR_EL2)的两个上下文分组、操作类型分组,该操作类型分组在该示例中包括指示与负载操作相关联的数据访问的大小的前缀标头,其中主操作类型标头指示采样操作是负载(而不是分支或ALU操作)。样本记录还包括两个计数器分组,其提供延迟计数值,在该示例中指示发出采样操作与生成负载操作的地址之间的延迟的第一计数值,以及指示生成地址与从存储器系统返回的负载的数据之间的延迟的第二计数值。样本记录还包括事件分组,该事件分组提供指示针对负载发生的一个或多个事件的掩码(诸如高速缓命中/错过、在TLB 38中的地址转换命中/错过等)。最后,样本记录包括结束标记分组。因此,样本记录100提供关于采样操作的结果、操作处理所花费的时间的详细信息,以及关于操作何时被处理并且在哪些上下文中被处理的其他信息,其可对于软件开发者有诊断有关其代码的潜在问题而言全部是有用的。
图6更详细地示出地址分组102的示例。对于地址分组,地址类型标头104具有一定值,其指示分组是地址分组(与分组的其他类型进行区分),但也识别有效负载中表示的地址的特定类型(选自多种不同类型的地址中的一者)。例如,有效负载中的地址可被识别为以下中的一者:识别与采样操作本身相关联的指令的地址的指令虚拟地址、识别数据访问的目标地址的数据访问虚拟地址、识别如果采取分支则分支应将程序引导到的地址的分支目标地址、或者标记参考指令的参考指令地址,针对该参考指令的执行在按程序顺序定位在参考指令和对应于采样操作的给定指令之间的中间指令中的任两者之间顺序地行进(没有采取分支)。
下文相对于图7所示的指令的示例性序列进一步讨论了参考指令地址分组的使用。在图7的示例中,在指令218处进行进一步采取分支之前,采取分支指令200导致处理指令202、204等的块,包括若干不采取分支指令208、216。在此示例中,采取分支指令218表示对指令230-240处的函数代码的函数调用,其中函数代码以返回分支240终止,采取该返回分支以便刚好在先前采取分支218之后返回到指令220。除了采取分支200、218、240之外,在该示例中不采用所有其他分支指令。采取分支指令表示非顺序程序流的点。在任两个采取分支之间,顺序地执行中间指令(意味着在这些指令之间没有采取分支—如在超序处理器中,可以与程序顺序不同的顺序执行中间指令(如果指令210在指令206之前不按顺序执行,这将不被视为程序流的非顺序变化))。
在此示例中,假设采取分支指令218被采样电路50选择为采样操作,并且因此性能分析电路52捕获采取分支218的样本记录。采取分支218的样本记录可包括如上所述的参考指令地址分组以识别参考指令的地址,该参考指令是比采取分支更早或稍后的指令,针对其(不包括与采取分支本身相关联的程序流的任何非顺序变化)的控制流在采样操作218与参考指令之间的中间指令的序列中是顺序的。如在图7中可看出,如果分支218被采样为采样操作,则参考指令可以是在采取分支218之前的指令202-217重的任一者或在采取分支218之后的指令230-240中的任一者(其未遇到超出由分支218本身触发的变化的程序流的任何中间非顺序变化)。然而,指令200或指令220-224不能由参考指令地址分组指示为参考指令,因为已经存在程序流的中间非顺序变化。
参考指令地址分组可用于使得由性能分析电路52捕获的样本记录能够用于辅助程序代码的简档引导优化(PGO)。PGO是由编程器使用以使用性能分析来提高程序运行时性能的技术。PGO认识到程序代码的一些部分比其他部分更频繁地执行,并且因此可能最有效的是将任何开发努力聚焦与优化较频繁执行的代码部分的性能,使其优于较不频繁执行的部分。即使没有样本记录跟踪参考指令地址的能力,由性能分析电路52基于由采样电路50选择的系统性采样指令或微操作捕获的样本记录可用于辅助PGO。例如,在性能分析完成之后,性能分析缓冲器76可包含采样操作的记录,该记录通过由过滤电路设置的过滤器,并且与任何类型的指令相关联的样本记录可指定与采样操作相关联的指令地址(程序计数器或PC)。这可用于生成程序的基本简档,诸如指示执行不同指令的相对频率的热点简档。编程器或编译器可使用简档将它们引导在要聚焦的代码区域上用于性能改进。
然而,关于用于性能分析的操作的系统采样的问题是由处理电路执行的大部分操作未被写入到性能分析缓冲器76的样本记录跟踪。基于每个采样操作的PC地址,从单个样本记录中,仅可能推导出执行一个特定指令,而不是任何早期指令(因为采样操作可能已经为某个未知分支的分支目标)。因此,如果每个样本记录仅提供了执行单个指令的证据,则这意味着为了收集足够信息以使得所收集的样本足以获得代码不同部分的相对执行频率的统计学有效视图,可能需要收集非常大量的样本,考虑到所需数据速率和存储开销,这可能不是实际的。
相比之下,其他类型的诊断监测技术可支持对于每个指令的更有限信息集的捕获。例如,为了比较,考虑追踪解决方案,其中提供存储元件以记录最后16个采取分支的分支记录,其中每个分支记录存储两个地址:采取分支的指令地址和采取分支的分支目标地址。每次遇到采取分支时,则丢弃最旧记录并且将最新采取分支的记录分配给存储元件。以特定数量的指令的间隔(例如,每1,000,000个指令)生成中断以致使最后16个采取分支的记录被采样并且通过追踪端口写出到存储器或输出。如果以每秒1,000,000,000个指令来执行指令,则这将每秒生成约1000个样本(并且因此每秒1000个中断)。平均而言,常见的是,每10个指令中约1个指令可以是采取分支,因此16个采取分支可跨越约150个指令(应当注意,由16个分支表示的指令数量不是160个,因为分支记录的“围栏后”特性—10个指令的15个块各自将由16个采取分支界定)。因此,最后16个采取分支的记录给出约150个指令被执行的证据,该证据可用于开发如上所述的PGO的热点简档。每秒1000个样本意味着简档可基于每秒约150,000个指令。如果每个分支记录为16字节(例如,两个64位地址)的数据,则每个样本将为256个字节,这意味着收集约250KB/s的数据。然而,有关这种简单追踪解决方案的问题是该采样仅捕获采取分支指令的指令地址和分支目标地址并且不提供任何其他诊断信息。
替代地返回到讨论图1的实施方案中描述的基于统计采样的方法,这具有也可记录许多其他类型的信息的优点。然而,这是以生成大得多的样本记录为代价。为了能够将能够每秒计数150,000个指令的追踪方法匹配为有助于热点性能分析,这将要求采样电路50使用每6700个指令中约1个指令的采样速率。假设每个样本记录包括64个字节(例如,使用通过使用上述填补分组来实现的固定大小格式可简化硬件具体实施)并且将64KB缓冲器76分配在存储器中因此可保持1024个样本,这意味着与追踪示例相比,中断速率被极大减少到每秒约145个样本(中断),因为仅需要一旦64KB缓冲器已满就生成中断而不是在每个样本(如在上述追踪解决方案中)。然而,关于统计性能分析解决方案,数据速率极大增加到每秒9MB,几乎比追踪解决方案高约40倍。这种增加的数据速率的原因是对于每个样本收集大得多的信息集,并且虽然基于统计样本的性能分析通常预期为以相对较低的采样速率操作,但为了能够匹配给出合理PGO热点简档所需的样本的数量,将需要增加采样速率。因此,仅基于捕获每个采样操作的PC,可能难以使用基于样本的性能分析技术来辅助PGO。
然而,通过提供在采样操作的样本记录内包括地址分组的形式的能力,该地址分组的形式可对作为参考指令地址提供的地址进行编码,该参考指令地址标志程序顺序中的与中间处理是顺序的采样操作的PC相比更早或更晚的点,这意味着每个样本记录现在可提供不仅执行当前采样操作,而且还执行特定数量的其他指令(而不需要针对那些其他指令包括附加样本记录)的证据。通过增加对于每个样本记录可推导其执行的指令的数量,这减小追踪针对热点简档的特定数量的指令的执行所需的采样操作的数量。这可极大地减小所需的数据速率。
再次,继续先前数字示例,如果这种附加参考指令地址指示符仅包括在针对采取分支收集的样本中并且指示最近采取分支的分支目标地址,并且过滤器24被配置为仅允许采取分支的样本记录被写入到性能分析缓冲器76,则假设采样速率仍然为在每6700个指令中1个指令,过滤器74将丢弃约90%的采样操作(假设10个操作中约1个操作是采取分支),但现在每个样本记录给出包括采样指令的(平均)10个指令被执行的证据。因此,需要少10倍的样本记录以达到针对热点简档计数的约150,000个指令以便与上述追踪解决方案竞争。如果每个样本记录仍为如上所述的64个字节,则该方法将数据速率减小到每秒930KB,与仅使用PC地址的基于样本的性能分析相比小10倍,并且更接近上述追踪解决方案。然而,与追踪解决方案不同,每个样本记录还提供了大得多的关于处理操作的信息范围,例如包括周期计数、甚至编码等。因此,这种方法使得能够使用与用于PGO性能分析的样本记录相同的样本记录集来执行其他类型的性能分析,这将无法通过追踪解决方案来进行。因此,软件开发可能更有效。
过滤器电路74可支持用于选择哪些样本记录可供开发者用于诊断分析的不同选项,并且可支持一个选项,其中过滤器可仅选择采取分支指令的样本记录,以及另一个过滤器设置,其中采取分支和未采取分支两者都使其样本记录通过过滤器。可假设为了以程序顺序中的附近指令的执行频率对于每个样本获得最大量的信息,对于给定采样操作,可能期望的是追踪程序顺序中的最近采取分支或下一个采取分支的位置,因为这可最大化可被推断为执行的中间指令的范围。然而,已经通过实验观察到,如果过滤器允许采取分支和不采取分支输出其样本记录以进行分析,并且采取的分支样本和不采取分支样本均包括参考指令地址指示符,则这可导致基于所捕获的参考指令地址指示符来确定的热点简档的统计偏差。原因如下。
考虑图7的示例,其中为了自变量,假设在采取分支200和采取分支218之间的中间分支208、216具有一致性行为,使得它们始终不被采取(例如,分支208、216可针对在当前执行运行中不发生的罕见错误条件进行测试),并且在序列202-218的中间没有其他分支,使得每次执行这个代码时,在从指令200到负载指令202的分支之后达到代码。由于从未采取分支208和216,则这将意味着指令202到218的全部将已经执行相等次数,因此任何热点简档应指示指令202到218的整个序列的相等执行计数。
如果过滤器74仅使采取分支的样本记录通过,但丢弃未采取分支的样本记录,并且参考指令地址指示符包括在采取分支的样本记录中以指示最近采取分支的分支目标地址,则如图8所示,采取分支指令218的样本记录可指示指令202的地址,该指令是最近采取分支200的分支目标。类似地,如果采取分支240已经被选择为采样操作,则其样本记录将已经指示参考指令地址指示符,其指示在最近采取分支218的分支目标地址处的指令230。当过滤器74仅允许输出采取分支样本记录时,这种方法将是可接受的,因为每次采取分支218被采样时,指令202-218的全部将被推导为执行,所以热点简档将提供相对频率的公平表示,通过该相对频率将框202-218中的一个指令与框202-218中的另一个指令相比较地执行。
然而,如果替代地设置过滤器74以允许采取分支和不采取分支两者的样本记录被输出以用于诊断分析(并且采取样本和不采取样本都记录最近采取分支的分支目标),则这将意味着无论采样操作被选择为分支218还是较早不采取分支216,样本记录将指定表示最近采取分支的分支目标202的相同地址。因此,如果不采取分支216被采样,则热点简档将推导出指令202-216被执行,但如果采取分支218被采样,则热点简档将推导出指令202-217被执行。这意味着虽然指令202-216被推导为已经执行而无论采样选择分支216还是分支218,指令217仅在采取分支218被采样时而不是在不采取分支216被采样时被推导为已经执行。这意味着指令217可在热点简档中以较低执行计数结束,即使在实际上,指令217与指令202-216一样频繁地执行,因为总不采取分支216。因此,对指定参考指令地址指示的采取分支和不采取分支两者进行采样,但使用参考指令地址指示来仅指代较早采取分支会有生成偏差简档的风险。
可通过确保用于生成参考指令地址指示符的操作类型的群体与用作热点简档的基础的操作类型的群体匹配来避免此偏差。这可通过提供性能分析电路52来实现,该性能分析电路支持参考指令地址指示符指示在最近分支之后将程序流引导到的指令作为参考指令的能力(无论是否采取该分支,并且无论最近分支是否为自身采样的)。因此,如图9所示,采取分支218的参考指令地址分组可指示作为程序顺序中的最近不采取分支216之后的下一个指令的ADD指令217作为参考指令。相比之下,如果不采取分支216已被采样,则其样本记录将已经指示在参考指令地址分组中的先前不采取分支210之后的ADD指令210的地址。如果不采取分支208已经被采样,则其样本记录将指示LD指令202的地址(在程序顺序中的最近分支200之后将程序流引导到的指令—因为采取分支200,然后参考指令是采取分支的分支目标地址处的指令,而不是不采取分支的下一个顺序地址处的指令)。这种方法意味着如果紧跟随分支被采样,则任一个指令将仅被推导为执行,这避免多个不同采取分支的某个指令的“双计数”,该双计数可认为地使一些指令的执行计数与其他相比夸大。
图8和图9以及以上示例描述了一种具体实施,其中参考指令地址基于分支目标或先前分支之后的下一个指令来追踪地址。如图10和图11所示,另选方法将是使用监测电路70来追踪在程序顺序中比采样操作更晚的参考指令。
如图10所示,如果不采取分支不用作参考指令,则参考指令地址指示符可指示已采样的采取分支之后的下一个采取分支的地址。例如,如果图7中的采取分支218被采样,则分支218的样本记录可指示参考指令地址分组中的下一个采取分支240的地址。
另选地,为了避免上文所描述的偏差问题,如果采取分支和不采取分支都用作参考指令,则参考指令地址应当指向程序顺序中的在采样操作之后的下一个分支的地址(无论是否采取该分支,并且无论该分支是否为自身采样的),并且因此如图11所示,对于图7的示例,操作218的样本记录可指示下一个不采取分支指令234的地址。
不采取分支是否用作参考指令可取决于性能分析电路52的配置寄存器78中的配置信息,该配置信息可通过在处理管线4上执行的软件和/或通过经由调试/追踪端口75提供调试控制信号的外部调试单元来编程。在一个示例中,过滤电路74的过滤器设置可控制不采取分支是否将用作参考指令—如果过滤器允许输出不采取分支样本记录(包含参考指令地址指示符),则不采取分支可被视为参考指令,但如果过滤器防止输出不采取分支样本记录以进行诊断分析,则不需要将不采取分支视为参考指令。
然而,在另一个示例中,配置寄存器78可包含用于定义何种类型的指令可用作参考指令的控件,连同过滤器74的控件,并且可将其留到软件以根据所执行的分析的类型来创建合理组合。例如,尽管过滤器设置和参考指令定义的不对准组合可创建上面讨论的偏差,但其可能并不是根据此类不匹配组合输出样本记录的问题,前提条件是进行性能分析的分析软件注意何时生成简档以忽略不可靠信息时。例如,软件可能希望完全禁用过滤器74,使得对全操作范围进行采样,因为每个样本包含将被过滤器丢弃的性能分析信息(事件、延迟等)。为了创建非偏差热点简档,软件可注意以便仅拾取采取分支的样本记录中的参考指令地址分组输出,即使输出样本记录还包括用于其他目的的不采取分支的样本记录。因此,软件可能想要独立地控制参考地址标准和过滤标准。为了提供使得软件能够获得非偏差简档的处理装置2的架构,可能足以确保存在支持以使得性能分析电路52能够处理不采取分支作为参考指令(如果这是由软件期望的),但必须总是使用此功能或要求其用于任何特定的过滤器设置集合。
在图7至图11的示例中,仅针对分支指令包括参考指令地址分组并且针对其他类型的采样操作(如果选择的话)不包括参考指令地址分组。如果被选择为采样操作,则其他操作是否也将跟踪参考指令地址为任选的。
图12和图13示出了示出用于在其中参考指令是给定指令本身(如果给定指令紧跟最近采取分支或不采取分支)或是程序顺序中的比给定指令更早的指令的示例中设置样本记录的参考指令地址的方法的流程图。利用这种方法,监测电路70可包括存储元件以存储用于设置针对采样操作捕获的样本记录的参考指令地址指示符的跟踪指令指示符。各种类型的重置事件致使跟踪指令指示符被更新,并且然后当发生后续采样操作时,可基于跟踪指令指示符来设置参考指令地址指示符。
图12示出了跟踪指令指示符的维持。在步骤300处,监测电路70确定采取分支是否已经由执行阶段12处理,并且如果是,则在步骤302处,重置跟踪指令指示符并将其指示为有效的。可以不同方式表示跟踪指令指示符。在一个示例中,跟踪指令指示符可直接识别地址。在这种情况下,在步骤302处,可将跟踪指令指示符设置为在采取分支之后的指令的地址(即,采取分支的分支目标地址)。然而,另一种方法可以是跟踪指令指示符充当计数器以计数自从重置跟踪指令指示符被重置的点以来处理的指令的数量。在此类实施方案中,在步骤302处,可将跟踪指令指示符重置为零。当后续指令被处理时,然后可响应于每个随后处理的指令而使计数器递增。
如果没有遇到采取分支,则在步骤304处,确定是否处理不采取分支并且不采取分支是否用作参考指令(例如,这可能是当(a)过滤电路74所应用的过滤标准指定允许不采取分支的样本记录可用于诊断分析,以及(b)允许不采取分支的样本记录指定参考指令地址指示符时)。如果是,则在步骤302处,重置各种指令指示符并且其是有效的,这是通过设置跟踪指令指示符以指示程序顺序中的紧跟不采取分支的下一个指令的地址,或者通过如上所述将计数器重置为零。这确保了最近分支未是不采取分支的已采样的采取/不采取分支操作将具有其参考指令地址指示符,该参考指令地址指示符指示在最近不采取分支之后的指令,而不是最近采取分支的分支目标地址,以避免上述偏斜问题。
否则,在步骤308处,在禁用性能分析的先前执行时段之后,确定简档是否已经被新启用。有时开发者可能不会感兴趣收集整个程序的样本记录,但可能希望聚焦在特定区段上。因此,性能分析电路52可支持在基于配置寄存器78中的用户配置的信息来设置的特定预配置指令地址处启用或禁用性能分析的能力。当性能分析新得到启用时,则跟踪指令指示符中的任何信息可以是不可靠的并且因此在此点在步骤302处,可重置跟踪指令指示符,例如通过更新跟踪指令指示符以指示表示启用性能分析的点的指令的地址,或将计数器重置为零。
在步骤310处,监测电路可确定是否采取异常并且如果是则可进行到步骤302以重置跟踪指令指示符,例如通过设置指令地址以指示在采取异常的点处的指令的地址,或通过将计数器重置为零。类似地,如果在步骤312处发生异常返回,则可在步骤302处重置跟踪指令指示符,例如通过设置指令地址以指示异常返回地址(异常返回处理的指令的地址)。这防止跟踪指令指示符通过在处理异常处理器期间执行的操作偏斜,该操作不表示被中断正在进行性能分析的程序。
应当理解,并非在步骤300至312处检查的所有类型的事件都可适用于给定具体实施,并且一些具体实施可仅检查这些事件的子集。而且,虽然图12示出了以特定顺序执行的一系列顺序检查,但应当理解,其他具体实施可以不同顺序执行这些检查或者可并行执行多个检查。
在图12的示例中,在步骤302处,重置跟踪指令指示符,但其保持有效。如虚线所示,另选方案可以是如果发生在步骤308、310或312处检测的事件中的一者,则可在步骤306处使跟踪指令指示符无效。如果跟踪指令指示符在处理采样操作时无效,则样本记录可省略参考指令地址指示符或包括参考指令地址指示符无效的指示。
如上所述,在一些具体实施中,采样操作本身的处理还可致使跟踪指令指示符被重置或无效。
图13是示出跟踪指令指示符如何可用于设置样本记录的参考指令地址指示符的流程图。在步骤320处,性能分析电路52检查是否处理采样操作。当检测到采样操作时,则监测电路70收集关于采样操作的行为的信息。在步骤322处,针对由采样操作表示的特定操作类型,确定是否支持并启用参考指令地址指示符的包括。针对所有类型的采样操作,可能不支持参考指令地址指示符的包括。例如,在一些示例中,参考指令地址指示符可仅包括在分支操作的样本记录中,或仅针对采取分支而非不采取分支(取决于具体实施选择)。即使在针对其支持包括参考指令地址指示符的那些操作类型中,配置寄存器78可指定指示启用还是禁用参考指令地址指示符的包括的配置数据。因此,如果选择为样本操作的当前操作不是针对其支持参考指令地址指示符的类型,或者配置数据指示不应包括参考指令地址指示符,则在步骤324处,从样本记录中省略参考指令地址指示符。
如果参考指令地址指示符将被包括在当前采样操作的样本记录中,则在步骤326处,性能分析电路52确定如图12中所述那样维护的跟踪指令指示符是否当前是有效的,并且如果不是,则再次可类似于步骤324省略参考指令地址指示符,或者另选地样本记录可包括参考地址指令指示符无效的显式指示。通过提供对指示无效参考地址或完全省略它的支持,这避免了由包括不适当地址作为参考地址引起的对简档的统计偏差。
另一方面,如果跟踪指令指示符是有效的,则在步骤328处,有效参考指令地址指示符包括在采样操作的样本记录中,其中参考指令地址指示符的值基于跟踪指令指示符来设置。参考指令地址指示符的特定格式可变化。如果跟踪指令指示符指示特定指令的地址,则这可明确地输出为参考指令地址指示符,类似于上述图8至图11中的示例,使得参考指令地址指示符指示参考指令地址的绝对值。另选方案可以是通过指示参考指令地址指示符作为相对于与采样操作本身相关联的指令的指令地址(PC)计算的相对地址来压缩样本记录。跟踪指令指示符中设置的参考地址和与采样操作相关联的当前程序计数器地址之间的差值可被确定并编码为参考指令地址指示符。另一个选项是如果如上所述跟踪指令指示符是计数自从计数器被重置以来已处理的指令的数量的指令计数,则可将参考指令地址指示符设置为等于由跟踪指令指示符表示的指令计数。无论所采取的特定形式如何,参考指令地址指示符提供使得能够确定程序顺序中的较早指令的位置的信息,针对该程序顺序的中间指令的执行是顺序的。
图14示出了在由参考地址指示的参考指令可以是一定指令的实施方案中的用于跟踪参考地址的另选方法,该指令作为程序顺序中的比采样操作更晚的指令。例如,参考指令可以是在采样操作之后的下一个采取或不采取分支或上文所讨论的重置事件(性能分析的启用、采取异常、异常返回)中的一者发生的指令。通过这种方法,不需要维持每次遇到分支时重置的跟踪指令指示符。相反,监测电路70可等待要检测的采样操作并且然后监测用于设置参考地址指示符的下一个相关事件。
因此,在步骤350处,监测电路70检测是否已经识别采样操作,并且如果否,则等待将识别的由采样电路52选择的下一个采样操作。一旦识别出采样操作,则在步骤352处确定是否针对与采样操作相对应的操作类型支持和启用在样本记录中包括参考指令地址指示符(如图13的步骤322处)。如果针对当前采样操作不支持或当前禁用参考指令地址指示符的包括,则方法返回到步骤350以等待稍后采样操作。应当理解,在这种情况下,其他信息仍然可包括在采样操作的样本记录中。
如果针对被检测为采样操作的当前操作类型支持和启用参考指令地址指示符的包括,则在步骤354处,监测电路70监测以下中的任一者的下一次发生:采取分支;不采取分支(如果配置信息78指定不采取分支应当用作参考指令);当性能分析被禁用时,在先前时段之后的性能分析的启用;采取的异常;或异常返回事件(并且在一些具体实施中,另一个采样操作的处理,尽管实际上,在检测到下一个采样操作之前不会发生其他类型的事件是相对不太可能的)。如果发生这些事件中的任何事件,则在步骤356处,确定下一次发生是否是分支,并且如果是,则在步骤358处,将有效参考指令地址指示符包括在采样操作指示信息的样本记录中。例如,所指示的参考指令地址可直接指示分支的指令地址作为绝对值或作为相对于与采样操作相关联的指令的地址的相对值,或者所指示的参考指令地址可指示采取操作与分支之间的指令的数量的计数(如果使用计数器,则当检测到采样操作时,计数器可在步骤350处重置)。
如果来自步骤354所示的列表的发生的事件是除分支之外的事件,则在步骤360处,参考指令地址指示符可包括在样本记录中,其指示与发生的事件相关联的参考指令的参考地址。参考地址可被指示为绝对值、相对值或作为指示采样操作指令以及与在步骤354处检测到的事件相关联的点处的指令之间的指令的数量。参考地址可以是表示启用性能分析或采取异常的点的指令的地址,或者可对应于异常返回地址。另选地,代替指示有效参考指令地址指示符,在步骤360处,可从样本记录中省略参考指令地址指示符或将其指示为无效。
虽然本文已结合附图详细描述了本发明的示例性实施方案,但应当理解,本发明并不限于那些精确的实施方案,并且在不脱离所附权利要求书所限定的本发明的范围的前提下,本领域的技术人员可在其中实现各种变化和修改。

Claims (24)

1.一种装置,包括:
处理电路,所述处理电路响应于从高速缓存或存储器提取的指令或从所述指令解码的微操作而执行数据处理操作;
采样电路,所述采样电路选择指令或微操作的子集作为要进行性能分析的采样操作;以及
性能分析电路,所述性能分析电路响应于由所述采样电路选择为采样操作的指令或微操作的处理而捕获指定所述采样操作的操作类型的样本记录和关于直接归因于所述采样操作的所述采样操作行为的信息;其中:
所述性能分析电路能够在针对对应于给定指令的采样操作捕获的所述样本记录中包括指示参考指令的地址的参考指令地址指示符,所述参考指令在程序顺序中比所述给定指令更早或更晚出现,针对其的控制流在程序顺序中的所述参考指令与所述给定指令之间发生的任何指令之间为顺序的。
2.根据权利要求1所述的装置,其中所述性能分析电路能够设置所述参考指令地址指示符以指示在程序顺序中比所述给定指令更早出现的较早指令的地址,针对其的控制流从所述较早指令到所述给定指令为顺序的。
3.根据权利要求1和2中任一项所述的装置,其中所述性能分析电路能够设置所述参考指令地址指示符以指示在程序顺序中比所述给定指令更晚出现的较晚指令的地址,针对其的控制流从所述给定指令之后的下一个指令到所述较晚指令为顺序的。
4.根据任一前述权利要求所述的装置,其中所述性能分析电路能够设置所述参考指令地址指示符以指示在所述给定指令之前的最近采取分支指令的分支目标地址或在所述给定指令之后的下一个采取分支指令的指令地址。
5.根据任一前述权利要求所述的装置,其中所述性能分析电路能够设置所述参考指令地址指示符以指示以下中的一者的指令地址:
在所述给定指令之前的最近分支指令之后将程序流引导到的指令,而不管所述最近分支指令被采取还是不采取;或者
在所述给定指令之后的下一个分支指令的指令地址,而不管所述下一个分支指令被采取还是不采取。
6.根据任一前述权利要求所述的装置,其中所述性能分析电路能够设置所述参考指令地址指示符以指示除以下中的任一者之外的指令的地址:
在所述给定指令之前的最近采取分支指令的分支目标地址处的指令;以及
在所述给定指令之后的下一个采取分支指令的指令地址。
7.根据任一前述权利要求所述的装置,其中所述性能分析电路被配置为将与所述给定指令之前的最近指令地址重置事件或在所述给定指令之后的下一个指令地址重置事件相关联的地址设置为由将所述给定指令的所述参考指令地址指示符指示的所述地址;以及
所述性能分析电路被配置为检测采取分支操作的处理作为所述参考指令地址重置事件。
8.根据权利要求7所述的装置,其中所述性能分析电路也被配置为检测不采取分支操作的处理作为所述参考指令地址重置事件。
9.根据权利要求8中任一项所述的装置,其中所述性能分析电路被配置为基于能够由软件或由外部设备配置的配置信息来确定所述不采取分支操作的所述处理是否应被检测为所述指令地址重置事件。
10.根据权利要求7至9中任一项所述的装置,其中所述性能分析电路还被配置为检测以下中的一者或多者作为所述参考指令地址重置事件:
在性能分析被先前禁用之后由所述性能分析电路进行的性能分析的启用;
采取异常;
从异常返回;以及
由所述采样电路选择的采样操作的处理。
11.根据权利要求7至10中任一项所述的装置,其中当参考指令地址无效事件在所述最近指令地址重置事件与所述给定指令之间发生或在所述给定指令与所述下一个指令地址重置事件之间发生时,所述性能分析电路被配置为从所述样本记录中省略所述参考指令地址指示符或在所述样本记录中指示所述参考指令地址指示符无效。
12.根据权利要求11所述的装置,其中所述参考指令地址无效事件包括以下中的一者:
由所述采样电路选择的采样操作的处理;
在性能分析被先前禁用之后由所述性能分析电路进行的性能分析的启用;
采取异常;以及
从异常返回。
13.根据任一前述权利要求所述的装置,其中至少当所述给定指令是采取或不采取分支指令时,所述性能分析电路能够在针对与所述给定指令相对应的所述采样操作捕获的所述样本记录中包括所述参考指令地址指示符。
14.根据任一前述权利要求所述的装置,其中所述性能分析电路被配置为当性能分析配置信息指定所述参考指令地址指示符的捕获被禁用时从所述样本记录中省略所述参考指令地址指示符。
15.根据前述权利要求中任一项所述的装置,其中所述样本记录包括一个或多个分组;
所述性能分析电路被配置为在用于指定与所述采样操作相关联的地址的地址分组中包括所述参考指令地址指示符,所述地址分组包括指定用于识别与所述采样操作相关联的地址类型的地址类型指示符的分组标头;
所述地址类型指示符具有多个有效编码,包括:
指示所述地址分组指定所述参考指令地址指示符的参考指令地址编码;以及
指示所述地址分组指定除所述参考指令地址指示符之外的地址的至少一个其他编码。
16.根据前述权利要求中任一项所述的装置,包括将由所述性能分析电路捕获的所述样本记录写入存储器的样本记录写入电路。
17.根据权利要求16所述的装置,其中所述样本记录写入电路被配置为将所述性能分析电路捕获的所述样本记录写入存储器,同时所述处理电路继续不间断的处理。
18.根据权利要求16和17中任一项所述的装置,包括过滤电路,所述过滤电路基于所述采样操作是否满足至少一个过滤标准来确定所述样本记录写入电路是否应将由所述性能分析电路针对所述采样操作捕获的所述样本记录写入存储器。
19.根据权利要求8、11和18中任一项所述的装置,其中所述过滤电路是可配置的,以指定对应于所述给定样本记录的所述采样操作是采取分支操作的标准作为所述至少一个过滤标准中的一者。
20.根据权利要求8、11、18和19中任一项所述的装置,其中所述过滤电路是可配置的,以指定对应于所述给定样本记录的所述采样操作是采取分支操作或不采取分支操作的标准作为所述至少一个过滤标准中的一者。
21.根据任一前述权利要求所述的装置,其中所述采样电路被配置为响应于由间隔计数器计数的采样间隔的经过而选择下一个采样操作。
22.根据权利要求21所述的装置,其中当启用所述采样间隔的随机扰动时,所述性能分析电路被配置为将随机或伪随机扰动应用于由所述间隔计数器计数的所述采样间隔。
23.根据任一前述权利要求所述的装置,其中所述参考指令地址指示符指定以下中的一者:
所述参考指令的所述地址的绝对值;
所述给定指令和所述参考指令中的一者的地址相对于所述给定指令和所述参考指令中的另一个的所述地址的相对偏移;以及
所述给定指令和所述参考指令之间的指令的数量。
24.一种方法,包括:
响应于从高速缓存或存储器提取的指令或从所述指令解码的微操作而执行数据处理操作;
选择指令或微操作的子集作为要进行性能分析的采样操作;以及
响应于由所述采样电路选择为采样操作的指令或微操作的处理而捕获指定所述采样操作的操作类型的样本记录和关于直接归因于所述采样操作的所述采样操作行为的信息;其中:
所述性能分析电路能够在针对对应于给定指令的采样操作捕获的所述样本记录中包括指示参考指令的地址的参考指令地址指示符,所述参考指令在程序顺序中比所述给定指令更早或更晚出现,针对其的控制流在程序顺序中的所述参考指令与所述给定指令之间发生的任何指令之间为顺序的。
CN202180037044.XA 2020-05-22 2021-05-20 由处理电路处理的采样操作的性能分析 Pending CN115698957A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2007666.7 2020-05-22
GB2007666.7A GB2595303B (en) 2020-05-22 2020-05-22 Profiling of sampled operations processed by processing circuitry
PCT/GB2021/051214 WO2021234387A1 (en) 2020-05-22 2021-05-20 Profiling of sampled operations processed by processing circuitry

Publications (1)

Publication Number Publication Date
CN115698957A true CN115698957A (zh) 2023-02-03

Family

ID=71406359

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180037044.XA Pending CN115698957A (zh) 2020-05-22 2021-05-20 由处理电路处理的采样操作的性能分析

Country Status (8)

Country Link
US (1) US20230088780A1 (zh)
EP (1) EP4154118A1 (zh)
JP (1) JP2023526554A (zh)
KR (1) KR20230013124A (zh)
CN (1) CN115698957A (zh)
GB (1) GB2595303B (zh)
IL (1) IL297785A (zh)
WO (1) WO2021234387A1 (zh)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5151981A (en) * 1990-07-13 1992-09-29 International Business Machines Corporation Instruction sampling instrumentation
US6163840A (en) * 1997-11-26 2000-12-19 Compaq Computer Corporation Method and apparatus for sampling multiple potentially concurrent instructions in a processor pipeline
US9747108B2 (en) * 2015-03-27 2017-08-29 Intel Corporation User-level fork and join processors, methods, systems, and instructions
US9965375B2 (en) * 2016-06-28 2018-05-08 Intel Corporation Virtualizing precise event based sampling
GB2553582B (en) * 2016-09-13 2020-07-08 Advanced Risc Mach Ltd An apparatus and method for generating and processing a trace stream indicative of instruction execution by processing circuitry

Also Published As

Publication number Publication date
KR20230013124A (ko) 2023-01-26
EP4154118A1 (en) 2023-03-29
JP2023526554A (ja) 2023-06-21
GB2595303A (en) 2021-11-24
GB2595303B (en) 2024-04-17
IL297785A (en) 2022-12-01
GB202007666D0 (en) 2020-07-08
US20230088780A1 (en) 2023-03-23
WO2021234387A1 (en) 2021-11-25

Similar Documents

Publication Publication Date Title
US10261792B2 (en) Method and apparatus for obtaining a call stack to an event of interest and analyzing the same
US8731688B2 (en) Processing apparatus and method for acquiring log information
EP0919918B1 (en) Apparatus for randomly sampling instructions in a processor pipeline
EP0919924B1 (en) Apparatus for sampling multiple concurrent instructions in a processor pipeline
US9063804B2 (en) System to profile and optimize user software in a managed run-time environment
US6112317A (en) Processor performance counter for sampling the execution frequency of individual instructions
EP0919922B1 (en) Method for estimating statistics of properties of interactions processed by a processor pipeline
US7962314B2 (en) Mechanism for profiling program software running on a processor
CN108475236B (zh) 测量地址转换延迟
JP5478531B2 (ja) タイムスタンプを生成するための方法、装置およびトレースモジュール
US20030135719A1 (en) Method and system using hardware assistance for tracing instruction disposition information
GB2487251A (en) Separate trace indications for the execution of a conditional instruction and for the result of the condition
US7454666B1 (en) Real-time address trace generation
US7702887B1 (en) Performance instrumentation in a fine grain multithreaded multicore processor
US20030135718A1 (en) Method and system using hardware assistance for instruction tracing by revealing executed opcode or instruction
US20080141002A1 (en) Instruction pipeline monitoring device and method thereof
US20230088780A1 (en) Profiling of sampled operations processed by processing circuitry
US20080140993A1 (en) Fetch engine monitoring device and method thereof
JP2009217385A (ja) プロセッサ及びマルチプロセッサ
US20140229715A1 (en) Apparatus and method for providing eventing ip and source data address in a statistical sampling infrastructure
US20080141008A1 (en) Execution engine monitoring device and method thereof

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