用于响应于事务执行生成跟踪数据的装置和方法与流程

文档序号:11779702阅读:194来源:国知局
用于响应于事务执行生成跟踪数据的装置和方法与流程

本技术涉及数据处理系统。具体而言,本技术涉及支持事务(transaction)的数据处理系统的领域。



背景技术:

可以提供支持事务的数据处理系统,其中,多个程序指令被推测性地执行从而生成对状态数据的更新,若事务在没有冲突的情况下完成,则该更新被提交。由于更新仅在事务在没有冲突的情况下完成时才提交,因此,这些更新在本文被称为推测性更新,直到它们被提交为止。在事务结束之前的任意时间,事务都可能因为冲突而被中止,即在未结束的情况下完成,从而导致数据处理系统倒退或返回到事务开始之前的状态。因此,该“倒退”可以在以下情况下发生,即,在作为事务的部分被执行的指令和在别处执行的指令之间发生冲突。在事务期间,推测地更新的状态被存储在事务存储器中。若未发生冲突并且事务未被中止,则在事务的结束,事务被“提交”,此时推测性状态(即事务状态)替代数据处理系统的实际状态。

这类事务可用于例如辅助使用共享存储器的多线程处理,其中,可以允许使用共享存储器内的数据值的事务并行进行,这种并行进行依赖于在存储器访问之间出现冲突时避免提交推测性更新的能力。在大多数情况下,这类冲突不会出现,因此,并行处理在不需要支持更严格机制的开销(例如,存储器锁定的使用)的情况下有效地进行,但当发生冲突时有可能恢复就好像对状态数据的推测性更新尚未被提交一样。



技术实现要素:

从第一示例布置的角度看,提供了一种装置,包括处理电路和事务跟踪电路,处理电路用于执行包括多个程序指令的事务,该多个程序指令执行来生成对状态数据的更新,处理电路若事务在没有冲突的情况下完成则提交更新,并且在多个程序指令的执行期间生成跟踪控制信号,处理电路在程序指令的执行期间使用至少一个资源,事务跟踪电路用于响应于跟踪控制信号来生成跟踪项,响应于跟踪控制信号指示该至少一个资源的使用水平在程序指令的执行期间已发生变化,事务跟踪电路生成指示该至少一个资源的使用水平的至少一个跟踪项。

根据第二示例配置,提供了一种生成跟踪项的方法,包括以下步骤:执行包括多个程序指令的事务以生成对状态数据的更新;若事务在没有冲突的情况下完成则提交更新;在多个程序指令的执行期间生成跟踪控制信号,其中,程序指令的执行使用至少一个资源;以及响应于跟踪控制信号生成跟踪项,其中,响应于跟踪控制信号指示该至少一个资源的使用水平在程序指令的执行期间已发生变化,生成指示该至少一个资源的使用水平的至少一个跟踪项。

根据第三示例布置,提供了一种装置,包括:用于执行包括多个程序指令的事务以生成对状态数据的更新的装置;用于若事务在没有冲突的情况下完成则提交更新的装置;用于在多个程序指令的执行期间生成跟踪控制信号的生成装置,其中,程序指令的执行使用至少一个资源;以及用于响应于跟踪控制信号生成跟踪项的装置,其中,响应于跟踪控制信号指示该至少一个资源的使用水平在程序指令的执行期间已发生变化,用于生成的生成装置生成指示该至少一个资源的使用水平的至少一个跟踪项。

附图说明

进一步参考附图中示出的实施例来描述本发明,这些实施例仅作为示例目的,在附图中:

图1示意性地示出了包括事务的程序指令流;

图2a是示意性地示出事务的执行的流程图;

图2b是示意性地示出嵌套事务(nestedtransaction)的执行的流程图;

图3是示意性地示出根据一个实施例的装置的图示;

图4是示出执行事务内的指令对资源使用的影响的图示;

图5是示意性地示出根据一个实施例的在事务的执行期间生成跟踪项(traceitem)的流程图;

图6是示意性地示出根据一个实施例的生成用于事务的子集的跟踪数据项的流程图;

图7是示意性地示出根据一个实施例的在嵌套事务的执行期间生成跟踪项的流程图;以及

图8是示意性地示出可以如何使用跟踪项从而影响事务的未来执行的图示。

具体实施方式

在参考附图讨论实施例之前,提供对实施例及相关联的优点的以下描述。

在支持事务的处理系统(例如,包含事务存储器的系统)中,多个程序指令执行以生成对状态数据(例如,架构状态数据)的推测性更新,并且若相关事务在没有冲突的情况下完成,则操作以允许(提交)那些推测性更新。作为示例,事务可包括对存储器位置的加载或存储操作,并且若那些加载和存储操作在没有来自事务外部的尝试对相同的存储器位置进行冲突(或潜在冲突)访问的情况下完成,则那些事务的结果被提交并且更新架构系统状态。如果存在冲突,则事务中止,并且所保存的先前的状态数据被用于将系统的状态“回滚”到执行事务之前的点。稍后可重复事务以查看其是否在没有引起冲突的情况下完成、可能引起异常、可能以不同的方式执行(例如,使用锁定机制)、或者根据特定形式的相关系统来以其它方式进行处理。

可能导致事务中止的其它类型的冲突包括:用于管理事务的资源(例如,临时存储装置、用于嵌套事务的深度计数器等)的耗尽、或使事务中断的异常,例如,数据中止(mmu故障)、中断等。

根据一个示例布置,提供了一种装置,包括处理电路和事务跟踪电路,处理电路用于执行包括多个(即一个或多个)程序指令的事务,该多个程序指令执行以生成对状态数据的推测性更新,若事务在没有冲突的情况下完成,则处理电路提交该推测性更新,以及处理电路在多个程序指令的执行期间生成跟踪控制信号,处理电路在程序指令的执行期间使用至少一个资源,事务跟踪电路用于响应于跟踪控制信号生成跟踪项,响应于跟踪控制信号指示该至少一个资源的使用水平在程序指令的执行期间已发生变化,事务跟踪电路生成指示该至少一个资源的使用水平的至少一个跟踪项。

本发明的发明人已经意识到,在获取与事务的重要事件相关的数据方面存在特定优点。例如,重要事件可能包括在事务的执行期间所使用的资源(例如,事务存储器)的使用水平的变化。例如,使用水平的变化可能产生于缓存行或存储器区域被新近访问或写入。通过获取这类信息,可以更好地控制对该资源的使用,并且还可以在将来更有效地执行事务。因此,本技术可涉及对以下信息的获取,该信息指示作为事务的部分被执行的指令是对事务状态的添加(这增加了所使用的事务存储器的量)、是对事务状态的部分的重写(这对所使用的事务存储器没有影响)、还是二者都不是(也对所使用的事务存储器没有影响)。这类信息随后可用于生成指示资源的使用水平已发生变化的跟踪项。

随后可以分析针对事务所生成的跟踪数据项,从而分析该事务。例如,确定给定事务在执行期间所使用的资源的比例在包括多个处理器的异构系统中可能特别有用,从而做出关于哪个处理器被用于执行事务的更好的决定,从而更高效地使用系统资源。

在一些实施例中,处理电路检测至少一个资源的使用水平的变化;并且处理电路在跟踪控制信号中标识至少一个资源的使用水平的变化。因此,处理电路所生成的跟踪控制信号可以指示至少一个资源的使用水平的变化。这些跟踪控制信号随后可被传递到事务跟踪电路,事务跟踪电路基于如跟踪控制信号所标识的至少一个资源的使用水平的变化来生成跟踪项。

在一些实施例中,跟踪电路根据跟踪控制信号来确定至少一个资源的使用水平的变化。在这类实施例中,事务跟踪电路本身可以基于由处理电路所生成的跟踪控制信号来跟踪至少一个资源的使用水平。例如,处理电路可以生成指示特定资源正被使用的跟踪控制信号,并且事务跟踪电路可以根据这些跟踪控制信号来确定资源是否正被新近使用(导致至少一个资源的总体使用水平的变化)。

在一些实施例中,至少一个资源是包括多个部分的存储结构;并且每次新的部分被访问时检测到使用水平的变化。例如,使用水平的变化可响应于存储结构的新的部分正在写入而发生。在一些实施例中,可以使用缓存器来实现事务存储器,因此,存储结构可以是缓存器的至少一部分,并且这些部分可以是缓存行。缓存行可以存储由于执行形成事务的指令而已被推测性地改变的状态的一个或多个元素。

例如,在直接映射缓存器中,存储结构可以是整个缓存器。在组关联缓存器中,在缓存器中存在可以存储特定数据片段的多个位置。缓存器被划分为多路(way),并且多个位置包括每路中的一个位置。例如,在双路关联缓存器中,存在可以存储任意数据片段的两个位置。该多个位置可被称为缓存组(cacheset)。例如,在双路关联缓存中,每个数据片段可被存储在包括两路的缓存组中。重要事件的另一示例可以是缓存组的所有路都被填满。或者,重要事件可以是缓存组的所有路都被填满,并且尝试写入同一缓存组。这些场景中的任一场景可以表示以下情形:即,由于存储推测性状态的空间耗尽,事务的进一步执行不能进行,这可能导致事务被中止。通过对这些事务进行性能概况分析,可以确定未来应该在具有较高关联性缓存器的处理器上执行该事务。相反,可以确定高关联性缓存器是不必要的,并且可以使用具有较低关联性的缓存器。

在一些实施例中,多个跟踪项包括指示多个部分中的一个部分已被新近访问的至少一个资源跟踪项。例如,当一部分(例如,缓存行)被新近访问时,可以生成指示该部分已被新近访问的跟踪项。

在一些实施例中,多个跟踪项包括指示已被访问的多个部分的数目的至少一个资源跟踪项。例如,资源跟踪项可以提供从事务开始以来已被访问的部分数目的运行计数。这类信息可用于快速确定资源使用如何随时间变化,以及确定特定时刻的瞬时资源使用。例如,可以响应于事务的结束(例如,由于事务中止或被提交)来生成资源跟踪项。可以使用至少一个资源跟踪项来在事务的执行期间对资源使用进行概况分析。

通过在资源跟踪项中指示已被访问的多个部分的数目,可以减少跟踪流的大小,从而通过有效地将若干资源跟踪项合并成一个来减少对存储跟踪流的存储器的资源要求。此外,在一些情况下,跟踪项可被存储在循环缓冲器中。当这种情况发生时,缓冲器的头部在一段时间后可能会被重写。通过指示已被访问的多个部分的数目,即使缓冲器的头部被重写,仍可以执行高效的性能概况分析。然而,通过在无论何时部分被新近访问时进行指示,可以减少生成跟踪项所需的硬件的量,因为不需要保持对资源使用的时刻运转跟踪。

多个跟踪项可以包括标识事务的事务深度的至少一个跟踪项。事务可被嵌套在另一事务中。事务深度可被定义为在开始当前事务之前所进入的母事务的数目,并且可以包括或可以不包括该事务本身。可以使用计数器来追踪事务深度。然而,与所有计数器一样,存在可被存储在该计数器中的最大值。若特定事务被嵌套地足够深而使得将超过计数器的最大值,则该事务(以及潜在的所有容器事务)可能必须被中止。深度计数器值的变化因此是重要事件,因此,输出包含对事务的事务深度的指示的跟踪项可能是有用的。深度计数器本身还可以是其使用水平的变化导致生成跟踪项的至少一个资源的示例。这可以提供事务嵌套的当前水平正在接近事务将不得不被中止的点的警告。

在一些实施例中,多个跟踪项包括下列项中的至少一项:指示事务已开始的事务开始跟踪项、以及指示事务已结束的事务结束跟踪项。因此,可以跟踪与特定事务相关的重要事件。

在一些实施例中,事务跟踪项也是资源跟踪项。具体而言,指示事务已经结束的同一跟踪项还可以指示资源的使用水平已发生变化。类似地,其它跟踪项可以执行双重功能。因此,赋予跟踪项的标签不是其所有功能。

在一些实施例中,多个跟踪项中的至少一些跟踪项各自包括时间戳。例如,事务开始跟踪项和事务结束跟踪项中的至少一项可包括时间戳,其分别指示开始和结束事务的指令被执行的时间。通过提供时间戳,可以确定特定的重要事件何时发生。具体而言,在多处理器系统中,可以确定与跨每个处理器执行的事务相关的重要事件如何发生。这可有助于帮助确定在事务的执行期间发生的冲突的性质和原因。

在一些实施例中,多个跟踪项中的至少一个跟踪项包括指示用于执行事务的处理器循环的数目的循环计数。例如,结束跟踪项可包括指示用于执行事务的处理器循环的数目的循环计数。这类信息可被用于确定在执行特定事务时处理器被使用的程度。

多个跟踪项可包括指示事务已被中止的事务中止跟踪项。事务将响应于发生冲突而中止。例如,若一个处理器执行修改数据的事务并且另一处理器执行试图修改相同数据的第二事务,则将由于两个不同的处理器同时修改相同的数据而发生冲突。这通常将导致事务被中止。在生成事务中止跟踪项的情况下,事务中止跟踪项可以指示事务被中止的原因。例如,事务中止跟踪项可以指已经发生的冲突,如前所述。事务中止的另一原因可能是可用于在事务的执行期间保持推测性状态的事务存储器耗尽。

装置可包括控制存储装置,控制存储装置存储影响事务跟踪电路的操作的控制参数。例如,控制存储装置可以存储使能参数以启用或禁用事务跟踪电路的操作。

控制存储装置可以存储采样参数以控制事务跟踪电路操作多少事务。并非对每一事务进行采样,通常期望仅采样一些事务(以及在适当的情况下,嵌套在那些事务中的任意事务)。采样参数可以是例如对事务跟踪电路所采样的事务(以及适当的情况下,其嵌套的事务)的比例进行指示的比例,或者事务(以及适当的情况下,其嵌套的事务)被事务跟踪电路采样的概率。

在一些实施例中,处理电路还执行除了任意事务中的那些指令之外的指令。换句话说,处理电路可以执行不是任意事务的一部分的指令。

装置可包括对至少一些指令进行操作的程序跟踪电路。例如,程序跟踪电路可以提供跟踪项,其提供关于执行每个指令的结果的调试信息。作为对比,事务跟踪电路可以生成涉及与事务有关的重要事件(例如,在事务的执行期间所使用的至少一个资源的使用水平的变化)的跟踪项。因此,对于事务内的指令,可以生成两组跟踪项——一组由程序跟踪电路生成,并且一组由事务跟踪电路生成。

处理电路可包括第一处理器和第二处理器。在这类实施例中,装置可包括分析模块,分析模块更新控制信息以影响第一处理器和第二处理器的中的哪个处理器用于未来事务的执行。例如,第一处理器和第二处理器可具有不同的能力。在这种情况下,可以使用由事务跟踪电路所生成的跟踪项来执行特定事务的分析,从而确定第一处理器和第二处理器中的哪个处理器更适于该事务的未来执行。例如,第一处理器和第二处理器中的一个处理器可具有较小数目的可用资源。基于所生成的跟踪项,可以确定具有较小数目的资源的处理器将适于执行特定事务。在这些情况下,可能期望在具有较小数目的资源的处理器上执行该事务,从而减少能源使用。类似地,所生成的跟踪项可指示具有较小数目的资源的处理器可能不适于该事务的未来执行,特别是如果在事务的先前执行期间资源耗尽的情况下。因此,该事务在未来可以由具有较大数目的资源的处理器执行,从而减少事务被中止的机会,从而减少在未来被倒退的机会。这样的分析模块例如可被提供为在处理电路上执行的软件。

现在将参考附图描述具体实施例。

图1示意性地示出了可以由处理电路执行的程序指令流2。将理解的是,该程序指令流可以是多线程系统内的一个执行线程。替代地,程序指令流可以是程序指令执行的唯一线程。在图1所示的程序指令流中,包括事务开始指令tstart和事务结束指令tend。这些指令分别指示包括指令ia、ib、ic以及id的事务的边界。tstart和tend所界定的这些指令由处理电路来执行以生成对状态数据的推测性更新。这些推测性更新被存储在系统的存储器或其它存储资源内(例如,影子寄存器、允许回滚的专用存储器等),直到确定事务已在没有冲突的情况下完成,此刻,推测性更新被提交到系统(例如,利用所存储的回滚数据来更新系统的架构状态,这些回滚数据随后被丢弃来释放相关联的存储器资源,以支持另外的事务)。用于存储推测性更新的存储资源可被称为事务存储器。

图2a是示意性地示出包括多个程序指令的事务的执行的流程图。在步骤24处,处理进行等待,直到事务开始指令(tstart)被执行。随后,步骤26分配要使用的事务资源,例如,在事务完成之前存储对状态数据的推测性更新的资源。步骤28选择事务中的第一指令。步骤30确定在该时刻是否检测到任何冲突。若检测到任何这类冲突,则步骤32用于丢弃任何推测性更新,跳转到修复例程(fix-uproutine)(或以其它方式向软件指示事务已失败)并且归还在步骤26处分配的事务资源以用于其它事务。

若在步骤30处未检测到冲突,则步骤34用于执行所选择的指令。步骤36随后将步骤34处的执行结果作为对状态数据的推测性更新存储在所分配的事务资源中。步骤38选择下一指令。步骤40确定所选择的指令是否是事务结束指令(tend)。若该指令不是事务结束指令,则处理返回步骤30。若步骤40处的确定结果是所选择的指令是事务结束指令,则步骤42用于提交存储在所分配的事务资源中的推测性更新,从而更新系统的架构状态。

图2b是示意性地示出了被修改为支持平面事务嵌套的图2a的事务执行的流程图。在步骤26处,事务嵌套深度计数器在分配事务资源时被设置为“1”。在步骤38处选择下一指令之后,步骤35确定所选择的指令是否是事务开始指令。若所选择的指令是事务开始指令,则步骤37用于递增深度计数器,并且处理返回步骤30。

若步骤35处的确定结果是所选择的指令不是事务开始指令,则步骤40确定所选择的指令是否是事务结束指令。若所选择的指令不是事务结束指令,则处理返回步骤30。若所选择的指令是事务结束指令,则步骤39递减深度计数器,并且步骤41确定深度计数器是否具有等于零的值。若深度计数器不等于零,则再次处理返回到步骤30。若深度计数器等于零,则处理前进到如图2b所示的步骤42。

图2b的动作用于:响应于在步骤24处开始的事务追踪平面嵌套事务深度,并且当同一事务结束时提交存储在所分配的事务资源中的推测性更新。中止(abort)用于中止所有的嵌套事务。还可以存在其它示例实施例可支持事务的真正嵌套(truenesting)。

图3示意性地示出了根据一个实施例的装置44。装置44包括用于执行指令2的流(包括事务以及不构成任何事务的一部分的指令)的处理电路46。

本实施例中的处理电路46将缓存器48用作事务存储器,该事务存储器将推测性状态作为事务中指令执行的结果进行储存。此外,缓存器48可以用于获得程序指令,并且还与通用存储器50组合用作存储器层次结构的一部分。推测性状态被存储在缓存器48中直到事务被提交或中止为止。如果事务被提交,则存储在缓存器48中的事务状态将被允许存储到存储器50中,在其中可以由其它处理电路访问该事务状态。如果事务被中止,则事务状态被丢弃。

缓存器48是在执行事务期间使用的资源的示例。具体而言,随着在执行事务期间不同的数据值被改变,这些改变的值可以被存储在缓存器48的缓存行中。重复地改变相同的值仅导致缓存中的该值被改变。因此,资源使用不会改变。然而,随着另外的数据值被改变,缓存器48的使用水平(即所使用的资源的量)增加。装置44还包括从处理电路接收跟踪控制信号的事务跟踪模块52,其中跟踪控制信号指示在执行指令期间由处理电路46使用的至少一个资源的使用水平的变化。当新近使用这样的资源时,输出tresouce跟踪项。在本实施例中,至少一个资源是缓存器48,并且当使用水平改变时控制信号直接通知事务跟踪模块52。然而在其它实施例中,跟踪控制信号可以指示缓存器48的特定部分已被使用,并且事务跟踪模块52必须保持跟踪缓存器48的该部分是否正在被新近使用,并且在需要的情况下生成tresource跟踪项。

事务跟踪模块52生成存储在跟踪存储器54中的跟踪项。这些跟踪项可以由分析模块56分析以执行对事务的性能概况分析(profiling)。分析模块56可以例如将性能概况分析结果存储在存储器50中,该结果又可以用于影响处理电路46的行为。例如,分析模块56可以确定资源使用(例如,处理电路46在执行特定事务时使用缓存器48的程度)足够小,从而将来要执行该事务时,可以在包括小缓存的处理器上执行该事务,或者在具有不同形状/配置(例如具有较低的关联性)的缓存器(这些形状/配置可能影响其执行事务的能力)上执行该事务。这使得可以停用其它处理电路,从而导致节能。类似地,如果对特定事务的执行是由于资源不足而中止的(例如,如果缓存器48不够大),则由分析模块56执行的性能概况分析可以使得处理电路46将来对该事务的执行发生在能够访问较大缓存器(或具有不同形状/配置的缓存器(诸如具有较高关联性的缓存器之类))的处理器上。这将阻止事务在将来执行期间重复中止。分析模块或者可以在硬件中作为分析电路实现,或者可以由软件(例如在处理电路46上执行的软件)实现。在图3所示的实施例中,除了事务跟踪模块52之外装置44还包括程序跟踪模块60。程序跟踪模块60也可以响应于指令的执行而生成存储在跟踪存储器54中的跟踪项。这些指令可以构成事务的一部分,也可以不构成事务的一部分。然而,程序跟踪模块60与跟踪模块52不同之处在于,由事务跟踪模块52生成的跟踪项涉及事务本身的重大事件(例如资源使用的变化),而由程序跟踪模块60生成的跟踪项直接涉及特定指令的执行。还可以提供可选的控制寄存器58来控制事务跟踪操作。具体而言,使能参数47被用于将由事务跟踪模块执行的跟踪开启或关闭。采样参数49也可以被用于指示应该采样多少事务。例如,采样参数可以表示要采样的事务的比例,或者可以表示给定事务被采样的概率。可以提供除了本文提供的这些参数之外的其它参数,或者可以提供其它参数来替代本文提供的这些参数。

图4示出了在事务期间指令的执行如何影响资源(具体而言是由缓存器48实现的事务存储器)。事务由指令ia、ib、ic和id组成。在事务开始时,tstart数据分组被作为事务跟踪模块52的跟踪项输出。在该实施例中,假设指令ia、ib、ic和id中的每个使得值被更新。由于这些指令形成事务的一部分,所以指令是以推测方式执行的并且只在事务结束时提交。直到那时,推测性状态(即已被以推测方式更新的值)可以被存储在事务存储器(即缓存器48)中。缓存器48由多个缓存行62构成。

每当数据值在事务中被更新时,新值将被存储到缓存行中。如果写入了新值的缓存行先前未被写入过,则缓存器48的使用水平增加。如果指令多次访问相同的数据值(例如,如果相同的数据值被重复写入),或者如果存储在已经进行了写入的缓存行上的数据值被更新,则缓存器48的使用水平不会改变。

在这个示例中,假设缓存行的长度为64字节。指令ia使得保持在地址64处的数据值被更新。地址64在缓存行1(64/64=1)中。由于在该事务中,缓存行1先前未被写入过,因此这表示资源/缓存器48的使用增加,因此tresource数据分组将作为跟踪项被输出。在该示例中,tresource分组指示资源/缓存器48的总体使用情况,因此作为执行指令ia的结果,缓存器48的使用水平为1。指令ib使得地址240被访问。地址240在缓存行3(240/64=3剩余48)中。由于在该特定事务中缓存行3先前未被写入过,因此另一tresource数据分组将被输出,其指示资源/缓存器48的使用水平已增加到2。指令ic使得地址68被访问。地址68还是在缓存行1(68/64=1余4)中。由于缓存行未被新写入(缓存行1已由指令ia访问),所以缓存/资源48的使用没有增加。因此,事务跟踪模块52不输出跟踪项。指令id使得地址352被访问。同样地,由于地址在缓存行5(352/64=5余32)中且缓存行5在该事务中先前未被写入过,因此这表示资源/缓存器48的使用水平的改变。因此,tresource分组被输出,指示资源使用水平现在为3(即,自事务开始以来已写入3个资源行1、3和5)。在这种情况下,资源使用的变化是发生重大事件的一个示例,并且可以用于对事务进行性能概况分析的目的。注意,在本实施例中,tresource分组(跟踪项)指示资源/缓存器48的总体使用水平。如果将跟踪项存储到循环缓冲器中是有利的,这是因为即使跟踪项的完整历史记录不可用的情况下它也可以允许性能概况分析发生。随着较新的条目取代较旧的条目,这最终发生在循环缓冲区中。在其它实施例中,可以在每次新的访问之后生成tresource分组,并且可能需要在性能概况分析操作期间确定每个这样的分组之后的资源的使用水平。这可能是有利的,因为不要求tresource分组包括多比特绝对值来表示资源使用。相反,tresource分组只需要携带增量值(deltavalue),该值可能是单比特的或不占比特的。

在一些实施例中,可以在事务结束时输出单个tresource分组,从而指示在该事务期间的总体资源使用。

在一些实施例中,缓存器48被设置为关联的。例如,当与具有4个缓存组(每个缓存组有两路(twoways))的缓存组合使用时,考虑使用相同的指令集。

指令ia写入组1中的地址64(64/64=1)。指令ib写入组3中的地址240(240/64=3余48)。指令ic写入地址68。地址68还是在缓存组1中(68/64=1余4),因此该指令不会增加资源使用。指令id写入地址352。地址352在组1中(352/64=5余32且5取模4=1)。这与指令ia和ic写入的缓存行是不同的(组的另一路的缓存行),因为它是不同的基址。因此,该指令将使得组1的第二路被访问,因此已使用了新的缓存行。

跟踪项本身也可能具有多种格式。例如,一些跟踪项(例如,tstart和tend分组)可以包括时间戳。在其它实施例中,所有分组可以包括时间戳。这可以更容易地比较多处理器系统中多个处理器的行为。在一些实施例中,tend跟踪项可以包括指示在执行事务期间使用了处理电路46的多少个循环的循环计数(cyclecount)。

图5是示出根据一个实施例的事务跟踪模块52的操作的流程图。在步骤64,当要执行新的指令时,确定控制寄存器58中的使能参数47是否被设置。使能参数47控制事务跟踪模块52是否生成跟踪项。如果未设置此参数,则流程返回到步骤64。换言之,直到设置了使能参数47为止流程都不会经过此点。当设置了使能参数47时,在步骤66,确定由处理电路46执行的指令是否是事务的第一指令。如果是,则在步骤68,输出tstart分组作为跟踪项,并且流程返回到步骤64。如果不是,则在步骤70确定是否正在执行事务。如果不是则流程返回到步骤64,否则流程进行到步骤72。在步骤72,确定事务是否结束。这例如可能是中止的结果(例如,如果事务失败),或者可能是事务正常结束(其可以导致提交的发生)的结果。如果在步骤72确定事务结束,则在步骤74确定事务是否被中止。如果事务被中止,则在步骤76将tabort分组作为跟踪项输出,否则在步骤78将tend分组输出作为跟踪项输出。在任一情况下,流程返回到步骤64。注意,在一些实施例中,tabort分组可能包括指示为何中止发生的原因。如果在步骤72确定事务没有结束,则在步骤80确定作为执行当前指令的结果,由处理电路46使用的资源的使用水平是否被扩展。如果不是这种情况,则流程返回到步骤64,或者在步骤82,将tresource分组作为跟踪项输出,并且流程返回到步骤64。

注意,图5中流程图的每次迭代表示新指令的执行。具体地,步骤64响应于新指令而发生。

图6是示出了根据一个实施例的事务跟踪模块52如何操作的示例的流程图,其中假设存在采样参数49,该采样参数49使得事务的一部分被跟踪。这样的参数可以定义特定事务被跟踪的概率,或指示要跟踪的事务的部分的比例。

同样在步骤64,响应于新指令,确定使能参数47是否被设置,并且如果使能参数47被设置则流程进行到步骤84,其中确定采样的事务是否目前正在执行。换言之,确定是否设置了采样标志。如果不是,则在步骤66确定指令是否是事务的第一指令。如果指令不是事务的第一指令,则流程返回到步骤64,如果是,则在步骤88确定当前事务是否应被采样。如先前参考图3所讨论的,这可以基于比例或概率来确定。在采样参数49表示要采样的事务的比例的情况下,可以通过使用计数器来实现这一点,在每次遇到新事务时该计数器被递增,并且每当计数器达到采样参数的值时,新的事务被采样且计数器被复位。在表示概率的情况下,可以生成随机数,并且如果随机数小于概率,则新的事务被采样。在任何情况下,如果在步骤88确定当前事务不被采样,则流程返回到步骤64。或者,流程进行到步骤90,其中采样标志被设置,从而影响下一次步骤84执行的结果。流程随后进行到步骤68,其中输出指示新的事务已开始的tstart分组。流程随后返回到步骤64。或者,如果在步骤84确定正在执行的指令是采样事务的一部分(例如,采样标志被设置),则在步骤72确定事务是否结束。如所讨论的,这可能是事务被提交的结果,也可能是事务被中止的结果。

如果事务尚未结束,则在步骤80确定当前指令是否扩展资源的使用。如果没有,则流程返回到步骤64,如果是,则在步骤82,如前所述输出tresource分组。如果在步骤72事务结束,则步骤74确定事务是否被中止。如果不是,则事务正常结束(作为提交的结果),并且因此在步骤78输出tend分组。在步骤92,采样标志被清除,以指示当前事务不再被采样,并且流程返回到步骤64。或者,如果在步骤74确定当前事务被中止,则在步骤76输出tabort分组。随后,流程进行到前述的步骤92。

图7是示出根据一个实施例的事务跟踪模块52的操作的流程图,在该实施例中,只有一部分事务被采样(跟踪)并且可以存在嵌套事务。该流程图类似于图6的流程图,并且在过程相同的情况下使用了相似的附图标记。图7所示实施例中的主要区别在于提供了深度计数器,在每次事务开始时递增深度计数器,并在每次事务结束时递减深度计数器。另外,如果一事务被采样或跟踪,则该事务中的所有事务也被采样或跟踪。注意,在该实施例中,如果一事务被中止,则所有事务被中止。此外,对于嵌套事务,在最外层(最低深度)事务结束之前,事务不会结束。因此,在本实施例中,嵌套中的所有事务都被跟踪,或者都不被跟踪。在其它实施例中,即使外部事务不被跟踪,事务也可被跟踪。这样的实施例可以使用修改的tstart和tend分组来指示正跟踪的事务是嵌套的。这可以通过以下方式来实现:包括一标志,发布tstartnested和tendnested指令,或者在tstart和tend分组中包括深度计数器的值来指示正开始或结束的事务的深度。包括一标志或仅使用不同分组类型(tstartnested和tendnested)的一个优点是:由于必须表示较少的信息,因此分组较小。相反,包括深度计数器的值的替代方案是:在采用循环缓冲器的情况下,在跟踪项列表的头部开始被尾部覆写时可以确定更多的信息。

在其它实施例中,如果对(内部)嵌套事务的跟踪开始,则该跟踪可以继续,直到最外层的事务结束为止。

注意,深度计数器本身也可以是其使用水平被跟踪的资源的示例。例如,每当嵌套事务开始时,深度计数器可以增加并且可以输出tresource分组(在步骤82)。类似地,深度计数器的减少也可以使得输出tresource分组(在步骤82)以指示变化。

在图7所示的实施例中,步骤67询问当前指令是否是最外层事务的第一指令。如果是,则流程进行到步骤88,如果不是,则流程返回到步骤64,如前所述。因此,跟踪只能在最外层事务开始时开始。

在步骤90中设置了采样标志之后,在步骤92将深度计数器设置为1。流程随后进行到步骤68,在步骤68输出tstart分组。另外,如果在步骤84确定当前正在执行的指令位于采样事务中,则在步骤94确定是否正开始新的(嵌套)事务。如果是这样,则在步骤96,深度计数器递增并且流程进行到步骤68,在步骤68输出tstart分组。或者,如果在步骤94没有开始新的嵌套事务,则流程进行到步骤72,在步骤72确定事务是否结束,如前所述。此外,如果在步骤74确定事务将被中止,则在步骤76输出tabort分组之后、流程返回到步骤64之前,步骤98使得采样标志被清除。或者,如果在步骤74事务未被中止,则在步骤78输出tend分组,在步骤100递减深度计数器,并且流程进行到步骤102。如果在步骤102确定深度计数器不等于0(意味着最外层事务尚未到达),则流程返回到步骤64,否则流程进行到步骤98,其中采样标志将被清除。

图8示出了其中提供了“小”处理设备106和“大”处理设备108的实施例。处理电路46还包括调度器104,调度器104可以作为软件来实现,并且可以例如在小处理设备106和大处理设备108中的一个上运行。调度器能够使用来自分析模块56的性能概况分析输出(其可以存储在存储器50中),从而确定如何处理事务的未来执行。处理设备106、108中的每个包括其本身的处理器110和缓存器48。另外,处理设备106、108可以访问共享缓存器112。在该实施例中,与大处理设备108相比,小处理设备106使用较少量的能量(例如由于具有较小的缓存器48)。据此,可以使用由分析模块56执行的性能概况分析来确定哪个设备最适合于在未来执行事务。具体而言,性能概况分析可以确定事务的执行仅需要少量资源(例如缓存器)。据此,调度器104确定:该事务下一次被执行时将在小处理设备106上执行。与使用更大的大处理设备108相比,这可以节省能量,尤其是如果大处理设备108变为空闲并且可以关闭电源。相比之下,如果特定事务具有高资源使用需求,则调度器104可以使得对该事务的未来的执行在大处理设备108上发生,从而寻求预先消除由于小处理设备106上没有用于事务成功完成的足够资源所致的事务中止的可能性。以类似的方式,可以确定需要高关联性缓存器或者可以使用低关联性缓存器。例如,资源使用水平可以是缓存组中剩余的路的数量。如果该数字降低到低于预定义值(例如0),则下一次事务执行时可能需要在具有较高关联性的缓存器上执行该事务,从而缓存组中的路数不会耗尽。相反,如果数字保持在预定义的值以上,则下一次可能期望在具有较低关联性的缓存器上执行该事务。

在本申请中,词语“被配置为……”用于表示装置的元件具有能够执行所定义的操作的配置。在该上下文中,“配置”是指硬件或软件的互连的布置或方式。例如,装置可以具有提供所定义的操作的专用硬件,或者处理器或其它处理设备可以被编程以执行功能。“被配置为”并不意味着装置元件需要以任何方式进行改变从而提供所定义的操作。

尽管已参考附图详述了本发明的说明性实施例,但应理解,本发明不限于这些精确实施例,并且在不脱离由所附权利要求限定的本发明的范围和精神的情况下,可以由技术人员在其中实现各种改变、添加和修改。例如,在不脱离本发明的范围的情况下,可以对从属权利要求的特征与独立权利要求的特征进行各种组合。

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