CN102289405B - 追踪推测性执行的指令 - Google Patents
追踪推测性执行的指令 Download PDFInfo
- Publication number
- CN102289405B CN102289405B CN201110184047.4A CN201110184047A CN102289405B CN 102289405 B CN102289405 B CN 102289405B CN 201110184047 A CN201110184047 A CN 201110184047A CN 102289405 B CN102289405 B CN 102289405B
- Authority
- CN
- China
- Prior art keywords
- group
- value
- tracing
- instruction
- trail
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
- G06F11/348—Circuit details, i.e. tracer hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
- G06F11/3471—Address tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/88—Monitoring involving counting
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及追踪推测性执行的指令。公开了一种追踪单元,该追踪单元用于生成指示出执行指令流的处理器的处理活动的追踪数据项,指令流包括多个指令群组,处理器推测性执行指令中的至少一些。追踪单元包括:追踪电路,该追踪电路用于监视处理器的行为;数据存储库,该数据存储库用于存储追踪控制数据中的至少一些;追踪电路被配置为响应于检测到指令群组的执行而将追踪控制数据存储在数据存储库中;追踪电路响应于检测到至少一个处理器撤消推测性执行的指令的至少一个群组而取回存储在数据存储库中的针对在被撤消的推测性执行的指令之前执行的指令群组的追踪控制数据中的至少一些,并且,将取回的追踪控制数据存储在存储电路中。
Description
技术领域
本发明的领域涉及数据处理,具体而言涉及用于监视数据处理操作的诊断机制(diagnostic mechanism)。
背景技术
存在多种想要跟踪处理电路正执行的处理的情形。例如,这种信息在数据处理系统的开发期间是有用的。可用于在这种过程中作为辅助的工具的示例是追踪工具(tracingtool)。
追踪数据处理系统的活动、由此生成包括表示系统内的每一步的活动的数据的追踪流(trace stream)是系统开发中的非常有用的工具。这种追踪工具使用多种用于追踪流程流的手段,其中包括存在于其处理正被监视的芯片上的嵌入式追踪宏单元(ETM,ARMLimited,Cambridge的商标)。
如果监视处理系统的完整的每步活动,则需要收集、传送和存储的数据的量可能大得惊人。从而,已经设计了减少此信息量的各种方式。其中包括通过仅追踪诸如分支(branch)和加载(load)/存储(store)指令之类的一些指令并且根据这些“追踪活性”(trace-active)指令的追踪和关于指令流的知识推断所有其他“追踪非活性”(trace-inactive)指令来减少所生成的追踪数据的量。通过提供开启和关闭追踪的能力,使得对于执行的被认为是追踪非活性的某些部分不生成追踪数据,可以实现追踪流的进一步减少。只追踪指令的子集的这个能力在US 7,707,394中记载。
大多数处理器指令集体系结构包括推测性地执行指令以便提高处理速度的能力。从而,例如,以处理分支之时数据处理系统的状态为条件并且如果某个条件为真则将执行并分支到目的地而如果该条件为假则将不执行并继续到下一顺序指令的分支指令可以以某种方式被预测为执行,从而在知道该条件是真还是假之前就可以执行后续指令。如果预测错误,则推测性执行的指令将需要被撤消(cancel)并且处理器需要被恢复到在进行分支之前其具有的状态。
在追踪推测性执行的指令以使得追踪流输出与实际实行(commit)的指令一致时,并不总是简单明了的。
发明内容
从第一方面来看,本发明提供了一种追踪单元,该追踪单元用于生成指示出执行至少一个指令流的至少一个处理器的处理活动的追踪数据项,所述至少一个指令流包括多个指令群组,所述至少一个处理器推测性地执行所述指令中的至少一些,所述追踪单元包括:追踪电路,该追踪电路用于监视所述至少一个处理器的行为,所述追踪电路受当前追踪控制数据的控制;数据存储库,该数据存储库用于存储与被执行的所述多个指令群组中的相应一个群组相关联的所述追踪控制数据中的至少一些;所述追踪电路被配置为响应于检测到所述指令群组的执行而将所述追踪控制数据存储在所述数据存储库中;所述追踪电路响应于检测到所述至少一个处理器撤消所述推测性执行的指令的至少一个群组而取回存储在所述数据存储库中的所述追踪控制数据中的至少一些,并且,利用所述取回的追踪控制数据来控制所述追踪电路。
本发明认识到,追踪执行推测性指令的数据处理装置在被推测性执行的指令后来被撤消的情况下可能导致追踪数据输出难以理解。其通过提供如下手段来解决此问题:将与被执行的指令的每个群组相关联的追踪控制数据存储在数据存储库内,使得当推测性执行的指令被撤消时,可以从数据存储库中取回先前使用的追踪控制数据的值。从而可以恢复在有关时刻最新的追踪控制数据。
在一些实施例中,所述追踪单元还包括存储电路,用于存储用于控制所述追踪电路的所述当前追踪控制数据;其中,响应于检测到所述至少一个处理器撤消所述推测性执行的指令的所述至少一个群组,所述追踪电路将所述取回的追踪控制数据存储在所述存储电路中。
虽然追踪控制数据可以就是可用于控制追踪电路的逻辑状态,但在一些实施例中其可被存储在存储电路中。
在一些实施例中,所述追踪控制数据与标识所述相应的指令群组的标识符一起被存储在所述数据存储库中。
所存储的追踪控制数据需要以某种方式与其所属的指令群组相关。这可以利用标识符来实现,或者可以用某种其他方式来实现,例如用存储格式。
在一些实施例中,所述追踪电路被配置为对于所述被撤消的指令群组取回存储在所述数据存储库中的所述追踪控制数据中的所述至少一些。
当指令群组被撤消时,则在被撤消的指令群组开始时最新的有关追踪控制数据应当被恢复,以使得追踪电路能够正确工作。在一些实施例中,在群组开始时最新的追踪控制数据针对该群组被存储在数据存储库中,从而其被取回。在其他实施例中,在群组执行结束时最新的追踪控制数据可针对该群组被存储,在此情况下,紧挨在被撤消的群组之前的群组的追踪控制数据将被取回。
在一些实施例中,所述群组包括指令群组,其中,如果所述群组内的第一指令被执行,则所述群组内的所有所述指令都将执行。
可以按若干方式来对指令分组。在一些实施例中,群组可由单个指令构成,虽然这可导致用于存储追踪控制数据的数据存储库较大。指令应当以如下方式来被分组:如果群组内的第一指令被执行,则整个群组都将被执行。换言之,在群组内不能发生例外,并且指令将作为整个群组被撤消和实行。推测性执行的指令在其命运已知时(即知道推测是否正确,何处其被实行或不被实行,何处其被撤消时)被实行或撤消。
在一些实施例中,所述追踪控制数据包括粘性值,所述追踪电路响应于具有预定值的所述粘性值而为随后执行的追踪活性指令输出追踪值,无论追踪使能信号是否具有使能值,追踪活性指令是触发追踪数据项的输出的指令。
撤消被追踪的推测性执行的指令时可能发生的一个问题是,在追踪仅对追踪活性指令输出追踪元素并且从对随后指令的追踪暗示其他指令已被执行的情况下,于是在指令群组可被撤消并且追踪使能可在不同时间被开启或关闭的情况下,如果指令群组中的最终指令不是追踪活性指令并且如果追踪使能在下一指令被追踪之前被关闭,则分析追踪数据的诊断装置将不知道此追踪非活性指令实际上被执行了。通过在追踪控制数据中使用粘性值来解决此问题。
追踪电路响应于检测到所述多个指令群组之一中的不是触发追踪数据项的输出的追踪活性指令的最终指令的执行而在所述追踪控制数据中设置所述粘性值用于控制随后指令群组,并且,对于随后指令群组将所述粘性值存储在所述数据存储库中。
从而,当群组中的最终指令是不输出追踪元素的追踪非活性指令时,对于随后群组设置粘性值。从而,无论追踪是否被使能,要执行的随后追踪活性指令都输出追踪元素。当追踪元素已被输出时,存储在存储电路中的粘性值被重置。粘性值使得分析追踪数据的诊断装置可以认识到追踪非活性指令确实执行了。当被推测性执行的指令的群组被撤消时,则先前应用到被撤消的指令的粘性值被恢复到存储电路。从而,因为已为随后的指令群组存储了粘性值,所以如果此群组被撤消,则粘性值被更新并且下一个追踪活性指令将输出追踪元素,从而可以暗示在前群组中的最终追踪非活性指令的执行。
在一些实施例中,所述追踪控制数据包括先前被追踪值,所述追踪电路被配置为将在前群组中的最终指令被执行时的所述追踪使能信号的值存储为所述随后群组的所述先前被追踪值,所述追踪电路响应于检测到所述处理器撤消推测性执行的指令群组并且所述追踪使能值被使能并且与所述被撤消的群组相关联地存储的所述先前被追踪值被设置而输出表明所述追踪开启的追踪元素。
推测性执行的指令被撤消时可能发生的另一个问题是,如果在随后被撤消的指令群组期间追踪被开启,则任何可能输出的表明追踪被开启的指示丢失。先前被追踪值用于表明考虑到被撤消的指令应当在何处输出追踪开启信号。设置先前被追踪值的一个简单方式是把在前群组的最终指令的追踪使能值存储为随后群组的先前被追踪值,从而提供一种简单的方式来表明在该指令群组完成执行时追踪是否被使能。
在一些实施例中,所述追踪控制数据包括初始被追踪值,所述初始被追踪值响应于对于一指令群组中的第一指令的执行使能了追踪而对于所述群组被设置,其中响应于检测到所述处理器撤消指令群组并且所述初始被追踪值对于所述指令群组被清除并且所述先前被追踪值对于所述指令群组被设置,所述追踪电路输出指示在所述撤消之后执行的所述指令的执行地址的状态元素。
在推测性群组的执行期间追踪被使能并且此群组随后被撤消的情况下,可能出现另一个问题。在追踪被使能的情况下,可输出指示执行地址的状态追踪元素,使得任何诊断装置可以理解追踪在何处被再次使能。如果这些指令后来被撤消,则可能出现一个问题,因为诊断装置将认为执行是从为被撤消的指令输出的执行地址起进行的。初始被追踪值的使用可通过触发指示另一执行指令地址的另一状态元素的输出来帮助避免此问题。从而,响应于群组的撤消,当初始被追踪对于被撤消的群组被清除并且先前被追踪对于此群组被设置时,输出另一状态元素。先前被追踪被设置表明当先前群组(在此情况下是被撤消的群组之前的群组)的最终指令被执行时追踪被使能,而初始被追踪被清除表明当被撤消的群组的第一指令被执行时其未被使能。从而,其可在被撤消的群组的执行期间被使能,并且状态元素可能已被输出。从而,输出额外的状态元素。
在一些实施例中,所述追踪控制数据包括被追踪兴趣值,所述被追踪兴趣值响应于对于一群组输出追踪元素而对于所述群组被设置并且在对于一群组未输出追踪元素的情况下对于所述群组被清除。
本发明的实施例可使用的另一追踪控制值是被追踪兴趣值。其用于表明何处对于群组输出追踪元素以及何处对于群组不输出追踪元素。其可用于确定被撤消的群组是否未被追踪,从而追踪输出中的实行计数值不应暗示其被追踪了。其还可用于计数器回绕的情况中,这将在下文中描述。
在一些实施例中,所述追踪控制数据包括针对所述群组的追踪开始/停止值,所述追踪开始/停止值影响追踪使能是否被设置,所述追踪开始/停止值响应于检测到所述至少一个处理器的预定行为而被设置。
追踪是否被使能可由处理器的特定状态来控制。在一些实施例中,这些状态是否控制追踪使能可以利用开始/停止值来开启或关闭。传统的处理器使用了此控制值。然而,在此情况下,本发明的实施例为群组存储该值,从而如果该群组后来被撤消,则该值可被恢复到其正确值。
在一些实施例中,所述追踪控制数据包括追踪多个值,所述值被设置表明所述群组包括两个生成追踪元素的追踪活性指令,所述值未被设置表明所述群组包括一个或零个追踪活性指令。
指令群组可被限制到两个或更少的追踪活性指令。在这种情况下,追踪控制数据可包括追踪多个值,其表明群组是否具有两个追踪活性指令。这样,群组的追踪可利用更少的值来执行,这将从下文中清楚看出。
在其他实施例中,所述追踪多个值包括指示所述群组中的追踪活性指令的数目的值。
在其他实施例中,追踪多个值可以是若干个比特,并且可以指示群组中存在的追踪活性指令的数目。这样,两个比特值可以指示群组是否有1、2、3或4个追踪活性指令,这比存储两个追踪键(指示第一和最末值)更高效。
在一些实施例中,所述追踪单元被配置为生成索引值并存储与所述多个指令群组中的每个群组相关联的所述索引值,所述索引值对于每一个生成的追踪元素被更新。
跟踪所生成的追踪元素的一种方式是提供索引值,该索引值可与每个指令群组相关联并且对于每一个被生成的追踪元素被更新。以这种方式进行索引提供了易于压缩并且可被分析追踪数据的诊断装置理解的信息。
在一些实施例中,所述追踪单元包括用于生成所述索引值的计数器,所述追踪电路在所述数据存储库中对于每个指令群组存储指示出所述群组的执行开始时的所述计数器值的第一计数器值和指示出所述群组的执行结束时的所述计数器值的最末计数器值中的至少一个。
索引值可以以若干种方式来对追踪信息进行索引,但是在一些实施例中其包括计数器。计数器是一种提供索引功能的简单方式,并且还提供了易于压缩的索引。在一些实施例中,可以为群组存储第一和最末计数值两者,而在其他实施例中只存储其中的一个。群组执行开始时和群组执行结束时计数器的值可在指令被撤消或实行时用于准确地确定已输出的哪些追踪元素与被撤消和实行的指令相关。如果只存储了其中的一个,则在群组中的追踪活性指令的数目限于两个并且为群组存储了多个被追踪值的情况下,仍可确定与被撤消和实行的指令相关的追踪元素。在这种情况下,可以推断第一和最末值中的另一个。其优点是多个被追踪值是单个比特,而计数值将是多个比特。
在一些实施例中,所述追踪电路被配置为,在接收到来自所述数据处理装置的表明被推测性执行的所选指令群组已被撤消的撤消指示时生成指示出所述被撤消的所选指令群组的撤消追踪项,并且,将关于所述当前计数器值和在所述被撤消的群组的执行开始时的所述计数器值之间的差异的信息包括在所述撤消追踪项中。
当指令群组被撤消时,分析追踪元素的诊断装置可以推断出这一点是很重要的,否则诊断装置将不能够正确地分析所执行的流。当计数器值被用于对追踪元素进行索引时,只要通过提供表明流中输出的追踪元素中的多少追踪元素是被撤消的元素的撤消追踪项就可以向诊断装置指示撤消。
在一些实施例中,所述追踪电路被配置为依据所述被追踪兴趣值来确定所述关于所述差异的信息。
可能在一些被撤消的群组中没有被追踪的指令,并且输出的关于被撤消的指令群组的数目的信息不应暗示被撤消了的群组没有输出追踪元素。被追踪兴趣值用于修改输出值,以便这不被暗示。
在一些实施例中,所述追踪单元响应于接收到来自所述数据处理装置的表明被推测性执行的所选指令群组已被实行的实行指示而生成指示出所述所选群组的实行追踪项,并且,对于所述所选群组包括关于所述当前计数器值和所述最末计数器值之间的差异的信息。
以与撤消类似的方式,指令群组的索引可用于表明哪些指令已被实行。当计算输出什么值以表明哪些指令被实行时,被追踪兴趣值也是有用的,从而使得在存在不具有被追踪的指令的群组的情况下,实行信号不暗示输出的追踪元素中的一些属于这些群组。
本发明的第二方面提供了一种处理数据系统,包括用于执行指令流的数据处理装置和根据本发明的第一方面的用于监视所述数据处理装置的追踪单元。
本发明的第三方面提供了一种用于生成指示出执行至少一个指令流的至少一个处理器的处理活动的追踪数据项的方法,所述至少一个指令流包括多个指令群组,所述至少一个处理器推测性地执行所述指令中的至少一些,所述方法包括以下步骤:利用受当前追踪控制数据的控制的追踪电路来监视所述至少一个处理器的行为;存储与被执行的所述多个指令群组中的一个群组相关联的所述追踪控制数据中的至少一些;响应于检测到所述至少一个处理器撤消所述推测性执行的指令的至少一个群组而取回存储在所述数据存储库中的针对紧挨所述被撤消的推测性执行的指令之前执行的所述指令群组的所述追踪控制数据中的至少一些,并且,利用所述取回的追踪控制数据来控制所述追踪电路。
本发明的第四方面提供了一种追踪装置,该追踪装置用于生成指示出执行至少一个指令流的至少一个处理器的处理活动的追踪数据项,所述至少一个指令流包括多个指令群组,所述至少一个处理器推测性地执行所述指令中的至少一些,所述追踪装置包括:受当前追踪控制数据控制的追踪监视装置,该追踪监视装置用于监视所述至少一个处理器的行为;数据存储装置,该数据存储装置用于存储与被执行的所述多个指令群组中的相应一个群组相关联的所述追踪控制数据中的至少一些;所述追踪监视装置用于响应于检测到所述指令群组的执行而将所述追踪控制数据中的所述至少一些存储在所述数据存储装置中;所述追踪监视装置响应于检测到所述至少一个处理器撤消所述推测性执行的指令的至少一个群组而取回存储在所述数据存储装置中的针对紧挨所述被撤消的推测性执行的指令之前执行的所述指令群组的所述追踪控制数据中的至少一些,并且,利用所述取回的追踪控制数据来控制所述追踪监视装置。
从应联系附图来理解的对示例性实施例的以下详细描述中将清楚本发明的上述和其他目的、特征和优点。
附图说明
图1示出了具有数据处理装置和用于分析该数据处理装置对程序的执行的诊断装置的系统;
图2示出了根据本发明一实施例的具有追踪单元的数据处理装置;
图3示出了根据本发明的追踪单元的实施例;
图4示意性地示出了追踪开始/停止值的设置;
图5至10示出了按群组(group)的指令的示例、执行和追踪;
图11示出了根据本发明另一实施例的追踪单元;
图12a-12c示出了表明如何响应于指令的执行来设置追踪控制值的流程图;
图13示出了在指令的群组的执行期间追踪控制值如何变化;并且
图14示出了根据本发明一实施例的追踪数据的方法。
具体实施方式
图1示出了具有数据处理装置5和追踪单元40的系统,该数据处理装置5执行指令的流,其中一些指令是推测性执行的,该追踪单元40用于监视指令的执行并且用于生成追踪流42,该追踪流42经由输出端52被输出到诊断装置140。诊断装置140具有诊断逻辑142,诊断逻辑142可采取软件程序的形式。诊断逻辑142结合处理器10正执行的程序来分析追踪流(其被存储在数据存储库144中),并且输出关于数据处理装置5对程序的执行的信息,该信息可用于诊断任何故障。
图2示出了根据本发明一实施例的包括追踪单元40的数据处理装置5。数据处理装置5包括处理器核心10(数据处理单元)和追踪单元40,该追踪单元40被配置为监视处理器核心10的处理活动,并且,生成指示出该核心的处理活动的追踪数据项,这些数据项在输出端52处作为追踪流被输出。
处理器核心10包括取得单元20和执行单元25。取得单元20从存储器(未示出)取得指令,并且这些指令被传递到执行单元25,在该处它们被执行。处理器核心10是推测性处理器,因此取得单元20被配置成为执行单元25取得指令,这些指令被分支预测单元30预测为所需要的(但不保证是所需要的)。执行单元25将推测性执行这些指令,之后在知道推测是否正确时撤消或实行它们。
追踪单元40被配置为生成指示出处理器核心10的包括对指令的推测性执行在内的处理活动的追踪元素并将它们作为追踪数据流在输出端52处输出。虽然原则上追踪单元40可以缓冲与推测性执行的指令相关联地生成的追踪数据项,并且,仅在推测得以确定时才在输出追踪流中释放这些数据项,但这将需要追踪单元40内的相当大的存储空间,而这样在面积上将是昂贵的。
从而,在图2所示的实施例中,追踪单元40被配置为对于推测性地和非推测性执行的指令都生成追踪数据并且一旦知道推测是否正确就生成撤消或实行信号。这样,追踪数据可以被对其进行分析的诊断装置所理解。
追踪单元40在图3中更详细示出。追踪单元40具有从处理器核心接收信号的追踪电路50。其监视这些信号并且在适当时生成追踪元素并以追踪流的形式输出这些追踪元素,该追踪流被发送到诊断装置。追踪单元40还接收追踪使能(trace enable)信号,该追踪使能信号设置追踪电路内的追踪使能比特,该比特控制是否输出追踪元素。
追踪单元40在此实施例中具有寄存器60,用于存储追踪控制数据,该追踪控制数据与追踪使能值一起控制追踪电路50的操作。应当注意,在一些实施例中,这些值未被存储在寄存器中,数据就只是被检测的信号值。另外,在许多实施例中,这些控制值具有两个可能的值,从而一般被表示为单个比特。追踪单元还具有数据存储库65,用于存储追踪信息,例如与已被推测性执行并且尚未被实行或撤消的指令有关的追踪控制数据。以下两个操作都需要此信息:如果指令被撤消,则将寄存器60更新到在被撤消的指令的执行之前最新的值;以及使得关于指令的群组的撤消或实行的信息能够在追踪流中被输出,从而使得足够的信息被发送到诊断装置,以使其能够确定追踪流中的哪些项目与被撤消了的指令有关。从而,追踪电路输出指示出哪些指令被撤消或实行了的追踪信号以及指示处理器的处理活动的追踪项目。这样,诊断装置可以理解追踪流并且可以知晓有多少追踪的指令被撤消或实行了。
将推测性执行期间可能变化了的任何追踪控制值重置(reset)到在不正确的推测性执行之前其具有的值对于使追踪电路能够正确操作是重要的。
为了高效地管理推测性执行,以指令群组的形式来管理指令。如果满足以下条件这就是可能的:指令被分组成不可分的指令块,其中的指令被整体实行和撤消,并且在群组的中间不能发生例外。
当追踪指令时,追踪电路利用这些群组并且使用追踪键(trace key)在每次追踪活性指令被执行并且追踪元素被输出时进行计数。群组的执行的开始和结束时追踪键的值,即所谓的第一值和最末值,被存储在数据存储库65中。这样,随着指令作为群组被实行和撤消,可以确定群组的开始和结束。这些追踪键值也可偶尔被输出,以使得诊断装置可以准确地确定处理在指令流中的何处。一般地,只要输出表明追踪活性指令已被执行的追踪元素以及表明有多少指令已被撤消或实行的计数值,就足以做出上述确定了。
下面阐述如何生成和存储追踪键的细节。追踪单元40具有追踪索引单元70。索引单元70被配置为将索引值或追踪键与追踪电路50生成的追踪数据项的至少子集相关联。具体地,索引单元70被配置为以索引值的预定序列的形式生成索引值,其中第n+1个索引值可从该预定序列中的第n个索引值确定。在所示的实施例中,此功能由索引单元70中的计数器72提供。
追踪单元50包括计数器72,该计数器72提供追踪单元40可用来与其生成的追踪数据项(的一些)相关联的索引值的预定序列。追踪单元40还包括数据存储库65,其中可存储计数器72生成的索引值。数据存储库65存储被推测性执行的每个群组的第一计数器值和最末计数器值,以及该群组的更多追踪控制值。对于被推测性执行的指令群组中的第一指令,追踪单元40被配置为把来自计数器72的当前计数器值存储到数据存储库65的第一索引存储单元中(按群组号码来索引)。相反,当新的群组开始时,当前计数器值被存储在数据存储库65的最末索引存储单元中。
在所示的实施例中,数据存储库65具有足够的条目来与处理器的最大推测深度相对应(就指令的群组而言)。处理器的最大推测深度表示数据存储库65可能必须保持的条目的最大数目,因为超过该深度后,处理器就必须实行或撤消指令的群组,这将释放索引存储单元中的条目。
还存在一数据存储库,用于存储最旧的未实行的值,该值可响应于实行特定群组的信号用于向诊断工具输出哪些指令被实际实行。
在推测性执行期间对指令的跟踪不是简单明了的,尤其在追踪使能可在群组的执行期间切换值的情况下更是如此。为了能够成功地跟踪此执行,可能需要除了第一计数值和最末计数值以外的额外信息,从而数据存储库65存储额外值。
存储控制追踪电路的当前追踪控制数据的寄存器60存储先前被追踪(previoustraced)值、粘性比特(sticky bit)、初始被追踪(initial traced)值和被追踪兴趣(traced interesting)值。先前被追踪值是先前群组的最终指令的追踪使能值,当先前指令未输出追踪数据时粘性比特被设置(set),而当先前指令输出追踪数据时粘性比特被清除(clear)。当在前群组的最终指令被执行时的粘性比特的值被存储在数据存储库65中,作为随后群组的粘性比特,然而,其在寄存器60中的值随着指令被执行而被更新,但对于该群组,经更新的值不被存储在数据存储库65中。初始被追踪值是群组中的第一指令的追踪使能,被追踪兴趣表明群组包含追踪的指令。需要这些值,以使得诊断装置能够确定追踪电路何时能够表明比如2个群组被实行了,这如何与追踪元素输出相关,尤其如果追踪对于群组之一没有使能,使得其未被实际追踪,则更是如此。参考接下来的附图来说明这些值如何被更新和使用。
数据存储库65还存储群组的追踪开始/停止值。这是群组中的第一指令之前的开始/停止比特的值。当在停止状态中时,追踪被禁止,即追踪使能为0,而在开始转变之后,追踪使能将取决于其他源,直到停止转变为止。
开始条件例如可以是一子例程中的第一指令的地址,并且停止条件可以是该子例程中的最末指令的地址。这样,只追踪该子例程中的指令。
为了使得开始/停止行为在撤消之后是连贯一致的,必须将开始/停止值存储在数据存储库中并且在撤消时倒回到它。这是因为我们希望开始/停止行为由架构性执行的指令来限定,而不仅由推测性执行的指令限定。
从而,当新群组开始时,该群组中的第一指令被处理之前的开始/停止值被存储在数据存储库中与该群组相对应的行中。
当群组被撤消时,开始/停止比特被从数据存储库中与撤消的指令相对应的行中取回。
图4示意性地示出了开始/停止比特如何被设置以及其如何被用在关于是否应当使能追踪的判决中。从而,接收指令地址,然后执行匹配以查明该指令地址是否在配置追踪单元时限定的范围内。如果是,则开始/停止比特被设置。类似地,执行匹配以查明该指令地址是否在配置追踪单元时限定的停止地址范围内。如果是,则开始/停止比特被清除。
图5示出了被执行和追踪并随后被实行的指令的群组A、B、C和D的示例。追踪输出在此情况下就是一E原子,键不被输出,而是对于每个指令被更新,并且其中一些被存储在图3的数据存储库65中。
从而,在此示例中,群组A被执行,并且其包含分支指令,从而,由于追踪被使能,因此追踪元素E被输出,并且作为图3的计数器72的值的键1与此指令相关联并且对于群组A被存储。计数器随后被递增。要执行的下一指令在群组B中,并且因为这是新的群组,所以当前追踪键值,即键2,与群组B的分支指令相关联。群组B包含分支,并且因为追踪仍被使能,所以另一追踪元素被输出,并且计数器72被递增到键3。下一指令在新的群组中,而且也是分支,并且追踪仍被使能,从而,又一追踪元素被输出,追踪键3与此指令相关联,并且计数器72被递增。
要执行的下一指令在群组D中,此指令是追踪非活性指令,即追踪电路被配置为不为其生成追踪元素的指令,从而不输出追踪元素并且不递增键。然后有一分支指令,并且这生成追踪元素并与追踪键4的当前值相关联,计数器随后被递增。追踪电路50随后接收来自处理器的实行信号,表明群组C已被实行,从而群组C以及其前的群组亦即A和B不再是推测性的。这需要被发送到任何正在分析追踪输出的诊断工具,从而实行信号被添加到追踪输出。此实行信号需要表明到底哪些群组已被实行并且其通过如下方式来实现这一点:输出已被实行了的群组的键值减去存储(在图3的存储库80中)的最旧的先前实行例的键值。从而,在此情况下,因为没有先前群组已被实行,所以要输出的值是键3,其是与群组C中的最终指令相关联的键值-0,从而键3信号被输出。诊断装置将能够从此确定群组A、B和C中的指令已被实行。
为该群组存储的最末键亦即键3的值随后被存储在最旧已实行存储库中。
应当注意,在此实施例中,不是像图3的数据存储库65中所示那样为每个群组存储第一和最末计数器值,而是单个键值被存储在数据存储库65中,并且这是与任何群组中的最终指令相关联的键值。
图6示出了与图5所示类似的示例,只不过在一些指令的执行期间追踪被禁止。在图6中,对于群组C的执行和对于群组D的一半,禁止追踪。从而,在此情况下,群组A的执行触发追踪元素的输出,计数器72的当前值即追踪键1被存储为群组A的键值,然后计数器72被递增。随后进入群组B,并且为群组B存储当前计数器值2,并且群组B中的分支指令的执行触发追踪元素的输出以及将键值递增到键值3。追踪输出随后被禁止,并且分支C的执行不触发追踪元素的输出。从而,对于群组C存储计数器键3的当前值,并且因为没有输出追踪元素,所以其不被递增。然后进入新的群组,群组D,这样看到了追踪非活性的第一指令,并且在任何情况下禁止追踪,因此不输出追踪元素并且不递增计数器。然后使能追踪,并且要执行的下一追踪活性指令是群组D中的分支,因此输出追踪元素并且对于此群组存储当前键值3,然后将计数器递增到4。
追踪电路随后接收表明群组C已被实行的信号以及表明其需要在追踪输出流中发送的信号。然而,群组C没有被追踪。
为了解决此潜在问题,在追踪控制数据中使用被追踪兴趣值。对于一指令群组,如果该群组中存在被追踪的追踪活性指令,则此值被设置,而如果在群组中没有指令被追踪,则此值被清除,即不被设置。从而,其对于群组C被清除。在群组被实行或撤消的情况下使用该值。在此情况下,群组C被实行,并且其使得被追踪兴趣值被清除。为群组C存储的键值是3,并且因为被追踪兴趣比特被清除,所以实行被计算为存储的键的值-最旧的未实行的值(在此情况下是0)-1,即2。从而,实行2信号被发送,并且诊断装置因此可以推断出先前的两个被追踪元素属于已被实行的群组,即群组A和B被实行。如果实行值没有被减去1,则实行3信号将被输出,并且分析追踪输出的诊断工具将认为前三个被追踪指令已被实行,即包括分支D。这是不正确的。如果被追踪兴趣被设置了,那么就没有从键值中减去1,然而,在此情况下分支C已被追踪了。
最旧的未实行值随后被设置到键3。
当推测已到达处理器的推测深度并且计数器已被回绕时,也可使用被追踪兴趣值。在这种情况下,要实行或撤消的键可以是与最旧的先前实行相同的值。这提供了计算出的等于0的实行值,否则无法确定是实行了0还是最大推测深度N。这可以从最终群组的被追踪兴趣比特来推断,如果其被设置,则该值不能是零,必须是N,而如果其被清除,则其不能是N,因此必须是零。
在一些实施例中,数据存储库65为指令的群组存储第一和最末计数器值,并且这些值可用于确定响应于推测性指令被撤消和实行而需要撤消或实行追踪流中的什么值。这在下面描述。
在一些实施例中,例如图3所示的实施例中,对于每个群组,第一和最末计数器值被存储在数据存储库65中。从而,计数器72提供索引值的预定序列,追踪单元40可将这些索引值与其生成的追踪数据项(的一些)关联起来。对于推测性执行的指令群组中的第一指令,追踪单元40被配置为存储来自计数器72的当前计数器值作为该群组的第一值,相反,当新的群组开始时,当前计数器值被存储为该群组的最末值。
数据存储库65被配置为具有足够的条目来与处理器的最大推测深度相对应(就指令的群组而言)。处理器的最大推测深度表示索引存储单元可能必须保持的条目的最大数目,因为超过该深度后,处理器就必须实行或撤消指令的群组,这将释放索引存储单元中的条目。
现在参考下面的表1来描述第一和最末值的使用。表1示出了在处理器核心100推测性执行群组A、B和C的群组并随后表明群组B应当被撤消并且群组A应当被实行的情形中,在追踪单元110中如何更新计数器值、最旧的未实行值和跟踪表。
群组A开始于加载(LDR)指令,该指令是“引起兴趣的”(interesting)并且当前正被追踪。因此,第一索引单元230的与群组A相对应的条目(“A.first”)存储等于0的当前计数器值,然后计数器被递增到1。最终,最末索引单元240的与群组A相对应的条目(“A.last”)存储等于1的当前计数器值。群组A中的下一指令是移动指令(MOV),该指令既不是“引起兴趣的”,也没有被追踪。群组A的最末指令是如果等于则分支(BEQ)指令,该指令既是“引起兴趣的”又被追踪,因此计数器被递增到2。最末索引单元240的与群组A相对应的条目(“A.last”)随后被更新以等于2的当前计数器值。应当注意,实际上,每个指令的最终步骤始终是最末索引单元240的与当前群组相对应的条目被更新以当前计数器值。当然,仅在已为该指令更新了计数器的情况下,这才有任何作用。对于表1中示出的剩余指令,不明确描述以这种方式对“最末”值的更新。
群组B开始于ADD指令,其即不是“引起兴趣的”也没有被追踪,但是作为新群组中的第一指令使得当前计数器值2被存储在第一索引值存储单元的相应条目中(即B.first=2)。群组B的第二指令是SUB指令,其类似地也既不是“引起兴趣的”也没有被追踪,并且不更新任何值。
群组C开始于存储(STR)指令,其既是“引起兴趣的”又被追踪,因此当前计数器值被存储在第一索引存储单元的C.first条目中并且计数器随后被递增到3。群组C中的第二指令是如果不等于则分支(BNE)指令,其也是“引起兴趣的”并且被追踪,因此计数器被更新到4。
接下来,处理器核心100指示对群组B的推测性执行是不正确的,因此群组B和C应当被撤消。作为响应,追踪单元110(受追踪控制单元200控制)参考计数器210的当前计数值,该值当前为4,以及存储在第一索引存储单元230的相应条目(即B.first)中的值,该值为2。追踪单元110从而确定两个追踪数据项应当被撤消(4-2),并且生成指示出此事实的追踪数据项。计数器210随后被重置到2(因为其先前是4,并且2个项目已被撤消)。
接下来,处理器核心100指示指令群组A应当被实行,因为已经确定对此指令群组的推测性执行是正确的。作为响应,追踪单元110(在追踪控制单元200的控制下)参考存储在最旧未实行存储单元250中的值(当前为0)以及最末索引存储单元240中与此群组相对应的条目(即A.last),该条目2。追踪单元110从而确定两个追踪数据项(2-0)应当被实行,并且生成指示出此事实的追踪数据项。存储在最旧未实行存储单元250中的值随后被重置到为此群组读取的“最末”值,即在此示例中为2。
在参考表1描述的实施例中,将注意到撤消和实行是参考事件的数目来执行的,其中所生成的追踪数据项指示应当被撤消或实行的事件的数目。在替换实施例中,追踪单元可以参考事件号码来生成撤消/实行的追踪项。在这种情况下,对于撤消的追踪项,将从“第一”值亦即第一索引值存储单元的相应条目取得事件号码,而对于实行的追踪项,从“最末”值亦即最末索引值存储单元中的相应条目取得事件号码。注意,虽然看起来可能按事件号码的实行和撤消将需要更少的硬件(因为不需要减法),但是应当注意,当用事件数目来指示撤消/实行时,这经常可被压缩,因为其一般将具有前导的零。对于是按“事件数目”还是“事件号码”来实行/撤消的选择可依据系统要求来确定,即认为追踪单元中的更少硬件更重要还是追踪流中的更少带宽更重要。
表1.推测性执行期间的索引存储单元值
现在参考以下的表2来论述另一示例,其中追踪单元进一步对生成的追踪进行过滤,这在给出的示例中是通过不追踪存储(STR)指令来进行的。表2中对于群组A和B给出的值与表1中给出的相同。然而,对于群组C的第一指令,STR指令不被追踪,因此计数不被递增。因此,只有当遇到群组C中的BNE指令(其被追踪)时,才将计数递增到3。
因此,当处理器核心发出“撤消B”消息时,追踪单元110确定当前计数是3,B.first是2(如表1示例中那样),因此只有一个追踪项(3-2)应当被撤消。类似地,计数只被减小1(到等于2的值)。当处理器核心发出“实行A”消息时,如表1中那样,最旧未实行计数是0,A.last=2,因此两个追踪项被实行。最旧未实行计数随后被更新到2。
表2.推测性执行期间的索引存储单元值,具有经过滤的追踪
图7示出了在控制寄存器60中使用先前被追踪控制值来在不需要追踪开启信号的情况下禁止输出追踪开启信号,因为在追踪关闭的同时执行的指令已被撤消。先前被追踪值是当先前群组的最终指令被执行时的追踪使能值。从而,在图7的示例中,先前被追踪值对于群组B被清除。当对于群组B使能追踪时,对于分支B,像预期的那样,追踪开启信号与追踪元素E一起被输出,并且状态元素2000(未示出)表明当追踪被开启时程序在核心执行中的何处。然后在群组C被执行时,追踪再次被关闭。群组C随后被撤消,然后群组D被执行。因为群组C已被撤消,于是群组D前的群组现在是群组B,并且因为对于此群组使用了追踪,所以先前被追踪值对于群组D被设置。响应于先前被追踪被设置,追踪电路禁止追踪开启信号的输出,即使追踪使能已被转变。如果群组C未被撤消,则先前被追踪对于群组D将被设置,并且响应于追踪使能信号的转变,追踪开启信号将被生成。
图8示出了追踪使能改变值的另一示例。在此情况下,群组A是分支,并且追踪被使能,并且追踪元素被输出,并且初始被追踪被设置,因为它是群组中的第一指令的追踪使能的值。追踪随后不被使能并且群组B开始执行。初始被追踪因此对于群组B被清除,因为群组B中的第一指令未使能追踪,并且先前被追踪被设置,因为群组A中的最终指令使能了追踪。追踪对于群组B的第二指令被使能,并且因为这在群组中间,所以追踪开启指令始终响应于此而被输出,并且状态3004被输出,表明当追踪被开启时处理器在执行中的何处。群组B中的下一指令随后被执行,并且追踪元素被输出。随后从核心接收撤消信号,表明群组B要被撤消。对于群组B有一个追踪元素输出,因此撤消是1。
追踪电路检查与被撤消的群组B相关联的初始被追踪值和当前存储的先前被追踪。如果初始被追踪被清除并且先前被追踪被设置,则这表明在被撤消的群组的执行期间追踪使能改变了值,从而状态元素已被输出。从而,响应于这些值,新的状态元素被输出。
从而,在此情况下,要执行的下一指令是群组C中的追踪非活性指令,并且状态元素4000响应于为群组B存储的初始被追踪值和为群组C存储的先前被追踪值而被输出。诊断装置现在将知道追踪是从地址4000而不是3004起的。
总之,当先前被追踪是1并且初始被追踪是0时(这两个值都是从表的与被撤消的群组相对应的行取回的),强制状态输出被输出。关于图8,其中群组B被撤消。群组B之前的指令被追踪,但是群组B的第一指令不被追踪,因此previous_traced=1并且initial_traced=0。第二追踪开启不被输出,因为对于撤消之后的第一群组,previous_traced值为1。
previous_traced和initial_traced有四个可能的值:
图9示出了本发明的实施例所解决的当追踪推测性指令时可能发生的另一个问题。如前所述,可以通过只追踪被指定为追踪活性指令的某些指令而不追踪追踪非活性指令来减少所生成的追踪数据的量,因为追踪非活性指令的执行可通过对追踪活性指令的执行的追踪来暗示。追踪活性指令可以是分支、加载和存储,而追踪非活性指令是其他指令,例如算术指令。然而,如果此类追踪与使能或禁止追踪的能力一起使用,则有可能无法暗示这些追踪非活性指令的执行,因为如果追踪已被关闭,则随后的追踪活性指令将不被追踪。为了解决此问题,使用追踪控制数据的粘性值。当被执行的群组中的最终指令不是触发追踪元素的输出的追踪活性指令时,对于后续群组设置粘性值。此粘性值针对该后续群组被存储在数据存储库中,并且在图3的控制追踪的控制寄存器60中也被设置。粘性值于是被维持在追踪控制寄存器60中,直到追踪元素被输出为止,此时其被重置。从而,如果使能了追踪并且遇到了追踪活性指令,则输出追踪元素并且在控制寄存器中重置粘性值。这使得诊断装置能够确定未使得相应追踪元素输出的先前群组结束处的追踪非活性指令实际上确实执行了。
从而,在图9中,响应于群组B的追踪非活性指令执行,对于群组C设置粘性值。当群组C中的分支被执行时,尽管追踪使能是关闭的,追踪元素也被输出,因为粘性值被设置了。需要这样,来使得诊断工具能够暗示群组B的NOP被执行了。在该追踪元素的输出之后,控制寄存器60中的粘性值被重置,虽然在数据存储库中针对群组C存储的粘性值仍被设置。
图10示出了类似的示例,只不过一些推测性执行的指令已被撤消。在此情况下,群组A使能了追踪并且输出追踪元素。群组B使能了追踪,但却是追踪非活性指令,因此其不输出追踪元素。然而,粘性值被设置。群组C随后被执行,并且虽然追踪未被使能,但分支触发追踪原子的输出,因为粘性值被设置。粘性值随后在图3的控制寄存器60中被重置,但在数据存储库65中其对于群组C仍保持被设置。群组D随后被执行,并且追踪再次被使能,因此追踪原子被输出。没有“追踪开启”输出,因为对于先前群组设置了粘性值。
随后从核心接收撤消群组C,并且输出撤消2,以表明两个先前原子应当被撤消。当撤消群组C时,为群组B存储的追踪控制值中的一些被加载到控制寄存器中。为群组B存储的粘性值被设置,因此其被加载到控制寄存器中,然后发生例外,并且因为粘性值在控制寄存器中被设置,所以即使追踪使能为低,其也被追踪。
图11示出了与图3的类似的追踪单元40,只不过在寄存器60和数据存储库65中有额外的追踪控制值,即多个被追踪(multiple-traced)。在此实施例中,装置被配置成使得所有群组不包含多于两个追踪活性指令,并且如果确定群组包含两个追踪活性指令则多个被追踪被设置,而如果群组包含一个或不包含追踪活性指令(这是从traced_interesting确定的)则多个被追踪被清除。这样,只需要在数据存储库65中存储第一键值或者在一些实施例中只存储最末键值,而另一个可以从多个被追踪值是否被设置来确定。从而,取代存储可能是多个比特的计数值,可以存储单个比特来根据存储的那个指示另一键值。
在其他实施例中,多个被追踪值可以是若干个比特宽的,并且存储群组中的追踪活性指令的总数。如果是这种情况,则可以利用此值来更新计数器。虽然此值现在是多个比特宽的,但是它比起存储指示第一和最末计数值的两个追踪键来仍然更高效。在其他实施例中,它可以是多个比特宽的,并且存储群组-1中的追踪活性指令的总数。是否存在零个trace_active指令之一是从traced_interesting值确定的。
应当注意,当遇到新群组时,为群组设置追踪控制值并且将其存储在数据存储库65中。对于被追踪兴趣是例外,被追踪兴趣对于群组中的每个指令在适当时被更新并且最终值针对该群组被存储。控制寄存器60中的初始粘性值针对该群组被存储在数据存储库65中,但是其可随着群组被执行而被更新,经更新的值不被存储在数据存储库中。
图12a至12c是示出如何更新各种追踪控制值的流程图。
图12a示出了粘性比特如何被设置和清除。最初,确定是否接收到新群组,如果是则将当前粘性比特存储在数据存储库65中。然后如果指令是追踪活性指令则确定是否接收到新群组,如果是则粘性比特被清除,如果否则确定追踪是否被使能,如果是则粘性比特被设置。然后如果存在追踪活性指令,则粘性比特被清除,而如果指令不是追踪活性指令并且追踪被使能,则其被设置。
图12b示出了先前被追踪如何被设置。当新的群组开始时,先前被追踪的当前值被存储在数据存储库65中。然后确定追踪是否被使能,如果是则先前被追踪被设置,如果否则确定粘性比特是否被设置,如果是则先前被追踪被设置,否则其被清除。
图12c示出了initial_traced如何被更新以及其如何用于在群组已被撤消时确定何时应当强制新状态的输出。从而,在群组的执行开始时,确定粘性比特是否被设置。如果粘性比特被设置,则无论追踪是否被使能,任何被撤消的群组的previous_traced和initial_traced的值都需要被考虑。
如果粘性比特未被设置,则确定追踪是否被使能。如果否,则初始被追踪被清除(这是群组的第一指令的trace_enable的值),如果其被设置,则确定这是否是撤消之后的第一指令。如果是,则被撤消的群组的previous_traced和initial_traced的值被考虑。
被撤消的群组的previous_traced被设置表明当被撤消的群组之前的群组的最终指令被执行时追踪是被使能的,而initial_traced被清除表明当被撤消的群组的第一指令被执行时其未被使能。从而,在被撤消的群组的执行期间其可能被使能了,并且状态元素可能被输出了。从而,响应于检测到此,发生强制新状态。这确保了当群组已被撤消并且确定trace_enable可能已从0转变到1,使得状态被输出时,新的状态被输出,使得追踪诊断工具将能够确定程序处于程序执行中的何处。
initial_traced随后被清除,因为在此情况下对于该群组的第一指令没有使能追踪(因为其被重置到其对被撤消的群组曾具有的值,其从initial_traced被清除表明追踪未被使能)。如果对于被撤消的群组initial_traced被设置,则initial_traced被设置,因为对于此群组中的第一指令,追踪被使能。
如果指令不是撤消后的第一指令或者如果previous_traced未被设置,则initial_traced被设置,因为对于群组的第一指令,追踪被使能,并且initial_traced反映出这一点。
然后,当新的群组开始时,刚才执行的群组的initial_traced的值被存储。
图13示出了指令执行的示例以及计数器键值和追踪控制值如何变化。从而,要执行的初始指令在群组A中并且具有地址1000并且是分支指令。追踪被使能,因此追踪元素被输出,并且作为键1的当前计数器值被存储为此指令的追踪键。粘性值在此时是0,并且初始追踪被设置到1。还没有加载存储库,没有多个追踪指令并且没有先前被追踪值,并且最旧被实行指令是0。
要执行的下一指令在群组B中并且是追踪非活性指令。追踪仍被使能并且计数器被递增到2,因此针对此群组,键2被存储,并且粘性值被设置,因为追踪非活性指令已执行。先前被追踪值被设置到1,因为当先前群组的最末指令执行时追踪被使能,并且初始追踪被设置到1,因为当此群组的第一指令执行时追踪被使能。
要执行的下一指令在群组C中。它同样是追踪非活性指令,并且追踪现在不被使能。计数器值不递增,从而,键2与群组C中的此指令相关联,并且粘性值保持被设置。
要执行的下一指令是分支,并且追踪使能仍关闭。然而,因为粘性值被设置,所以追踪原子无论如何仍被输出,以向分析追踪流的任何诊断装置表明3000处的先前指令执行了。针对此指令,键2的计数器值被存储,并且计数器随后被递增。响应于此追踪原子的输出,粘性值被重置。
要执行的下一群组是群组D,并且追踪被使能,并且这是分支指令,因此追踪元素被输出。计数器值是键3,从而键3与此指令相关联地被存储。粘性值仍为0,先前被追踪是0,因为当群组C的最终指令执行时追踪未被使能,并且初始追踪是1,因为当群组D中的第一指令执行时追踪被使能了。
追踪电路随后接收表明指令被撤消回到群组C的信号。为群组C存储的键是键2,并且最旧已实行是0,从而2-0的撤消信号亦即2在追踪流中被发送到诊断装置,并且计数器被递减2。从与群组C有关的数据存储值恢复控制追踪的控制状态。
要接收的下一指令在群组E中并且是分支,并且追踪被使能,因此追踪元素被输出,并且键被递增,并且针对此指令,键2被存储。先前被追踪和初始追踪都被设置到1,并且多个追踪被设置到1,因为在此群组中还有另一个追踪活性指令,该指令是加载指令。追踪加载存储也被设置到1,以表明与加载和存储指令相关联的地址需要被输出。在此情况下,追踪未被使能,因此不输出地址。
下一指令在群组F中,并且是追踪非活性指令。此时,追踪使能开启,从而,追踪开启和状态输出被输出。计数器不递增,并且粘性值不被设置,因为这是追踪非活性指令。
群组F中的下一指令是分支,因此追踪元素被输出。粘性值被重置,并且计数器被递增到4。
要从核心接收的下一事物是关于群组B应当被实行的指示。对于群组B存储的键值是键2,从而,通常实行2信号将被输出,因为最旧已实行值是0。然而,对于群组B,被追踪兴趣是0,表明群组B未被追踪,从而,实行1被输出,表明群组A中的分支指令已被执行。
然后下一群组是群组G。计数器继续递增,并且原子被输出,因为其是追踪活性指令并且追踪被使能。应当注意,计数器不受实行信号的影响。
图14示出了图示根据本发明一实施例的方法的流程图。
处理按指令群组布置的指令流的处理器的行为被追踪控制电路监视。用于控制追踪电路的当前追踪控制数据被存储在存储电路中,并且,当群组已执行时,针对被执行的群组的此追踪控制数据中的至少一些与标识该群组的标识符一起被存储在数据存储库中。然后确定处理器是否撤消了任何推测性执行的指令的群组。这是由监视处理器的追踪控制电路来确定的。如果指令已被撤消,则紧挨被撤消的指令之前的指令的群组的追踪控制数据被取回并被存储在存储电路中,从而追踪电路被正确的追踪控制数据所控制。如果没有,则追踪电路继续在追踪控制数据的控制下监视处理器。
虽然这里已经参考附图详细描述了本发明的示例性实施例,但是要理解,本发明并不限于这些确切的实施例,本领域的技术人员在不脱离由所附权利要求限定的本发明的范围和精神的情况下可以对其实现各种变化和修改。
Claims (24)
1.一种追踪单元,该追踪单元用于生成指示出执行至少一个指令流的至少一个处理器的处理活动的追踪数据项,所述至少一个指令流包括多个指令群组,所述至少一个处理器推测性地执行所述指令群组中的至少一些,所述追踪单元包括:
追踪电路,该追踪电路用于监视所述至少一个处理器的行为,所述追踪电路受当前追踪控制数据的控制;
数据存储库,该数据存储库用于存储与被执行的所述多个指令群组中的相应一个群组相关联的所述追踪控制数据中的至少一些;
所述追踪电路被配置为响应于检测到所述指令群组的执行而将所述追踪控制数据存储在所述数据存储库中;
所述追踪电路响应于检测到所述至少一个处理器撤消所述推测性执行的至少一个指令群组而取回存储在所述数据存储库中的所述追踪控制数据中的至少一些并且利用所述取回的追踪控制数据来控制所述追踪电路;
所述追踪控制数据包括先前被追踪值,所述追踪电路响应于检测到在在前群组中的最终指令被执行时追踪未被使能而对于随后指令群组设置所述先前被追踪值,所述追踪电路响应于检测到所述处理器撤消推测性执行的指令群组,并且,与所述被撤消的群组相关联地存储的所述先前被追踪值被设置而输出表明所述追踪开启的追踪元素。
2.根据权利要求1所述的追踪单元,所述追踪单元还包括存储电路,该存储电路用于存储用于控制所述追踪电路的所述当前追踪控制数据;其中,响应于检测到所述至少一个处理器撤消所述推测性执行的指令的所述至少一个群组,所述追踪电路将所述取回的追踪控制数据存储在所述存储电路中。
3.根据权利要求1所述的追踪单元,其中,所述追踪控制数据与标识相应的指令群组的标识符一起被存储在所述数据存储库中。
4.根据权利要求1所述的追踪单元,其中,所述追踪电路被配置为对于所述被撤消的指令群组取回存储在所述数据存储库中的所述追踪控制数据中的所述至少一些。
5.根据权利要求1所述的追踪单元,其中,所述多个指令群组包括以如下方式分组的指令:如果所述群组内的第一指令被执行,则所述群组内的所有所述指令都将执行。
6.根据权利要求1所述的追踪单元,所述追踪单元响应于追踪使能信号被断言而使能所述追踪电路监视所述至少一个处理器的所述行为并且响应于所述追踪使能信号未被断言而禁止所述追踪电路监视所述行为。
7.根据权利要求1所述的追踪单元,所述追踪控制数据包括初始被追踪值,所述追踪电路响应于在指令群组的执行期间指示执行地址的追踪状态元素的输出而对于所述群组设置所述初始被追踪值,其中,响应于检测到所述处理器撤消被设置了所述初始被追踪值的指令群组,所述追踪电路输出指示出在所述撤消之后执行的所述指令的执行地址的另一状态元素。
8.根据权利要求1所述的追踪单元,所述追踪控制数据包括被追踪兴趣值,所述被追踪兴趣值响应于对于一群组输出追踪元素而对于所述群组被设置并且在对于一群组未输出追踪元素的情况下对于所述群组被清除。
9.根据权利要求1所述的追踪单元,其中,所述追踪控制数据包括追踪多个值,所述值被设置表明所述群组包括多个生成追踪元素的追踪活性指令,所述值未被设置表明所述群组包括一个或零个追踪活性指令。
10.根据权利要求1所述的追踪单元,其中,所述追踪控制数据包括追踪多个值,所述值指示所述群组中的生成追踪元素的追踪活性指令的数目。
11.根据权利要求1所述的追踪单元,所述追踪单元被配置为生成索引值并存储与所述多个指令群组中的每个群组相关联的所述索引值,所述索引值对于每一个生成的追踪元素被更新。
12.根据权利要求11所述的追踪单元,所述追踪单元包括用于生成所述索引值的计数器,所述追踪电路在所述数据存储库中对于每个指令群组存储指示出所述群组的执行开始时的计数器值的第一计数器值和指示出所述群组的执行结束时的所述计数器值的最末计数器值中的至少一个。
13.根据权利要求1所述的追踪单元,所述追踪控制数据包括针对所述群组的追踪开始/停止值,所述追踪开始/停止值影响追踪使能是否被设置,所述追踪开始/停止值响应于检测到所述至少一个处理器的预定行为而被设置。
14.一种追踪单元,该追踪单元用于生成指示出执行至少一个指令流的至少一个处理器的处理活动的追踪数据项,所述至少一个指令流包括多个指令群组,所述至少一个处理器推测性地执行所述指令群组中的至少一些,所述追踪单元包括:
追踪电路,该追踪电路用于监视所述至少一个处理器的行为,所述追踪电路受当前追踪控制数据的控制;
数据存储库,该数据存储库用于存储与被执行的所述多个指令群组中的相应一个群组相关联的所述追踪控制数据中的至少一些;
所述追踪电路被配置为响应于检测到所述指令群组的执行而将所述追踪控制数据存储在所述数据存储库中;
所述追踪电路响应于检测到所述至少一个处理器撤消所述推测性执行的至少一个指令群组而取回存储在所述数据存储库中的所述追踪控制数据中的至少一些并且利用所述取回的追踪控制数据来控制所述追踪电路;
所述追踪单元响应于追踪使能信号被断言而使能所述追踪电路监视所述至少一个处理器的所述行为并且响应于所述追踪使能信号未被断言而禁止所述追踪电路监视所述行为;
所述追踪控制数据包括粘性值,无论追踪使能信号是否具有使能值,所述追踪电路响应于具有预定值的所述粘性值而为随后执行的追踪活性指令输出追踪值,并且重置所述粘性值,其中追踪活性指令是触发追踪数据项的输出的指令。
15.根据权利要求14所述的追踪单元,其中,所述追踪电路响应于检测到不是触发追踪数据项的输出的追踪活性指令的指令的执行而在所述追踪控制数据中设置所述粘性值。
16.根据权利要求15所述的追踪单元,其中,所述追踪电路响应于检测到所述多个指令群组之一中的不是触发追踪数据项的输出的追踪活性指令的最终指令的执行而在所述追踪控制数据中设置所述粘性值,并且,对于随后指令群组将所述被设置的粘性值存储在所述数据存储库中。
17.一种追踪单元,该追踪单元用于生成指示出执行至少一个指令流的至少一个处理器的处理活动的追踪数据项,所述至少一个指令流包括多个指令群组,所述至少一个处理器推测性地执行所述指令群组中的至少一些,所述追踪单元包括:
追踪电路,该追踪电路用于监视所述至少一个处理器的行为,所述追踪电路受当前追踪控制数据的控制;
数据存储库,该数据存储库用于存储与被执行的所述多个指令群组中的相应一个群组相关联的所述追踪控制数据中的至少一些;
所述追踪电路被配置为响应于检测到所述指令群组的执行而将所述追踪控制数据存储在所述数据存储库中;
所述追踪电路响应于检测到所述至少一个处理器撤消所述推测性执行的至少一个指令群组而取回存储在所述数据存储库中的所述追踪控制数据中的至少一些并且利用所述取回的追踪控制数据来控制所述追踪电路;
所述追踪单元被配置为生成索引值并存储与所述多个指令群组中的每个群组相关联的所述索引值,所述索引值对于每一个生成的追踪元素被更新;
所述追踪单元还包括用于生成所述索引值的计数器,所述追踪电路在所述数据存储库中对于每个指令群组存储指示出所述群组的执行开始时的计数器值的第一计数器值和指示出所述群组的执行结束时的所述计数器值的最末计数器值。
18.根据权利要求17所述的追踪单元,其中所述追踪电路被配置为,在接收到来自数据处理装置的表明被推测性执行的所选指令群组已被撤消的撤消指示时生成指示出所述被撤消的所选指令群组的撤消追踪项,并且,将关于当前计数器值和在所述被撤消的群组的执行开始时的所述计数器值之间的差异的信息包括在所述撤消追踪项中。
19.根据权利要求18所述的追踪单元,所述追踪控制数据包括被追踪兴趣值,所述被追踪兴趣值响应于对于一群组输出追踪元素而对于所述群组被设置并且在对于一群组未输出追踪元素的情况下对于所述群组被清除,其中所述追踪电路被配置为依据所述被追踪兴趣值来确定所述关于所述差异的信息。
20.一种追踪单元,该追踪单元用于生成指示出执行至少一个指令流的至少一个处理器的处理活动的追踪数据项,所述至少一个指令流包括多个指令群组,所述至少一个处理器推测性地执行所述指令群组中的至少一些,所述追踪单元包括:
追踪电路,该追踪电路用于监视所述至少一个处理器的行为,所述追踪电路受当前追踪控制数据的控制;
数据存储库,该数据存储库用于存储与被执行的所述多个指令群组中的相应一个群组相关联的所述追踪控制数据中的至少一些;
所述追踪电路被配置为响应于检测到所述指令群组的执行而将所述追踪控制数据存储在所述数据存储库中;
所述追踪电路响应于检测到所述至少一个处理器撤消所述推测性执行的至少一个指令群组而取回存储在所述数据存储库中的所述追踪控制数据中的至少一些并且利用所述取回的追踪控制数据来控制所述追踪电路;
所述追踪单元被配置为生成索引值并存储与所述多个指令群组中的每个群组相关联的所述索引值,所述索引值对于每一个生成的追踪元素被更新;
所述追踪单元包括用于生成所述索引值的计数器,所述追踪电路在所述数据存储库中对于每个指令群组存储指示出所述群组的执行开始时的计数器值的第一计数器值和指示出所述群组的执行结束时的所述计数器值的最末计数器值中的至少一个;
所述追踪单元响应于接收到来自数据处理装置的表明被推测性执行的所选指令群组已被实行的实行指示而生成指示出所述所选群组的实行追踪项,并且,对于所述所选群组包括关于当前计数器值和所述最末计数器值之间的差异的信息。
21.根据权利要求20所述的追踪单元,所述追踪控制数据包括被追踪兴趣值,所述被追踪兴趣值响应于对于一群组输出追踪元素而对于所述群组被设置,并且,在对于一群组未输出追踪元素的情况下对于所述群组被清除,其中,所述追踪电路被配置为依据所述被追踪兴趣值来确定所述关于所述差异的信息。
22.一种处理数据单元,包括用于执行指令流的数据处理装置和根据权利要求1所述的用于监视所述数据处理装置的追踪单元。
23.一种用于生成指示出执行至少一个指令流的至少一个处理器的处理活动的追踪数据项的方法,所述至少一个指令流包括多个指令群组,所述至少一个处理器推测性地执行所述指令群组中的至少一些,所述方法包括以下步骤:
利用受当前追踪控制数据的控制的追踪电路来监视所述至少一个处理器的行为;
存储与被执行的所述多个指令群组中的一个群组相关联的所述追踪控制数据中的至少一些;
响应于检测到所述至少一个处理器撤消所述推测性执行的至少一个指令群组而取回存储在所述数据存储库中的针对紧挨所述被撤消的推测性执行的指令之前执行的所述指令群组的所述追踪控制数据中的至少一些,并且,利用所述取回的追踪控制数据来控制所述追踪电路;
其中所述追踪控制数据包括先前被追踪值,所述方法还包括:
响应于检测到在在前群组中的最终指令被执行时追踪未被使能而对于随后指令群组设置所述先前被追踪值,以及
响应于检测到所述处理器撤消推测性执行的指令群组,并且,与所述被撤消的群组相关联地存储的所述先前被追踪值被设置而输出表明所述追踪开启的追踪元素。
24.一种追踪装置,该追踪装置用于生成指示出执行至少一个指令流的至少一个处理器的处理活动的追踪数据项,所述至少一个指令流包括多个指令群组,所述至少一个处理器推测性地执行所述指令群组中的至少一些,所述追踪装置包括:
受当前追踪控制数据控制的追踪监视装置,该追踪监视装置用于监视所述至少一个处理器的行为;
数据存储装置,该数据存储装置用于存储与被执行的所述多个指令群组中的相应一个群组相关联的所述追踪控制数据中的至少一些;
所述追踪监视装置用于响应于检测到所述指令群组的执行而将所述追踪控制数据中的所述至少一些存储在所述数据存储装置中;
所述追踪监视装置响应于检测到所述至少一个处理器撤消所述推测性执行的至少一个指令群组而取回存储在所述数据存储装置中的针对紧挨所述被撤消的推测性执行的指令之前执行的所述指令群组的所述追踪控制数据中的至少一些,并且,利用所述取回的追踪控制数据来控制所述追踪监视装置;
所述追踪控制数据包括先前被追踪值,所述追踪监视装置响应于检测到在在前群组中的最终指令被执行时追踪未被使能而对于随后指令群组设置所述先前被追踪值,所述追踪监视装置响应于检测到所述处理器撤消推测性执行的指令群组,并且,与所述被撤消的群组相关联地存储的所述先前被追踪值被设置而输出表明所述追踪开启的追踪元素。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1010356.2A GB2481385B (en) | 2010-06-21 | 2010-06-21 | Tracing speculatively executed instructions |
GB1010356.2 | 2010-06-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102289405A CN102289405A (zh) | 2011-12-21 |
CN102289405B true CN102289405B (zh) | 2016-11-23 |
Family
ID=42582707
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110184047.4A Active CN102289405B (zh) | 2010-06-21 | 2011-06-21 | 追踪推测性执行的指令 |
Country Status (4)
Country | Link |
---|---|
US (2) | US8769344B2 (zh) |
JP (1) | JP5604373B2 (zh) |
CN (1) | CN102289405B (zh) |
GB (1) | GB2481385B (zh) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2481385B (en) * | 2010-06-21 | 2018-08-15 | Advanced Risc Mach Ltd | Tracing speculatively executed instructions |
US8799719B2 (en) | 2011-05-19 | 2014-08-05 | International Business Machines Corporation | On demand tracing of application code execution |
US9003375B2 (en) * | 2011-12-30 | 2015-04-07 | Intel Corporation | Optional logging of debug activities in a real time instruction tracing log |
US9483268B2 (en) | 2012-03-16 | 2016-11-01 | International Business Machines Corporation | Hardware based run-time instrumentation facility for managed run-times |
US9454462B2 (en) | 2012-03-16 | 2016-09-27 | International Business Machines Corporation | Run-time instrumentation monitoring for processor characteristic changes |
US9411591B2 (en) | 2012-03-16 | 2016-08-09 | International Business Machines Corporation | Run-time instrumentation sampling in transactional-execution mode |
US9405541B2 (en) | 2012-03-16 | 2016-08-02 | International Business Machines Corporation | Run-time instrumentation indirect sampling by address |
US9158660B2 (en) | 2012-03-16 | 2015-10-13 | International Business Machines Corporation | Controlling operation of a run-time instrumentation facility |
US9367316B2 (en) | 2012-03-16 | 2016-06-14 | International Business Machines Corporation | Run-time instrumentation indirect sampling by instruction operation code |
US9430238B2 (en) | 2012-03-16 | 2016-08-30 | International Business Machines Corporation | Run-time-instrumentation controls emit instruction |
US9442824B2 (en) | 2012-03-16 | 2016-09-13 | International Business Machines Corporation | Transformation of a program-event-recording event into a run-time instrumentation event |
US9280447B2 (en) | 2012-03-16 | 2016-03-08 | International Business Machines Corporation | Modifying run-time-instrumentation controls from a lesser-privileged state |
US9465716B2 (en) | 2012-03-16 | 2016-10-11 | International Business Machines Corporation | Run-time instrumentation directed sampling |
US9250902B2 (en) | 2012-03-16 | 2016-02-02 | International Business Machines Corporation | Determining the status of run-time-instrumentation controls |
US9471315B2 (en) | 2012-03-16 | 2016-10-18 | International Business Machines Corporation | Run-time instrumentation reporting |
US9880842B2 (en) * | 2013-03-15 | 2018-01-30 | Intel Corporation | Using control flow data structures to direct and track instruction execution |
RU2635044C2 (ru) * | 2013-06-27 | 2017-11-08 | Интел Корпорейшн | Режим слежения в устройстве обработки в системах трассировки команд |
JP6122749B2 (ja) * | 2013-09-30 | 2017-04-26 | ルネサスエレクトロニクス株式会社 | コンピュータシステム |
US9626119B2 (en) * | 2014-11-14 | 2017-04-18 | Intel Corporation | Using counters and a table to protect data in a storage device |
US9910475B2 (en) | 2014-12-23 | 2018-03-06 | Intel Corporation | Processor core power event tracing |
US10061583B2 (en) * | 2014-12-24 | 2018-08-28 | Intel Corporation | Systems, apparatuses, and methods for data speculation execution |
GB2534923B (en) * | 2015-02-06 | 2022-03-09 | Advanced Risc Mach Ltd | Trace data capture device and method, system, diagnostic method and apparatus and computer program |
US9542290B1 (en) | 2016-01-29 | 2017-01-10 | International Business Machines Corporation | Replicating test case data into a cache with non-naturally aligned data boundaries |
US10169180B2 (en) | 2016-05-11 | 2019-01-01 | International Business Machines Corporation | Replicating test code and test data into a cache with non-naturally aligned data boundaries |
GB2551747B (en) * | 2016-06-29 | 2019-04-10 | Advanced Risc Mach Ltd | Diagnostic data capture |
US10055320B2 (en) | 2016-07-12 | 2018-08-21 | International Business Machines Corporation | Replicating test case data into a cache and cache inhibited memory |
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 |
US10223225B2 (en) | 2016-11-07 | 2019-03-05 | International Business Machines Corporation | Testing speculative instruction execution with test cases placed in memory segments with non-naturally aligned data boundaries |
US10261878B2 (en) | 2017-03-14 | 2019-04-16 | International Business Machines Corporation | Stress testing a processor memory with a link stack |
US9875167B1 (en) | 2017-03-29 | 2018-01-23 | Google Inc. | Distributed hardware tracing |
US10365987B2 (en) * | 2017-03-29 | 2019-07-30 | Google Llc | Synchronous hardware event collection |
GB2570466B (en) * | 2018-01-25 | 2020-03-04 | Advanced Risc Mach Ltd | Commit window move element |
US10956157B1 (en) | 2018-03-06 | 2021-03-23 | Advanced Micro Devices, Inc. | Taint protection during speculative execution |
US10936402B2 (en) | 2018-11-26 | 2021-03-02 | International Business Machines Corporation | Speculative data processing and recovery |
US11526780B2 (en) * | 2019-08-05 | 2022-12-13 | Microsoft Technology Licensing, Llc | Converting nonnative skills for conversational computing interfaces |
US11463443B2 (en) | 2019-09-19 | 2022-10-04 | Bank Of America Corporation | Real-time management of access controls |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0795271B2 (ja) * | 1989-06-20 | 1995-10-11 | 富士通株式会社 | 分岐命令実行装置 |
JP2563708B2 (ja) | 1990-11-29 | 1996-12-18 | 株式会社東芝 | マイクロプロセッサ装置およびそれを用いたエミュレータ装置 |
US5564028A (en) * | 1994-01-11 | 1996-10-08 | Texas Instruments Incorporated | Pipelined data processing including instruction trace |
US5802272A (en) * | 1994-12-19 | 1998-09-01 | Digital Equipment Corporation | Method and apparatus for tracing unpredictable execution flows in a trace buffer of a high-speed computer system |
US6094729A (en) * | 1997-04-08 | 2000-07-25 | Advanced Micro Devices, Inc. | Debug interface including a compact trace record storage |
US6021488A (en) * | 1997-09-23 | 2000-02-01 | International Business Machines Corp. | Data processing system having an apparatus for tracking a status of an out-of-order operation and method thereof |
US7137105B2 (en) * | 1999-05-12 | 2006-11-14 | Wind River Systems, Inc. | Dynamic software code instrumentation method and system |
US7058928B2 (en) * | 1999-12-23 | 2006-06-06 | Identify Software Ltd. | System and method for conditional tracing of computer programs |
US6681321B1 (en) * | 2000-04-20 | 2004-01-20 | International Business Machines Corporation | Method system and apparatus for instruction execution tracing with out of order processors |
US8069336B2 (en) | 2003-12-03 | 2011-11-29 | Globalfoundries Inc. | Transitioning from instruction cache to trace cache on label boundaries |
FR2864655B1 (fr) * | 2003-12-31 | 2006-03-24 | Trusted Logic | Procede de controle d'integrite de programmes par verification d'empreintes de traces d'execution |
US7228457B2 (en) * | 2004-03-16 | 2007-06-05 | Arm Limited | Performing diagnostic operations upon a data processing apparatus with power down support |
US7283619B2 (en) * | 2004-06-15 | 2007-10-16 | Cisco Technology, Inc. | System and method for end-to-end communications tracing |
US7707394B2 (en) * | 2006-05-30 | 2010-04-27 | Arm Limited | Reducing the size of a data stream produced during instruction tracing |
US7487340B2 (en) * | 2006-06-08 | 2009-02-03 | International Business Machines Corporation | Local and global branch prediction information storage |
US20080155339A1 (en) * | 2006-10-25 | 2008-06-26 | Gary S Lowe | Automated tracing |
US7757068B2 (en) * | 2007-01-16 | 2010-07-13 | Oracle America, Inc. | Method and apparatus for measuring performance during speculative execution |
GB2459652B (en) | 2008-04-28 | 2010-09-22 | Imagination Tech Ltd | Controlling instruction scheduling based on the space in a trace buffer |
GB2478328B (en) * | 2010-03-03 | 2015-07-01 | Advanced Risc Mach Ltd | Method, apparatus and trace module for generating timestamps |
GB2481385B (en) * | 2010-06-21 | 2018-08-15 | Advanced Risc Mach Ltd | Tracing speculatively executed instructions |
-
2010
- 2010-06-21 GB GB1010356.2A patent/GB2481385B/en active Active
-
2011
- 2011-06-13 US US13/067,603 patent/US8769344B2/en active Active
- 2011-06-20 JP JP2011136189A patent/JP5604373B2/ja active Active
- 2011-06-21 CN CN201110184047.4A patent/CN102289405B/zh active Active
-
2014
- 2014-03-12 US US14/205,438 patent/US9639361B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20140195786A1 (en) | 2014-07-10 |
US20110314342A1 (en) | 2011-12-22 |
GB201010356D0 (en) | 2010-08-04 |
JP5604373B2 (ja) | 2014-10-08 |
CN102289405A (zh) | 2011-12-21 |
JP2012003771A (ja) | 2012-01-05 |
GB2481385B (en) | 2018-08-15 |
US8769344B2 (en) | 2014-07-01 |
GB2481385A (en) | 2011-12-28 |
US9639361B2 (en) | 2017-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102289405B (zh) | 追踪推测性执行的指令 | |
EP2643751B1 (en) | Processing apparatus, trace unit and diagnostic apparatus | |
CN104205064B (zh) | 将程序事件记录事件向运行时间检测事件变换的系统及方法 | |
CN104380264B (zh) | 运行时间检测报告 | |
US6754856B2 (en) | Memory access debug facility | |
CN101501650B (zh) | 比较处理器指令集操作模式的调试电路 | |
US8407457B2 (en) | System and method for monitoring debug events | |
CN104364769B (zh) | 处理器特性的运行时间检测监控 | |
CN102855121B (zh) | 分支处理方法与系统 | |
JP5512041B2 (ja) | データ処理システムのトレース時のキー割り当て | |
KR19980079486A (ko) | 멀티스레드 프로세서에서의 성능 감시 방법 및 시스템 | |
CN102289361B (zh) | 对追踪数据流的关联 | |
CN103430158A (zh) | 使用执行单一步骤来诊断编码 | |
CN105074656B (zh) | 管理并发谓词表达式的方法和装置 | |
CN104169887B (zh) | 通过指令操作码的运行时间检测间接采样的方法和系统 | |
CN106855871A (zh) | 一种数据迁移的方法和装置 | |
CN109885489B (zh) | 驱动程序中数据竞争检测方法及装置 | |
US20160092182A1 (en) | Methods and systems for optimizing execution of a program in a parallel processing environment | |
EP3379418B1 (en) | Trace data representation | |
US9348688B2 (en) | Correlating trace data streams | |
CN107797873B (zh) | 控制将到处理电路的触发信号设定为有效态的装置及方法 | |
US9348591B2 (en) | Multi-level tracking of in-use state of cache lines | |
US7774652B2 (en) | Circuitry and method to detect conditions of data | |
US11263017B2 (en) | Exception register delay | |
CN116432189A (zh) | 基于性能监控单元的处理器侧信道攻击的挖掘方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |