CN1279441C - 用于确定热门的调用者-被调用者关系和对应的调用者/被调用者对的方法 - Google Patents
用于确定热门的调用者-被调用者关系和对应的调用者/被调用者对的方法 Download PDFInfo
- Publication number
- CN1279441C CN1279441C CNB031255906A CN03125590A CN1279441C CN 1279441 C CN1279441 C CN 1279441C CN B031255906 A CNB031255906 A CN B031255906A CN 03125590 A CN03125590 A CN 03125590A CN 1279441 C CN1279441 C CN 1279441C
- Authority
- CN
- China
- Prior art keywords
- stack architecture
- caller
- callee
- stack
- tracks
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
描述了一种使用堆栈跟踪高速缓存器内嵌的方法、系统和设备。根据一种实施例,确定堆栈结构跟踪的最后堆栈结构是否的没有被缓存,以及如果最后堆栈结构是没有被缓存,则记录调用者-被调用者关系,并以所记录的调用者-被调用者关系更新关系映射。
Description
技术领域
本发明涉及软件应用,具体地说涉及使用基于堆栈跟踪高速缓存器的动态剖析(dynamic profiling)改进内嵌。
背景技术
许多现代的软件语言(比如Java、C#和C++)使用过程和函数(也称为方法)以作为语义提取边界,因此可以将程序划分为容易维护和开发的不同的单元。面向对象语言(比如Java、C#和C++)提供了这样的编程方法:其中过程调用比较频繁并且过程大小较小。该方法可以是一个函数性的封装,并且它可以以新的实施方式替代,但致使调用点大规模增多并导致性能受损。换句话说,写模块化的程序导致性能受损,减小性能受损的一种方式是过程集成,也称为内嵌(inlining)。内嵌是这样的十分公知的编译时间优化技术:以调用的过程本体替换或复制过程调用来改善程序的执行性能。
人们作了许多尝试改善内嵌,尤其是对适时式(Just-In-Time(JIT))编译器的改善,以便获得更多的在运行时间上的好处。例如,在JIT编译的(JITted)代码性能方面内嵌具有重要的作用,这种代码性能在关于桌面和服务器/企业工作负荷的总体性能方面得到广泛使用。JITted代码是指通过JIT编译器在运行中产生的代码。虽然内嵌是改善静态编译软件应用系统的执行性能的十分公知的技术,但是如今可用的方法和系统不能有效地减小运行时间开销,或者不能通过使用堆栈跟踪高速缓存器使展开开销最小,或者不能改善处理器性能,尤其是使用JITted代码时的性能。
如今一种可用的方法是仪器剖析(instrument profiling),即在该方法的入口加入仪器化代码(比如某一剖析代码)以采集调用点信息比如计数和调用者-被调用者关系。然而,通过仪器剖析,污染了原码并使性能降低,因为额外/外部代码被加入到了原码中。此外,通常仅与基线编译器一起使用仪器剖析。
如今改善内嵌的另一可用的方法是采样剖析。采样剖析一般使用某些种类的仪表或其它的硬件辅助的监测方法以采样指令指针并将指令指针插入到数据库以查找哪个指针属于该对应的方法以确定哪种方法是热门的。一种方法是否热门取决于调用者调用它的被调用者的频率,将具有足够高的频率的方法分类为热门。然而,采样剖析仅限于确定热门方法,但在可能存在多个调用热门方法的调用者时不能找到特定的热门调用者-被调用者对。
如今可用的方法、系统和技术在它们不能确定热门的调用者-被调用者关系时不令人满意并且不能提供精确且有效的内嵌。此外,如今可用的方法、系统和技术不能有效地减小运行时间开销、不能使堆栈展开开销最小或不能改善处理器性能。
发明内容
根据本发明,提供一种用于周期性地监测和跟踪采样剖析和堆栈展开的指令指针以确定热门的调用者-被调用者关系和对应的调用者/被调用者对的方法,包括:
确定堆栈结构跟踪的最后堆栈结构是否是没有被缓存;
如果最后堆栈结构是没有被缓存则记录调用者-被调用者关系;和更新带有所记录的调用者-被调用者关系的关系映射,
其中所述方法进一步包括:
以缺省值初始化堆栈结构跟踪;
将最后没有被缓存的堆栈结构标记为处于缓存;和
展开到堆栈结构跟踪的下一堆栈结构
附图说明
附加的权利要求详细地阐述了本发明的特征。结合附图从下文的详细描述中可以最佳地理解本发明的实施例及其优点,在附图中:
附图1所示为可以实施本发明的一种实施例的典型计算机系统的方块图;
附图2所示为根据一种实施例原理性地示出动态剖析的流程图;
附图3所示为根据一种实施例原理性地示出工作再编译调度程序的流程图;
附图4所示为根据一种实施例原理性地示出堆栈跟踪的方块图;和
附图5所示为根据一种实施例原理性地示出堆栈跟踪和最佳的展开过程的方块图。
具体实施方式
所描述的方法、系统和设备是用于以基于堆栈跟踪高速缓存器的动态剖析改善内嵌。广义上讲,本发明的实施例提供了内嵌提示和增强的剖析性能。
提供一种系统、设备和方法以周期性地监测和跟踪采样剖析和堆栈展开的指令指针以确定热门的调用者-被调用者关系和对应的调用者/被调用者对。根据一种实施例,堆栈展开(也称为堆栈爬行或堆栈行走)可以指从堆栈跟踪的一结构到另一结构(例如从顶部到底部)迭代的过程。堆栈展开可以称为获得堆栈跟踪信息的过程。堆栈跟踪信息可以包括堆栈结构(sstack frame)、与每个堆栈结构相关的前后关系信息、当前的指令指针、源行号信息和堆栈指针的列表。堆栈跟踪可以指堆栈指针的链,每个堆栈指针表示对某一函数的调用的状态。例如在从底部到顶部的堆栈跟踪中的结构可以表示调用者至被调用者的关系。根据一种实施例,由于在堆栈跟踪中几个结构可以仍然保持不变,因此可以提供减小的展开以免在填充堆栈跟踪时执行完整的堆栈展开,由此导致了轻量的内嵌。
根据一种实施例,可以提供一种关系映射以将表示调用者/被调用者的键码与指示调用点执行频率(即多长时间执行调用一次)的对应值映射起来。可以提供该关系映射以进一步记录热门调用者-被调用者关系。根据一种实施例,提供方法查询表以保存每个方法的开始和结束地址,并追索和跟踪对应于热门的调用者-被调用者关系的调用者-被调用者对。
根据一种实施例,提供一种用于轻量的剖析器(profiler)的系统、设备和方法,其使用堆栈跟踪高速缓存器以使展开成本最小。根据一种实施例,采集第一手信息并在中央处理单元(CPU)的空闲周期中分批地分析,使它可用于使编译器最优化。根据一种实施例,可以提供再编译调度程序以周期性跟踪关系映射以确定热门调用者-被调用者对并再编译调用者和内嵌的被调用者(如果需要的话)。再编译调度程序可用于基于预定的策略或标准开始和结束动态剖析。
根据一种实施例,动态剖析可以基于堆栈跟踪高速缓存器以改善内嵌,由此改善软件应用的性能、软件应用的实施和程序设计系统研究。根据一种实施例,例如,不展开在堆栈跟踪高速缓存器中的所有的结构,可以使堆栈展开的运行时间开销最小。基于堆栈跟踪高速缓存器的动态剖析有助于减小运行时间开销和帮助改善机器和/或处理器性能。基于在此所提供的公开内容,在此将提及或讨论许多其它的实施例或者本领域的普通技术人员会清楚它们。
在下文的描述中,为解释的目的,阐述许多特定的细节以提供对本发明的完整的理解。然而,对于本领域的普通技术人员来说,很显然在没有这些特定的细节的情况也可以实施本发明的这些实施例。在其它的实例中,以方块图的形式示出了十分公知的结构和装置。
本发明的实施例包括不同的步骤,下文描述这些步骤。这些步骤可以通过硬件部件执行或者可以通过机器可执行的指令实施,这些指令可用于使以指令编程的通用或专用处理器或逻辑电路执行这些步骤。可替换的是,通过硬件或软件的组合也可以执行这些步骤。
本发明的实施例可以作为可包括机器可读介质的计算机程序产品提供,在该介质上存储了用于将计算机(或其它的电子装置)编程为执行根据本发明的处理的指令。计算机可读介质包括(但不限于)软盘、光盘、只读光盘存储器(CD-ROM)和磁光盘、ROM、随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、电子可擦可编程序只读存贮器(EEPROM)、磁卡或光卡、高速存储器或适合于存储电子指令的其它类型的介质/机器可读介质。此外,本发明也可作为计算机程序产品下载,在该程序产品中通过通信链接(例如,调制解调器或网络连接)以嵌入在载波或其它的传播介质中的数据信号的方式可以将程序从远程计算机(例如服务器)传输给请求的计算机(例如客户)。因此,对于本说明书来说,载波或其它的传播介质应该被看作包括机器可读介质。
附图1所示为可以实施本发明的一种实施例的典型的计算机系统的方块图。计算机系统100包括传输信息的总线或其它的通信装置101和与总线101耦合以处理信息的处理装置比如处理器102。计算机系统100进一步包括耦合到总线101以存储处理器102所执行的信息和指令的随机存取存储器(RAM)或其它的动态存储装置104(称为主存储器)。主存储器104也可用于在处理器102执行指令的过程中存储临时变量或其它的中间信息。计算机系统100也包括耦合到总线101以存储用于处理器102的静态信息和指令的只读存储器(ROM)和/或其它的静态存储装置106。
数据存储装置107(比如磁盘或光盘)和它的相应的驱动器也可耦合到计算机系统100以存储信息和指令。计算机系统100也可通过总线101耦合到显示装置121(比如阴极射线管(CRT)或液晶显示器(LCD))以向终端用户显示信息。通常,包括字母和其它的键的字母数字输入装置122也可以耦合到总线101以将信息和/或指令选择传输给处理器102。其它类型的用户输入装置有光标控制器123(比如鼠标、跟踪球或光标方向键)以将方向信息和指令选择传递给处理器102并在显示器121上控制光标运动。
通信装置125也可耦合到总线101。通信装置125可以包括调制解调器、网络接口卡或其它十分公知的接口器件,比如那些用于耦合到以太网(Ethernet)、令牌网或其它类型的物理连接以用于提供通信链接以支持例如局域网或广域网的接口器件。这样,计算机系统100可以通过常规的网络设施耦合到多个客户和/或服务器,比如公司的内部互联网和/或因特网。
可以理解的是,对于某些实施,比上文所描述的实例更少或更多的装备的计算机系统可能比较理想。因此,对于不同的实施,计算机系统100的配置可能根据多种因素(比如价格限制、性能要求、技术革新和/或其它的情况)的不同而不同。
应该注意的是,虽然在此所描述的步骤可以在经编程的处理器(比如处理器102)的控制下执行,但是在变型实施例中这些步骤可以全部或部分地通过任何可编程或硬编码的逻辑电路实施,例如通过现场可编程门阵列(FPGA)、晶体管-晶体管逻辑电路(TTL)或专用集成电路(ASIC)实施。此外,本发明的方法还可以通过经编程的通用计算机部件和/或定制的硬件部件的任何组合执行。因此,在此所公开的任何内容都不应该认为将本发明限制于特定的实施例,通过硬件部件的特定组合执行在这些特定的实施例中所描述的步骤。
附图2所示为根据一种实施例原理性地说明动态剖析的流程图。根据一种实施例,对于每次新的调用,可以产生或构造堆栈结构以保存特定的调用的所需信息。根据一种实施例,编译器(比如适时式(JIT)编译器)可用于将堆栈结构标记为“没有被缓存(not cached)”或“处于缓存(in cache)”。其它的编译器实例包括Java虚拟机、Java编译器、Java芯片等。根据各种因素和需求可以使用上述的任何编译器或其它的编译器。一旦产生了堆栈结构,编译器就将它标记为“没有被缓存”。根据一种实施例,通过该程序的继续,堆栈结构的堆栈可以与一系列有效结构一起保持增长。在某一点上,可以启动采样处理机并且可以调用那些“没有被缓存”结构的展开迭代。
首先,在处理方块205中开始堆栈结构展开。堆栈结构跟踪可以以缺省值开始。在方块210中使用采样的指令指针到达第一/顶部堆栈结构。在判定方块215中,确定当前的结构是否是堆栈结构的底部,例如到达堆栈结构的最后结构。如果已经到达堆栈结构的最后结构,则在处理方块225中退出展开。如果还没有到达堆栈结构的最后结构,则在处理方块220中检验当前的结构以进一步确定它是否是“处于缓存”。
根据一种实施例,如果确定该结构是“处于缓存”,则在处理方块225中退出展开。“处于缓存”结构意味着所有的堆栈结构要来的或者前面的结构都在高速缓存器中。换句话说,自从最后的采样起该结构还没有被弹出过,并退出展开。术语“没有被缓存”和“处于缓存”可以分别是“有效的”和“无效的”同义语。根据一种实施例,结构可以是Java结构或Microsoft.Net结构等类似的结构。
根据一种实施例,如果确定结构为“没有被缓存”,则在处理方块230中记录调用者-被调用者关系。根据一种实施例,根据作为当前的结构指令指针(frame_ip)的当前的调用点指令指针(callsite_ip)可以记录调用者-被调用者关系。根据一种实施例,调用者-被调用者关系的记录可以与关系映射中更新项目一样简单。在处理方块235中,将该结构标记为“处于缓存”,表示该结构已经展开了。
在处理方块240中,结构的展开继续到下一结构,在判定方块215中,确定是否已经到达该堆栈的最后结构。根据一种实施例,展开的迭代计数取决于采样频率,比如如果采样间隔更长则可以存在更多的“没有被缓存”结构。此外,根据一种实施例,采样可以是轻量的,这部分可能是相关于或因为记录关系的快速实施。
根据一种实施例,该关系映射可以是将调用点映射到计数的散列表(调用点->计数)。换句话说,调用点可以是表示调用者/被调用者关系的键标(key),该计数表示指示已经执行的调用点的次数,即特定调用者调用它的被调用者的频率。根据一种实施例,如果该计数较大,则它表示调用者-被调用者关系热门。计数大小和该关系的热度可以彼此成正比,计数越大,则调用者-被调用者关系可能越热门。此外,该关系映射可以作为散列表,这种散列表不仅有利于快速地存取,而且还定义了如何根据取决于散列表实施的散列算法的键标(调用点)存取值(计数)。符号“map[key]”表示对映射到键标的值的存取。
根据一种实施例,调用点指令指针(callsite_ip)可以足够保留关于调用者和被调用者的信息。对于每种方法,编译器可以具有并维护调用点信息(例如,callsite_ip,callee)的列表,这意味着在callsite_ip上调用被调用者。此外,每个调用点可以映射到调用点指令指针。
根据一种实施例,调用点意味着在这个点上调用者正在及时地调用被调用者。换句话说,使用调用点指令指针可以跟踪或找到调用者,根据一种实施例,例如使用方法查询表(调用者=method_lookup_table.find(callsite_ip));被调用者=caller.get_callee(callsite_ip))。根据一种实施例,调用点指令指针可以表示代码地址,并且该方法可以包含特定的代码地址。例如,该方法是调用者,并且使用方法查询表可以找到它。此外,调用者可以保留调用点信息的列表,以使调用者使用调用点指令指针可以找到被调用者,同样地,构造调用者-被调用者关系。
根据一种实施例,方法查询表可以是一种在编译器产生它的代码之后保存每种方法的开始和结束地址的数据结构。换句话说,对于每种方法,在具有这些方法中每种方法的开始和结束地址的方法查询表中可以存在入口。给定代码地址,使用方法查询表该运行时间可以找到包含该特定的地址的方法。根据一种实施例,方法查询表在使用返回地址找到调用者来执行指令指针采样和堆栈展开的过程中比较有用。方法查询表数据结构可以是使查询更加容易的容器。例如,数据结构可以与带有元组的元素类型的线性分类阵列(start_address,end_address)一样简单,使用十分公知的对分检索方法查询表在它们中进行查询。根据一种实施例,与记录和指令指针一起可以执行堆栈展开以记录调用者-被调用者关系。
根据一种实施例,额外或外部代码可以不加入到原码中。这种优点提供了执行内嵌的满意的方法,因为它不会污染原码或不将仪器化时间加入到导致程序动作改变的运行代码中。根据一种实施例,使用通过非破坏性展开周期性地跟踪应用线程的指令指针的采样剖析确定调用者-被调用者关系。根据一种实施例,使用硬件执行计数器、用户级定时器等可以执行采样。使用各种系数比如较低的性能、采样精度等或其组合可以预先定义采样的频率。
此外,根据一种实施例,剖析器可以使用堆栈跟踪高速缓存器来减小展开成本,使剖析器相对较轻量。根据一种实施例,通过采集第一手信息和在中央处理单元(CPU)空闲周期中成批地执行分析可以减小展开成本。基于预定的策略或标准可以开始或结束动态剖析。这种轻量的剖析可以使该剖析适合于优化编译器。
根据一种实施例,剖析器可以基于或用于采样剖析,但也可以基于或用于仪器化剖析(instrumentation profiling)。根据一种实施例,采样可以包括周期性监测运行应用线程的指令指针。基于在性能受损和采样精度之间的折衷可以控制这种频率。换句话说,剖析可以继续的多大的频率或多长的时间取决于采样的性能和/精度。根据一种实施例,可以使用硬件执行计数器比如Vtune、系统定时器中断、用户级定时器等可以启动采样剖析。
根据一种实施例,在异常、无用信息采集(GC)计数和对堆栈的可靠性校验的过程中可以执行用于记录调用者-被调用者关系的堆栈展开。然而,根据一种实施例,展开可以是轻量的,这是指仅需要找到“没有被缓存”的堆栈结构,即仅仅那些感兴趣的并来回弹出和压入的堆栈结构。此外,根据一种实施例,仅认为那些与“没有被缓存”的堆栈结构对应的方法是热门的,处于堆栈结构的底部的方法(例如,main())可以不进行再编译。根据一种实施例,由于几个堆栈结构保持不变,因此通过不要求全部堆栈展开,堆栈展开可能仅需要部分展开,这就使得需要相对较轻量的展开。
根据一种实施例,通过某些简明的提示在高级语言(如C++)层面上可以进行内嵌,并且通过编译器也可以执行。根据一种实施例,编译器可以具有在内嵌策略中定义的它的内嵌试探法,并且静态编译器也可以使用静态剖析信息以执行更积极的且更加精确的内嵌。关于JIT编译器,可以不使用用于内嵌方法的积极的策略,并且内嵌试探法大部分是静态的且简单的。例如,仅给这些方法内嵌小于某些阈值的代码大小以及适时式(just in time)特性,JIT编译器可以不进行静态剖析以指令进行内嵌。根据一种实施例,内嵌可以用于桌面和服务器/企业工作负荷的总指标的JIT编译的(JITed)代码指标。
附图3所示为根据一种实施例原理性地说明工作再编译调度程序的流程图。根据一种实施例,在处理方块305中在空闲优先级运行的再编译调度程序周期性地检验关系映射以便监测调用者-被调用者对或关系以寻找热门的调用者-被调用者对或关系。与计数成正比例的热门的调用者-被调用者对或关系可以指示更大的计数。在判定方块310中,再编译调度程序确定调用者-被调用者对是否是热门的,即计数是否足够大到可认为调用者-被调用者对是热门的。根据一种实施例,计数是否是足够大(即调用者-被调用者对是否是足够热门)取决于与各种因素(比如策略或标准)相关的一个热度阈值或多个热度阈值。热门的调用者-被调用者对可以是对应于所记录的调用者-被调用者关系的调用者-被调用者对,或者换句话说,认为对应于记录的调用者-被调用者关系的调用者-被调用者对是热门的。
如果确定调用者-被调用者对是热门的,并且如果值得编译的话,则在处理方块315中可以编译热门的调用者-被调用者对的调用者。在处理方块320中,可以内嵌热门的调用者-被调用者对的被调用者(即对应于编译的调用者的被调用者)。根据一种实施例,通过搜索方法查询表,再编译调度程序可以从指令指针中推定方法处理,这个方法查询表可以存储每个方法处理的开始和结束指令指针。如果确定调用者-被调用者对不热门,则在处理方块305中再编译调度程序可以继续监测调用者-被调用者对。
根据一种实施例,如果再编译调度程序发现了可以连接的几个调用者-被调用者对并且它们具有类似的采样计数即它们具有类似的热度,则它可以执行更加积极的内嵌提示。例如,A调用B,B调用C,并且找到了超过一定量的热度阈值的两对调用者-被调用者,在这种情况下,再编译调度程序可以发布具有在A中内嵌B和C的提示的再编译请求,即重新编译A以内嵌B和C。
此外,根据一种实施例,再编译调度程序基于某些预定的策略、标准等或其组合自动开始和结束动态剖析。这些策略或标准的某些实例可以是关于动态剖析花费的时间长短、采集的采样的数量、发布的再编译请求的数量等或其组合。
附图4所示为根据一种实施例原理性地示出的堆栈跟踪的方块图。堆栈402结构404-416的堆栈。如图所示,每个堆栈跟踪结构404-416与标记“没有被缓存”或“in_cache”关联。每次请求新的调用,可以产生堆栈结构以保留这个调用所需的信息,适时式(JIT)编译器可以将它标记为“没有被缓存”。根据一种实施例,通过程序处理继续到该堆栈的下一结构402继续展开,直到它达到Stacktrace.main 404。在展开的过程中在达到“没有被缓存”结构时,可以将该结构标记为“处于缓存”。一旦实现了完全展开,则所有的结构404-416可以标记为“处于缓存”。此外,所有的结构404-416可以具有存储在堆栈跟踪中的并通过指令指针和堆栈指针对标引的附加的或额外的堆栈跟踪信息。根据一种实施例,指令指针可以识别该堆栈跟踪的结构信息、源位置和方法名称,同时堆栈指针可以区别那些具有相同的指令指针的堆栈结构,例如堆栈结构412和416。此外,例如,指令指针可以识别堆栈跟踪的每个堆栈结构的帧信息,并且使用通过相应的指令指针标识的帧信息,堆栈指针可以分开每个堆栈结构。
附图5所示为根据一种实施例原理性地示出了三个堆栈跟踪和最佳展开的过程的方块图。如图所示,三个堆栈跟踪552、562、578包括在执行软件程序的过程中的第一堆栈跟踪552、在第一异常堆栈展开之后的第二堆栈跟踪562和在第二展开的过程中的第三堆栈跟踪578,展开直到到达“处于缓存”结构。根据一种实施例,在软件程序的开始执行的过程中编译器可以将第一堆栈跟踪552的堆栈结构554-560标记为“没有被缓存”。第一堆栈跟踪552包括一组结构554-560。如图所示,第一堆栈跟踪552可以包括Stacktrace.main主程序的堆栈结构554、表示由主程序554调用的程序B.b的堆栈结构556、表示由程序A.a调用的程序B.b的堆栈结构558和表示由程序B.b调用的程序C.c的堆栈结构560。
根据一种实施例,第二堆栈跟踪562可以包括一组堆栈结构564-576。在此,在展开的过程中通过将“处于缓存”槽(slot)设定为真,将先前标记为“没有被缓存”的每个堆栈结构554-560以及其它的结构标记“处于缓存”564-574。
根据一种实施例,在第二次展开之后第三堆栈跟踪578可以具有堆栈结构580-594,直到到达“in_cache”。根据一种实施例,堆栈展开可以从标记“没有被缓存”的堆栈结构G.g0594开始。由于G.g0594结构没有被缓存,因此可以将槽值复位到“处于缓存”,并且展开的过程可以继续到下一结构。一旦到达已经“处于缓存”堆栈结构B.b584,则可以从堆栈跟踪高速缓存器中检索其余的堆栈跟踪信息(比如,指令指针和堆栈指针对),而不需要附加的展开。此外,根据一种实施例,通过使用存储在堆栈跟踪高速缓存器中的第一或更早的异常的堆栈跟踪信息可以使堆栈展开更加快。根据另一实施例,“处于缓存”结构采样可以改变大小,例如在展开的过程中为获得进一步的运行时间好处包括相对较大的“处于缓存”结构采样。根据一种实施例,与在此为说明的目的提供的较少的采样相比,典型的采样可能具有更大数量的“处于缓存”结构,因此在展开的过程可以获得更大的运行时间好处。
根据一种实施例,可以考虑本发明的某些实施例所需的各种部件和/或步骤的任何组合,并且这些组合可以基于给定的情况、需求、性能、预定的策略和/或标准等。也可以考虑并非需要所有的部件和/或步骤,也可以增加几个其它的部件和/或步骤,这对于本领域的普通技术人员来说是显而易见的。
可以使用常规的技术以及对本领域的普通技术人员来说是显然的任何所需的改进。例如,该系统可以包括执行指令的常规的处理器或机器、存储数据的常规存储器、对数据编码的常规编码器、发送数据的常规发送器、接收数据的常规接收器和对数据进行解码的常规解码器。本发明的某些实施例根据需要可以包含服务器、应用程序、系统、数据库和各种其它的设备和/或软件。例如,各种系统可以起多平台的作用和/或具有多平台,比如虚拟地址扩充系统(VAX)、大型机(Mainframe)、个人计算机(PC)、Active Directory、Novell、Macintosh、UNIX、Linux等以及备用机。虽然已经描述了本发明,但是在本领域的普通技术人员会理解到各种改进及其变型。
Claims (8)
1.一种用于周期性地监测和跟踪采样剖析和堆栈展开的指令指针以确定热门的调用者-被调用者关系和对应的调用者/被调用者对的方法,包括:
确定堆栈结构跟踪的最后堆栈结构是否是没有被缓存;
如果最后堆栈结构是没有被缓存则记录调用者-被调用者关系;和
更新带有所记录的调用者-被调用者关系的关系映射,
其中所述方法进一步包括:
以缺省值初始化堆栈结构跟踪;
将最后没有被缓存的堆栈结构标记为处于缓存;和
展开到堆栈结构跟踪的下一堆栈结构。
2.权利要求1所述的方法,进一步包括:
检测所述堆栈结构跟踪的最后堆栈结构;
确定堆栈结构跟踪的最后结构是否是处于缓存;和
如果最后的堆栈结构是处于缓存则退出展开。
3.权利要求1所述的方法,进一步包括:
检测堆栈结构跟踪的底部;和
如果已经到达了堆栈结构跟踪的底部则退出展开。
4.权利要求1所述的方法,其中初始化包括初始化指令指针和堆栈结构数据结构,该堆栈结构数据结构具有方法查询表。
5.权利要求4所述的方法,其中方法查询表包括对应于调用者-被调用者关系的调用者和被调用者的代码地址,该代码地址具有每个方法的开始和结束地址。
6.权利要求1所述的方法,其中该关系映射包括散列表,该散列表具有作为表示调用者-被调用者关系的键标的调用点和作为指示执行调用点的次数的值的计数。
7.权利要求1所述的方法,进一步包括将堆栈结构跟踪的堆栈结构标记为处于缓存,其中一旦完成全部展开就执行标记。
8.权利要求6所述的方法,其中堆栈结构包括堆栈跟踪信息,该堆栈跟踪信息由指令指针和堆栈指针对标引。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/402520 | 2003-03-28 | ||
US10/402,520 US7386686B2 (en) | 2003-03-28 | 2003-03-28 | Inlining with stack trace cache-based dynamic profiling |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1534475A CN1534475A (zh) | 2004-10-06 |
CN1279441C true CN1279441C (zh) | 2006-10-11 |
Family
ID=33130445
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB031255906A Expired - Fee Related CN1279441C (zh) | 2003-03-28 | 2003-09-18 | 用于确定热门的调用者-被调用者关系和对应的调用者/被调用者对的方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7386686B2 (zh) |
CN (1) | CN1279441C (zh) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7457671B2 (en) * | 2004-09-30 | 2008-11-25 | Rockwell Automation Technologies, Inc. | Systems and methods that facilitate management of add-on instruction generation, selection, and/or monitoring during execution |
WO2007095642A2 (en) * | 2006-02-16 | 2007-08-23 | The Regents Of The University Of California | Dynamic incremental compiler and method |
WO2008013470A1 (en) * | 2006-07-26 | 2008-01-31 | Intel Corporation | An efficient call sequence restoration method |
US8108839B2 (en) * | 2006-11-30 | 2012-01-31 | International Business Machines Corporation | Method and apparatus for tracing execution of computer programming code using dynamic trace enablement |
US8418149B2 (en) * | 2006-12-28 | 2013-04-09 | International Business Machines Corporation | Differential comparison system and method |
US20080243970A1 (en) * | 2007-03-30 | 2008-10-02 | Sap Ag | Method and system for providing loitering trace in virtual machines |
US8601469B2 (en) * | 2007-03-30 | 2013-12-03 | Sap Ag | Method and system for customizing allocation statistics |
US8356286B2 (en) * | 2007-03-30 | 2013-01-15 | Sap Ag | Method and system for providing on-demand profiling infrastructure for profiling at virtual machines |
US8522209B2 (en) * | 2007-03-30 | 2013-08-27 | Sap Ag | Method and system for integrating profiling and debugging |
US8336033B2 (en) * | 2007-03-30 | 2012-12-18 | Sap Ag | Method and system for generating a hierarchical tree representing stack traces |
US8667471B2 (en) | 2007-03-30 | 2014-03-04 | Sap Ag | Method and system for customizing profiling sessions |
US9274923B2 (en) * | 2008-03-25 | 2016-03-01 | Wind River Systems, Inc. | System and method for stack crawl testing and caching |
US8510721B2 (en) | 2010-08-25 | 2013-08-13 | Microsoft Corporation | Dynamic calculation of sample profile reports |
US8595750B2 (en) | 2010-11-30 | 2013-11-26 | Microsoft Corporation | Adaptive tree structure for visualizing data |
CN102073544B (zh) * | 2011-01-28 | 2012-11-21 | 武汉天喻信息产业股份有限公司 | 一种基于页操作的EEPROM cache方法 |
US8941657B2 (en) | 2011-05-23 | 2015-01-27 | Microsoft Technology Licensing, Llc | Calculating zoom level timeline data |
US10229031B2 (en) | 2011-07-15 | 2019-03-12 | Microsoft Technology Licensing, Llc. | Debugging inline functions in optimized code |
US9417856B2 (en) | 2012-03-15 | 2016-08-16 | International Business Machines Corporation | Efficient interpreter profiling to obtain accurate call-path information |
US9274920B2 (en) * | 2012-09-28 | 2016-03-01 | Dialog Semiconductor B.V. | Code profiling in embedded ULE applications |
JP2014075046A (ja) | 2012-10-04 | 2014-04-24 | International Business Maschines Corporation | トレース生成方法、装置、プログラム、及び該方法を利用したマルチレベルのコンパイレーション |
US9846717B2 (en) * | 2012-10-23 | 2017-12-19 | Galois, Inc. | Software security via control flow integrity checking |
US9152537B2 (en) * | 2013-02-08 | 2015-10-06 | Facebook, Inc. | Semantic stack trace |
US9223681B2 (en) | 2013-02-15 | 2015-12-29 | International Business Machines Corporation | Automated debug trace specification |
JP6080602B2 (ja) * | 2013-02-22 | 2017-02-15 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 実フットプリント算出方法、該算出方法を用いたインラインするメソッドの決定方法、装置及びプログラム |
US9009691B1 (en) * | 2013-07-12 | 2015-04-14 | Google Inc. | Using an inline stack to improve performance of an applications binary |
US9304748B2 (en) * | 2013-08-07 | 2016-04-05 | Qualcomm Incorporated | Method for controlling inlining in a code generator |
GB2525314B (en) * | 2014-01-17 | 2016-02-24 | Imagination Tech Ltd | Stack pointer value prediction |
US9910650B2 (en) * | 2014-09-25 | 2018-03-06 | Intel Corporation | Method and apparatus for approximating detection of overlaps between memory ranges |
US9495141B1 (en) * | 2015-12-01 | 2016-11-15 | International Business Machines Corporation | Expanding inline function calls in nested inlining scenarios |
JP2017151609A (ja) * | 2016-02-23 | 2017-08-31 | 株式会社東芝 | ストレージ、ストレージシステム |
US10025563B2 (en) * | 2016-09-14 | 2018-07-17 | International Business Machines Corporation | Selecting COBOL perform statements for inlining |
US10025694B1 (en) * | 2016-12-22 | 2018-07-17 | SafeDK Mobile Ltd. | Monitoring activity of software development kits using stack trace analysis |
US10846089B2 (en) | 2017-08-31 | 2020-11-24 | MIPS Tech, LLC | Unified logic for aliased processor instructions |
US11080062B2 (en) | 2019-01-12 | 2021-08-03 | MIPS Tech, LLC | Address manipulation using indices and tags |
CN110618940B (zh) * | 2019-09-19 | 2024-02-06 | 腾讯科技(深圳)有限公司 | 堆栈信息追踪方法、装置、计算机可读介质及计算装置 |
US20230273871A1 (en) * | 2022-02-28 | 2023-08-31 | Oracle International Corporation | Incremental stack walking |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5740443A (en) | 1995-08-14 | 1998-04-14 | International Business Machines Corporation | Call-site specific selective automatic inlining |
JP3290567B2 (ja) * | 1995-08-24 | 2002-06-10 | 富士通株式会社 | プロファイル計装方法 |
US6119206A (en) * | 1996-02-12 | 2000-09-12 | Sun Microsystems, Inc. | Design of tags for lookup of non-volatile registers |
US5815719A (en) | 1996-05-07 | 1998-09-29 | Sun Microsystems, Inc. | Method and apparatus for easy insertion of assembler code for optimization |
US6317796B1 (en) | 1997-10-06 | 2001-11-13 | Sun Microsystems, Inc. | Inline database for receiver types in object-oriented systems |
US6072951A (en) | 1997-10-15 | 2000-06-06 | International Business Machines Corporation | Profile driven optimization of frequently executed paths with inlining of code fragment (one or more lines of code from a child procedure to a parent procedure) |
US5978587A (en) | 1997-11-13 | 1999-11-02 | Unisys Corp. | Method for propagating source code locations into objects in a compiler |
US5978586A (en) | 1997-11-26 | 1999-11-02 | Unisys Corp. | Method for tracking changes in source locations in a compiler |
US6106574A (en) | 1997-12-04 | 2000-08-22 | Unisys Corp. | Computer-implemented object-oriented method for relating objects in a compiler to locations in the source program and to inlined call histories |
US6513155B1 (en) * | 1997-12-12 | 2003-01-28 | International Business Machines Corporation | Method and system for merging event-based data and sampled data into postprocessed trace output |
US6175948B1 (en) | 1998-02-05 | 2001-01-16 | Motorola, Inc. | Method and apparatus for a waveform compiler |
JP3813019B2 (ja) | 1998-05-11 | 2006-08-23 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラム処理方法、指定メソッドに関連するフレームを検出する方法、及び記憶媒体 |
US6195793B1 (en) | 1998-07-22 | 2001-02-27 | International Business Machines Corporation | Method and computer program product for adaptive inlining in a computer system |
US6161217A (en) | 1998-09-14 | 2000-12-12 | Sun Microsystems, Inc. | Accurate method for inlining virtual calls |
US6779180B1 (en) * | 1998-09-16 | 2004-08-17 | International Business Machines Corporation | Apparatus and method for preventing stack overflow from synchronous completion of asynchronous functions |
US6223340B1 (en) | 1998-10-09 | 2001-04-24 | Sun Microsystems, Inc. | Method for directly inlining virtual calls without on-stack replacement |
US6367071B1 (en) | 1999-03-02 | 2002-04-02 | Lucent Technologies Inc. | Compiler optimization techniques for exploiting a zero overhead loop mechanism |
US6505344B1 (en) | 2000-01-12 | 2003-01-07 | International Business Machines Corporation | Object oriented apparatus and method for allocating objects on an invocation stack |
US6658653B1 (en) * | 2000-06-08 | 2003-12-02 | International Business Machines Corporation | Debugging methods for heap misuse |
US7114150B2 (en) * | 2003-02-13 | 2006-09-26 | International Business Machines Corporation | Apparatus and method for dynamic instrumenting of code to minimize system perturbation |
-
2003
- 2003-03-28 US US10/402,520 patent/US7386686B2/en not_active Expired - Lifetime
- 2003-09-18 CN CNB031255906A patent/CN1279441C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US7386686B2 (en) | 2008-06-10 |
CN1534475A (zh) | 2004-10-06 |
US20040205409A1 (en) | 2004-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1279441C (zh) | 用于确定热门的调用者-被调用者关系和对应的调用者/被调用者对的方法 | |
Blankstein et al. | Hyperbolic caching: Flexible caching for web applications | |
US6546394B1 (en) | Database system having logical row identifiers | |
US8122438B2 (en) | Computer implemented method and system for accurate, efficient and adaptive calling context profiling | |
CN1848088A (zh) | 将本机接口函数调用转换为更简单操作的方法和系统 | |
CN1975729A (zh) | 搜索文本中关键词的系统及其方法 | |
CN1849585A (zh) | 处理特许事件的多个虚拟机监控器的使用 | |
CN1264083C (zh) | 用于在执行被转换指令时维持环境的方法和装置 | |
CN1924825A (zh) | 用于具有不同处理器频率的自适应跟踪的方法及设备 | |
US20140207756A1 (en) | Using temporary performance objects for enhanced query performance | |
US7836505B2 (en) | Accelerated file scanning | |
US9152567B2 (en) | Cache prefetching based on non-sequential lagging cache affinity | |
CN1648865A (zh) | 为记录事件提供前置与后置处理程序的方法与装置 | |
CN1821964A (zh) | 将本机函数内嵌到编译的Java代码中的方法和系统 | |
US7984036B2 (en) | Processing a text search query in a collection of documents | |
CN1906614A (zh) | 用于处理锚点文本的方法、系统与程序 | |
CN101030215A (zh) | 利用流预取历史来改进数据预取性能的方法和系统 | |
CN1637709A (zh) | 对所存储程序的执行进行改进的方法和设备 | |
CN1873643A (zh) | 使用词汇关联增强搜索引擎查询性能的方法和系统 | |
US11080196B2 (en) | Pattern-aware prefetching using parallel log-structured file system | |
CN1849586A (zh) | 在恢复虚拟机的操作时将中断或异常转向 | |
CN101030135A (zh) | 一种在共享内存中存储c++对象的方法及装置 | |
CN1890637A (zh) | 基于垃圾收集器分析与对象的布局动态插入预取指令的方法和装置 | |
US20040236727A1 (en) | Method, query optimizer, and computer program product for implementing live switchover to temporary sparse index for faster query perfomance | |
CN1449520A (zh) | 用于重放转换的指令的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20061011 Termination date: 20100918 |