CN1604044A - 用于指令和数据访问的选择性计数的方法和装置 - Google Patents

用于指令和数据访问的选择性计数的方法和装置 Download PDF

Info

Publication number
CN1604044A
CN1604044A CNA200410056579XA CN200410056579A CN1604044A CN 1604044 A CN1604044 A CN 1604044A CN A200410056579X A CNA200410056579X A CN A200410056579XA CN 200410056579 A CN200410056579 A CN 200410056579A CN 1604044 A CN1604044 A CN 1604044A
Authority
CN
China
Prior art keywords
instruction
indicator
data
execution
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA200410056579XA
Other languages
English (en)
Inventor
小吉米·E·德威特
弗兰克·E·莱文
伊尼奥·M·皮内达
克里斯托弗·M·理查森
罗伯特·J·厄克特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN1604044A publication Critical patent/CN1604044A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3471Address tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/885Monitoring specific for caches

Abstract

一种数据处理系统中用于处理指令的方法、装置和计算机指令。在数据处理系统中的处理器接收指令。如果指示器与指令相关联,那么该指令和所有随后的指令的执行被计数直到接收另一个指示器。指示器也与数据位置一起使用以计数对数据位置中的数据的访问。如果指示器与数据位置相关联,对所有随后的数据位置访问计数直到接收另一个指示器。

Description

用于指令和数据访问的选择性计数的方法和装置
技术领域
本发明一般地涉及改进的数据处理系统。特别是,本发明提供一种方法和装置,用于获得数据处理系统中的性能数据。更特别的是,本发明提供一种方法和装置,用于对获得数据处理系统中的性能数据的软件工具的硬件辅助。
背景技术
在分析和增强数据处理系统的性能和数据处理系统内执行的应用中,了解数据处理系统内的哪个软件模块正在使用系统资源是有帮助的。数据处理系统的有效的管理和增强要求知道各种系统资源如何以及何时正在使用。当各种软件应用正在数据处理系统中执行时,性能工具用来监视和检查数据处理系统以确定资源消耗。例如,性能工具可以识别数据处理系统中最频繁执行的模块和指令,或者可以识别那些分配最大数量的存储器或执行最多的I/O请求的模块。硬件性能工具可以嵌入到系统中或在以后的时间添加。
一个已知的软件性能工具是跟踪工具。跟踪工具可以使用一种以上的技术提供跟踪信息,该信息指明一个执行程序的执行流程。通过当某些事件发生时记录它们,一种技术,所谓的基于事件的剖面技术(profiling technique),跟踪指令的特定的序列。例如,跟踪工具可以记录每次进入和每次离开模块、子程序、方法、函数或系统部件。或者,跟踪工具可以记录为每个存储器分配请求分配的存储器的请求者和数量。典型地,为每个这样的事件产生打了时间戳的记录。相应的记录对,类似于进入-离开记录,也用于跟踪任意代码段的执行、I/O的开始和完成或数据的传输,并且用于其它很多感兴趣事件。
为改善由各种计算机族生成的代码的性能,确定在执行代码时处理器正在将时间花在哪里经常是必要的,这样的努力通常在计算机处理技术中称为定位“热点”。理想地,一个人愿意在指令和/或代码的源码行级隔离这样的热点,以便集中注意力于可能从对代码的改善收益最多的区域。
另一种跟踪技术涉及周期性地采样程序的执行流程以识别程序中的某个位置,在该位置程序看来花费大量的时间。这种技术基于这样的思想:在规则的间隔周期性地中断应用或者数据处理系统执行,所谓的基于采样的剖面。在每次中断,对预定长度的时间或预定数目的感兴趣的事件记录信息。例如,在时间间隔期间,可记录当前执行线程的程序计数器,它是正在剖析的更大的程序的可执行部分。在后处理时间,可以对数据处理系统的负载图和符号表信息解析这些值,并且从这个分析可以得到时间正花费在哪里的剖面。
创造如这些的工具以找到与特定的情形或问题相关的答案可花费很多工作量并且可能很难校准,因为软件工具自身影响被测试系统。本发明认识到用于工具开发和问题分析的硬件辅助可明显减轻开发软件性能工具需要的工作量。进而,随着处理器密度的增大,硬件辅助可能被包括以提供附加的调试和分析特征。
因此,拥有用来为性能工具提供硬件辅助的改进的方法、装置和计算机指令会是有益的,该性能工具用来分析数据处理系统的性能。
发明内容
本发明提供数据处理系统中用于处理指令的一种方法、装置和计算机指令。指令在数据处理系统中的处理器接收。如果指示器(indicator)与指令相关联,该指令和所有随后的指令的执行被计数直到接收另一个指示器。指示器也使用于数据位置从而对数据位置中的数据的访问计数。如果指示器与数据位置相关联,所有随后的数据位置的访问被计数直到接收另一个指示器。
附图说明
在附加的权利要求中阐明被认为是本发明的特性的新颖特征。但是,当结合附图阅读时,通过参考下面说明性的实施例的详细描述,将最好地理解本发明自身以及其使用的优选方式、进一步的目标和优势,其中:
图1是可以实现本发明的数据处理系统的方块图;
图2是根据本发明的优选实施例用于处理信息的处理器系统的方块图;
图3是根据本发明的优选实施例说明在处理与指示器相关联的处理指令中使用的部件的图;
图4是根据优选实施例说明用于使性能指示器与指令或存储器位置相关联的一种机制的图;
图5是根据本发明的优选实施例说明束(bundle)的图;
图6是根据本发明的优选实施例的包含性能指示器的子程序的图;
图7是根据本发明的优选实施例用于处理包含性能指示器的指令的过程的流程图;
图8是根据本发明的优选实施例用于选择性地发送指令到中断单元的过程的流程图;
图9是根据本发明的优选实施例用于产生中断以响应对与性能指示器相关联的存储器位置的访问的过程的流程图;
图10是根据本发明的优选实施例用于对事件计数的过程的流程图;
图11是根据本发明的优选实施例用于指令的选择性计数的过程的流程图;
图12是根据本发明的优选实施例用于指令的选择性计数的过程的流程图;
图13是根据本发明的优选实施例用于识别超过阈值的指令的过程的流程图;
图14是根据本发明的优选实施例用于对存储器位置的访问的过程的流程图;
图15是根据本发明的优选实施例说明用于产生元数据(meta data)如性能指示器的部件的方块图;
图16是根据本发明的优选实施例说明元数据的图;
图17是根据本发明的优选实施例说明涉及装载和维护性能仪器影子高速缓冲存储器(performance instrumentation shadow cache)的部件的图;
图18是根据本发明的优选实施例用于为指令产生元数据的过程的流程图;
图19是根据本发明的优选实施例用于为存储器位置产生元数据的过程的流程图;
图20是根据本发明的优选实施例用于对用于特定指令的执行计数的过程的流程图;
图21是根据本发明的优选实施例用于对访问特定存储器位置计数的过程的流程图;
图22是说明根据本发明的优选实施例的各部件的图,所述各部件用于访问相对于指令的执行或存储器位置的访问而收集的信息;
图23是根据本发明的优选实施例用来自动修改程序中的代码从而允许代码的部分的选择性计数或剖面的部件的方块图;
图24是根据本发明的优选实施例用于动态地添加或关联性能指示器到指令的过程的流程图;
图25是根据本发明的优选实施例说明用来通过使性能指示器和页中的指令相关联来扫描页的部件的图;
图26是根据本发明的优选实施例用于使指示器与页中的指令相关联的过程的流程图;
图27是根据本发明的优选实施例描述包含堆栈帧的调用堆栈的图;
图28是根据本发明的优选实施例用于识别与调用和返回指令相关联的事件的过程的流程图,其中从性能监视器单元收集数据;
图29是根据本发明的优选实施例用于识别已经执行超过所选择的次数的指令的过程的流程图;
图30是根据本发明的优选实施例用于当执行特定指令超过某个所选择的次数时检查调用堆栈和识别程序的调用者的过程的流程图;
图31是根据本发明的优选实施例说明已经为监视选择的数据和指令的范围的图;以及
图32是根据本发明的优选实施例用于对设置的范围的访问数以及设置的范围内执行的指令数计数的过程的流程图。
具体实施方式
现在参考图1,显示其中可以实现本发明的数据处理系统的方块图。客户100是计算机的例子,实现本发明的过程的代码或指令可以位于其中。客户100使用外围部件互连(PCI)本地总线架构。虽然描述的例子使用PCI总线,但可以使用其它总线架构,如加速图形端口(AGP)和工业标准架构(ISA)。处理器102和主存储器104通过PCI桥108连接到PCI本地总线106。PCI桥108也可以包括集成的存储器控制器和高速缓冲存储器用于处理器102。到PCI本地总线106的另外的连接可以通过直接部件互连或通过附加板实现。在描述的例子中,局域网(LAN)适配器110、小计算机系统接口(SCSI)主机总线适配器112和扩展总线接口114通过直接部件互连连接到PCI本地总线106。相比之下,语音适配器116、图形适配器118和音频/视频适配器119通过插入到扩展槽的附加板连接到PCI本地总线106。扩展总线接口114为键盘和鼠标适配器120、调制解调器122和附加的存储器124提供连接。SCSI主机总线适配器112为硬盘驱动器126、磁带驱动器128和CD-ROM驱动器130提供连接。典型的PCI本地总线实现将支持三或四个PCI扩展槽或附加连接器。
在图1的数据处理系统100内,操作系统在处理器102上运行并用来对各种部件进行协调和提供控制。操作系统可能是商业上可得到的操作系统如Windows XP,它可从微软公司得到。面向对象的编程系统如Java可以与操作系统一起运行,并且提供从Java程序或客户100上执行的应用对操作系统的调用。“Java”是Sun微系统公司的商标。用于操作系统、面向对象的编程系统和应用或程序的指令位于存储设备如硬盘驱动器126上,并且为了由处理器102执行可以装入主存储器104。
本领域普通技术人员将意识到,图1中的硬件可以依赖于实现变化。其它的内部硬件或外设,如只读(ROM)闪存、相当的非易失存储器或光盘驱动器等,可以用来添加到或替代图1中所描述的硬件。同样地,本发明的过程可以应用到多处理器数据处理系统。
例如,客户100,如果可选地配置为网络计算机,可以不包括SCSI主机总线适配器112、硬盘驱动器126、磁带驱动器128和CD-ROM驱动器130。在那种情况下,计算机,恰当地称为客户计算机,包括某种类型的网络通信接口,如LAN适配器110或调制解调器122等。作为另一个例子,客户100可以是单机系统,它配置为可启动而不依赖某种类型的网络通信接口,无论客户100是否包含某种类型的网络通信接口。作为进一步的例子,客户100可以是个人数字助理(PDA),它配置有ROM和/或闪存ROM从而为存储操作系统文件和/或用户产生的数据提供非易失存储器。图1中所描述的例子和上述的例子不意味着暗示架构的限制。
本发明的过程由处理器102利用计算机实现的指令执行,指令可以位于存储器如例如主存储器104、存储器124中,或位于一个或更多的外设126-130中。
接下来转向图2,根据本发明的优选实施例,描述用于处理信息的处理器系统的方块图。处理器210可以如图1中的处理器102一样实现。
在优选实施例中,处理器210是单个超大规模集成电路微处理器。因此,如在这里下面进一步讨论的,处理器210包括各种单元、寄存器、缓冲器、存储器和其它部分,它们都由集成电路构成。同样地,在优选实施例中,处理器210根据精减指令集计算机(“RISC”)技术操作。如图2中所示,系统总线211连接到处理器210的总线接口单元(“BIU”)212。BIU 212控制处理器210和系统总线211之间的信息传递。
BIU 212连接到指令高速缓冲存储器214和处理器210的数据高速缓冲存储器216。指令高速缓冲存储器214输出指令到定序器(sequencer)单元218。为响应来自指令高速缓冲存储器214的这样的指令,定序器单元218选择性地输出指令到处理器210的其它执行电路。
除了定序器单元218,在优选实施例中,处理器210的执行电路包括多个执行单元,即分支单元220、定点单元A(“FXUA”)222、定点单元B(“FXUB”)224、复定点单元(“CFXU”)226、装载/存储单元(“LSU”)228和浮点单元(“FPU”)230。FXUA 222、FXUB 224、CFXU 226和LSU 228从通用架构寄存器(“GPR”)232和定点重命名缓冲器234输入其源操作数信息。此外,FXUA 222和FXUB 224从进位比特(“CA”)寄存器239输入“进位比特”。FXUA222、FXUB 224、CFXU 226和LSU 228输出其操作的结果(目的操作数信息),用来在定点重命名缓冲器234中的选择的登记项上存储。同样地,CFXU226输入和输出源操作数信息和目的操作数信息到和从特殊用途寄存器处理单元(“SPR单元”)237。
FPU 230从浮点架构寄存器(“FPR”)236和浮点重命名缓冲器238输入它的源操作数信息。FPU 230输出它的操作的结果(目的操作数信息)用来在浮点重命名缓冲器238中的选择的登记项存储。
为响应装载指令,LSU 228从数据高速缓冲存储器216输入信息并复制这样的信息到所选择的重命名缓存器234和238。如果这样的信息未存储在数据高速缓冲存储器216中,那么数据高速缓冲存储器216从连接到系统总线211的系统存储器239(通过BIU 212和系统总线211)输入这样的信息。此外,数据高速缓冲存储器216能够从数据高速缓冲存储器216到连接到系统总线211的系统存储器239(通过BIU 212和系统总线211)输出信息。为响应存储指令,LSU 228从GPR 232和FPR 236中选择的一个输入信息并复制这样的信息到数据高速缓冲存储器216。
定序器单元218输入和输出信息到和从GPR 232和FPR 236。分支单元220从定序器单元218输入指令和信号指示处理器210的目前状态。为响应这样的指令和信号,分支单元220输出信号(到定序器单元218)指示适当的存储器地址,该存储器地址存储用于处理器210的执行的指令序列。为响应来自分支单元220的这样的信号,定序器单元218从指令高速缓冲存储器214输入指示的指令序列。如果一个或更多的指令序列未存储于指令高速缓冲存储器214,那么指令高速缓冲存储器214从连接到系统总线211的系统存储器239(通过BIU 212和系统总线211)输入这样的指令。
为响应从指令高速缓冲存储器214输入的指令,定序器单元21 8选择性地分派指令到所选择的执行单元220、222、224、226、228和230。每个执行单元执行特定的指令类的一个或更多的指令。例如,FXUA 222和FXUB 224对源操作数执行第一类定点数学操作,如加、减、与、或和异或。CFXU 226对源操作数执行第二类定点操作,如定点乘和除。FPU 230对源操作数执行浮点操作,如浮点乘和除。
当信息存储于所选择的重命名缓冲器234之一时,这样的信息与如由指令指定的存储位置(如GPR 232或进位比特(CA)寄存器242之一)相关联,所选择的重命名缓冲器对该存储位置分配。存储于所选择的重命名缓冲器234之一的信息被复制到它的相关联的GPR 232(或CA寄存器242)之一,以响应来自定序器单元218的信号。定序器单元218指挥(direct)存储于所选择的重命名缓冲器234之一的信息的这样的复制,以响应“完成”产生信息的指令。这样的复制称为“回写”。
当信息存储于所选择的重命名缓冲器238之一时,这样的信息与FPR 236之一相关联。存储于所选择的重命名缓冲器238之一的信息被复制到它的相关联的FPR 236之一,以响应来自定序器单元218的信号。定序器单元218指挥存储于所选择的重命名缓冲器238之一的信息的这样的复制,以响应“完成”产生信息的指令。
处理器210通过在各种执行单元220、222、224、226、228和230同时处理多个指令达到高性能。因此,每个指令作为阶段的序列处理,每个阶段可与其它指令的阶段并行执行。这样的技术称为“流水线(pipelining)”。在解说性的实施例的重要方面,指令通常作为六个阶段处理,即取、解码、分派、执行、完成和回写。
在取阶段,定序器单元218选择性地(从指令高速缓冲存储器214)输入一个或更多指令,该指令来自存储指令的序列的一个或更多存储器地址,指令的序列在上文与分支单元220和定序器单元218进一步进行了讨论。
在解码阶段,定序器单元218对多达四个取到的指令解码。
在分派阶段,定序器单元218为分派的指令的结果(目的操作数信息)保留重命名缓冲器登记项后,选择性地分派多达四个解码的指令到选择的(响应于解码阶段的解码)执行单元220、222、224、226、228和230。在分派阶段,操作数信息被提供给选择的执行单元用于分派的指令。处理器210按照指令编程的顺序分派它们。
在执行阶段,执行单元执行其分派的指令并输出其操作的结果(目的操作数信息),以存储于重命名缓冲器234和重命名缓冲器238中所选择的登记项,如在上文进一步讨论的。以这种方式,相对于指令的编程顺序,处理器210能够次序颠倒地执行指令。
在完成阶段,定序器单元218指示指令“完成”。处理器210按照指令的编程的顺序“完成”它们。
在回写阶段,定序器单元218分别指挥从重命名缓冲器234和238到GPR232和FPR 236的信息的复制。定序器单元218指挥存储于所选择的重命名缓冲器的信息的这样的复制。同样地,在特定指令的回写阶段,处理器210更新其架构的状态以相应特定的指令。处理器210按照其编程的顺序处理指令的各“回写”阶段。在特定的情形处理器210有益地合并指令的完成阶段和回写阶段。
在说明性的实施例中,每个指令要求一个机器周期完成指令处理的每个阶段。但是,一些指令(如由CFXU 226执行的复定点指令)可能要求多于一个周期。因此,特定指令的执行和完成阶段之间可能产生可变的延迟以响应前面的指令的完成要求的时间的变化。
定序器单元218内提供完成缓冲器248以跟踪正在执行单元内执行的多个指令的完成。指示指令或指令组已经成功地完成之后,以应用指定的顺序,完成缓冲器248可以用来开始传输那些完成的指令的结果到相关联的通用寄存器。
另外,处理器210也包括性能监视器单元240,它连接到指令高速缓冲存储器214以及处理器210中的其它单元。利用性能监视器单元240可以监视处理器210的操作,性能监视器单元240在这个说明性的实施例中是软件可访问的机制,该机制能够提供描述利用指令执行资源和存储控制的详细信息。虽然图2中未说明,但性能监视器单元240耦合到处理器210的每个功能单元以允许对处理器210的操作的所有方面的监视,包括例如:重建事件之间的关系、识别错误的触发、识别性能瓶颈、监视流水线停止、监视空闲处理器周期、确定分派效率、确定分支效率、确定未对准的数据访问的性能惩罚、识别序列化指令的执行的频率、识别抑制的中断和确定性能效率。感兴趣的事件也可以包括:例如,指令解码的时间、指令的执行、分支事件、高速缓冲存储器未命中和高速缓冲存储器命中。
性能监视器单元240包括计数器241-242的依赖于实现的数目(如2-8),标注为PMC1和PMC2,它们用来对选择的事件的发生计数。性能监视器单元240进而包括至少一个监视器模式控制寄存器(MMCR)。在这个例子中,存在两个控制寄存器,MMCR 243和244,指定计数器241-242的功能。计数器241-242和MMCR 243-244最好实现为SPR,它们对通过CFXU 226可执行的MFSPR(从SPR移走)和MTSPR(移到SPR)指令的读或写是可访问的。但是,在一个替代实施例中,计数器241-242和MMCR 243-244可以简单地实现为I/O空间中的地址。在另一个替代实施例中,控制寄存器和计数器可以通过索引寄存器间接地访问。这个实施例在来自英特尔公司的处理器中的IA-64架构中实现。
另外,处理器210还包括中断单元250,它连接到指令高速缓冲存储器214。另外,虽然未在图2中显示,中断单元250连接到处理器210内的其它功能单元。中断单元250可从其它功能单元接收信号并初始化动作,如开始误差处理或俘获(trap)过程。在这些例子中,使用中断单元250产生中断和异常,它们可能在程序的执行期间产生。
在程序的执行期间,本发明提供监视特定指令的执行以及特定存储器位置的访问的能力。特别地,空闲的域(field)可以用来保存指示器(indicator),它识别要由性能监视器单元或处理器中的某个其它单元监视的指令或存储器位置。或者,指示器可以存储在与指令或存储器位置相关联的另一个位置。在指示器放在指令中的情况下,典型地使用空闲的域,但是在某些情况下,指令可以扩展以包括指示器需要的空间。对这种情况,处理器的架构可能要求变化。例如,64比特架构可以变化到65比特架构以容纳指示器。关于数据的访问,指示器可以与数据或数据所处的存储器位置相关联。
现在转向图3,根据本发明的优选实施例,描述说明与指示器相关联的处理指令中使用的部件的图。指令高速缓冲存储器300接收束302。指令高速缓冲存储器300是图2中的指令高速缓冲存储器214的例子。束是指令的分组。这种类型的指令的分组典型地在可以从英特尔公司得到的IA-64处理器中发现。指令高速缓冲存储器300处理用来执行的指令。
作为这个指令的处理的一部分,指令高速缓冲存储器300确定哪些指令与指示器相关联。这些指示器在这些例子中也称为“性能指示器”。信号304已经与性能指示器相关联。结果,用于指令的信号304被送到性能监视器单元306。性能监视器单元306是图2中性能监视器单元240的例子。
当指令高速缓冲存储器300确定存在与指示器相关的指令时,发送信号以指示标记的指令正在执行。在这些例子中,标记的指令是与性能指示器相关联的指令。或者,性能指示器可以指示束中的所有登记项或指令被标记要计数。另外,用于这些指令的信号由指令高速缓冲存储器300发送到适当的功能单元。依赖于特定的实现,除了性能监视器单元306的功能单元可以对指令的执行计数。在性能指示器在指令或束中的情况,高速缓冲存储器单元,指令高速缓冲存储器300检测指示器并发送信号到性能监视器单元306。
当用于这些指令的信号由性能监视器单元306接收时,性能监视器单元306对与指令304的执行相关联的事件计数。如所说明的,仅对性能监视器单元306编程从而为与性能指示器相关联的指令对事件计数。换句话说,使用与指令或存储器位置相关联的指示器,以允许性能监视器单元306对与指令或存储器位置相关联的事件计数。如果指令高速缓冲存储器300而非性能指示器接收指令,那么不对与那个指令相关联的事件计数。总之,性能指示器允许根据处理器中的指令或存储器位置计数。
如果在一种模式中设置性能监视器单元306以对为这些类型的标记的指令允许的度量计数,性能监视器单元306为与性能指示器相关联的指令对事件计数。在某些情况下,可以设置性能监视器单元306以执行某种其它类型的计数,如对所有指令的执行计数,它是当前可用的功能。
关于存储器位置中的数据访问,由数据高速缓冲存储器,如图2中的数据高速缓冲存储器216,而不是指令高速缓冲存储器对数据和指示器进行处理。数据高速缓冲存储器发送指示正在访问标记的存储器位置的信号到性能监视器单元306。标记的存储器位置类似于标记的指令。这些类型的存储器位置是与性能指示器相关联的。
接下来转向图4,根据本发明的优选实施例,显示说明一种用于使性能指示器和指令或存储器位置相关联的机制的图。处理器400从高速缓冲存储器402接收指令。在这个例子中,指示器不随指令存储或存储在其中发现数据的存储器位置。而是,指示器存储于单独的存储区域,性能仪器影子高速缓冲存储器(performance instrumentation shadow cache)404。存储可以是任何存储设备,如例如系统存储器、闪存、高速缓冲存储器或盘。
当处理器400从高速缓冲存储器402接收指令时,处理器400检查性能仪器影子高速缓冲存储器404以了解是否性能指示器与指令相关联。对于包含数据的存储器位置的访问进行类似的检查。在一个实施例中,为不影响实际的数据段的每个相应字提供整个影子字。换句话说,处理器400考虑高速缓冲存储器402的架构或配置保持不变。在这些例子中,描述的映射是字对字。但是,可以使用某种其它类型的映射,如每数据字一个影子比特,其中性能仪器影子高速缓冲存储器404中的一个比特对应于一个数据字。
关于这种类型的架构,使用这个特征的编译器在与它们自身的数据区域分离的工作区域、以类似于调试符号的方式产生调试信息。当装载模块时,附加的信息,性能指示器由装载者准备,使得当指令被装入高速缓冲存储器402时,并入性能仪器影子高速缓冲存储器404将是可用的。这些高速缓冲存储器区域可以是混合的,并且或者如这样标记,或者由操作模式理解。处理器400使用性能指示器确定如何对有关的数据访问和指令执行计数或使得产生异常。在这些例子中,由调试器或性能分析程序对过程编程,以分辨当它执行指令时是否使用影子信息。
接下来转向图5,根据本发明的优选实施例显示说明束的图。束500包含指令时隙502、指令时隙504、指令时隙506和模板508。如说明的,束500包含128个比特。每个指令时隙包含41个比特,模板508包含5个比特。模板508用来识别当前束内的停止并映射时隙内的指令到不同类型的执行单元。
束500中的空闲比特用来保存本发明的指示器。例如,指示器510、512和514分别位于指令时隙502、504和506内。依赖于特定的实现,这些指示器可以采用各种形式并且可以采用各种大小。指示器可以使用单个比特或可以使用多个比特。单个比特可以用来指示事件要被计数以响应那个指令的执行。多个比特可以用来识别阈值,如用于指令执行的处理器或时钟周期的数目,它可以在事件应该计数之前传递。进而,这些比特甚至可以用作特定指令的计数器。类似的域的使用可以用于标记数据或存储器位置的指示器。
或者,模板508可以用于包含一束有关的指示器,使得一个比特用来识别束中的所有指令。同样地,束自身可以扩展到256个比特或某个其它数目的比特以包含额外的信息用于性能指示器。
接下来转向图6A和6B,根据本发明的优选实施例,显示包含性能指示器的子程序和包含性能指示器的数据的图。在这个例子中,图6A中的子程序600包括许多指令,其中,指令602、604和606与性能指示器相关联。这些指令也称为标记的指令。当执行这些指令时,对与这些指令相关联的事件计数以得到用于软件工具的数据从而分析执行子程序600的数据处理系统的性能。
数据或包含数据的存储器位置可以以类似的方式用指示器标记。这些指示器用于对这些例子中的数据或存储器位置的访问的计数。在图6B中,数据610包括与性能指示器相关联的数据。数据612和数据614是数据610的与性能指示器相关联的部分。这些与性能指示器相关联的数据的部分也称为标记的数据。
现在转向图7,根据本发明的优选实施例,显示用于处理包含性能指示器的指令的过程的流程图。图7中说明的过程可以在指令高速缓冲存储器中实现,如图2中的指令高速缓冲存储器214。
过程由接收束开始(步骤700)。在这些例子中,每个束具有与图5中的束500相似的格式。识别束中的指令(步骤702)。关于是否存在与指令相关联的性能指示器进行确定(步骤704)。这个确定可以通过检查指令或束中的适当的域进行。或者,可以检查性能仪器影子高速缓冲存储器,如图4中的性能仪器影子高速缓冲存储器404以了解是否性能指示器与指令相关联。
如果存在性能指示器,信号被送到性能监视器单元(步骤706)。接收这个信号后,性能监视器单元将对与指令的执行相关联的事件计数。另外,处理指令(步骤708)。指令的处理包括,例如发送指令到适合的功能单元用于执行。
其后,关于是否束中存在额外的未处理的指令进行确定(步骤710)。如果束中存在额外的未处理的指令,如上所述过程返回到步骤702。否则,过程结束。转回到步骤704,如果不存在性能指示器,过程直接前进到步骤708。
现在转向图8,根据本发明的优选实施例,显示用于选择性地发送信号到中断单元的过程的流程图。图8中说明的过程可以在指令高速缓冲存储器如图2中的指令高速缓冲存储器242中实现。在使用性能监视器单元监视事件可能丢失某些事件的情况下使用这个过程。例如,性能监视器单元对事件计数。当高速缓冲存储器丢失发生时,发送信号到性能监视器单元。当用于相应的高速缓冲存储器行的元数据(meat data)装入高速缓冲存储器时,也产生适当的信号或多个信号。如果元数据指示要产生异常,那么发送信号到中断单元,其中信号指示要产生异常。
过程由接收束开始(步骤800)。识别束中的指令(步骤802)。关于是否存在与指令相关联的性能指示器进行确定(步骤804)。发送到中断单元指示异常要产生的信号不同于发送到性能监视器单元的信号。例如,指令可能与具有使信号发送到中断单元的第一个值的特定的性能指示器相关联。用于性能指示器的第二个值可以用来发送不同的信号到性能监视器单元。如果存在具有第一个值的性能指示器,信号发送到中断单元(步骤806)。接收这个信号后,中断单元发起适当的调用流支持以处理这个中断。调用流支持可以,例如,记录可能被试图访问高速缓冲存储器中的指令或数据的功能单元丢失的高速缓冲存储器丢失。
另外,处理指令(步骤808)。指令的处理包括,例如,发送指令到适当的功能单元用于执行。
其后,关于是否束中存在额外的未处理的指令进行确定(步骤810)。如果束中存在额外的未处理的指令,如上所述过程返回到步骤802。否则,过程结束。转回到步骤804,如果不存在性能指示器,过程直接前进到步骤808。
现在参考图9,根据本发明的优选实施例,显示这样的过程的流程图,该过程用于产生中断以响应与性能指示器相关联的存储器位置的访问。图9中说明的过程可以在数据高速缓冲存储器中实现,如图2中的数据高速缓冲存储器246。
过程由识别访问存储器位置的请求开始(步骤900)。响应识别这个请求,关于是否性能指示器与存储器位置相关联进行确定(步骤902)。如果性能指示器与存储器位置相关联,通过发送信号到中断单元产生中断(步骤904)。其后,处理对存储器位置的访问(步骤906),其后过程结束。
在图10中,根据本发明的优选实施例,显示用于对事件计数的过程的流程图。图10中说明的过程可以在性能监视器单元如图2中的性能监视器单元240实现。
过程由从指令高速缓冲存储器接收信号开始,该信号指示正在处理具有性能指示器的指令(步骤1000)。接下来,对与正在处理的指令相关联的事件计数(步骤1002),其后,过程结束。事件的计数可以存储在计数器中,如图2中的计数器241。
接下来参考图11,根据本发明的优选实施例,显示用于指令的选择性计数的过程的流程图。图11中说明的过程可以在指令高速缓冲存储器中实现,如图2中的指令高速缓冲存储器214。
过程由确定是否已经接收与性能指示器相关联的指令开始(步骤1100)。在这个例子中,指示器导致用于由处理器执行的这个指令和所有随后的指令的事件的计数。或者,指示器可能是指令自身,它指示要开始计数的新的模式。如果已经接收具有指示器的指令,设置标志以开始用于指令的事件计数(步骤1102)。这个标志指示用于指令的事件计数应该开始。
接下来,关于是否已经接收具有指示器的指令进行确定(步骤1104)。或者,指示器可能是指令自身,它指示要停止计数的新的模式。如果接收具有指示器的指令,不设置标志以停止对事件的计数(步骤1106),其后过程结束。
步骤1100和步骤1104的指示器可以是同一指示器,其中指示器触发标志的设置和去除设置。在另一种实现中,可以使用两个不同的指示器,其中第一个指示器仅设置标记。第二个指示器用来去除设置标记。当计数要发生时用高信号,当计数不再允许时用低信号,可以简单地实现高速缓冲存储器单元,如指令高速缓冲存储器或数据高速缓冲存储器,以及指示计数的模式的性能监视器单元之间的通信。
接下来参考图12,根据本发明的优选实施例,显示用于指令的选择性计数的过程的流程图。图12中说明的过程可以在指令高速缓冲存储器中实现,如图2中的指令高速缓冲存储器214。
过程由检查标记开始(步骤1200)。关于是否设置标记进行确定(步骤1202)。如果设置标记,发送信号到性能监视器单元从而使这个单元能够对事件计数(步骤1204),其后过程结束。否则,发送信号到性能监视器单元从而禁止对事件计数(步骤1206),其后过程结束。
图11和图12中说明的过程在指令与性能指示器相关联后为所有指令对事件计数。以这种方式,可以用较少的比特触发事件的计数。进而,通过所有指令的计数,可以对与对外部子程序的调用相关联的事件计数。
现在转向图13,根据本发明的优选实施例,显示用于识别超过阈值的指令的过程的流程图。图13说明的过程可以在指令高速缓冲存储器中实现,如图2中的指令高速缓冲存储器214。
过程由接收与性能指示器相关联的指令开始(步骤1300)。为指令识别阈值(步骤1302)。在这些例子中,阈值涉及一些完成指令需要的处理器或时钟周期。如果高速缓冲存储器延迟或访问高速缓冲存储器需要的时间量超过阈值,就对那个事件计数。在这些例子中在指示器内设置阈值。
例如,可以用3个比特为阈值设置8个不同的值。例如,“xx1”=10周期,“x1x”=50周期,而“1xx”=100周期。可以使用这3个比特的一些组合为阈值设置值。可以使用更多或更少的比特,并且依赖于特定的实现可以分配给比特不同的值。比特的意义也可以通过接口控制,如可以用来设置每个比特的意义的一组寄存器。这些寄存器是为这个特定目的增加到处理器架构中的寄存器。
监视用于执行指令的周期(步骤1304)。关于对这个指令是否已经超过阈值进行确定(步骤1306)。如果已经超过阈值,那么执行选择的动作(步骤1308)。依赖于特定的实现,这个选择的动作可以采取不同的形式。例如,每次超过阈值可以增加计数器。或者,可以产生中断。中断可以传递控制到另一个过程以收集数据。例如,这个数据可以包括调用堆栈和关于调用堆栈的信息。堆栈是保留的存储器区域,其中程序存储状态数据,如过程或函数调用地址、传递的参数、性能监视器计数器值,以及有时的局部变量。
关于是否监视要结束进行确定(步骤1310)。一次一个指令可以实现步骤1310。当执行指令或超过阈值时,发送信号。在这个例子中,单个指令的执行引起发送一个信号。在可以同时执行多个指令的情况下,可能需要多个信号以指示每个指令的执行。在一些实施例中,可以支持采样方法,其中只对每次一个指令支持阈值。通过只对那些位于处理器的指令队列中特定位置的指令支持阈值可以实现这一点。在其它实施例中,如果标记的指令的至少之一超过阈值,可以发送一个信号。对超过阈值的每条指令,为那条指令发出(raise)或产生单独的信号。
如果监视要结束,发送收集的信息到监视程序(步骤1312),其后过程结束。否则,如上所述过程返回步骤1304。在步骤1306,如果对那条指令没有超过阈值,过程直接前进到步骤1310。
在数据高速缓冲存储器如图2中的数据高速缓冲存储器216中,可以实现类似的过程以监视对存储器位置的访问。图13阐明的过程可以适用于识别访问存储器位置中的数据需要的周期。当访问存储器位置中的数据需要的时间量超过特定的阈值时,随着指令的执行产生计数或产生中断。
对于其它例子,作为指令的一部分或随着存储器位置中的数据可以包含这些指示器。或者,在与指令或数据关联的性能仪器影子高速缓冲存储器或存储器中可以发现这些指示器。
参考图14,根据本发明的优选实施例,显示用于监视对存储器位置的访问的过程的流程图。在数据高速缓冲存储器,如图2中的数据高速缓冲存储器216中可以实现图14中阐明的过程。这个过程用于计数对存储器位置中的数据的访问。
由接收与性能指示器相关联的数据开始过程(步骤1400)。关于是否已经访问用于数据的存储器位置进行确定(步骤1402)。如果已经访问存储器位置,那么计数器增加(步骤1404)。关于是否监视要结束进行确定(步骤1406)。如果存储器位置的监视要结束,过程结束。否则,过程返回到步骤1402。在步骤1402,如果未访问存储器位置,那么过程前进到步骤1406。
转到图15,根据本发明的优选实施例,显示方块图,该方块图说明用于产生元数据如性能指示器的部件。编译器支持嵌入到源码中的指示要产生的元数据的指令。编译器1500可以产生用于执行的指令1502或用于监视的元数据。当指令或数据高速缓冲存储器页装入存储器中时,操作系统程序装载器/链接器和/或性能监视程序读取由编译器1500产生的元数据,并且装载元数据到存储器如这些例子中的性能监视器部分1506中。该部分本身标记为元数据1504。处理器可以以在性能监视器部分1506中的编译器产生部分数据的格式接受元数据1504,并且将数据装到处理器的内部性能仪器影子高速缓冲存储器。参考下面的图17描述面向块的方法。
在一个实施例中,格式仅仅对其每个块或扇区参考包含性能仪器影子高速缓冲存储器登记项,并且移动元数据1504到其相应的影子登记项或各登记项。高速缓冲存储器自身的内部的格式可以修改以包含元数据1504,而不是包含性能仪器影子高速缓冲存储器。在修改指令流自身以包含元数据的实施例中,那么不是装载器更新指令流以包含适当的指示器和工作区域,就是编译器1500已经产生代码以包含元数据1504。在任何一种情况,在装载代码后,处理器接收元数据1504。
另外,元数据1504可以与指令1502关联放入性能仪器影子存储器1505。编译器1500在表中或调试数据部分产生信息。性能监视程序将这个信息装入性能仪器影子存储器1505中的影子数据区域。或者,由共同工作的操作系统和处理器,可以自动装载(populate)调试区域。
然后可以由处理器1508执行指令1502。编译器1500可以在处理器1508中设置寄存器,如模式寄存器1510。当设置这个寄存器时,处理器1508在执行指令1502时察看性能仪器影子存储器1505中的元数据1504,以确定元数据1504中的性能指示器是否与指令1502中正在执行的指令相关联。使用如上述那些参考图2-14的过程处理性能指示器。如果为设置模式寄存器1510,那么当执行指令1502时忽略元数据1504。
对于存储器位置1512中的数据可以执行类似的过程。依赖于特定的实现,元数据1504可以放入指令内或数据内,而不是性能仪器影子存储器1505中。但是,通过将元数据1504放到性能仪器影子存储器1505中,当将元数据1504放到性能仪器影子存储器1505中时,可以动态地进行元数据1504的产生。
这个特征考虑指令的选择和监视发生而不必修改程序。换句话说,指令1502已经为处理器1508执行被编译之后,编译器1500可以产生元数据1504。设置模式寄存器1510引起处理器1508在性能仪器影子存储器1505中寻找元数据1504而不必修改指令1502。在这些例子中,元数据1504采用性能指示器的形式,它表明处理器1508如何处理指令1502的执行和/或对存储器位置1512的数据访问。
接下来转向图16,根据本发明的优选实施例,显示说明元数据的图。元数据1600是图15中的元数据1504的例子。这个元数据由如编译器1500的编译器产生。
在这个例子中,元数据1600包含5个登记项,登记项1602、1604、1606、1608和1610,如元数据1600中行1612所指示的。这些登记项的每个包含用于描述这个例子中代码的方法(instrumentation)的标记、长度和偏置。
登记项1602具有0偏置和120字节的登记项长度。标记1614指示由登记项长度1616指示的范围内的所有指令需要计数。在这些例子中,每个指令具有4字节的长度。登记项1604具有对应于指令的4字节登记项长度。标记1618指示执行这个指令时应该产生异常。
在登记项1606中,以160字节偏置开始的指令与标记1620相关联。这个标记指示:如果超过阈值100周期,应该对指令计数。
登记项1608中的标记1622指示跟踪应该在具有256字节的偏置的指令处开始。如登记项1610中的标记1624所指示的,跟踪停止,该登记项1610具有用于512字节偏置处的指令的标记。
这些标记用来产生与指令相关联的性能指示器。操作系统移动这个由编译器产生的元数据并将元数据处理到性能仪器影子高速缓冲存储器中,如图15中的性能仪器影子高速缓冲存储器1506。或者,依赖于特定的实现,这个元数据可以放入指令内的域中。
现在参考图17,根据本发明的优选实施例,显示说明涉及装载和维护性能仪器影子高速缓冲存储器的部件的图。在这个例子中,现有的高速缓冲存储器1700包含主段1702。主段1702包括块1704、1706、1708、1710、1712、1714、1716、1718、1720、1722和1724。转换表1726用于为主段1702中的块1704-1724提供到perfint段1728中的块的映射。这个段中的数据放入新的性能仪器影子高速缓冲存储器1730。
在程序编译时,编译器产生如上述的新的性能仪器数据部分。在程序装载时,装载器查询处理器以确定高速缓冲存储器行大小。装载器解析perfint段1728,并且对装载器装载的任何文本和数据段,以处理器需要的格式构造影子段。该影子段放入新的性能仪器影子高速缓冲存储器1730。
影子段中的每个块包含元数据用于对应的主高速缓冲存储器块中的指令和数据。这个元数据包括:例如,标记、标签域、阈值和用于主段1702中的块中的每个加标签的项的计数域。这个元数据也包括表示块中的所有指令和数据的标记。
装载器为主段1702中的每个块到对应的perfint块,如perfint段1728中的块1732、1734、1736、1738、1740、1742、1744、1746、1748、1750和1752构造表映射,转换表1726。进而,装载器用处理器登记转换表1726、这个表的头和主段1702的位置和大小。
在页交换时,换页软件提供新的接口使perfint段1728与对应的主段即主段1702相关联。当主段1702换页入或换页出时,perfint段1728也换页入或换页出。
在高速缓冲存储器行交换时间,处理器包含新的性能仪器影子高速缓冲存储器1730,高速缓冲存储器帧直接与现有的数据和指令高速缓冲存储器,如现有的高速缓冲存储器1700中的帧相关联。当处理器的指令或数据高速缓冲存储器装载新的行时,高速缓冲存储器也必须装载相应的perfint块到性能仪器影子高速缓冲存储器,即新的性能仪器影子高速缓冲存储器1730中。处理器(从装载器在程序装载时给出的登记数据)看到处理器正在将块带入到具有相关联的perfint段,即perfint段1728的其高速缓冲存储器。处理器查询与这个段相关联的转换表1726,找到对与它要装载的块对应的perfint块的引用,并将perfint块装载到新的性能仪器影子高速缓冲存储器1730中。在这些例子中,与元数据相关联的高速缓冲存储器遗漏(miss)不用信号通知,或与主高速缓冲存储器块,如主段1702中的数据相关联的高速缓冲存储器遗漏进行不同的处理。
现在参考图18,根据本发明的优选实施例,显示为指令产生元数据的过程的流程图。图18中说明的过程可以由性能监视程序实现。
过程由识别用于剖面的指令开始(步骤1800)。这个指令可以是,例如,已经执行超过所选择的次数的指令。为所识别的指令产生元数据(步骤1802)。这个元数据采用性能指示器的形式。性能指示器可以,例如,每次执行指令时增大计数器;如果执行指令需要的周期数超过阈值就增大计数器;为这个指令后的所有事件触发用于所有指令的事件的计数;或者对响应执行指令而发生的事件计数。在优选实施例中,计数器在相关联的性能仪器影子高速缓冲存储器中,并占用一定数目的比特从而考虑高速缓冲存储器中的数据或指令与为计数保留的比特之间的一对一的对应。
然后元数据与指令相关联(步骤1804)。接下来,关于是否存在更多的用于处理的指令进行确定(步骤1806)。如果存在另外的指令,处理返回到步骤1800。否则,过程结束。相似的过程可以用来动态地产生元数据用于存储器位置中的数据。
现在参考图19,根据本发明的优选实施例,显示为存储器位置产生元数据的过程的流程图。图19中说明的过程可以在编译器如图15中的编译器1500中实现。
过程由识别用于剖面的存储器位置开始(步骤1900)。步骤1900通过检测对标记的位置的访问开始。为已识别的存储器位置产生元数据(步骤1902)。这个元数据采用性能指示器的形式。性能指示器可以,例如,每次访问存储器位置时增大计数器;如果访问存储器位置需要的周期数超过阈值就增大计数器;或者触发所有对存储器位置访问的计数。然后元数据与存储器位置相关联(步骤1904)。接下来,关于是否存在更多的存储器位置用于处理进行确定(步骤1906)。如果存在另外的存储器位置,处理返回到步骤1900。否则,过程结束。
现在转向图20,根据本发明的优选实施例,显示为特定指令的执行计数的过程的流程图。图20中说明的过程可以在指令高速缓冲存储器,如图2中的指令高速缓冲存储器214中实现。
过程由执行指令开始(步骤2000)。关于是否计数器与指令相关联进行确定(步骤2002)。计数器可以包含在指令内的域中或可以在性能仪器影子存储器中。如果计数器与指令相关联,就增大计数器(步骤2004),其后过程结束。否则,过程结束而不增大计数器。如果计数器超过阈值,可以复位计数器。
当计数器作为指令的一部分实现时,计数器可能是有限大小的。在这种情况下,可以设置计数器的阈值以便指示计数器何时处于溢出的危险中。然后已经读出值后可以复位计数器。这个值可以由性能监视单元或用于分析数据的程序读取。可以实现API以访问这个数据。
现在转向图21,根据本发明的优选实施例,显示对访问特定存储器位置计数的过程的流程图。图21中说明的过程可以在数据高速缓冲存储器如图2中的数据高速缓冲存储器216和指令高速缓冲存储器214中实现。
过程由检测对存储器位置的访问开始(步骤2100)。关于是否计数器与存储器位置相关联进行确定(步骤2102)。计数器可以包含在存储器位置内或可以在性能仪器影子存储器中。如果计数器与存储器位置相关联,就增大计数器(步骤2104),其后过程结束。否则,过程结束而不增大计数器。
接下来参考图22,根据本发明的优选实施例,显示说明各部件的图,所述各部件用于关于指令的执行或存储器位置的访问而收集的访问信息。在这个例子中,指令单元2200执行指令2202并增大计数器2204。每次执行指令2202时增大这个计数器。在这个例子中,指令单元2200可以如图2中的指令高速缓冲存储器214那样实现。
当指令或数据高速缓冲存储器页装入存储器时,操作系统程序装载器/链接器和/或性能监视程序读取由编译器产生的元数据,并确定计数与指令或数据访问相关联,然后装载过程分配数据区域以保持计数器作为其perfint段的一部分。计数器的大小和数据访问的粒度确定要分配的工作区域的量。
在简单情况下,数据或指令访问的粒度可能是字大小(使得对字中任何字节的访问被认为是访问),并且计数可能也是字大小。在这种情况下,主段和perfint段(不要求包含计数或阈值的整个字)之间存在一对多的映射。装载过程分配影子页或多页并告诉处理器使用影子页(多页)来包含计数。上面参考图17描述了这个映射的细节。处理器中的高速缓冲存储器单元维护影子块登记项以指示包含计数信息的相应的页。可能提供不同的映射和不同的支持的级别。
在替代实施例中,编译器分配工作区域以维护计数并指示这些工作区域在其产生的数据区域中的放置。元数据中的登记项可能指示数据的开始、数据的字节数、数据的粒度、计数区域的开始和每个计数单元的粒度。在任何一种情况下,元数据装入处理器并且处理器将元数据装到其内部的(影子)高速缓冲存储器中。在修改指令流本身以包含元数据的说明性的实施例中,那么或者装载器更新指令流以包含适当的指示器和工作区域,或者编译器已经产生代码以包含元数据。在如何一种情况下,装载代码后,处理器接收元数据。
数据单元2206可以如图2中的数据高速缓冲存储器206那样实现。在这个例子中,每次访问数据2208,计数器2210增大。数据2208和计数器2210都位于特定的存储器位置。在这些例子中,可以使用新的指令,其中指令称作ReadDataAcceCount(读数据访问计数,RDAC),它使用数据地址和寄存器并且将与那个数据地址相关联的计数放入寄存器。
这些事件,即指令执行和数据访问的每一个,引起计数器的增大。本发明的机制提供接口,即硬件接口2212,以访问这个收集的数据。在这些例子中,硬件接口2212采用用于操作系统2214的应用编程接口(API)的形式。以这种方式,分析工具2216可以从计数器2204和计数器2210得到数据。分析工具2216可以采用很多形式,如例如,Oprofile,它是已知的用于Linux系统的系统范围剖析器(system wide profiler)。虽然图22中的例子说明提供接口给指令单元和数据单元,但可以实现硬件接口2212以提供对来自处理器中其它单元的信息的访问。例如,可以为硬件接口2212创建API,它考虑访问位于性能监视器单元中的计数器中的访问信息,如图2中的性能监视器单元240中的计数器241和242。
在图23中,根据本发明的优选实施例,显示各部件的方块图,所述各部件用于自动修改程序中的代码以允许选择性计数或代码的部分的剖面。在这个例子中,剖析器2300是一个程序,如tprof,它可以用来识别如程序2302的程序中高使用率的例程。在这些例子中,“tprof”是定时器剖析器,它与来自国际商用机器(IBM)公司的高级交互执行(AIX)操作系统一起发送。这个程序使用由定时器发起的采样。定时器到期后,tprof识别执行的指令。tprof是可以用于系统性能分析的CPU剖面工具。该工具是分析工具的例子并且基于包括下列步骤的采样技术:通过时间或性能监视器计数器周期性地中断系统;确定中断的代码的地址和过程id(pid)和线程id(tid);在软件跟踪缓冲器中记录TPROF钩;并返回中断的代码。
或者,可以使用性能监视器计数器的固定数目的计数代替定时器。这个程序剖析用来指示程序内时间花费在何处的例程。具有超过某个阈值的使用率的程序也称为是“热(hot)”的。通过使用来自剖析器2300的信息,可以识别感兴趣的例程,如程序2302中的子程序2304。
利用这个信息,通过分析工具2306可以自动修改子程序2304中的指令以允许子程序2304的执行的计数。通过分析工具2306可以识别用于修改的另外的例程。例如,也可以将子程序2304识别为感兴趣的例程,这个程序的指令正被修改以允许子程序2304的执行的计数。这些例程中的代码的修改包括将性能指示器与在这些子程序的每个内的一个或多个指令关联。
已经通过分析工具2306修改这些例程中的指令之后,然后由处理器2308执行程序2302。处理器2308执行程序2302,并为这些例程提供计数。例如,利用上述的机制,可由处理器2308进行执行例程中执行的指令和使用的周期数的计数。
参考图24,根据本发明的优选实施例,显示用于动态地增加或关联性能指示器到指令的过程的流程图。图24中说明的过程可以实现在程序中,如图23中的分析工具2306。分析工具是用来获得关于程序的执行的度量的程序。这些度量可以是任何可测量的参数,如执行时间、执行的例程、执行的特定指令和访问的存储器位置。
过程由使用来自剖析器的数据识别感兴趣的指令开始(步骤2400)。这个剖析器可以是如AIX中发现的定时器剖析器。从识别的指令中选择指令用于修改(步骤2402)。其后,动态地添加性能指示器到选择的指令中(步骤2404)。
在步骤2404中,可以以这样的方式添加指令使得不需要为执行修改指令。可以使用性能仪器影子存储器,如图15中的性能仪器影子存储器1506保存性能指示器。在这种情形,在处理器中设置寄存器以指示当执行指令时,应该为性能指示器检查性能仪器影子存储器。
然后关于是否存在另外的识别的指令用于修改进行确定(步骤2406)。如果用于修改的另外的指令存在,过程返回到步骤2402。否则,过程结束。
接下来转向图25,根据本发明的优选实施例,显示说明各部件的图,所述各部件用来通过使性能指示器与页中的指令相关联扫描页。本发明的机制使用性能指示器以允许在程序中每次一页的指令的仪器化(instrumenting)或修改。
在这个例子中,程序2500包含三页:页2502、页2504和页2506。扫描后台精灵程序(daemon)2508使性能指示器与每次一页或多页程序2500中的指令相关联。例如,页2502中的指令可以通过扫描后台精灵程序2508与性能指示器相关联。然后由处理器2510执行程序2500。然后可以从程序2500的执行收集数据。这个数据包括:例如,响应页2502中的指令而发生的事件的计数、对页2502中的每个指令执行的次数计数、和/或识别对页2502的访问数。
接下来,扫描后台精灵程序可以从页2502的指令中去除性能指示器并使性能指示器与页2504中的指令相关联。然后由处理器2510再执行程序2500,并且从这个程序的执行收集数据。然后,在执行的程序2500中可以修改页2506中的指令以收集那个页上的数据。
以这种方式,可以识别典型地不由程序如定时器剖析器记录的例程的使用率。因为中断可能被禁止或者采样的定时可能引起同步非随机行为,定时器剖析器可能不记录例程的某些使用率。通过修改程序2500中的指令,可以得到对例程或其它模块的计数,其中计数是无偏的并且系统是不受干扰的。以这种方式,避免了中断驱动的计数。进而,虽然代码的仪器化是每次一页,但扫描程序中可以使用其它的指令的分组,如构成程序的模块。例如,分组可以是单个的可执行程序、库、选择的函数组和选择的页的组。
接下来转向图26,根据本发明的优选实施例,显示用于添加指示器到页中的指令的过程的流程图。图26中说明的过程可以在程序中实现,如图25中的扫描后台精灵程序2508。
首先,识别页的选择(步骤2600)。在这个例子中,页是程序中那些要扫描的或仪器化的。接下来,在页的选择内选择页用于修改(步骤2602)。然后使指示器与所选择的页中的所有指令相关联(步骤2604)。然后执行程序(步骤2606)。接下来,关于是否选择的所有页已经扫描进行确定(步骤2608)。如果所有的页已经扫描,其后过程结束。但是,如果不是所有的页已经扫描,选择要扫描的下一页(步骤2610),如上所述过程返回到步骤2604。
图26说明的过程显示了作为页的指令的扫描分组。依赖于特定的实现,以这种方式可以扫描或仪器化指令的其它类型的分组,如构成程序的模块。
从调用堆栈中发现的信息,使用程序识别来自例程的调用者。这个程序考虑例程中已经发生了什么的识别,并且通过识别已经进行的函数调用提供程序中已经发生了什么的总结。但是,这个程序要求插入代码中的指令以获得这个信息。
本发明的机制考虑识别调用并返回,而不必进行特定代码仪器化。特别地,对指令的特定集合产生中断的功能可以用来收集关于系统和应用的信息。在这些例子中,用于调用和返回的指令与产生中断的性能指示器相关联。
通过后退调用堆栈,可以得到完整的堆栈调用用于分析。“堆栈行走(stack walk)”也可以描述为“堆栈展开(stack unwind)”,并且“沿堆栈行走”的过程也可以描述为“展开堆栈”。这些术语的每个说明了对过程的不同的比喻。可以描述过程为“行走”,因为过程必须一步一步地或一帧一帧地得到和处理堆栈帧。过程也可以描述为“展开”,因为过程必须得到和处理指向另一个的堆栈帧,并且这些指针及其信息必须通过很多指针去引用“被展开”。
堆栈展开在中断时依照函数/方法调用的序列,并且被产生以响应与性能指示器相关联的指令的执行。调用堆栈是程序执行期间已经进入的例程(即模块、函数、方法等)内例程加偏置的有序的列表。例如,如果例程A调用例程B,然后例程B调用例程C,当处理器正在执行例程C中的指令时,调用堆栈是ABC。当控制从例程C返回到例程B时,调用堆栈是AB。为在产生的报告内更紧凑的表示和解释容易,呈现例程的名字而没有任何关于偏置的信息。偏置可以用于程序的执行的更详细的分析,但是,这里不进一步考虑偏置。
因此,在中断处理期间或由与特定的性能指示器相关联的指令的执行开始的后处理时,产生的基于采样的剖面信息反映调用堆栈的采样,而不仅是可能的调用堆栈的叶子,如在某些程序计数器采样技术中那样。叶子是在分支末端的节点,即没有后代的节点。后代是父节点的孩子,并且叶子是没有孩子的节点。
现在参考图27,根据本发明的优选实施例,显示描述包含堆栈帧的调用堆栈的图。“堆栈”是保留的存储器区域,在其中程序或多个程序存储状态数据,如过程和函数调用地址、传递的参数和有时的局部变量。“堆栈帧”是线程的堆栈的部分,它表示用于单个函数调用的局部存储(自变量、返回地址、返回值和局部变量)。每个执行的活跃的线程具有为其堆栈空间分配的部分系统存储器。线程的堆栈由堆栈帧的序列组成。线程堆栈上的帧集合表示那个线程在任何时刻的执行的状态。因为堆栈帧是典型地互相链接的(例如每个堆栈帧指向前一个堆栈帧),后退跟踪堆栈帧的序列并展开“调用堆栈”通常是可能的。调用堆栈表示所有还未完成的函数调用--换句话说,它反映在任何时间点上的函数调用序列。
调用堆栈2700包含这样的信息:识别当前正在运行的例程、调用它的例程等,直到主程序的所有路径。调用堆栈2700包含很多堆栈帧2702、2704、2706和2708。在描述的例子中,堆栈帧2702在调用堆栈2700的顶部,而堆栈帧2708位于调用堆栈2700的底部。调用堆栈的顶部也称为“根”。修改(在大多数操作系统中找到的)中断以获得中断的线程的程序计数器的值(pcv)以及指向用于那个线程的当前活跃的堆栈帧的指针。在Intel架构中,这典型地由寄存器的内容表示:EIP(程序计数器)和EBP(指向堆栈帧的指针)。
通过访问当前活跃的堆栈帧,利用(典型的)堆栈帧链接协定的优点以便将所有的帧串链在一起是可能的。标准的链接协定的部分也规定函数返回地址放在被调用的函数的堆栈帧的上面;这可以用来确定用于被调用函数的地址。虽然这个讨论使用基于Intel的架构,这个例子不是限制。大多数架构使用可以由修改的剖面中断处理程序类似地操纵的链接协定。
当中断产生时,第一个获得的参数是程序计数器值。下一个值是指向用于中断的线程的当前堆栈帧的顶部的指针。在所描述的例子中,这个值会指向堆栈帧2708中的EBP 2708a。反过来,EBP 2708指向堆栈帧2706中的EBP2706a,它反过来指向堆栈帧2704中的EBP 2704a。反过来,这个EBP指向堆栈帧2702中的EBP 2702a。堆栈帧2702-2708内是EIP 2702b-2708b,它们识别调用例程的返回地址。可以从这些地址识别各例程。因此,由通过堆栈往上或往回走收集所有的返回地址来定义各例程。
得到完整的调用堆栈在某些情况下可能是困难的,因为环境可能使跟踪困难,如当具有一个调用堆栈的应用对具有不同的调用堆栈的内核进行调用时。由本发明的机制提供的硬件支持避免这些问题的一些。
接下来转向图28,根据本发明的优选实施例,显示用于识别与调用和返回指令相关联的事件的过程的流程图,其中从性能监视器单元收集数据。也可以实现图28中说明的过程用于分析工具,如图22中的分析工具2216。
过程由识别调用和返回指令开始(步骤2800)。用于调用和返回的指令是用于确定什么时候例程已经被调用和什么时候例程完成的感兴趣的指令。这可以完成用于中断、中断返回、系统调用和从系统调用返回。
接下来,性能指示器与识别的调用和返回指令相关联(步骤2802)。然后执行程序(步骤2804),并从性能监视器单元收集数据(步骤2806),其后过程结束。该信息可以通过接口,如图22中说明的硬件接口2212收集,其中使用API获得由处理器中的不同功能单元收集的数据。
使用这个数据可以进行例程的调用者的识别。这个信息可以用来产生数据结构,如跟踪和呈现关于程序的执行的信息的树。使用类似于分析工具中提供的过程的过程,可以实现这个数据结构的产生。
接下来转向图29,根据本发明的优选实施例,显示用来识别已经执行了超过选择的次数的例程的过程的流程图。可以在处理器内的功能单元,如图2中的指令高速缓冲存储器214中实现图29中说明的过程。这个过程用来识别执行的指令的计数,并且当这些指令已经发生超过某个选择的次数时产生中断。
首先,关于是否检测到选择的指令的执行进行确定(步骤2900)。通过检查执行的每个指令以观察是否性能指示器与指令相关联进行该确定。通过不同的工具,如图15中的编译器1500或图22中的分析工具2216,这些性能指示器可以与指令相关联。
如果未识别包含性能指示器的指令的执行,过程返回到步骤2900直到检测到选择的指令。如果选择的指令被识别为正在执行,为那个选择的指令增大具有设置的阈值的计数器,以对执行那个特定的指令的频度计数(步骤2902)。在这些例子中,分配计数器给为监视识别的每个指令。
接下来,关于是否已经达到设置的阈值进行确定(步骤2904)。最初通过使用记录的高速缓冲存储器遗漏次数,为每个高速缓冲存储器水平确定阈值。但是,增大次数用来确定由高速缓冲存储器介入(intervention)(来自其它处理器的访问)引起的问题。可以使用具有不同的值的重复运行以识别具有最坏性能的区域。
在这些例子中,指令可以与指示器相关联,该指示器包括指令的执行要被监视以及提供计数器的指示。进而,可以包括计数准则以识别何时要产生中断。例如,当指令已经执行超过13次时可以产生中断。
如果还未达到阈值,如上所述过程返回到步骤2900。如果已经达到设置的阈值,发送中断到监视程序(步骤2906),其后过程结束。这个中断可以发送到中断单元,如图2中的中断单元250,它传递控制到适当的进程或过程以处理中断。
这个过程对有很多分支的例程可能特别有用。在这种情况下,会为计数标记所有分支指令。通过在使用的处理器的指令架构中支持的调整提示(hint)标记或最少化分支,由这种类型的计数得到的信息对识别编译器和正好及时(JIT)代码产生的改进可能有用。
接下来转向图30,根据本发明的优选实施例,显示下面过程的流程图,该过程用于当执行特定的指令超过某个选择的次数时检查调用堆栈和识别例程的调用者。图7中说明的过程可以由中断单元发起,如图2中的中断单元250。这个过程用来识别例程中的调用并可以递归地获得用于调用者的信息。
首先,检查调用堆栈并识别例程的调用者(步骤3000)。接下来,从指令高速缓冲存储器获取执行的指令的数目的计数(步骤3002)。该计数是为图29中的步骤2902中使用的计数器。然后计数器复位(步骤3004),其后从中断返回控制(步骤3006)。在图30中的过程中得到的信息可以用来识别用于监视的另外例程以便递归地识别例程的调用者。
接下来转向图31,根据本发明的优选实施例,显示说明已经为监视选择的指令的范围和数据的图。在这个例子中,程序3100包括指令范围3102和3104。已经为监视作为感兴趣的范围识别这些范围的每个。这些范围的每个设置在指令单元内,如图2中的指令高速缓冲存储器214。每个范围用来告诉处理器在范围内执行的指令的数目,以及程序3100执行期间进入范围的次数。
指令高速缓冲存储器3106使用范围寄存器3108定义指令范围。这些寄存器可以是现有的寄存器,或者修改指令高速缓冲存储器3106以包含定义指令范围的寄存器。这些范围可以基于指令的地址。另外,可以通过各种调试器程序和性能工具更新范围寄存器3108。
如果在范围内执行指令,如指令范围3102或指令范围3104,就增大指令高速缓冲存储器3106中的计数器。或者,可以发送指令到性能监视器单元,如图2中的性能监视器单元240。在这些例子中,性能监视器单元跟踪范围内执行的指令的数目和进入指令范围的次数的计数。
可以以类似的方式监视数据访问。例如,数据3112包括数据范围3114。以类似于指令范围3102或指令范围3104内指令的执行的方式,计数对数据范围3114的数据访问。这些范围可以定义在数据单元内的寄存器中,如图2中的数据高速缓冲存储器216。在寄存器中可以定义这些用于数据的范围为用于数据的存储器位置的范围。
接下来转向图32,根据本发明的优选实施例,显示下面过程的流程图,该过程用于计数对设置的范围的访问的数目以及设置的范围内执行的指令的数目。可以在指令单元,如图2中的指令高速缓冲存储器214中实现图32中说明的过程。
首先,为执行识别指令(步骤3200)。接下来,关于是否指令在设置的指令的范围内进行确定(步骤3202)。通过检查定义一个或多个指令范围的寄存器可以识别范围。如果指令不在指令的设置的范围内,如上所述过程就返回到步骤3200。如果指令在指令的设置的范围内,就关于前一个指令是否在指令的设置的范围内进行确定(步骤3204)。如果前一个指令不在指令的设置的范围内,增大访问计数器以告诉处理器进入指令范围多少次(步骤3206)。另外,增大执行计数器以对指令的设置范围内的执行的指令数计数(步骤3208),其后过程返回步骤3200。
重新参考步骤3204,如果前一个指令在指令的设置的范围内,如上所述过程前进到步骤3208。
可以实现与图32中说明的过程类似的过程用于对数据的访问。在这种情况下,过程会典型地在数据单元中而不是在指令单元中实现。
因此,本发明提供改进的方法、装置和计算机指令用于在监视程序的执行中提供帮助。本发明的机制包括使用指示器,该指示器由处理器识别以便允许与指示器相关联的指令的执行的计数。通过这个机制允许如上所述各种类型的计数。进而,使用通过利用将指示器与特定的指令相关联而提供的信息,在监视和分析程序的性能中,本发明的机制也提供各种类型的调整给程序。进而,如上所述,可以自动地调整程序以考虑监视选择的指令甚至例程和模块,而不必修改程序。
重要的是注意:虽然在完全用作为数据处理系统的环境已经描述本发明,但本领域一般技术人员将意识到本发明的过程能够以指令的计算机可读媒体的形式和各种形式分发;不管实际用来执行分发的信号承载媒体的特定类型,本发明同样适用。计算机可读媒体的例子包括可记录型媒体,如软盘、硬盘驱动、RAM、CD-ROM、DVD-ROM,和传输类型媒体,如数字和模拟通信链路、有线或无线通信链路,使用传输形式如例如射频和光波传输。计算机可读媒体可以采用被解码实际使用于特定的数据处理系统中的编码格式的形式。
本发明的描述已经为说明和描述的目的提供,并不视为详尽的或限制为此公开形式的发明。对本领域一般技术人员许多修改和变化将是显然的。例如,可以使用新的指令或操作码指示随后的指令或随后的指令的集合是标记的指令,而不是在指令或束中使用域。同样地,在希望指令中的域内包含性能指示器的情况下,如果用于性能指示器的空闲域不可获得,可以改变处理器的架构以包含额外的比特。同样地,虽然已经给出事件的例子,如指令的执行,执行指令需要的时间、如时钟或处理器周期,访问数据的时间,进入代码部分的入口,但这些例子并不意味着限制本发明为能计数的事件的类型。任何有关指令的执行或对存储器位置的访问的事件均可以使用本发明的机制计数。
选择和描述说明性的实施例以便最好地解释本发明的原理、实际的应用,并且使其他本领域一般技术人员对具有各种修改的各实施例能够理解本发明,这些修改适合于预期的特定使用。

Claims (25)

1.一种用于处理指令的数据处理系统中的方法,该方法包含:
响应在数据处理系统中的处理器接收指令,确定是否指示器与指令相关联;并且
如果指示器与指令相关联,对与指令和随后的指令的执行相关联的事件计数。
2.根据权利要求1所述的方法,其中计数步骤包含:
发送信号到处理器中的性能监视器单元以响应对指示器与指令相关联的确定;并且
使用性能监视器单元对与指令和随后的指令的执行相关联的事件计数。
3.根据权利要求1所述的方法,其中事件包括至少下列之一:进入模块的入口、离开模块的出口、进入子程序的入口、离开子程序的出口、进入函数的入口、输入/输出的开始、输入/输出的完成、指令的执行和执行指令需要的时间。
4.根据权利要求1所述的方法,进一步包含:
指令的接收之后接收另一个指令,其中另一个指令与指示器相关联;并且
停止对与指令和随后的指令的执行相关联的事件计数以响应接收与指示器相关联的另一个指令。
5.根据权利要求1所述的方法,其中指示器是第一种类型的指示器并进一步包含:
指令的接收之后接收另一个指令,其中另一个指令与第二种类型的指示器相关联;并且
停止对与指令和随后的指令的执行相关联的事件计数以响应接收与第二种类型的指示器相关联的另一个指令。
6.根据权利要求1所述的方法,其中在指令高速缓冲存储器中接收指令和随后的指令,并且其中计数步骤包含:
从指令高速缓冲存储器发送信号到性能监视器单元,以使性能监视器单元对与指令和随后的指令的执行相关联的事件计数;并且
使用性能监视器单元对与指令和随后的指令的执行相关联的事件计数,以响应从指令高速缓冲存储器接收信号。
7.根据权利要求1所述的方法,其中指示器位于指令中的域中。
8.根据权利要求1所述的方法,其中与指令相关联的指示器位于影子存储器中。
9.根据权利要求1所述的方法,其中在束中接收指令,并且其中指示器在束中包含至少一个空闲比特。
10.根据权利要求1所述的方法,其中指示器位于影子高速缓冲存储器中。
11.根据权利要求1所述的方法,其中事件中的一个事件包括至少下列之一:进入模块的入口、离开模块的出口、进入子程序的入口、离开子程序的出口、进入函数的入口、输入/输出的开始、输入/输出的完成和指令的执行。
12.一种用于监视对数据的访问的数据处理系统中的方法,该方法包含:
响应在数据处理系统中的处理器接收数据,确定指示器是否与数据相关联;并且
如果指示器与指令相关联,对与访问数据相关联的事件计数。
13.根据权利要求12所述的方法,还包含:
当第二次遇到与数据相关联的指示器时,停止与访问数据相关联的事件的计数。
14.根据权利要求12所述的方法,还包含:
当遇到与数据相关联的不同的指示器时,停止与访问数据相关联的事件的计数。
15.根据权利要求12所述的方法,其中指示器位于用于数据的数据地址位置中的域中。
16.根据权利要求12所述的方法,其中数据在一个存储器位置或存储器位置的范围之一中。
17.根据权利要求12所述的方法,其中事件中的一个事件至少包括一次对存储器位置的访问。
18.一种数据处理系统,包含:
性能监视器单元,其中性能监视器单元当接收信号时为指令和随后的指令对事件计数;以及
指令高速缓冲存储器,其中指令高速缓冲存储器接收指令,并且当指令与指示器相关联时,发送信号到性能监视器单元以对与指令和随后的指令相关联的事件计数。
19.一种用于处理指令的数据处理系统,该数据处理系统包含:
确定装置,响应在数据处理系统中的处理器的指令,用于确定指示器是否与指令相关联;以及
计数装置,用于如果指示器与指令相关联,就对与指令和随后的指令的执行相关联的事件计数。
20.根据权利要求19所述的数据处理系统,其中计数装置是第一计数装置并还包含:
发送装置,用于发送信号到处理器中的性能监视器单元以响应对指示器与指令相关联的确定;以及
第二计数装置,用于使用性能监视器单元对与指令和随后的指令的执行相关联的事件计数。
21.根据权利要求19所述的数据处理系统,其中事件包括至少下列之一:进入模块的入口、离开模块的出口、进入子程序的入口、离开子程序的出口、进入函数的入口、输入/输出的开始、输入/输出的完成、指令的执行和执行指令需要的时间。
22.一种数据处理系统,用于监视对数据的访问,该数据处理系统包含:
确定装置,响应在数据处理系统中的处理器接收数据,用于确定是否指示器与数据相关联;以及
计数装置,用于如果指示器与指令相关联,就对与对数据的访问相关联的事件计数。
23.根据权利要求22所述的数据处理系统,其中事件中的一个事件至少包括一次对存储器位置的访问。
24.一种计算机可读媒体中用于处理指令的计算机程序产品,该计算机程序产品包含:
第一指令,响应在数据处理系统中的处理器接收指令,用于确定是否指示器与指令相关联;以及
第二指令,用于如果指示器与指令相关联,就对与指令和随后的指令的执行相关联的事件计数。
25.根据权利要求24所述的计算机程序产品,其中事件中的一个事件至少包括一次对存储器位置的访问。
CNA200410056579XA 2003-09-30 2004-08-10 用于指令和数据访问的选择性计数的方法和装置 Pending CN1604044A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/674,604 2003-09-30
US10/674,604 US20050071608A1 (en) 2003-09-30 2003-09-30 Method and apparatus for selectively counting instructions and data accesses

