用于生成和处理跟踪流的装置和方法与流程

文档序号:13982953阅读:210来源:国知局
用于生成和处理跟踪流的装置和方法与流程

本技术涉及用于生成指示数据处理系统内的处理电路的活动的跟踪流(tracestream)的机制,且具体而言是关于用于生成及处理指令由这样的处理电路所进行的指令执行的跟踪流的机制。



背景技术:

跟踪电路可用来生成跟踪流,该跟踪流包括系列的跟踪元素,使得之后可分析彼等跟踪元素以决定相关联的处理电路的活动(例如决定由处理电路所执行的指令的序列)。为了减少跟踪流内的跟踪信息的量,跟踪电路可被布置为不针对各个所执行的指令生成单独的跟踪元素,而是仅针对某些预定的执行的指令生成跟踪元素,例如针对各个所执行的分路指令生成跟踪元素。自关于预定指令的信息,分析电路可接着试图使用程序图像来重建关于所执行的指令的序列的信息。

最近,已提出了新型的指令,该等指令将在本文中称为分路行为设定指令。分路行为设定指令可有效地将分路行为与任何任意的指令相关联,以使得替代于或附加于与该任意指令相关联的正常操作而在遭遇该任意指令时采取分路。

这在使用上述的跟踪流方法来试图跟踪处理电路的执行行为时造成了显著的问题,在该方法中,仅针对某些预定指令生成跟踪元素。具体而言,虽然跟踪机制可被布置为针对各个分路指令生成跟踪元素,然而分路行为设定指令的使用允许了任意指令(跟踪机制并不将该等任意指令辨识为分路指令)起动指令流内的分路,这可能扰乱分析电路自由跟踪电路所生成的跟踪流正确决定处理电路的指令执行行为的能力。

本技术针对的是在这样的分路行为设定指令存在的情况下改良可靠的跟踪。



技术实现要素:

在一个示例配置下,提供了一种装置,该装置包括:输入接口,用于从处理电路接收指示由该处理电路所执行的指令序列的指令执行信息,所述序列包括分路行为设定指令,该分路行为设定指令指示所述序列内的经标识的指令,该分路行为设定指令的执行允许将分路行为与所述经标识的指令相关联,在所述序列中遭遇到该经标识的指令时,该分路行为使得该处理电路分路到由该分路行为设定指令所标识的目标地址;及跟踪生成电路,用于从该指令执行信息生成跟踪流,该跟踪流包括指示由该处理电路在所述序列内进行的指令流改变指令的执行的多个跟踪元素;及该跟踪生成电路还被布置为从该指令执行信息生成指示所述分路行为设定指令的执行行为的跟踪元素及用于指示已在所述序列内遭遇到所述经标识的指令之后触发所述分路行为的跟踪元素。

在另一示例配置中,提供了一种装置,该装置包括:输入接口,用于接收跟踪流,该跟踪流包括指示由处理电路在指令序列内进行的预定指令的执行的多个跟踪元素,该指令序列是由该处理电路所执行的,所述序列包括指示所述序列内的经标识的指令的分路行为设定指令,该分路行为设定指令的执行允许将分路行为与所述经标识的指令相关联,在所述序列中遭遇到该经标识的指令时,该分路行为使得该处理电路分路到由该分路行为设定指令所标识的目标地址;解压电路,响应于各个跟踪元素而从当前指令地址遍历程序图像,直到在所述程序图像内侦测到该等预定指令中的下一指令为止,及从该程序图像生成指示所述当前指令地址及该等预定指令中的所述下一指令间的该等指令的信息;及分路控制储存器,与所述解压电路相关联;该解压电路响应于在响应于预定类型的当前跟踪元素而遍历所述程序图像时侦测到至少一个类型的该分路行为设定指令,在该分路控制储存器内储存从该分路行为设定指令导出的分路控制信息;该解压电路被布置为在参考该分路控制信息而侦测到已在遍历该程序图像期间到达该经标识的指令时,将该经标识的指令视为所述预定指令中的该下一指令。

在又进一步的示例配置中,提供了一种生成指示由处理电路进行的指令执行的跟踪流的方法,包括以下步骤:从该处理电路接收指示由该处理电路所执行的指令序列的指令执行信息,所述序列包括分路行为设定指令,该分路行为设定指令指示所述序列内的经标识的指令,该分路行为设定指令的执行允许将分路行为与所述经标识的指令相关联,在所述序列中遭遇到该经标识的指令时,该分路行为使得该处理电路分路到由该分路行为设定指令所标识的目标地址;从该指令执行信息生成该跟踪流,该跟踪流包括指示由该处理电路在所述序列内进行的指令流改变指令的执行的多个跟踪元素;及从该指令执行信息生成指示所述分路行为设定指令的执行行为的跟踪元素及用于指示已在所述序列内遭遇到所述经标识的指令之后触发所述分路行为的跟踪元素。

在进一步的示例配置中,提供了一种装置,该装置包括:输入接口装置,用于从处理电路接收指示由该处理电路所执行的指令序列的指令执行信息,所述序列包括分路行为设定指令,该分路行为设定指令指示所述序列内的经标识的指令,该分路行为设定指令的执行允许将分路行为与所述经标识的指令相关联,在所述序列中遭遇到该经标识的指令时,该分路行为使得该处理电路分路到由该分路行为设定指令所标识的目标地址;及跟踪生成装置,用于从该指令执行信息生成跟踪流,该跟踪流包括指示由该处理电路在所述序列内进行的指令流改变指令的执行的多个跟踪元素;及该跟踪生成装置更用于从该指令执行信息生成指示所述分路行为设定指令的执行行为的跟踪元素及用于指示已在所述序列内遭遇到所述经标识的指令之后触发所述分路行为的跟踪元素。

依据另一示例配置,提供了一种处理跟踪流的方法,该跟踪流被生成来指示由处理电路进行的指令执行,该方法包括以下步骤:接收该跟踪流,该跟踪流包括指示由该处理电路在指令序列内进行的预定指令的执行的多个跟踪元素,该指令序列是由该处理电路所执行的,所述序列包括指示所述序列内的经标识的指令的分路行为设定指令,该分路行为设定指令的执行允许将分路行为与所述经标识的指令相关联,在所述序列中遭遇到该经标识的指令时,该分路行为使得该处理电路分路到由该分路行为设定指令所标识的目标地址;响应于各个跟踪元素而从当前指令地址遍历程序图像,直到在所述程序图像内侦测到该等预定指令中的下一指令为止,及从该程序图像生成指示所述当前指令地址及该等预定指令中的所述下一指令间的该等指令的信息;响应于在响应于预定类型的当前跟踪元素而遍历所述程序图像时侦测到至少一个类型的该分路行为设定指令,在分路控制储存器内储存从该分路行为设定指令导出的分路控制信息;及在参考该分路控制信息而侦测到已在遍历该程序图像期间到达该经标识的指令时,将该经标识的指令视为所述预定指令中的该下一指令。

在又进一步的示例配置中,提供了一种装置,该装置包括:输入接口装置,用于接收跟踪流,该跟踪流包括指示由处理电路在指令序列内进行的预定指令的执行的多个跟踪元素,该指令序列是由该处理电路所执行的,所述序列包括指示所述序列内的经标识的指令的分路行为设定指令,该分路行为设定指令的执行允许将分路行为与所述经标识的指令相关联,在所述序列中遭遇到该经标识的指令时,该分路行为使得该处理电路分路到由该分路行为设定指令所标识的目标地址;解压缩装置,用于响应于各个跟踪元素而从当前指令地址遍历程序图像,直到在所述程序图像内侦测到该等预定指令中的下一指令为止,及用于从该程序图像生成指示所述当前指令地址及该等预定指令中的所述下一指令间的这种指令的信息;及分路控制储存器装置,用于与所述解压缩装置相关联;该解压缩装置用于回应于在回应于预定类型的当前跟踪元素而遍历所述程序图像时侦测到至少一个类型的该分路行为设定指令,在该分路控制储存器装置内储存从该分路行为设定指令导出的分路控制信息;该解压缩装置用于在参考该分路控制信息而侦测到已在遍历该程序图像期间到达该经标识的指令时,将该经标识的指令视为所述预定指令中的该下一指令。

附图说明

仅通过示例的方式,将进一步参照如随附绘图中所示出的本技术的实施例描述本技术,在该等绘图中:

图1为依据一个实施例的系统的框图;

图2为框图,更详细地示出依据一个实施例来使用的跟踪模块;

图3为框图,更详细地示出依据一个实施例来使用的跟踪分析电路;

图4a及4b示意性地示出可依据一个实施例用在图1的系统内的不同形式的分路目标地址缓存器(btac);

图5为图示,示意性地示出零开销循环(zerooverheadloop)的操作;

图6为流程图,依据一个实施例示出跟踪模块生成与包括零开销循环的指令序列的执行相关联的跟踪元素的操作;

图7为流程图,依据一个实施例图示零开销循环的执行及所生成的相关联的跟踪元素。

图8示出包括分路未来(branch-future,bf)指令的示例程序序列;

图9为流程图,依据一个实施例示出跟踪模块生成与包括一个或多个分路未来指令的指令序列的执行相关联的跟踪元素的操作;

