实时追踪微体系结构级队列队满状态的方法及系统与流程

文档序号:16325795发布日期:2018-12-19 05:55阅读:242来源:国知局
实时追踪微体系结构级队列队满状态的方法及系统与流程

本发明涉及微处理器,具体涉及一种实时追踪微体系结构级队列队满状态的方法及系统。

背景技术

在现代微处理器中,为了应对不同流水阶段的突发流量,通常会设置各种宽度和长度的队列。这些队列的状态可以很好地反应当前处理器的流水线执行情况以及流水线处理中的瓶颈。然而,对对队列的全部状态进行追踪存在很大的困难。其原因在于:外部调试器的速度要远低于内部监测单元产生的数据的速度,使得大量的高速数据通过有限带宽的接口发送到低速接收端,造成严重的或者致命性的数据拥堵。因此,收集队列的饱和状态就成为了分析流水线瓶颈,从而快速收敛设计空间的有效办法。

当前,收集队列的饱和状态的方法主要有两种:利用性能计数器和利用指令级的追踪方法。性能计数器的工作原理如下:在处理器中加入若干计数器;设置计数器数量增加的触发信号为队列饱和;在程序运行过程中,打开计数器,并在若干时间后读取该计数器。通过性能计数器,可以获得在一段时间内队列发生饱和的次数。但其只能反映一段时间内的平均变化情况,无法对饱和状态进行实时追踪。指令级追踪方法工作原理如下:在处理器中设置非入侵式的嵌入式追踪单元;这些单元实时收集处理器指令流或数据流的相关信息,进行压缩和编码后通过调试接口输出到芯片外部。外部调试和分析器会对这信息进行解码,获得应用程序代码的执行、时序以及数据访问等提供统计意义上的信息。由于这种方法主要是用于收集指令的指令信息,在收集队列饱和状态时,其只能在程序发生分支的地方通过发送事件报文来完成,以减少对带宽的需求。这样,其收集到的饱和状态不能和指令地址相对应,无法实时、准确追踪。而且能够收集的队列数量也比较少。

由此可见,现有的方法都无法针对队列饱和状态进行实时、准确地追踪,大大限制了对处理器流水线实时状态的分析。如何针对队列饱和状态进行实时、准确地追踪,已经成为处理器流水线实时状态分析亟待解决的关键技术问题。



技术实现要素:

本发明要解决的技术问题:针对现有技术的上述问题,提供一种实时追踪微体系结构级队列队满状态的方法及系统,本发明能够完成处理器微体系结构级队列饱和状态的实时、准确地追踪,追踪过程中所产生的数据流量小,为微处理器微体系结构级的空间探索提供有效手段。

为了解决上述技术问题,本发明采用的技术方案为:

一种实时追踪微体系结构级队列队满状态的方法,实施步骤包括:

1)确定微处理器中的需要追踪的目标队列;

2)通过队列数据接口采集微处理器运行时需要追踪的目标队列的饱和状态信号full;

3)将饱和状态信号full根据状态变化进行编码并封装为追踪报文;

4)将封装得到的追踪报文通过指定的物理接口输出。

优选地,步骤3)的详细步骤包括:

3.1)针对每一个目标队列的饱和状态信号full,判断该目标队列的饱和状态信号full状态和上一次的饱和状态信号full状态是否发生变化,且仅仅在有发生变化时才生成该目标队列的队列追踪元素,所述队列追踪元素包括目标队列的实际通信编码以及饱和状态信号full状态是否发生变化的状态变化指示位;

3.2)收集所有的队列追踪元素,将所有的队列追踪元素封装为追踪报文。

优选地,步骤3.1)中生成该目标队列的队列追踪元素时,其中实际通信编码的生成步骤包括:针对采集得到的目标队列的饱和状态信号full,首先根据预设的队列编码表获得其所对应的队列编码,所述队列编码表中包含了微体系结构中不同的队列及其对应的队列编码之间的映射关系;然后,判断微处理器中的需要追踪的目标队列的数量n是否大于预设阈值,如果n大于预设阈值则直接将队列编码作为队列追踪元素中的实际通信编码;否则,根据预设的队列通信编码映射规则将队列编码转换为实际通信编码,且实际通信编码的长度小于队列编码的长度。

优选地,步骤3.2)中将所有的队列追踪元素封装为追踪报文的详细步骤包括:

3.2.1)将所有队列追踪元素中的实际通信编码为当前追踪报文的原始地址,将所有队列追踪元素中的状态变化指示位作为当前追踪报文的原始负载;

3.2.2)将当前追踪报文的原始地址和上一条追踪报文的原始地址进行比较,根据地址部分发生变化的位区间生成对应的地址字段部分的长度addrencode;从当前追踪报文的原始地址中取出发生变化的位区间作为当前追踪报文的地址字段部分;

3.2.3)判断当前追踪报文是否为开启追踪后的第一个追踪报文,如果是则跳转执行步骤3.2.7);否则,跳转执行步骤3.2.4);

3.2.4)判断生成的全部队列追踪元素的数量大于⌈n/8⌉是否成立,其中n为微处理器中的需要追踪的目标队列数量,⌈⌉为上取整符号;如果成立则跳转执行步骤3.2.5);否则,跳转执行步骤3.2.6);

3.2.5)将生成的全部队列追踪元素的数量作为负载字段部分的长度payloadencode,将地址字段部分的长度addrencode、负载字段部分的长度payloadencode、当前追踪报文的地址字段部分、当前追踪报文的原始负载打包封装为基本类型的追踪报文,结束并返回;

3.2.6)根据当前追踪报文的原始负载生成负载字段部分的长度payloadencode,获取实际通信编码的长度,如果实际通信编码的长度大于预设长度,则设置分割标记符号d的值为0,且将原始负载中每一个实际通信编码进行采用一个字节长度表示且高位填充为0的位处理;否则,设置分割标记符号d的值为1,将原始负载中每两个实际通信编码进行采用一个字节长度表示的位处理;将分割标记符号d、地址字段部分的长度addrencode、负载字段部分的长度payloadencode、当前追踪报文的地址字段部分、当前追踪报文进行位处理的实际通信编码打包封装为高级类型的追踪报文,结束并返回;

3.2.7)根据当前追踪报文的原始负载生成负载字段部分的长度payloadencode,设置分割标记符号d的值为1,将原始负载中每两个实际通信编码进行采用一个字节长度表示的位处理;将分割标记符号d、地址字段部分的长度addrencode、负载字段部分的长度payloadencode、当前追踪报文的地址字段部分、当前追踪报文进行位处理的实际通信编码打包封装为高级类型的追踪报文,结束并返回。

本发明还提供一种实时追踪微体系结构级队列队满状态的系统,包括被追踪的目标计算机,所述目标计算机的微处理器中具有队列追踪单元,所述队列追踪单元被编程以执行本发明实时追踪微体系结构级队列队满状态的方法的步骤。

和现有技术相比,本发明具有下述优点:

1、本发明能够完成处理器微体系结构级队列饱和状态的实时、准确地追踪。在处理器运行过程中,微架构级队列饱和状态的实时追踪对于微处理器设计非常重要。本发明能够将追踪目标机器中的队列饱和状态发送到追踪主机,而后追踪主机中的驱动程序和追踪分析程序完成信息的解码与分析,从而实现对队列饱和状态进行实时、准确地追踪和呈现,反应队列饱和状态随每条指令的变化情况,为微架构设计空间探索提供了有效手段。

2、本发明追踪过程中所产生的数据流量小。由于处理器和调试主机之间的通信带宽有限,追踪过程中所产生的数据流量会影响追踪过程是否顺畅。本发明通过队列数据接口采集微处理器运行时需要追踪的目标队列的饱和状态信号full,将饱和状态信号full根据状态变化进行编码并封装为追踪报文,将封装得到的追踪报文通过指定的物理接口输出,根据追踪队列的个数和变化情况,通信协议自动选择字节数少的报文格式,可以大大减少追踪过程中所产生的数据流量,保证追踪过程顺畅进行。

附图说明

图1为本发明实施例方法的基本流程示意图。

图2为本发明实施例中基本类型的追踪报文的结构示意图。

图3为本发明实施例中高级类型的追踪报文的结构示意图。

图4为本发明实施例系统的框架结构示意图。

图5为本发明实施例系统的应用结构拓扑结构示意图。

具体实施方式

如图1所示,本实施例实时追踪微体系结构级队列队满状态的方法的实施步骤包括:

1)确定微处理器中的需要追踪的目标队列;

2)通过队列数据接口采集微处理器运行时需要追踪的目标队列的饱和状态信号full;

3)将饱和状态信号full根据状态变化进行编码并封装为追踪报文;

4)将封装得到的追踪报文通过指定的物理接口输出。

本实施例中,步骤3)的详细步骤包括:

3.1)针对每一个目标队列的饱和状态信号full,判断该目标队列的饱和状态信号full状态和上一次的饱和状态信号full状态是否发生变化,且仅仅在有发生变化时才生成该目标队列的队列追踪元素,所述队列追踪元素包括目标队列的实际通信编码以及饱和状态信号full状态是否发生变化的状态变化指示位;

3.2)收集所有的队列追踪元素,将所有的队列追踪元素封装为追踪报文。

本实施例中,步骤3.1)中生成该目标队列的队列追踪元素时,其中实际通信编码的生成步骤包括:针对采集得到的目标队列的饱和状态信号full,首先根据预设的队列编码表获得其所对应的队列编码,所述队列编码表中包含了微体系结构中不同的队列及其对应的队列编码之间的映射关系;然后,判断微处理器中的需要追踪的目标队列的数量n是否大于预设阈值,如果n大于预设阈值则直接将队列编码作为队列追踪元素中的实际通信编码;否则,根据预设的队列通信编码映射规则将队列编码转换为实际通信编码,且实际通信编码的长度小于队列编码的长度。

队列编码表用来为所有的队列分配唯一的编码,从而保证信息传输的正确性。由于微处理器中队列的个数一般不超过128个,采用7位编码表来表示所有队列。本实施例中根据微体系结构编写的队列编码表样例如表1所示;

表1:队列编码表样例。

参见表1,本实施例中以编码0b0000000(0b表示二进制编码)表示提取单元的指令队列、编码0b0001000表示加法执行部件的入口队列、编码0b0010000表示浮点执行部件的入口队列、编码0b1011000表示译码单元的入口队列。

本实施例中,步骤3.2)中将所有的队列追踪元素封装为追踪报文的详细步骤包括:

3.2.1)将所有队列追踪元素中的实际通信编码为当前追踪报文的原始地址,将所有队列追踪元素中的状态变化指示位作为当前追踪报文的原始负载;

3.2.2)将当前追踪报文的原始地址和上一条追踪报文的原始地址进行比较,根据地址部分发生变化的位区间生成对应的地址字段部分的长度addrencode;从当前追踪报文的原始地址中取出发生变化的位区间作为当前追踪报文的地址字段部分;

3.2.3)判断当前追踪报文是否为开启追踪后的第一个追踪报文,如果是则跳转执行步骤3.2.7);否则,跳转执行步骤3.2.4);

3.2.4)判断生成的全部队列追踪元素的数量大于⌈n/8⌉是否成立,其中n为微处理器中的需要追踪的目标队列数量,⌈⌉为上取整符号;如果成立则跳转执行步骤3.2.5);否则,跳转执行步骤3.2.6);

3.2.5)将生成的全部队列追踪元素的数量作为负载字段部分的长度payloadencode,将地址字段部分的长度addrencode、负载字段部分的长度payloadencode、当前追踪报文的地址字段部分、当前追踪报文的原始负载打包封装为基本类型的追踪报文,结束并返回;

3.2.6)根据当前追踪报文的原始负载生成负载字段部分的长度payloadencode,获取实际通信编码的长度,如果实际通信编码的长度大于预设长度,则设置分割标记符号d的值为0,且将原始负载中每一个实际通信编码进行采用一个字节长度表示且高位填充为0的位处理;否则,设置分割标记符号d的值为1,将原始负载中每两个实际通信编码进行采用一个字节长度表示的位处理;将分割标记符号d、地址字段部分的长度addrencode、负载字段部分的长度payloadencode、当前追踪报文的地址字段部分、当前追踪报文进行位处理的实际通信编码打包封装为高级类型的追踪报文,结束并返回;

3.2.7)根据当前追踪报文的原始负载生成负载字段部分的长度payloadencode,设置分割标记符号d的值为1,将原始负载中每两个实际通信编码进行采用一个字节长度表示的位处理;将分割标记符号d、地址字段部分的长度addrencode、负载字段部分的长度payloadencode、当前追踪报文的地址字段部分、当前追踪报文进行位处理的实际通信编码打包封装为高级类型的追踪报文,结束并返回。

本实施例中目标追踪主机的通信协议采用基于追踪报文的通信方式,每个追踪报文由报文头和负载构成,一个报文包含一个报文头和0字节或多字节的负载。为了提高通信的效率,报文包含两种类型:基本类型和高级类型。

基本类型的追踪报文如图2所示。其中,在报文头中:t位表示是否为高级类型的报文,基本类型的报文中该位为0;addrencode字段表示报文中地址字段的长度,000表示表示地址字段的长度为1个字节,依次递增,111表示地址字段的长度为8个字节;payloadencode表示负载字段的长度,0000表示负载字段的长度为1个字节,依次递增,1111表示负载字段的长度为16个字节,也就是负载字段的长度达到了最大值。在地址字段中:sbz表示保留位,取值为0;a字段为地址字段,表示指令的虚拟地址。在负载字段中:pn为负载位,表示编码为n的队列是否发生队列状态的变化(注意:该位只表示队列是否从满变为不满、或者从不满变为满,不能表示队列当前的状态)。基本类型的追踪报文的最大长度为25个字节。

高级类型的追踪报文如图3所示。其中,在报文头中:t位表示是否为高级类型的报文,高级类型的报文中该位为1;addrencode字段仍然表示报文中地址字段的长度;d位表示负载字段是否划分为两个半字节来分别表示不同队列的状态;payloadencode表示负载字段的长度,0000表示负载字段的长度为1个字节,依次递增,0111表示负载字段的长度为8个字节,也就是负载字段的长度达到了最大值。在地址字段中:sbz表示保留位,取值为0;a字段为地址字段,表示指令的虚拟地址。在负载字段中:bufnon字段表示该字节负载所代表的队列的编码,d为1时该字段为3个比特,否者为7个比特;pn为负载位,表示编码为n的队列当前状态。高级类型的追踪报文的最大长度为17个字节。

本实施例还提供一种实时追踪微体系结构级队列队满状态的系统,包括被追踪的目标计算机,该目标计算机的微处理器中具有队列追踪单元,队列追踪单元被编程以执行本实施例实时追踪微体系结构级队列队满状态的方法的步骤。

如图4所示,本实施例中的队列追踪单元包括配置寄存器1、信息收集模块2、分析与打包模块3和输出模块4,配置寄存器1主要包含了队列追踪单元的使能寄存器11、队列通信编码长度寄存器12和队列通信编码控制寄存器13。

使能寄存器11:在完成队列编码总体使能寄存器和队列通信编码控制寄存器的设置之后,设置队列追踪单元的使能寄存器为‘1’,表示开启追踪功能。

队列通信编码长度寄存器12:该寄存器用于表示队列的通信编码的长度。

队列通信编码控制寄存器13:队列通信编码控制寄存器32的数量有32个,分别编码为qncr0~31,每个寄存器的长度为32位。在实际使用过程中,需要根据需要来设置队列通信编码控制寄存器的值。假设追踪的队列的个数为n个,那么需要修改的队列通信编码控制寄存器(13)的个数为⌈n/4⌉。⌈⌉表示向上取整,例如⌈2.1⌉=3。对于每个寄存器qncrn(n为其编码值),其从低位开始的第m个字节表示:该字节低7位所存储的队列编码值所对应的实际通信编码为4*n+m,而该字节的最高位表示该字节是否使能。例如,所要追踪的队列的编码分别为二进制的0b1011000(十进制表示为88)和0b0001011(十进制表示为11)。那么,只需要修改一个寄存器(⌈2/4⌉=1),即寄存器qncr0。而qncr0的最低字节设置为0b11011000,最高位的1表示使能该自己的编码,而低7位对应所要追踪的队列的编码;同理,qncr0的次低字节的值为0b1001011。qncr0的其余位以及qncr1~31都被设置为0。这样,在实际通信过程中,编码0b0和0b1就分别表示队列88和队列11。而队列通信编码长度寄存器(12)的值设置为⌈log2(2)⌉=1。最后,设置使能寄存器11为1,开启追踪。

追踪开启后,流水线运行真实应用。随着应用的执行,流水线中的队列使用情况开始不断发生变化。对于流水线中的队列,其队列深度和宽度会各有不同。开启追踪后队列追踪单元的工作过程如下:

1、信息收集模块2只收集队列的饱和信号full。其从流水线中的各个队列模块中利用bus队列数据接口收集到full信号之后,并根据队列编码表获得其所对应的队列编码。然后,根据队列通信编码控制寄存器的设置,转换为实际通信编码(如上述例子中的实际通信编码0b0和0b1)。对于队列通信编码控制寄存器中没有使能或者设置(即队列通信编码控制寄存器中没有存储该队列的编码)的队列,该模块直接忽略其发来的信号。

2、分析与打包模块3在每条指令提交时,对比每个队列的本次full状态和上次的full状态,确定队列的饱和状态是否发生变化。如果发生变化,生成该队列的队列追踪元素。队列追踪元素包含了该队列的实际通信编码和状态是否变化的指示位。接下来,收集所有的追踪元素,分两部分生成追踪报文。

2.1、地址相关的部分:对比当前指令的地址与前一条指令的地址,如果只有低8位地址发生变化,addrencode字段写000;如果只有低16位地址发生变化,addrencode字段写001;依次类推,如果最高的8位地址也发生了变化,addrencode字段写111。地址字段根据addrencode的大小填写当前指令地址的低若干字节。

2.2、负载相关的部分:如果队列状态发生变化的个数大于⌈n/8⌉,那么使用所述基本类型的报文来封装追踪元素;否者使用所述高级类型的报文。

对于需要使用所述高级类型报文的情况,payloadencode填写状态发生变化的队列的个数(由于采用二进制表示,实际填写数值为个数减一)。如果实际通信编码大于4位,那么使用的高级类型的报文中d位就只能为0,表示负载字段的一个字节只能用来表示一个队列状态发生变化,其中未使用的高位填充0。否者,d位为1。然后,负载字段分别填入状态发生变化的队列的实际通信编码。对于追踪开始后的第一次通信,为了告知所述追踪驱动程序和追踪分析器当前队列的情况,需要采用d位为0的高级类型的报文。对于之后的通信,所述高级类型报文只用来表示变化情况。而且发生状态变化的队列越少,该报文的负载部分越短。对于采用基本类型报文的情况,payloadencode字段填写的值为⌈n/8⌉-1。负载字段中,pn如果实际通信编码为n的缓存区状态发生变化,pn字段填写1,否者填写0。对于单次追踪,所述基本类型的报文负载部分为固定长度,可以高效表示所有队列的状态是否变化。对于队列状态变化比较多的情况,采用此类型报文可以有效减少通信所需流量。

3、输出模块4对打包好的报文依照ethernet、usb或其他物理协议将报文传输到所述物理接口,发送到所述追踪主机。

如图5所示,目标计算机在使用时,还需要连接追踪主机追踪目标机器集成带有追踪单元的微处理器和追踪所用的物理通信接口,追踪主机集成了追踪所用的物理通信接口、追踪驱动程序和追踪分析程序,通过这些组件,实现了对微处理器微体系结构级队列饱和状态的实时追踪。追踪主机从所述物理接口接收到报文后根据所述物理协议对数据进行分析,然后将追踪报文发送给所述追踪驱动程序。追踪驱动程序依照上述对报文的格式定义、所述队列编码表和所述实际通信编码表,对报文进行解析,从而获得队列状态的变化情况。对于首次通信,所述追踪驱动程序会收到所述高级类型报文,从而获得所有队列在当前指令下的状态。所述追踪驱动程序会保存这些状态,直到收到表示对应队列状态发生变化的报文,才更新这些状态。如果在若干指令之间,没有收到某个队列状态发生变化的报文,就表示该队列的状态一直没有发生变化。状态保存可以有效减少硬件追踪单元和所述追踪分析器之间的通信流量。然后,所述追踪驱动程序将收到的信息发送给所述追踪分析程序。最后,所述追踪分析程序结合软件代码和所获得的队列饱和信息,给出队列状态随每条指令变化的曲线,完成微处理器微体系结构级队列空满信号的实时追踪。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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