Publications (1)

Publication Number Publication Date
CN1604044A true CN1604044A (zh) 2005-04-06

Family

ID=34376893

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA200410056579XA Pending CN1604044A (zh) 2003-09-30 2004-08-10 用于指令和数据访问的选择性计数的方法和装置

Country Status (3)

Country Link
US (1) US20050071608A1 (zh)
CN (1) CN1604044A (zh)
TW (1) TW200517962A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011120216A1 (zh) * 2010-03-29 2011-10-06 华为技术有限公司 对指令执行次数进行计数的方法、系统及处理器
CN111277454A (zh) * 2020-01-15 2020-06-12 Ut斯达康通讯有限公司 一种网络性能检测系统及方法

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7395527B2 (en) * 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US7373637B2 (en) * 2003-09-30 2008-05-13 International Business Machines Corporation Method and apparatus for counting instruction and memory location ranges
US7421681B2 (en) * 2003-10-09 2008-09-02 International Business Machines Corporation Method and system for autonomic monitoring of semaphore operation in an application
US7895382B2 (en) * 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US7526757B2 (en) * 2004-01-14 2009-04-28 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US7290255B2 (en) 2004-01-14 2007-10-30 International Business Machines Corporation Autonomic method and apparatus for local program code reorganization using branch count per instruction hardware
US7415705B2 (en) 2004-01-14 2008-08-19 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US7421684B2 (en) 2004-03-22 2008-09-02 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for data coverage
US7480899B2 (en) * 2004-03-22 2009-01-20 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for code coverage
JP6218833B2 (ja) * 2012-08-20 2017-10-25 キャメロン,ドナルド,ケヴィン 処理リソース割り当て
US20230401135A1 (en) * 2022-06-10 2023-12-14 Microsoft Technology Licensing, Llc Employing sampled register values to infer memory accesses by an application