图10为流程图,依据一个实施例示出与在指令流中所接收的各个e原子相关联而在跟踪分析器处执行的解压缩操作;

图11为流程图,依据一个实施例示出与在指令流中所接收的各个n原子相关联而在跟踪分析器处执行的解压缩操作;

图12为流程图,依据一个实施例示出在处理元件的btac被无效化时所采取的步骤;

图13为流程图,依据一个实施例示出在接收跟踪流内的非事件分组之后由跟踪分析器所执行的步骤;

图14为流程图,依据一个实施例示出在决定已启用跟踪之后由跟踪模块所执行的步骤序列;及

图15为流程图,依据图14的方法示出跟踪模块内的基于饱和计数器的实施方式,该实施方式可在需要发出异常样式的原子时用来进行存取。

具体实施方式

跟踪数据处理系统内的处理电路的活动,从而生成可接着被分析来标识处理电路的逐步活动的跟踪元素流,在系统软件研发中是高度有用的工具。可例如分析跟踪流以促进由处理电路所执行的指令序列的除错。般而言,跟踪机制是与处理电路起提供在芯片上的,这样的芯片上跟踪机制的示例为由英国剑桥的arm有限公司所提供的与各种arm处理器相关联的嵌入式跟踪宏晶元(etm)。这样的跟踪机制可能潜在地生成大量的跟踪元素,该等跟踪元素接着需要被提供到芯片外以供进一步分析。已研发了许多技术来试图减少所生成的跟踪信息量同时仍允许之后分析处理电路的逐步活动。

如先前所述,用于减少所生成的跟踪信息的量的一个技术涉及仅针对由处理电路所执行的指令序列内的特定类型的指令输出跟踪元素,其中跟踪分析电路接着能够从关于那些特定指令的执行的信息重建处理电路的逐步的指令执行行为。作为示例,跟踪电路可每次在处理指令流改变指令(般是分路指令)时输出跟踪元素,该跟踪元素指示该分路是否已被采取,且分析电路可接着导出处理电路已在彼等指令(已针对彼等指令生成跟踪元素)之间执行了什么指令。

然而,先前所述的分路行为设定指令可能出现在指令序列内。分路行为设定指令的执行允许分路行为与由分路行为设定指令所标识的另指令(在本文中称为「经标识的指令」)相关联,这使得处理电路在指令序列中遭遇到经标识的指令时分路到由分路行为设定指令所标识的目标地址。因此,分路行为设定指令可有效地将任何任意的指令变成分路。

如先前所述,这在使用上述的跟踪流方法来试图跟踪处理电路的执行行为时造成了显著的问题,在该方法中,仅针对某些预定指令生成跟踪元素。所述的实施例用于缓解这些问题,而允许继续采纳上述的减少量的跟踪流的方法同时也适应包括分路行为设定指令的指令序列。

在参照随附图来讨论实施例之后,提供以下实施例说明。

在一个实施例中,提供了一种装置,该装置包括:输入接口,用于从相关联的处理电路接收指示由该处理电路所执行的指令序列的指令执行信息;及跟踪生成电路,用于从该指令执行信息生成跟踪流,该跟踪流包括指示由该处理电路在该序列内进行的指令流改变指令的执行的多个跟踪元素。该指令序列可包括指示该序列内的经标识的指令的分路行为设定指令。该分路行为设定指令的执行允许将分路行为与该经标识的指令相关联,在该序列中遭遇到该经标识的指令时,该分路行为使得该处理电路分路到由该分路行为设定指令所标识的目标地址。

进一步地,该跟踪生成电路被布置为从该指令执行信息生成指示该分路行为设定指令的执行行为的跟踪元素及用于指示已在该序列内遭遇到该经标识的指令之后触发所述分路行为的跟踪元素。在跟踪流内使用这些额外跟踪元素的情况下,这针对跟踪分析器提供了高效的机制,该跟踪分析器随后接收跟踪流以决定由处理电路所执行的指令序列。具体而言,在跟踪流内提供此额外的信息时,跟踪分析器可决定分路行为设定指令的执行何时已使得分路行为与经标识的指令相关联,且因此可能正确地解译跟踪元素序列以决定指令流上的改变在指令序列内发生的各个时点。

在一个实施例中,在该分路行为设定指令的执行使得该分路行为与该经标识的指令相关联时,该处理电路被布置为在分路控制储存器内储存用于该经标识的指令的分路控制信息。该跟踪生成电路接着被布置为:在该指令执行信息指示分路已由于在用于该经标识的指令的分路控制信息被储存在该分路控制储存器内时在该序列中遭遇到该经标识的指令而发生时,生成指示已触发所述分路行为的跟踪元素。因此,若用于经标识的指令的相关联的分路控制信息在遭遇到经标识的指令时仍存在于分路控制储存器内,且该遭遇事件确实使得分路发生,则跟踪生成电路可生成跟踪元素以指示分路行为已被触发,而允许跟踪分析器在之后决定在遭遇到经标识的指令之后已发生的指令流上的改变。

在一个实施例中,若在遭遇到经标识的指令时,在分路控制储存器内不再存在任何相对应的分路控制信息,则这将意味的是,分路行为未在处理电路内触发,且据此跟踪生成电路将不生成指示分路行为已被触发的跟踪元素。在某些实施例中,取决于分路行为设定指令的类型,跟踪生成电路可被布置为在分路控制储存器的内容被无效化时在跟踪流内发出一个或多个额外分组,以便允许跟踪分析器在这样的情况下正确跟踪处理电路的活动。

分路行为设定指令可采取各种形式。在一个实施例中,该分路行为设定指令是程序循环主体的结束处的循环末端指令,该经标识的指令是所述程序循环主体内的紧接在前的指令,且所述目标地址是该程序循环主体的开始处的指令的地址。该跟踪生成单元接着被布置为:每次在该指令执行信息指示分路已由于在用于所述紧接在前的指令的分路控制信息被储存在该分路控制储存器内时遭遇到所述紧接在前的指令而发生时,发出指示已触发所述分路行为的跟踪元素。

这样的循环末端指令可用来实施所谓的「零开销循环」,其中并不需要在各个循环迭代期间执行循环末端指令,且反而在第一次迭代之后,可在遭遇到程序循环主体中的倒数第二个指令时触发进一步迭代所需的分路行为。通过使跟踪生成单元以上述方式生成跟踪元素,这允许分析电路正确跟踪处理电路的这样的零开销循环的执行。

在一个实施例中,将不总是仅由于在用于紧接在前的指令的分路控制信息被储存在分路控制储存器内时遭遇到该紧接在前的指令而触发分路行为。反而,此外,在该时点决定需要程序循环主体的至少一个进一步迭代也将是必要的,且仅在那时分路行为才将被触发。据此,仅在这样的条件下,跟踪生成单元才将发出指示分路行为已被触发的跟踪元素。在一个实施例中,若分路行为在该实例中未被触发,则不需要由跟踪生成单元在该时点发出跟踪元素。

在一个实施例中,循环末端指令的执行将不总是使得分路行为与紧接在前的指令相关联。在该循环末端指令的执行确实使得该分路行为与所述紧接在前的指令相关联时,该处理电路被布置为分路到所述目标地址,且该跟踪生成电路被布置为发出将采取的分路指示为所述循环末端指令的该执行行为的跟踪元素。反过来,在不需要该循环主体的进一步迭代时,该循环末端指令的执行将使得该处理电路离开该程序循环主体,且该跟踪生成电路被布置为发出将不采取的分路指示为所述循环末端指令的该执行行为的跟踪元素。

在一个实施例中,可将原子形式的跟踪元素用于此目的,且在循环末端指令的执行使得分路行为与紧接在前的指令相关联时,可与该循环末端指令的执行相关联而发出e原子,否则n原子可与循环末端指令的执行相关联。

在一个实施例中,在事件使得用于所述紧接在前的指令的该分路控制信息在该分路控制储存器内被无效化且同时仍需要该程序循环主体的进一步的迭代时,在下次遭遇到所述紧接在前的指令之后将不触发该分路行为。然而,该处理电路响应于该循环末端指令的下次执行,使得该分路行为与所述紧接在前的指令重新相关联,且使得采取分路到所述目标地址,藉此恢复该程序循环主体的该等进一步迭代的处理。该跟踪生成电路接着被布置为发出将采取的分路指示为所述循环末端指令的该执行行为的进一步跟踪元素。

因此,在这样的实施例中,在仍需要一个或多个剩余的程序循环主体迭代的同时无效化分路控制储存器内容从跟踪的角度来看并不造成任何问题,因为后续的循环末端指令的执行将使得分路行为与紧接在前的指令重新相关联。虽然跟踪分析器在此实例中不能在遭遇到循环主体内的紧接在前的指令之后所采取的分路或由于重新执行循环末端指令而采取的分路之间进行区隔,这并不重要,因为跟踪分析器仍将从所发出的跟踪元素正确地跟踪各个程序循环主体迭代的执行。

可由所述的实施例所支持的另一类型的分路行为设定指令是分路未来指令。该指令序列可仅包括先前所述的循环末端指令形式的分路行为设定指令、仅包括分路未来指令形式的分路行为设定指令或在指令序列内可具有循环末端指令及分路未来指令两者的混合物。

在该分路行为设定指令是分路未来指令时,该经标识的指令是该序列内的该分路未来指令之后的指令。任何任意的指令可被分路未来指令指定为经标识的指令。在这样的实施例中,在该分路未来指令的执行使得该分路行为与所述经标识的指令相关联时,该跟踪生成电路被布置为发出跟踪元素,该跟踪元素指示,作为所述分路未来指令的该执行行为,该分路行为已被相关联。反过来,在该分路未来指令的执行并不使得该分路行为与所述经标识的指令相关联时,该跟踪生成电路被布置为发出跟踪元素,该跟踪元素指示,作为所述分路未来指令的该执行行为,该分路行为未被相关联。通过这样的方法,可将各个分路未来指令的执行行为捕捉在跟踪流内,因此允许跟踪分析器决定分路未来指令的执行是否已使得分路行为与经标识的指令相关联。

存在着分路未来指令的执行为何可不使得分路行为与经标识的指令相关联的许多理由。例如,分路未来指令可被布置为是有条件的,使得仅在满足某些条件时,分路行为才将与经标识的指令相关联。并且,在某些实施例中,可能选择性地停用分路未来机能,停用的结果是,任何遭遇到的分路未来指令将不使得分路行为与经标识的指令相关联。

由跟踪生成电路所发出来标识分路未来指令的执行行为的跟踪元素的形式可采取各种形式。然而,在一个实施例中,用来指示采取的及不采取的分路的跟踪元素为此目的而被重复使用。具体而言,在一个实施例中,该跟踪生成电路被布置为在该跟踪元素指示该分路行为已被相关联时发出与用来指示采取的分路相同的类型的跟踪元素,且该跟踪生成电路被布置为在该跟踪元素指示该分路行为未被相关联时发出与用来指示不采取的分路相同的类型的跟踪元素。因此,在一个特定实施例中,先前所述的e及n原子可用于此目的。

在一个实施例中,一个分路未来指令的执行可能使得分路控制储存器中与先前的分路未来指令相关联的有效条目被覆盖。在这样的状况下,跟踪生成电路可被布置为发出进一步的跟踪元素以向跟踪分析电路标识该事实。具体而言,在一个实施例中,在该分路未来指令的执行使得该分路行为与该经标识的指令相关联且由该处理电路储存在该分路控制储存器内的用于该经标识的指令的该分路控制信息覆盖了与先前执行的分路未来指令的该经标识的指令相关联的有效分路控制信息时,该跟踪生成电路被布置为发出非事件跟踪元素。跟踪分析器可接着被布置为响应于非事件跟踪元素而更新该跟踪分析器的内部维护的记录,以便标识将不与该先前的分路未来指令的经标识的指令相关联而发生分路。在一个实施例中,在被发出以指示分路未来指令的执行已使得分路行为与经标识的指令相关联的跟踪元素之前,在跟踪流中发出非事件跟踪元素。

在一个实施例中,若跟踪分析器知道分路控制储存器内所使用的替换策略,且该跟踪分析器从跟踪流中的其他跟踪元素确定条目将被覆盖,则可能不需要在跟踪流内单独发出非事件跟踪元素。

在一个实施例中,在该分路未来指令的执行及在所述序列中遭遇到该经标识指令的事件之间的指令执行中的时点处启用跟踪时,该跟踪生成电路响应于在遭遇到该经标识的指令之后所采取的分路而发出跟踪元素以标识该经标识的指令及已在遭遇到该经标识的指令之后采取的该分路两者。

此特殊形式的跟踪元素因此相较于在已够早地启用跟踪行为使得先前的分路未来指令的执行行为也将被跟踪时遭遇到经标识的指令时所发出的先前所述的跟踪元素而言需要捕捉更多信息,因为在跟踪元素内提供充分的信息以皆清楚地标识经标识的指令及完全标识已在遭遇到该经标识的指令之后所采取的分路是必要的。因此,在一个实施例中,该跟踪元素将需要标识经标识的指令的地址及目标地址。虽然这在跟踪带宽的意义上是相对昂贵的,将理解的是,这样的跟踪元素的使用不太可能经常需要,因为在大多数情况中所期望的是,将不在分路未来指令的执行及在序列中遭遇到相关联的经标识的指令的事件之间的时点处启用跟踪行为。在一个实施例中,预先存在的跟踪元素格式类型(也就是已经用于提供关于在指令执行期间发生的异常的信息的跟踪元素格式)可用于此特殊的跟踪元素。

存在着跟踪生成电路可决定已在分路未来指令的执行及遭遇到经标识的指令的事件间的指令执行中的时点处启用跟踪行为的情况的许多方式。在一个实施例中,该跟踪生成电路被布置为与该分路控制储存器中的各个条目相关联而维持计数器值,该条目与分路未来指令的经标识的指令相关联,且该跟踪生成电路被布置为:在用于该分路控制储存中的相关条目的该计数器值在遭遇到该经标识的指令之后采取了该分路时具有非预期值时,发出所述跟踪元素以标识该经标识的指令及已在遭遇到该经标识的指令之后采取的该分路两者。

在一个特定实施例中,计数器可在跟踪生成电路针对分路未来指令发出跟踪元素以指示分路行为已与经标识的指令相关联(在一个实施例中是通过发出e原子)时递增,且可在侦测到已随后针对经标识的指令采取了分路时递减。因此,会期望的是,计数器的值在遭遇到经标识的指令之后采取分路时会是非零的,且若该值反而是零,则这在一个实施例中用来指示反而应由跟踪生成电路发出先前所述的异常样式分组。

在一个实施例中,各种事件可使得分路控制储存器内的分路控制信息被无效化。例如,在一个实施例中,在处理电路采取异常行为时,分路控制储存器的当前内容被无效化。在这样的情况下,跟踪生成电路可被布置为在跟踪流内发出无效化跟踪元素,以允许跟踪分析器后续决定分路控制储存器的内容何时已被无效化。然而,在其他实施例中,可能不需要发出特殊的无效化跟踪元素,因为跟踪分析器可能能够从跟踪流内所发出的其他分组决定分路控制储存器内容已被无效化。例如,基于其他理由,可在分路控制储存器内容被无效化时发出另分组,且跟踪分析器可能能够从该分组决定分路控制储存器的内容已被无效化。作为特定示例,可在遭遇到中断行为之后发出中断分组,且跟踪分析器可被布置为从中断分组的存在决定分路控制储存器将被无效化。

在遭遇到序列内的经标识的指令之后触发分路行为时,处理电路在一个实施例中可被布置为除了触发分路行为以外仍执行经标识的指令,而在替代性实施例中,该处理电路可仅触发分路行为且抑制经标识的指令本身的执行。因此,在后者的情况下,分路行为有效地替换了经标识的指令的正常执行行为。

储存在分路控制储存器内的分路控制信息可采取各种形式,在一个实施例中至少包括了提供经标识的指令的指示的分路点数据及提供目标地址的指示的进一步数据。分路点数据可采取各种形式,但足以允许决定经标识的指令,且因此允许侦测该经标识的指令何时已被处理电路遭遇到。

在一个实施例中,分路点数据可包括以下中的一个或多个:地址数据,指示所述经标识的指令的地址;末端数据,指示紧接在所述经标识的指令之前的最后指令的地址;偏位数据,指示所述分路行为设定指令及所述经标识的指令之间的距离;适当的位子集合,指示所述经标识的指令的存储器储存器地址,该存储器储存器地址从所述存储器储存器地址的位的最低有效位端开始,该最低有效位端在指令的开始储存器地址之间进行区隔;剩余大小指令数据,指示在所述经标识的指令之前所剩下要处理的指令数量;及剩余大小数据,指示在到达所述经标识的指令之前所剩余要处理的程序储存器位置数量。

将理解的是,这些各种选项提供了用于决定何时已在指令序列内到达经标识的指令的机制。

在进一步实施例中,可提供一种用于执行跟踪分析功能的装置。具体而言,这样的装置可包括:输入接口,用于接收跟踪流,该跟踪流包括指示由处理电路在指令序列内进行的预定指令的执行的多个跟踪元素,该指令序列是由该处理电路所执行的,所述序列包括指示所述序列内的经标识的指令的分路行为设定指令,该分路行为设定指令的执行允许将分路行为与所述经标识的指令相关联,在所述序列中遭遇到该经标识的指令时,该分路行为使得该处理电路分路到由该分路行为设定指令所标识的目标地址。该装置更包括:解压电路,响应于各个跟踪元素而从当前指令地址遍历程序图像,直到在所述程序图像内侦测到该等预定指令中的下一指令为止,及从该程序图像生成指示所述当前指令地址及该等预定指令中的所述下一指令间的该等指令的信息。分路控制储存器与所述解压电路相关联。该解压电路响应于在响应于预定类型的当前跟踪元素而遍历所述程序图像时侦测到至少一个类型的该分路行为设定指令,在该分路控制储存器内储存从该分路行为设定指令导出的分路控制信息。进一步地,该解压电路被布置为在参考该分路控制信息而侦测到已在遍历该程序图像期间到达该经标识的指令时,将该经标识的指令视为所述预定指令中的该下一指令。

因此,考虑预定指令为分路指令的示例,接着即使分路行为设定指令可能本身不是分路指令,且确实经标识的指令可能本身不是分路指令,经由与解压电路相关联而使用分路控制储存器,解压电路可侦测处理电路何时已将分路行为与经标识的指令相关联,且可侦测到在程序图像内何时遭遇到了经标识的指令。在此时,可接着对待经标识的指令如同该经标识的指令是分路指令般。即使在所执行的指令序列包括了一个或多个分路行为设定指令时,这也因此允许仅针对由处理电路所执行的某些指令生成跟踪元素的跟踪流的生成被跟踪分析电路正确分析,且因此可潜在地将任何任意的指令转变成分路。

虽然解压电路可被布置为针对在遍历程序图像时所遭遇到的各个分路行为设定指令在该解压电路的相关联分路控制储存器中制作条目,在一个实施例中,该解压电路仅针对分路未来指令而不是针对先前所述的循环末端指令这样做。具体而言,在一个实施例中,解压电路并不需要在循环末端指令及由该循环末端指令所指定的经标识的指令(也就是程序循环主体内紧接在前的指令)之间进行区隔来正确跟踪处理电路的指令执行行为,且因此不需要针对经标识的指令在解压电路的相关联分路控制储存器中制作条目。

储存在与解压电路相关联的分路控制储存器内的信息可采取各种形式。在一个实施例中,该解压电路被布置为将分路点数据储存为该分路控制信息,该分路点数据由该分路行为设定指令所标识且用来决定该经标识的指令。并且,在一个实施例中,该解压电路被布置为在可从该分路行为设定指令内所指定的立即值直接导出该目标地址时将该目标地址储存为该分路控制信息。因此,若该目标地址可从立即值直接导出,则解压电路可从程序图像决定目标地址,且因此将目标地址捕捉在该解压电路的本端分路控制储存器内。这允许该解压电路在之后遭遇到经标识的指令时直接决定要分路到程序图像内的何处。若目标地址反而不是可直接标识的,则在一个实施例中,跟踪流将包括直接标识目标地址的信息,且因此解压电路可能从提供在跟踪流内的信息决定目标地址。

在一个实施例中,解压电路也可被布置为响应于先前所述的非事件跟踪元素或无效化跟踪元素,其中可选地使用该等跟踪元素。具体而言,该解压电路可被布置为响应于该跟踪流中的非事件跟踪元素而无效化该解压电路的相关联分路控制储存器中的特定条目。类似地,响应于无效化跟踪元素,解压电路可被布置为无效化该解压电路的相关联分路控制储存器的内容。

现将参照附图来描述特定的实施例。

图1示意性地示出依据一个实施例的系统,该系统提供了受监视的电路10、跟踪模块20、跟踪缓冲器30及跟踪分析器40。虽然图1示出了提供跟踪缓冲器30的系统,在替代性实施例中,跟踪模块20可将该跟踪模块的输出在不透过跟踪缓冲器的情况下直接传递到跟踪分析器40。跟踪模块20被布置为生成包括系列跟踪元素的跟踪流,该等跟踪元素接着允许跟踪分析器重建受监视的电路10的活动。受监视的电路10可采取各种形式,但在一个实施例中包括了被布置为执行指令序列的至少一个处理元件(例如处理器核心)。受监视的电路向跟踪模块20输出指示在受监视的电路上被执行的指令的指令执行信息。

跟踪模块(其在一个实施例中是实施在芯片上,且例如可采取由英国剑桥的arm有限公司所生产的etm电路的形式)被布置为生成提供系列跟踪元素的跟踪流,其中跟踪元素指示指令序列内的预定指令的执行。因此,跟踪流内的跟踪元素仅指示某些预定指令的执行,而不是生成表示由受监视的电路所执行的各个指令的跟踪元素,其中跟踪分析器具有充分的知识(例如透过程序图像)来允许该跟踪分析器重建关于已在各个这样的预定指令(跟踪元素是针对该预定指令提供的)之间执行的指令的信息。例如,在一个实施例中,跟踪模块可被布置为针对在序列内所执行的每个指令流改变指令(般是分路指令)生成跟踪元素,该跟踪元素提供关于是否采取了分路的信息,且跟踪分析器40具有程序图像以允许该跟踪分析器基于关于分路指令的处理的信息来决定已执行的实际指令序列。这允许生成显著减少的量的跟踪元素。这是非常有用的,因为跟踪分析器40般实施在芯片外,且因此需要将跟踪流透过芯片的针脚路由到分析器。

由受监视的电路所执行的指令序列可包括一个或多个分路行为设定指令。分路行为设定指令能够将分路行为与由分路行为设定指令明确地或隐含地标识的任意指令相关联,且接着在之后遭遇到该经标识的指令时,这可使得受监视的电路采取通往目标地址的分路(替代于或附加于执行由经标识的指令所要求的功能),该分路是由分路行为设定指令所标识的。为了支持此行为,受监视的电路可能具有相关联的分路控制储存器,在一个实施例中该分路控制储存器采取具有一个或多个条目的分路目标地址高速缓存(btac)的形式。

在执行分路行为设定指令时,这可使得将条目分配在btac中(取决于分路行为设定指令的类型,可能发生评估行为以决定是否应分配条目),且该条目将经标识指令由分路未来指令所指示的地址记录为源地址以及记录标识在遭遇到该经标识指令时处理电路所应分路到的地址的目标地址。在一个实施例中,在执行以上述方式造成btac的填入的分路行为设定指令之后,在处理电路接着侦测到该处理电路的btac的条目中的一个的命中时(例如由于侦测到该处理电路的程序计数器已更新到或即将更新到相对应于保存在btac的条目中的一个中的源地址的值),该处理电路可被布置为使得指令流分路到也被捕捉在btac的该条目中的目标地址(如之后将更详细讨论的,取决于分路行为设定指令的类型,可依据也存在的另条件有条件地做出采取分路的行为)。

通过这样的方法,可以看出,分路行为设定指令可用来有效地将任何任意的指令转变成分路。该经标识指令的形式并不重要,因为在以上述方式由分路行为设定指令标识时,处理电路可被布置为在之后遭遇到该经标识指令之后执行由分路行为设定指令所标识的分路。可依需要有条件地执行分路行为设定指令。因此,在满足用于执行分路行为设定指令的条件时,以上所讨论的处理行为将发生,且在之后遭遇到经标识的指令时,受监视的电路可执行通往目标地址的分路(附加于或替代于执行经标识的指令)。从而,若在要执行分路行为设定指令时未满足该等条件,则将不执行分路行为设定指令,且在适当的时候,经标识的指令将以该经标识指令的正常方式执行以执行由该经标识指令所指定的功能。

虽然这样的分路行为设定指令的使用将显著的弹性添加进可通过受监视的电路10来执行的操作,这在跟踪模块20被布置为生成先前所述的类型的跟踪流时对于该跟踪模块造成了显著的问题,其中仅针对由受监视的电路所执行的序列内的特定的预定指令生成跟踪元素。具体而言,若跟踪模块被设置为针对所执行的各个指令流改变指令生成跟踪元素,则该跟踪模块般不会针对已被分路行为设定指令标记为造成分路的经标识指令生成跟踪元素,因为该经标识的指令在很大的程度上本身并非分路指令。若跟踪流并未正确标记已经发生这样的分路,则将理解的是,跟踪分析器将不能够正确地导出由受监视的电路所执行的指令序列。

可能的是,布置跟踪生成电路以使用如同该跟踪生成电路可能跟踪关于何时已发生异常的信息的相同方式,来跟踪由于到达由受监视的电路的btac中的条目所标记的经标识指令而发生的任何这样的分路。然而,这在跟踪带宽的意义上是昂贵的,因为会需要跟踪经标识指令的地址及所分路到的目标地址两者,且因此这可能显著损害跟踪流格式的效率。

如将在本文中进一步讨论,提供了一种机制,该机制允许跟踪生成电路高效地跟踪在受监视的电路内由于遭遇到匹配受监视的电路的btac中的条目的经标识指令而发生的分路。

图2为框图,示出一个实施例的跟踪模块20。如图所示,跟踪模块20耦接至处理元件50,该处理元件在一个实施例中形成了受监视的电路10的至少部分。处理元件50具有相关联的btac55,该btac维护基于分路行为设定指令的执行而填入的分路控制信息。btac55具有一个或多个条目,且在处理元件50执行分路行为设定指令时,若分路行为设定指令的执行指示先前所述的分路行为应与经标识的指令相关联,则btac55中的条目中的一个将被填以某个分路控制信息。

在如图4a中所示一个实施例中,btac55内的各个条目可包括源地址栏155及目标地址栏160,在该源地址栏中捕捉了由分路行为设定指令所指示的经标识指令的地址,在该目标地址栏中储存了由分路行为设定指令所标识的目标地址。虽然,在一个实施例中,字段155储存经标识指令的地址,更般而言,字段155储存分路点数据,该分路点数据可采取先前所讨论的任何形式的但足以允许处理元件侦测该处理元件何时在指令流内遭遇到经标识的指令。在btac55的条目中的一个中侦测到命中而指示已在指令流内遭遇到经标识的指令时,接着若满足任何其他所需的条件,则处理元件分路到相关联的目标地址栏160中的目标地址(附加于或替代于执行经标识的指令)。

在一个实施例中,可支持多于一种的分路行为设定指令,其中字段165被提供在各个btac条目55内以标识该条目所关联的分路行为设定指令的类型。可接着提供分路及循环控制电路58以参考特定条目的该字段165以决定是否应调用分路行为,其中已在btac中针对该特定条目侦测到命中。

在一个实施例中,支持第类型的分路行为设定指令,该指令在本文中将称为分路未来指令。在执行分路未来指令时,经标识的指令可为处理电路在执行分路未来指令之后的某个时点处在指令序列内将遭遇到的任何任意指令。分路未来指令的执行可有条件地进行,且确实在某些实施例中为了向下兼容的理由可能可以停用分路未来功能。然而,若执行了分路未来指令,则btac55中的条目中的一个将如上文所讨论地被填入。之后,在指令流内遭遇到经标识的指令时,接着若btac55中的相对应条目仍然存在,这将使得分路及循环控制电路58决定应调用分路行为,且其结果是处理元件50将分路到btac55的该条目中所标识的目标地址。此时,分路及循环控制电路58可接着无效化该btac条目。

在一个实施例中可支持的第二类型的分路行为设定指令为用作程序循环中的最终指令的零开销循环末端(zole)指令。该指令可被布置为将循环中紧接在前的指令标识为经标识的指令,且将程序循环的开始位置的地址指示标识为目标地址。在第一次迭代时,zole指令可被布置为若需要程序循环的至少一个进一步迭代则填入btac55中的条目,且接着分路到程序循环的开始位置。在每次后续的迭代时,在遭遇到经标识的指令(也就是程序循环的倒数第二个指令)时,接着若相对应的条目仍存在于btac55中,且若仍有程序循环的至少一个进一步迭代要执行,则分路及循环控制电路58将决定应调用上述的分路行为,而使得处理元件50除了执行该倒数第二个指令以外分路到程序循环的开始位置。这可显著增加程序循环的执行的效能。在适当的时候,在循环的最终迭代期间遭遇到经标识的指令时,接着若仍填入相关的btac条目,则分路及循环控制电路58可决定无效化该btac条目且不调用分路行为。

在处理元件50执行指令序列时,该处理元件将指令执行信息传递到跟踪模块20的输入接口65,该指令执行信息从该输入接口递送到跟踪生成电路60。在一个实施例中,此指令执行信息将包括标识分路行为设定指令的执行行为的信息(足以决定该指令的执行是否已导致在btac55中制作条目的信息),且将包括标识分路何时由于btac条目中的一个中的命中而已发生的信息。

在一个实施例中,btac55中的各个条目可具有额外的字段来捕捉关于目标地址是否是直接目标地址(也就是可从从分路行为设定指令直接决定(例如通过提供为分路行为设定指令内的立即值))或是间接目标地址(例如其中分路行为设定指令标识缓冲器,该缓冲器的内容用来导出目标地址)的信息,且此信息可被提供在由处理元件50向跟踪生成电路60所提供的指令执行信息内,以供由跟踪生成电路60在肇因于btac55内的命中的分路发生时决定要将什么信息包括在跟踪流内时使用。

在一个实施例中,跟踪生成电路60被布置为每当执行指令序列内的分路指令则输出该跟踪生成电路的跟踪流内的跟踪元素,该跟踪元素也指示分路是否被采取,这可从透过输入接口65接收自处理元件50的指令执行信息导出。接着透过输出接口70递送跟踪元素流以供向前传播到跟踪缓冲器30及/或跟踪分析器40。各个这样的跟踪元素在本文中也可称为“原子”,“e原子”指示分路已被采取,而“n原子”指示分路还未被采取。

进一步地,跟踪生成电路60被布置为发出指示各个分路行为设定指令的执行行为的跟踪元素。这样的跟踪元素的目标是提供充分的信息供分析电路40决定该分路行为设定指令的执行是否已使得在btac55内填入了条目。考虑zole指令的先前的示例,该指令实际上是分路指令本身,且若采取分路以将处理返回到程序循环的开始,则该指令将指示zole指令的执行已使得制作了btac55中的条目的情况。从而,若不采取分路,则将不在btac55中制作条目。因此,在该情况中仅取决于zole指令的分路行为而发出e或n原子即是足够的。

对于分路未来指令而言,在一个实施例中,该指令本身不是分路指令,但跟踪机制可被布置为使得若分路未来指令的执行使得在btac55中成功注册了条目则由跟踪生成电路60发出e原子,且否则发出n原子。

此外,跟踪生成电路60被布置为基于指令执行信息来侦测分路何时已由于处理元件的btac55中的命中而发生。在该情况中,跟踪生成电路也在跟踪流内发出跟踪元素以指示已发生通往目标地址的分路(在一个实施例中是通过发出e原子)。若可从分路行为设定指令直接导出目标地址,则不需要在跟踪流内标识目标地址本身,因为跟踪分析器40将接着能够决定目标地址。然而,若目标地址不是可直接导出的,则跟踪生成电路60将从由处理元件50所提供的信息决定目标地址,且将在跟踪流内输出目标地址,使得该目标地址可接着由跟踪分析器40所使用。

如之后参照图15将更详细讨论的,在一个实施例中,跟踪模块20可具有用于针对btac55中的各个条目维护饱和计数器的计数电路62,该计数器可用来侦测以下情况:已在执行分路未来指令的时点之间启用跟踪,及在指令序列中遭遇到了相对应的经标识的指令。

图3为图示,示意性地示出一个实施例的跟踪分析器40。跟踪分析器40在其输入接口105处接收跟踪流,接着从该输入接口将该信息递送到解压电路100。解压电路100有权存取程序图像110,该程序图像提供了由受监视的电路所执行的程序代码的复本。解压电路100保持跟踪程序图像内的当前地址(该当前地址在预定时点处(例如在开启跟踪时)或经由专用跟踪信息被设定为预定初始值),且每次接收到新的原子时,该解压电路遍历(traverse)程序图像直到该解压电路到达程序图像内具有特定类型的下一指令(例如上述示例中的分路指令,其中跟踪流内的各个跟踪元素指示分路指令的执行)为止。解压电路从程序图像信息抽取关于在当前地址及该下个预定指令的地址之间所执行的指令中的各项的信息,且向分析电路120输出所有该执行信息以供分析。一旦已在程序图像中遭遇到该下个预定指令,则接着基于该遭遇到的分路的目标地址来更新当前地址,使得在跟踪流中接收到下个原子时,相同的程序图像遍历程序可再次开始而从新的当前地址开始。

如先前所述,除了标准的分路指令以外,跟踪流也将包括在处理元件50已执行分路行为设定指令时及在跟踪模块20已侦测到通往目标地址的分路已由于由分路行为设定指令所指示的经标识的指令而发生时已由跟踪模块20所安插的跟踪元素,其中该分路行为设定指令已被处理元件50遭遇到。为了允许解压电路100在这样的情况中执行程序图像的适当遍历行为,解压电路也具有相关联的本端btac(在图3中称为解压btac115)。在解压电路100遍历程序图像110时且在该解压电路遭遇到在btac55中填入条目的分路行为设定指令时,该解压电路接着在解压btac115内储存从该分路行为设定指令导出的分路控制信息。在一个实施例中,解压btac采取图4b中所示的形式,且包括一个或多个条目,其中各个条目具有用于将由分路行为设定指令所标识的指令的地址储存为源地址(或储存如先前所讨论的任何其他等效的分路点数据)的字段175,且也具有字段180用于在目标位置可直接从分路行为设定指令决定时储存目标地址。具体而言,在该情况中,解压电路100将能够直接从程序图像的内容决定目标地址,且据此将该目标地址捕捉在字段180内。若目标地址不是可直接决定的,则字段180留白,且解压电路反而将在之后从跟踪流内所提供的信息决定目标地址。

在以上述方式填入解压btac115的情况下,解压电路100接着能够在该解压电路遍历程序图像时参考解压btac115。每当该解压电路从程序图像内所考虑的当前指令的地址侦测到存在针对解压btac115的条目中的一个中的源地址信息的命中,该解压电路决定该当前考虑的指令是已由分路行为设定指令所标识的经标识的指令,且因此将该经标识的指令视为下个预定指令而不是等到该解压电路到达下个分路指令为止。在彼时,解压电路100可向分析电路120提供关于在程序图像的当前遍历行为期间所遍历的所有指令的信息,且也可在彼时将当前地址更新为目标地址。对于直接目标地址而言,该目标地址将是解压btac115内的相关条目的字段180内所指示的目标地址,而对于间接目标地址而言,将与当前所考虑的原子相关联而在跟踪流内直接提供该目标地址信息。

跟踪分析器40可被布置为在一个或多个预定跟踪控制事件发生之后无效化解压电路的解压btac115的内容,以因此确保不在解压btac115内维护过期的信息。

图5为图示,示意性地示出零开销循环及作为先前所述的分路行为设定指令的示例的相关联zole指令的使用。循环的开始由wls指令200所指示(其中wls代表“while循环开始”)。这是依赖于while语句的循环开始指令的条件形式。若满足条件,则循环开始指令将使得缓冲器rn内所提供的值储存在链接缓冲器lr内,此值为所需的循环迭代数量的指示。若执行此机能,则wls指令将通过发出n原子被作为不采取的分路而跟踪。然而,若不满足条件,则wls指令的执行反而使得处理分路到位置“循环末端”,该位置在一个实施例中是紧接在指示程序循环主体的结束的zole指令之后的指令。若执行此机能,则wls指令将通过发出e原子被作为采取的分路而跟踪。

在第一次迭代期间,若进入了循环(与分路到循环末端相反),则执行循环主体内的指令中的各项且在某个时点处将执行zole指令205。这将链接缓冲器值采用为输入,且若链接缓冲器值是非零的,则这使得btac55中的条目被填入,而将指令i3210的地址标识为源地址及将zole指令内所指定的地址“循环开始”指示为目标地址。链接缓冲器中的计数值也递减,且采取分路回到循环开始。因此,zole指令将被跟踪为e原子以指示已采取分路。

如由图5右方的示意图所示,在程序循环主体的每次后续的迭代期间(除了最终迭代以外),在遭遇到i3指令210时,将在btac55的条目中侦测到命中,将决定迭代计数仍是非零的,且据此迭代计数将递减且将采取分路回到循环开始。因此,在那些迭代中的各项期间,不需要重新执行zole指令205,因此引起了显著的效能改良。在最终的迭代时,在遭遇到i3指令时,将决定迭代计数现在是零且据此不需要进一步的迭代。因此,分路行为将在最终的迭代时不与i3指令相关联,且反而将重新执行zole指令205。然而,此时将决定链接缓冲器值是零,且将据此执行不采取的分路,而使得程序计数器更新为「循环末端」。

虽然在图5中图标了循环开始指令的有条件的变体,在替代性实施例中,循环开始可为无条件的变体,该无条件的变体在一个实施例中称为dls(do循环开始)指令,该指令将总是将链接缓冲器更新为缓冲器rn内的迭代计数值。因为dls指令不是分路指令,在执行dls指令时将不在跟踪流内发出原子。

图6为流程图,示出如何依据一个实施例跟踪包括零开销循环的程序序列。于步骤250处,跟踪生成电路60等待接收关于由处理元件50所执行的当前指令的信息。此后,在步骤255处决定是否要跟踪当前的指令。虽然在某些实施例中,可能决定要跟踪整个指令序列,在其他实施例中,可取决于当前执行的指令而选择性地开启及关闭跟踪机制。这允许跟踪代码的特定部分,而不跟踪其他部分。在这样的实施例中,将仅生成关于要跟踪的彼等代码部分的跟踪流,且在跟踪流内所发出的实际跟踪元素将接着仅关于彼等代码部分内所执行的某些指令。

如果在步骤255决定不要跟踪当前的指令,则程序仅返回步骤250以等待关于由受监视的电路所执行的下一指令的信息。

在于步骤255决定要跟踪当前的指令时,接着在步骤260处决定当前的指令是否是应针对其生成跟踪元素预定指令中的一个。在一个实施例中,这样的指令为指令流改变指令,特别是分路指令,且在本文中这样的指令将称为「p0指令」。虽然在一个实施例中,p0指令将是分路指令,可能的是,其他类型的指令也可被视为p0指令且将据此使得在跟踪流中发出相对应的原子。

在考虑先前图5的示例时,将理解的是,wls指令200及zole指令205两者为分路指令,且据此将在步骤260处被视为p0指令。

每次在步骤260处侦测到p0指令时,在步骤265处针对该指令发出原子。在一个实施例中,若针对该当前的指令采取了分路则此原子将为e原子,或若不采取分路则此原子将为n原子。

若指令执行信息指示分路被采取,则般也将标识目标地址是直接目标地址还是间接目标地址。若目标地址为直接目标地址,则并不需要在跟踪流中输出目标地址信息。然而,若目标地址是间接的,则在一个实施例中,也与e原子相关联而在进一步的分组中输出目标地址的指示,以便允许跟踪分析器在适当的时候决定指令流已分路到何处。在步骤265之后,程序回到步骤250以等待关于下一指令的信息。

若在步骤260处,决定当前的指令不是p0指令,则在步骤270处决定当前的指令是否是处理元件的btac55中标识为与零开销循环相关联的指令的指令。在一个实施例中,基于通过将当前指令的源地址与源地址栏155进行比较来在btac55的条目中侦测到命中,及通过指示命中条目由于执行zole指令而被填入的bf/zole旗标字段165,此信息被提供为来自处理元件50的指令执行信息的部分。

若决定的是,当前的指令在处理元件的btac中被标识为与零开销循环相关联,则在步骤275处决定是否在处置该指令时采取了分路,这将由来自处理元件的指令执行信息所指示。如先前所述,若是在遭遇到指令时需要至少一个进一步的程序循环迭代,则将是这样的情况。若采取了分路,则在步骤280处,生成e原子以供包括在跟踪流内。与步骤265样,若目标地址被决定为间接目标地址,则目标地址的指示也将与e原子相关联而输出作为跟踪流内的额外分组。然而,对于直接目标地址而言,不需要额外的信息且仅需要发出e原子。若从步骤270或步骤275中的任一个遵循否的路径,则程序返回步骤250。

图7为流程图,示出零开销循环的执行以及何时将生成特定跟踪元素的指示。在此示例中,假设零开销循环是通过wls指令来开始的,其中满足该wls指令的执行条件。因此,在步骤300处,决定满足while条件,故处理元件将wls指令作为不采取的分路执行。此时,处理元件将链接缓冲器值设定为提供在来源缓冲器rn内的迭代计数值,该迭代计数值指示迭代数量。在一个实施例中,计数值被设定为指示除了第一次迭代以外的所需迭代数量,因为第一次迭代由于被处理为不采取的分路的wls指令而自动执行。

若wls指令被处理为不采取的分路,则在步骤305处,跟踪模块与wls指令相关联而发出n原子。如先前所讨论的,若wls指令被dls指令替换,则链接缓冲器将仍被设定为迭代计数值,但将不生成跟踪原子,因为dls指令不是分路指令。

在步骤305之后,处理在步骤310处继续进行到下一指令。此时,在步骤315处决定下一指令是否是zole指令,且若否,则在步骤345处执行由指令所要求的处理。这包括了在步骤350处决定指令是否在处理元件的btac中造成命中。在零开销循环的第一次迭代期间,对于wls指令及zole指令之间的任何指令而言将不是这样的情况,且据此程序将循环回到步骤310且继续进行步骤315、345、350直到达到zole指令为止。在第一次迭代的末端处在步骤315处执行zole指令时,分路及循环控制电路58将用来执行步骤320到335,且将首先在步骤320处决定链接缓冲器计数值是否大于0。如先前所述,仅在需要至少一个进一步的迭代时才是这样的情况。

若需要至少一个进一步的迭代,则在步骤325处计数器将通过更新链接缓冲器值而递减,且在步骤330处将在处理元件的btac55中生成条目。如先前所讨论,这将把在zole指令之前紧接在前的指令标识为源地址,且将把程序循环内的第一个指令标识为目标地址。

此后,在步骤335处采取分路以将处理返回到程序循环的开始,此后在步骤340处,跟踪模块发出e原子以标识所采取的分路是与zole指令的执行相关联的。处理接着在步骤310处移动到下一指令,该下一指令在此情况中将是wls指令之后的程序循环主体内的第一个指令。

处理将接着继续进行程序循环主体的第二次迭代,且在某个时点将在步骤350处决定所处理的当前指令已造成处理元件的btac中的命中。例如在考虑图5的零开销循环示例时执行图5的指令i3210时将是这样的情况。在彼时,分路及循环控制电路58将决定链接缓冲器内容是否大于零,且若如此则将在步骤360处使计数器递减,此后程序将继续进行到步骤335。将接着以与执行zole指令之后会执行步骤335及340的完全相同方式执行步骤335及340。然而,将理解的是,此时处理并不继续进行到zole指令本身,且据此并不需要重新执行zole指令,因此引起了显著的效能改良。

在最后次迭代执行程序循环时,将在步骤355处在执行程序循环中的该倒数第二个指令时决定链接缓冲器不再大于零,且此时处理继续进行到步骤365,其中分路及循环控制电路58在返回步骤310之前无效化处理元件的btac中的相关条目。在步骤310处,处理将接着继续进行到zole指令,现在将重新执行该zole指令。然而,在此情况中,将于步骤320处决定链接缓冲器内容不再是非零的,且据此处理继续进行到步骤370,此处跟踪模块与zole指令的这个当前执行行为相关联而发出n原子,此后在步骤375处执行循环。

应从图7的处理注意的是,若为了某个理由,处理元件的btac中的相关条目在处理还在穿过零开销循环的多次迭代的半路的同时被无效化,则这会使得下次遭遇到倒数第二个指令时倒数第二个指令在步骤350处不被标识为在处理元件的btac中造成命中,这会接着使得处理前进到zole指令。然而,若zole指令在链接缓冲器内容仍然非零的时点处重新执行,则将重新执行步骤325、330、335、340,而使得零开销循环的执行恢复。为了跟踪分析器的目的,在步骤340处所发出的e原子是由于zole指令的重新执行还是由于与处理元件的btac中的命中相关联的倒数第二个指令的执行并不重要。

以下的表1说明了示例代码序列,可执行该示例代码序列以使用与图7中所述的方法一致的方式来实施零开销循环:

表1:零开销循环的示例跟踪行为

图8示意性地示出可在一个实施例中使用的进一步类型的分路行为设定指令,此类型的分路行为设定指令在本文中称为分路未来指令。在执行分路未来指令400时,接着若满足与分路未来指令相关联的任何条件,则这将填入btac55内的条目以将值「bpoint」标识为源地址及将值「foo」410设定为目标地址。接着,在遭遇到指令i3405时,且若条目在btac55内仍是有效的,则这将使得处理分路到地址foo410,以使得指令iz成为下个执行的指令。在一个实施例中,此分路行为可覆盖指令i3的执行,使得在遭遇到指令i3时,所采取的唯行动是分路到点410。然而,在替代性实施例中,处理可被布置为在执行指令i3时执行所需的正常操作,且接着被平行布置为分路到点410使得下个执行的指令是指令iz。

在一个实施例中,分路指令415可被提供作为备份使得发生的分路是地址“foo”410。这例如在分路未来机能可能被停用的实施方式中可能是有用的,或有用于涵盖以下情况:btac55的内容在执行分路未来指令400的时间及遭遇到指令i3405的时间之间被无效化。然而,应注意的是,本文中所述的跟踪技术并不需要提供这样的备份分路指令415。

图9为流程图,示出执行来跟踪指令序列的步骤,该指令序列包括分路未来指令的一个或多个实例。步骤450及455相对应于图6的先前所述的步骤250及255。在步骤455处决定要跟踪当前的指令时,在步骤460处决定当前的指令是否是分路未来指令。若决定当前的指令是分路未来指令,则于步骤465处决定由该分路未来指令所标识的经标识的指令是否成功注册在btac中。这可从接收自处理元件的指令执行信息导出。如先前所述,可能存在经标识的指令为何不被成功注册在btac中的许多理由。例如,分路未来指令可能是有条件的,使得仅在满足某些条件时才将在btac中制作条目。进一步地,在一个实施例中,分路未来特征可被选择性地停用,且在停用时,遭遇到分路未来指令将不使得在btac中制作条目。在于步骤465处决定经标识的指令已成功注册在btac条目中的者时,接着在步骤475处将分路未来指令跟踪为e原子,否则在步骤480处将分路未来指令跟踪为n原子。程序接着返回到步骤450。

在一个实施例中,btac55可能仅具有少量的条目,且确实在一个实施例中可具有单条目。在这样的情况下,可能的是,在经标识的指令在步骤465处被成功注册在btac中时,这将覆盖关于先前所执行的分路未来指令的另有效的经标识指令的信息,在此情况下,btac接着将失去关于已由先所执行的分路未来指令所标识但还未在指令流中遭遇到的指令的信息。跟踪分析器可侦测这样的情况何时已发生是重要的。在某些实施例中,跟踪分析器可知道btac55内所使用的替换策略,且可决定性地能够从现存的跟踪信息情况决定这样的覆盖有效分路控制信息的行为已在何处发生。然而,否则跟踪生成电路60可被布置为在步骤475处发出e原子之前,若btac内的这样的待决分路未来条目被覆盖,则在步骤470处在跟踪流中发出非事件分组。

若在步骤460处,决定当前的指令不是分路未来指令,则在步骤482处决定当前的指令是否在处理元件的btac中被标识为与分路未来指令相关联。这将发生在处理元件侦测到当前的指令的源地址及btac中的条目之间的命中时,其中相关联的字段165指示已由于执行先前的分路未来指令而填入了条目。在这样的情况下,程序继续进行到步骤484,此处与当前的指令相关联而发出e原子。

若步骤482之后遵循「否」路径,或在之后遵循「是」路径时执行步骤484之后,则在步骤486处决定当前的指令是否为p0指令,该p0指令如先前所述般将是分路指令。每当遭遇到这样的p0指令,程序将继续进行到步骤488,此处将针对当前的指令发出原子(该原子对于p0指令的分路指令示例而言在采取分路时将是e原子或在不采取分路时为n原子)。在从步骤482遵循「是」路径之后评估当前的指令是否是p0指令允许侦测以下情况:由分路未来指令所标识的指令本身也为p0指令。示例会是在启用数据跟踪时的存储器指令。在这样的情况下,会发出两个e原子,一个原子用于采取的分路(步骤484处的e原子),而一个原子用于p0元素本身(也就是存储器指令)(步骤488处所发出的原子)。

在步骤484或488中的任者处,若目标地址是直接目标地址,则不需要将额外的信息与所发出的e原子相关联。然而,若目标地址是间接的,则可与e原子相关联而发出额外的跟踪分组以标识目标地址。

在某些实施方式中,程序序列将仅包括先前所述的类型的分路行为设定指令中的者,但在其他实施例中,指令序列可包括具有相关联的zole指令的零开销循环,且此外可包括分路未来指令,其中处理元件的btac55中的字段165指示哪个类型的分路行为设定指令已使得在btac内填入了相对应的条目。

以下的表2给予了可执行的程序序列的示例,该程序序列具有巢套式的分路未来指令对偶且在一个实施例中造成了非事件分组的生成(此示例假设单条目的btac):

表2:巢套式分路未来程序的示例(因为在此情况下仅有一个btac条目,第二个bf将无效化第一个bf且注册第二个bf本身的隐含分路),显示所发出的e原子及非事件分组

图10为流程图,示出在接收已由跟踪电路所生成的e原子之后,可依据一个实施例由图3的解压电路100来执行的处理步骤。无论是否在指令流内包括了一个或两个类型的分路行为设定指令,皆可执行此程序。在步骤500处,决定是否已在输入接口105处在跟踪流中接收到e原子。一旦已接收到e原子,接着在步骤505处,解压电路100开始从当前地址遍历程序图像110。在跟踪的开始点处或在跟踪活动内的同步点处,当前地址可被设定为指定值。此后,该当前地址将基于由解压电路所执行的程序遍历操作来更新,此将从下文图10的进一步讨论而理解。

在步骤510处,当前的指令的细节被输出到分析电路120,且在步骤515处,参照程序图像来决定当前的指令(也就是由当前地址所指向的指令)是否为预载处理元件的btac的分路未来指令。若是,则e原子的存在将指示该指令的执行已确实使得在处理元件的btac中制作了条目,且程序据此继续进行到步骤520,在该步骤处,解压电路100在该解压电路的解压btac115中分配条目且在该条目内将由分路行为设定指令所标识的指令的地址储存为源地址。此外,若可从当前的指令(也就是分路未来指令)直接运算目标地址,则该解压电路在该条目内储存该目标地址。处理接着继续进行到步骤540,此处当前地址被更新为指向要在执行预载处理元件的btac的分路未来指令之后处理的下一指令。该指令般将是分路未来指令之后的下一指令。

虽然解压电路也可依需要布置为在步骤515处侦测当前的指令何时为已使得在处理元件的btac中制作了条目的zole指令,且接着在步骤520处在该解压电路的相关联的btac中制作条目,在一个实施例中并不进行此步骤,且反而不针对各个zole指令的经标识的指令在解压电路的btac中制作条目。具体而言,并不需要此步骤,因为对于zole指令而言,经标识的指令将是程序循环主体中紧接在前的指令,且因此解压缩器并不需要在循环末端指令及该紧接在前的指令之间进行区隔以正确跟踪处理电路的指令执行行为。因此,并不需要针对经标识的指令在解压电路的btac中制作条目。

具体而言,在图6的步骤280处生成来指示已由于遭遇到处理元件的btac中所记录的zole指令的经标识的指令而采取分路的e原子将仅被解压电路决定为与zole指令本身相关联,该zole指令由于是分路指令将在图10之后来步骤530处被侦测为p0指令,且该zole指令使得采取分路而返回到程序循环的开始。据此,在该情况中,程序从步骤530继续进行到步骤540,在步骤540处,由解压电路所维护的当前地址接着被更新到目标地址。对于zole指令的先前所述的示例而言,此目标地址般将被提供为zole指令内的直接目标地址。于步骤545处,程序停止遍历程序图像,且程序返回步骤500以等待下个原子。

如果在步骤515处决定当前的指令不是预载处理元件的btac的分路未来指令,则于步骤525处,决定当前的指令的地址是否匹配储存在解压btac115中的源地址。若如此,则这指示当前的指令是已由先前所执行的分路未来指令所标识的经标识的指令,且因为该分路未来指令与e原子相关联,这意味着在遭遇到该当前的指令之后已调用了分路行为。据此,决定此指令应被视为以与p0指令会造成的相同方式使得程序图像遍历程序停止的指令。因此,程序继续进行到步骤540,此处由解压电路所维护的当前地址被更新到目标地址。该目标地址在目标地址为直接目标地址的情况下将可直接从解压btac条目取得,或在目标地址为间接目标地址时将可从跟踪流中所提供的信息取得。程序接着如先前所讨论地继续进行到步骤545。

除了在步骤525处在解压btac中侦测到匹配之后在步骤540处将当前地址更新到目标地址以外,解压电路在某些情况中可无效化解压btac条目。具体而言,在处理元件在btac55中侦测到与已由先前的分路未来指令所填入的条目相关联的命中时,该处理元件般将起动所需的分路行为且接着无效化btac中的条目。类似地,解压btac可接着被布置为在步骤525处由于与先前的分路未来指令相关联的条目而在解压btac中侦测到命中之后到达步骤540时无效化该解压btac的本端btac115中的相关条目。

如果在步骤525处决定当前的指令的地址并不匹配解压btac中所保持的源地址,则在步骤530处决定程序图像中的当前的指令是否为标准的p0指令(例如分路指令)。若如此,则程序再次继续进行到步骤540,否则程序继续进行到步骤535。在于步骤530处决定当前的指令是p0指令时,当前地址将在步骤540处被更新到目标地址,且若目标地址是间接的,则目标地址信息将可从跟踪流中所提供的信息取得。

在到达步骤535时,程序图像中的下一指令被设定为当前的指令(通过前移地址以指向程序图像中的下一指令),且程序返回步骤510。

图11为流程图,示出在接收到n原子之后由解压电路100所执行的步骤。于步骤550处,决定是否已在跟踪流中接收到n原子。在接收到n原子时,接着在步骤555处,解压电路100开始从当前地址遍历程序图像。于步骤560处,当前的指令的细节被输出到分析电路120,且接着在步骤565处,决定当前的指令是否为指令,其中是针对该指令在跟踪流内期望n原子。将理解的是,依据上述的实施例,将在还未采取分路时与p0指令相关联而期望n原子,或与还未使得经标识的指令成功注册在处理元件的btac中的分路未来指令相关联而期望n原子。

若当前的指令不是对其期望n原子的指令,则在步骤570处,下一指令被设定为当前的指令且程序返回到步骤560。

然而,若在步骤565处,决定当前的指令是对其期望n原子的指令,则在步骤575处,当前地址被更新为指向下一指令地址,且在步骤580处,解压电路停止遍历程序图像。程序接着返回到步骤550以等待下个n原子。

取决于已在步骤565处所侦测到的指令的类型,在执行步骤575时,解压电路也可无效化该解压电路的解压btac中的相关条目。例如,此行为可在所接收的n原子是关联于最后次执行zole指令而发出时(也就是于图7的步骤370处所发出的n原子)发生。

图12为流程图,示出在决定处理元件的btac已被无效化时可在一个实施例中执行的步骤。这可基于各种理由而发生,一个示例是处理元件采取了中断行为。具体而言,在一个实施例中,决定在采取这样的中断行为之后无效化btac内容,以便避免在采取中断行为之前储存所有状态的需要,且因此允许更快速地处置中断行为。若在步骤600处,决定处理元件的btac已被无效化,则处理元件将在步骤605处通知跟踪模块20,此后在步骤610处,跟踪模块在一个实施例中将在跟踪流内发出无效化事件分组。在接收到这样的无效化事件分组之后,在步骤615处,解压缩器将接着无效化该解压缩器的解压btac内容。

在替代性实施例中,可能不需要单独在跟踪流内发出无效化事件分组,若跟踪分析器被布置为在该跟踪分析器处理此时在跟踪流内所发出的另分组时清除该跟踪分析器的本端解压btac内容115的话。例如,在一个实施例中,将在跟踪流内发出中断分组以指示中断行为的存在。跟踪分析器可被配置为知道处理元件的btac将在这样的情况下被无效化,且因此可直接由于接收到中断分组而清除解压btac内容而不需要任何单独的无效化事件分组。

图13示意性地示出可在解压电路处响应于如先前所讨论的非事件分组而执行的处理。于步骤650处,决定是否已接收到非事件分组,且在接收到这样的非事件分组时,在步骤655处更新解压btac内容。具体而言,将响应于非事件分组而无效化btac条目中的者。在一个特定实施例中,btac55及解压btac115两者可仅包括单条目,且因此立刻理解到是响应于非事件分组而无效化哪个条目。然而替代地,两个btac可具有多个条目,但其中解压电路知道由处理元件所使用的替换策略,且因此该解压电路对于应在接收到非事件分组之后无效化哪个条目是决定性的。确实,在某些实例中,解压电路可能能够在不需要在跟踪流内单独发出非事件分组的情况下从跟踪流中的其他分组决定条目已在btac55内被无效化的情况。

在解压btac115仅针对分路未来指令的经标识的指令保持条目但并不针对zole指令的经标识的指令维护条目的实施例中,跟踪模块20在处理元件的btac55中的条目被覆盖(若是该被覆盖的内容关于zole指令的经标识的指令的话)时不需要发出非事件分组。

在一个实施例中,可能的是,将不针对指令序列的所有部分启用跟踪。这意味的是,预期可在分路行为设定指令的执行及相对应的经标识的指令的执行之间启用跟踪。考虑分路行为设定指令是zole指令的零开销循环先前示例,并不需要特定的行动,因为如先前所讨论的,无论分路是否是通过遭遇程序循环中的倒数第二个指令而触发的,从跟踪的角度来看行为是相同的。具体而言,跟踪生成电路将在各个循环迭代(除了最终的循环迭代以外)的末端处发出e原子,无论该e原子是通过遭遇到zole指令而触发的还是通过遭遇到倒数第二个指令(也就是刚好在zole指令之前的指令)而触发的,这将从先前图7的讨论所显而易见。

然而,若是在分路未来指令及遭遇到相对应的经标识的指令的事件之间启用跟踪,则因为分路未来指令的执行行为将不被跟踪,跟踪分析器需要被提供额外信息以允许该跟踪分析器能够正确地跟踪处理元件的处理行为。为此目的,在一个实施例中执行图14的程序。

在步骤660处,跟踪模块20在步骤660处决定跟踪是否被启用,且接着启用跟踪,接着于步骤665处决定指令流当前是否是在分路未来指令及相关联的经标识的指令之间。若否,则不需要额外的行动,且程序结束于步骤685处。然而,若是,则在步骤670处,跟踪模块在经标识的指令随后由处理元件执行时监视该经标识的指令的行为。具体而言,在步骤675处,决定在执行该经标识的指令时是否采取分路。若否,则不需要行动,否则在680处在跟踪流内发出异常样式分组(exceptionstylepacket),该异常样式分组明确标识当前的指令的地址及所已分路到的目标地址。

存在着可在跟踪模块20内实施图14的行为的许多方式。在一个实施例中,跟踪模块具有用于针对btac55内的各个条目维护计数器的计数电路62。在一个特定实施例中,各个计数器采取饱和计数器的形式。图15示出了与各个计数器关联而执行的程序。在步骤700处,决定分路未来指令是否被跟踪,以指示该分路未来指令的执行使得btac55中的相对应条目被填入(在考虑图9中所示的实施例时是通过在步骤475处发出e原子)。每次以此方式跟踪分路未来指令时,计数器在步骤705处递增。

类似地,在步骤710处,决定是否已响应于与btac55的条目相关联且已被处理元件遭遇到的经标识的指令而采取了分路,且若如此则计数器随后在步骤715处递减。进一步地,如由步骤720所指示,若btac被无效化(例如在采取中断行为之后),则计数器在步骤725处被清除。

若针对跟踪而考虑所有的指令,则将理解的是,通常会期望计数器在针对btac的条目内的经标识的指令而决定采取分路时会是非零的。例如,在考虑先前在图9处所讨论的示例实施例时,在于步骤482处侦测到当前的指令是通过相关联的分路未来指令在btac55中所标识的指令的时点处,计数器值将是非零的,而使得在步骤484处以正常的方式发出e原子。步骤710的执行将接着使得计数器在步骤715处递减回零。

然而,若先前的分路未来指令不被跟踪模块所考虑(例如因为图9的步骤455之后为否路径),则计数器在针对在btac条目中命中的经标识的指令而采取分路时将是零,且零计数器的存在可使得程序继续进行到图14中的步骤680而使得在跟踪流内发出异常样式分组。

据此,通过使用图15的计数器方法,且针对btac55的各个条目维护单独的计数器,可将图14的机能有效地并入通常的跟踪行为内。具体而言,可如常执行图9的程序,但其中在背景中采用图15的计数器机制以针对与分路未来指令相关联的btac中的各个条目保持计数器值。若在步骤482处,决定当前的指令是处理元件的btac中与分路未来指令相关联地标识的指令,则若计数器是非零的,则将在步骤484处发出e原子,而若计数器值是零,则将发出异常样式分组。

本文中所述的实施例允许在仅针对实际上由受监视的电路所执行的指令子集合(般是小的)生成跟踪元素的情况下实施非常高效的跟踪机制,但该跟踪机制即使在受监视的电路执行包括一个或多个分路行为设定指令的指令序列时也可精确跟踪受监视的电路的活动,该等分路行为设定指令可将任意指令有效地转换成分路。

在本申请案中,用词“配置为...”用于意指的是,装置的元件具有能够实现所界定的操作的配置。在此背景下,“配置”意指硬件或软件互连的布置或方法。例如,装置可具有提供所界定操作的专用硬件,或处理器或其他处理装置可程序化为执行该功能。“配置为”并不暗示的是,装置元件需要以任何方式改变以提供所界定的操作。

虽然已参照随附的绘图在本文中详细描述本发明的说明性实施例,要了解的是,本发明不限于那些准确的实施例,且本领域技术人员可在该等实施例中做出各种改变、添加及更改而不脱离由随附请求项所界定的发明的范围及精神。例如,可将从属权利要求的特征与独立权利要求的特征进行各种组合而不脱离本发明的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1