Family Cites Families (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3707725A (en) * 1970-06-19 1972-12-26 Ibm Program execution tracing system improvements
US4034353A (en) * 1975-09-15 1977-07-05 Burroughs Corporation Computer system performance indicator
US4145735A (en) * 1977-02-02 1979-03-20 Nippon Steel Corporation Monitor for priority level of task in information processing system
US4291371A (en) * 1979-01-02 1981-09-22 Honeywell Information Systems Inc. I/O Request interrupt mechanism
JPS59132070A (ja) * 1983-01-18 1984-07-30 Mitsubishi Electric Corp アレイ演算用デ−タ処理装置
US5103394A (en) * 1984-04-30 1992-04-07 Hewlett-Packard Company Software performance analyzer
US4794472A (en) * 1985-07-30 1988-12-27 Matsushita Electric Industrial Co., Ltd. Video tape reproducing apparatus with a processor that time-shares different operations
US4821178A (en) * 1986-08-15 1989-04-11 International Business Machines Corporation Internal performance monitoring by event sampling
US5822578A (en) * 1987-12-22 1998-10-13 Sun Microsystems, Inc. System for inserting instructions into processor instruction stream in order to perform interrupt processing
US5113507A (en) * 1988-10-20 1992-05-12 Universities Space Research Association Method and apparatus for a sparse distributed memory system
US5151981A (en) * 1990-07-13 1992-09-29 International Business Machines Corporation Instruction sampling instrumentation
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
US5548762A (en) * 1992-01-30 1996-08-20 Digital Equipment Corporation Implementation efficient interrupt select mechanism
JP3544214B2 (ja) * 1992-04-29 2004-07-21 サン・マイクロシステムズ・インコーポレイテッド プロセッサの状態を監視する方法及び監視システム
US5404500A (en) * 1992-12-17 1995-04-04 International Business Machines Corporation Storage control system with improved system and technique for destaging data from nonvolatile memory
DE4423559A1 (de) * 1993-11-09 1995-05-11 Hewlett Packard Co Datenverbindungsverfahren und Vorrichtung für Multiprozessor-Computersysteme mit gemeinsamem Speicher
US5581482A (en) * 1994-04-26 1996-12-03 Unisys Corporation Performance monitor for digital computer system
US6148321A (en) * 1995-05-05 2000-11-14 Intel Corporation Processor event recognition
US6408386B1 (en) * 1995-06-07 2002-06-18 Intel Corporation Method and apparatus for providing event handling functionality in a computer system
US5740413A (en) * 1995-06-19 1998-04-14 Intel Corporation Method and apparatus for providing address breakpoints, branch breakpoints, and single stepping
US5754839A (en) * 1995-08-28 1998-05-19 Motorola, Inc. Apparatus and method for implementing watchpoints and breakpoints in a data processing system
US5797019A (en) * 1995-10-02 1998-08-18 International Business Machines Corporation Method and system for performance monitoring time lengths of disabled interrupts in a processing system
US5691920A (en) * 1995-10-02 1997-11-25 International Business Machines Corporation Method and system for performance monitoring of dispatch unit efficiency in a processing system
US5774724A (en) * 1995-11-20 1998-06-30 International Business Machines Coporation System and method for acquiring high granularity performance data in a computer system
US5758168A (en) * 1996-04-18 1998-05-26 International Business Machines Corporation Interrupt vectoring for optionally architected facilities in computer systems
US5822763A (en) * 1996-04-19 1998-10-13 Ibm Corporation Cache coherence protocol for reducing the effects of false sharing in non-bus-based shared-memory multiprocessors
US5937437A (en) * 1996-10-28 1999-08-10 International Business Machines Corporation Method and apparatus for monitoring address translation performance
US5926640A (en) * 1996-11-01 1999-07-20 Digital Equipment Corporation Skipping clock interrupts during system inactivity to reduce power consumption
US5870576A (en) * 1996-12-16 1999-02-09 Hewlett-Packard Company Method and apparatus for storing and expanding variable-length program instructions upon detection of a miss condition within an instruction cache containing pointers to compressed instructions for wide instruction word processor architectures
US5928334A (en) * 1997-03-28 1999-07-27 International Business Machines Corporation Hardware verification tool for multiprocessors
US5966537A (en) * 1997-05-28 1999-10-12 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing an executable computer program using input data
US6094709A (en) * 1997-07-01 2000-07-25 International Business Machines Corporation Cache coherence for lazy entry consistency in lockup-free caches
US5987250A (en) * 1997-08-21 1999-11-16 Hewlett-Packard Company Transparent instrumentation for computer program behavior analysis
US6101524A (en) * 1997-10-23 2000-08-08 International Business Machines Corporation Deterministic replay of multithreaded applications
US5938778A (en) * 1997-11-10 1999-08-17 International Business Machines Corporation System and method for tracing instructions in an information handling system without changing the system source code
US6070009A (en) * 1997-11-26 2000-05-30 Digital Equipment Corporation Method for estimating execution rates of program execution paths
US6163840A (en) * 1997-11-26 2000-12-19 Compaq Computer Corporation Method and apparatus for sampling multiple potentially concurrent instructions in a processor pipeline
US6442585B1 (en) * 1997-11-26 2002-08-27 Compaq Computer Corporation Method for scheduling contexts based on statistics of memory system interactions in a computer system
US6256775B1 (en) * 1997-12-11 2001-07-03 International Business Machines Corporation Facilities for detailed software performance analysis in a multithreaded processor
JPH11194957A (ja) * 1998-01-07 1999-07-21 Matsushita Electric Ind Co Ltd デバッグ支援装置、並列実行情報生成装置、及びこれらに適用されるプログラムを記録した記録媒体
US6374364B1 (en) * 1998-01-20 2002-04-16 Honeywell International, Inc. Fault tolerant computing system using instruction counting
GB9805485D0 (en) * 1998-03-13 1998-05-13 Sgs Thomson Microelectronics Microcomputer
US6067644A (en) * 1998-04-15 2000-05-23 International Business Machines Corporation System and method monitoring instruction progress within a processor
US6134676A (en) * 1998-04-30 2000-10-17 International Business Machines Corporation Programmable hardware event monitoring method
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
US6145123A (en) * 1998-07-01 2000-11-07 Advanced Micro Devices, Inc. Trace on/off with breakpoint register
US6243804B1 (en) * 1998-07-22 2001-06-05 Scenix Semiconductor, Inc. Single cycle transition pipeline processing using shadow registers
US6240510B1 (en) * 1998-08-06 2001-05-29 Intel Corporation System for processing a cluster of instructions where the instructions are issued to the execution units having a priority order according to a template associated with the cluster of instructions
US6275893B1 (en) * 1998-09-14 2001-08-14 Compaq Computer Corporation Method and apparatus for providing seamless hooking and intercepting of selected kernel and HAL exported entry points in an operating system
US6223338B1 (en) * 1998-09-30 2001-04-24 International Business Machines Corporation Method and system for software instruction level tracing in a data processing system
US6192513B1 (en) * 1998-11-02 2001-02-20 Hewlett-Packard Company Mechanism for finding spare registers in binary code
US6185652B1 (en) * 1998-11-03 2001-02-06 International Business Machin Es Corporation Interrupt mechanism on NorthBay
US6351844B1 (en) * 1998-11-05 2002-02-26 Hewlett-Packard Company Method for selecting active code traces for translation in a caching dynamic translator
US6826749B2 (en) * 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US6636950B1 (en) * 1998-12-17 2003-10-21 Massachusetts Institute Of Technology Computer architecture for shared memory access
US6253338B1 (en) * 1998-12-21 2001-06-26 International Business Machines Corporation System for tracing hardware counters utilizing programmed performance monitor to generate trace interrupt after each branch instruction or at the end of each code basic block
US6330662B1 (en) * 1999-02-23 2001-12-11 Sun Microsystems, Inc. Apparatus including a fetch unit to include branch history information to increase performance of multi-cylce pipelined branch prediction structures
US6430741B1 (en) * 1999-02-26 2002-08-06 Hewlett-Packard Company System and method for data coverage analysis of a computer program
US6446029B1 (en) * 1999-06-30 2002-09-03 International Business Machines Corporation Method and system for providing temporal threshold support during performance monitoring of a pipelined processor
US6574727B1 (en) * 1999-11-04 2003-06-03 International Business Machines Corporation Method and apparatus for instruction sampling for performance monitoring and debug
US6681387B1 (en) * 1999-12-01 2004-01-20 Board Of Trustees Of The University Of Illinois Method and apparatus for instruction execution hot spot detection and monitoring in a data processing unit
US6480966B1 (en) * 1999-12-07 2002-11-12 International Business Machines Corporation Performance monitor synchronization in a multiprocessor system
US6560693B1 (en) * 1999-12-10 2003-05-06 International Business Machines Corporation Branch history guided instruction/data prefetching
US6549998B1 (en) * 2000-01-14 2003-04-15 Agere Systems Inc. Address generator for interleaving data
US6865663B2 (en) * 2000-02-24 2005-03-08 Pts Corporation Control processor dynamically loading shadow instruction register associated with memory entry of coprocessor in flexible coupling mode
US6757771B2 (en) * 2000-08-09 2004-06-29 Advanced Micro Devices, Inc. Stack switching mechanism in a computer system
US6480938B2 (en) * 2000-12-15 2002-11-12 Hewlett-Packard Company Efficient I-cache structure to support instructions crossing line boundaries
US6857083B2 (en) * 2000-12-18 2005-02-15 International Business Machines Corporation Method and system for triggering a debugging unit
US7448025B2 (en) * 2000-12-29 2008-11-04 Intel Corporation Qualification of event detection by thread ID and thread privilege level
US7093236B2 (en) * 2001-02-01 2006-08-15 Arm Limited Tracing out-of-order data
US20020199179A1 (en) * 2001-06-21 2002-12-26 Lavery Daniel M. Method and apparatus for compiler-generated triggering of auxiliary codes
US7093154B2 (en) * 2001-10-25 2006-08-15 International Business Machines Corporation Critical adapter local error handling
US6775728B2 (en) * 2001-11-15 2004-08-10 Intel Corporation Method and system for concurrent handler execution in an SMI and PMI-based dispatch-execution framework
US6928582B2 (en) * 2002-01-04 2005-08-09 Intel Corporation Method for fast exception handling
US20030135720A1 (en) * 2002-01-14 2003-07-17 International Business Machines Corporation Method and system using hardware assistance for instruction tracing with secondary set of interruption resources
US7168067B2 (en) * 2002-02-08 2007-01-23 Agere Systems Inc. Multiprocessor system with cache-based software breakpoints
US6944722B2 (en) * 2003-04-14 2005-09-13 Sun Microsystems, Inc. Method and system for postmortem identification of falsely shared memory objects
US6925424B2 (en) * 2003-10-16 2005-08-02 International Business Machines Corporation Method, apparatus and computer program product for efficient per thread performance information
US7257657B2 (en) * 2003-11-06 2007-08-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses for specific types of instructions

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011120216A1 (zh) * 2010-03-29 2011-10-06 华为技术有限公司 对指令执行次数进行计数的方法、系统及处理器
CN102947803A (zh) * 2010-03-29 2013-02-27 华为技术有限公司 对指令执行次数进行计数的方法、系统及处理器
CN102947803B (zh) * 2010-03-29 2016-06-08 华为技术有限公司 对指令执行次数进行计数的方法、系统及处理器
CN111277454A (zh) * 2020-01-15 2020-06-12 Ut斯达康通讯有限公司 一种网络性能检测系统及方法

Also Published As

Publication number Publication date
US20050071608A1 (en) 2005-03-31
TW200517962A (en) 2005-06-01

Similar Documents

Publication Publication Date Title
CN100351810C (zh) 对特定指令类型的指令执行和数据访问计数的方法和系统
CN1627270A (zh) 用于对指令执行和数据访问进行计数的方法和设备
CN1332321C (zh) 页表中维护性能监测结构用于监测程序性能的方法和设备
CN1677364A (zh) 对代码覆盖使用硬件辅助的自主测试用例反馈的方法和设备
CN1613058A (zh) 配有jit编译器的虚拟计算机,操作所述计算机的方法以及包括所述虚拟计算机的终端设备
CN1648865A (zh) 为记录事件提供前置与后置处理程序的方法与装置
CN1294486C (zh) 多重处理环境中透明动态优化的方法和系统
CN1604049A (zh) 用于自主剖析应用程序的方法和设备
CN1604044A (zh) 用于指令和数据访问的选择性计数的方法和装置
CN1742257A (zh) 基于识别寻址模式的双目的寄存器的数据预测机制
US20080235495A1 (en) Method and Apparatus for Counting Instruction and Memory Location Ranges
CN1591325A (zh) 计算机系统、编译器装置以及操作系统
JP4681491B2 (ja) プロファイリングプログラムおよびプロファイリング方法
CN1315062C (zh) 处理器装置、使用它的信息处理装置、编译装置及其方法
CN1487415A (zh) 使用基于时间的断点调试计算机程序的方法和系统
CN1869952A (zh) 指令执行设备、调试方法、调试设备以及调试程序
CN101957773A (zh) 用于多轮次动态概要分析的方法及其系统
CN1278226C (zh) 模拟装置、模拟方法
CN1842767A (zh) 用于多个异常处理模型的中间表示
US8499197B2 (en) Description language for identifying performance issues in event traces
US20050071821A1 (en) Method and apparatus to autonomically select instructions for selective counting
US11748072B2 (en) Apparatus and method for source code optimisation
US20050071817A1 (en) Method and apparatus for counting execution of specific instructions and accesses to specific data locations
US20050071611A1 (en) Method and apparatus for counting data accesses and instruction executions that exceed a threshold
US20050071816A1 (en) Method and apparatus to autonomically count instruction execution for applications

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication