用于管理的运行时间的基于硬件的运行时间检测设施的制作方法
【技术领域】
[0001] 本发明总体上涉及在计算环境内的处理,并且更具体地涉及用于管理的运行时间 的基于硬件的运行时间检测设施。
【背景技术】
[0002] 计算机处理器使用日益复杂的分支预测及指令高速缓存逻辑来执行事务 (transaction)。这些程序已被引入以增加指令吞吐量,且因此增加处理性能。用于改进性 能的逻辑的引入使得难以肯定地预测特定软件应用程序将如何在计算机处理器上执行。在 软件开发过程期间,常常存在功能性与性能之间的平衡。软件在基于执行软件的底层硬件 的一个或多个抽象层级处执行。当将硬件虚拟化时,额外抽象层被引入。随着性能增强逻辑 及各种抽象层(layer)的引入,将难以透彻地理解当程序正在执行时在硬件层级(level) 实际发生的事。在不具此信息的情况下,软件开发者将更抽象的方法(诸如,执行持续时 间、存储器使用率、线程的数目等)用于最佳化软件应用程序。
【发明内容】
[0003] 技术问题
[0004] 当硬件特定信息可用时,该信息通常是在事后被提供给开发者,且该信息是以聚 集地、在高层级、和/或穿插着其他程序及操作系统的活动的方式提供,从而难以识别可能 影响软件应用程序的效率及准确度的问题。
[0005] 对于问题的解决方案
[0006] 实施例包括用于执行运行时间检测的计算机程序、方法和系统。处理器基于在所 述处理器上执行的应用程序的指令的指令流来捕获运行时间检测。所述捕获包括:在所述 处理器的收集缓冲器中存储运行时间检测数据。所述处理器检测运行时间检测样本点触发 器。基于检测到所述运行时间检测样本点触发器来将所述收集缓冲器的内容作为报告群组 复制到程序缓冲器内。所述程序缓冲器位于由所述应用程序可访问的地址空间中的主存储 器中。
[0007] 额外特征及优点是经由本发明的技术来实现。本发明的其他实施例及方面将在本 文中予以详细描述且被视为所主张发明的一部分。为了更好地理解本发明的优点及特征, 参看描述及附图。
【附图说明】
[0008] 在说明书结尾处的权利要求中特定指出且清楚地主张了被视为本发明的主题。将 根据结合随附图进行的以下详细描述显而易见本发明的前述及其他特征及优点,其中:
[0009] 图IA为描绘实施例中的示例主机计算机系统的图;
[0010] 图IB为描绘实施例中的示例模拟主机计算机系统的图;
[0011] 图IC为描绘实施例中的示例计算机系统的图;
[0012] 图2为描绘实施例中的示例计算机网络的图;
[0013]图3为描绘实施例中的计算机系统的元件的图;
[0014] 图4A描绘实施例中的计算机系统的详细元件;
[0015]图4B描绘实施例中的计算机系统的详细元件;
[0016] 图4C描绘实施例中的计算机系统的详细元件;
[0017] 图5描绘根据实施例的用于处理器的运行时间检测的系统的示意图;
[0018] 图6描绘实施例中的包括可由特权状态设置的控制的运行时间检测控制块 (RICCB)的一部分。
[0019] 图7描绘实施例中的当半特权位(K)经设置为1时的RICCB控制块的一部分; [0020] 图8描绘根据实施例的收集缓冲器;
[0021] 图9描绘根据实施例的报告群组;
[0022] 图10描绘根据实施例的用于实现运行时间检测设施的处理流;并且
[0023] 图11图示了根据一个实施例的计算机程序产品。
【具体实施方式】
[0024] 本发明的实施例为用于受管理运行时间的基于硬件的运行时间检测设施。如本文 中所使用,术语"受管理运行时间"指代封装状态且管理用以执行程序或应用程序(例如, Java?虚拟机或"JVM"、操作系统、中间件等)的资源的环境。该运行时间检测设施的实施 例使程序能够收集关于程序执行的信息,包括中央处理单元(CPU)数据。所收集信息允许 管理器运行时间环境获取关于程序的洞察(insights),该信息是收集自该程序。该运行时 间检测设施的实施例包括用于将事件(例如,采纳分支、寄存器值等)的序列收集于收集缓 冲器中的硬件设施。该收集缓冲器(或含有最近记录的收集缓冲器的子集)是在发生可程 序化集合的样本触发事件时在应用程序的地址空间(例如,JVM的地址空间)中复制至程序 缓冲器中,这些事件诸如(但不限于):以指令的形式的软件指示词(softwaredirective) 被插入至指令流中;所执行指令的间隔完成,从上一样本过期时起的给定经过时间,和/或 诸如观察到数据或指令高速缓存未命中的给定硬件事件
[0025] 动态编译器利用运行时间信息(诸如,由本文中所描述的基于硬件的运行时间检 测设施收集的运行时间信息)来执行在线反馈导向的最佳化(onlinefeedbackdirected optimization)。举例而言,关于重要执行路径、设置档值及优选分支方向的信息可由动态 编译器使用以执行特殊化版本码、引导内嵌(in-lining)、对执行路径重新排序及将分支拉 直的最佳化。本文中所描述的实施例不限于由编译器使用,且可以诸如(但不限于)用于 引导其他受管理运行时间设施的多种方式使用。举例而言,数据高速缓存事件可用以帮助 废弃项目收集器程序作出关于协同定位多个物件或使多个物件彼此远离的决策以获得优 选数据局部性或避免假性共用问题。
[0026] 用于将应用进行程序概要分析的典型的现代手段是编译的检测手段,其编译重要 编译单元的检测版本,并且然后执行长得足以捕获代表性数据的这些编译单元。该数据然 后用于驱动执行单元的优化重新编译。该软件方法的一些缺点包括:(1)必须编译编译单 元的检测版本的开销,(2)必须在可能对于应用的性能重要的编译单元中执行昂贵的检测 路径的开销,(3)缺少对于诸如数据高速缓存未中和分支误预测的硬件事件的洞察,(4)捕 获事件(或轨迹)的序列以努力提取抽象和相关上下文的显著复杂度,以及,(5)不能正确 地处理其中检测应用频繁地采用意料之外的分支并且执行非检测代码的情况。
[0027] 值得注意的是,程序概要相关的反馈可以被应用到的编译单元的范围被固有地绑 定到由项目(1)和⑵引入的成本。更具体地,当开销增加时,候选编译单元的范围减小, 因为仅更占优势的编译单元可以表示用于有可能进行开销的最终摊销的足够的执行时间 机会。
[0028] 现代的动态编译环境经常包括在动态编译之前的解释阶段。包括解释阶段的、对 于将应用简档化的另一种典型的现代手段是解释检测手段,该解释检测手段允许解释器收 集运行时间统计。除了上面列出的点(2)、(3)和(4)之外,该软件手段也具有增加的可能 缺点:要求容易在应用使用期限中早期捕获该应用的行为,导致在应用启动时的显著的开 销;要求扩展该应用的解释阶段以保证收集足够代表性的数据;可能未能捕获稳态行为; 以及,不能检测到和反应于在解释阶段后出现的在该应用中的阶段改变。
[0029] 也使用利用解释和编译检测两者以及随机跟踪的现代混和软件解决方案,但是该 解决方案仍然受到上面列出的缺陷的影响,并且可能向运行时间引入相当大的开销和复杂 度。
[0030] 除了动态编译之外,管理的运行时间的其他分量当前不受到它们对于高速缓存分 级或内核作出的确定的影响。例如,可以动态地重新配置在堆上的数据的布局的垃圾收集 器例程可能丢失使得下述对象共置的机会,该对象暂时高度耦合或替代地可能通过共置在 独立的线程上被频繁的更新的两个对象而引发假共享高速缓存效果。
[0031] 在此描述的用于管理的运行时间的基于硬件的运行时间检测设施的实施例相对 于现代的基于软件的程序概要分析机制提供了几个优点。这些优点可以包括但是不限于: 避免了用于获得编译单元的检测版本的重新编译的成本;数据收集的开销被嵌入在硬件 中,并且因此消除了对于昂贵的基于软件的编译代码的检测的需要;提供了对于诸如分支 误预测、数据和指令高速缓存未中的重硬件事件的直接洞察;用于捕获顺序事件的自然跟 踪机制导致数据的自然上下文抽象和相关(例如,执行路径和在其上在被操作的相应数据 类型导致给定的数据高速缓存事件);并且,可以贯穿应用的执行的使用期限而重复地被 透明地使能和禁止的设施,允许改善数据收集和重新编译的成本的限制和摊销的灵活性。
[0032] 由在此所述的实施例提供的编译和检测的降低的成本固有地扩展可以被作为目 标用于在线程序概要相关的编译的编译单元的范围。另外,源自去除由在此所述的实施 例提供的基于软件的检测的、降低的用于收集数据的开销允许收集更多的程序概要分析数 据,因此向直接重新编译和其他形式的优化(例如,数据重新组织)提供了更精确的程序概 要分析数据。
[0033] 除了用于所建议的用于动态编译的使用之外,由在此所述的实施例提供的硬件事 件的可用性也可以用于引导其他被管理的运行时间设施。例如,可以使用数据高速缓存事 件来帮助垃圾收集器进行关于将对象共置或置于远距离的确定,以获得更好的数据本地化 或避免假共享问题。
[0034] 图IA描绘实施例中的主机计算机系统50的代表性组件。组件的其他配置也可在 计算机系统中使用。代表性主机计算机系统50包含与主存储器(计算机存储器)2通信的 一个或多个处理器1以及至存储器件11及网络10的用于与其他计算机或SAN等通信的1/ O接口。处理器1符合具有架构化指令集及架构化功能性的架构。处理器1可具有用于将 程序地址(虚拟地址)变换为存储器中的真实地址的动态地址转译(DAT) 3。DAT3通常包 括用于高速缓存转译的转译后备缓冲器(TLB) 7,使得对计算机存储器2的块的稍后存取不 需要延迟地址转译。通常,高速缓冲存储器9是用于计算机存储器2与处理器1之间。高速 缓冲存储器9可为阶层式的,其具有可供一个以上CPU使用的大的高速缓冲存储器及介于 大的高速缓冲存储器与每一CPU之间的较小、较快速(较低层级)的高速缓冲存储器。在 一些实施例中,较低层级高速缓冲存储器经划分以为指令提取及数据存取提供单独的低层 级高速缓冲存储器。在实施例中,由指令提取单元4经由高速缓冲存储器9从计算机存储 器2提取指令。该指令在指令解码单元6中被解码且(在一些实施例中与其他指令一起) 被分派至指令执行单元8。通常,使用若干指令执行单元8,例如算术执行单元、浮点执行单 元及分支指令执行单元。该指令是由指令执行单元8执行,从而按需要从指令指定的寄存 器或计算机存储器2存取操作数。如果将从计算机存储器2存取(载入或存储)操作数, 则载入存储单元5通常在被执行的指令的控制下处置该存取。指令可在硬件电路中或以内 部微代码(固件)形式执行或通过两者的组合执行。
[0035] 在图IB中,提供模拟主机计算机系统21,其模拟具有主机架构的主机计算机系 统,诸如图1的主机计算机系统50。在模拟主机计算机系统21中,主机处理器(CPU) 1为模 拟主机处理器(或虚拟主机处理器)29,且包含原生处理器27,该原生处理器具有不同于主 机计算机系统50的处理器1的原生指令集架构的原生指令集架构。模拟主机计算机系统 21具有原生处理器27可存取的存储器22。在实施例中,存储器22经分割成计算机存储器 2部分及模拟例程存储器23部分。计算机存储器2根据主机计算机架构而可供模拟主机计 算机系统21的程序使用。原生处理器27执行不同于模拟处理器29的架构的架构的架构 指令集的原生指令(原生指令获得自模拟例程存储器23),且可通过使用在可解码所存取 的该主机指令的序列及存取/解码例程中获得的一个或多个指令而从计算机存储器2中的 程序存取用于执行的主机指令,以确定用于模拟所存取的该主机指令的功能的原生指令执 行例程。针对主机计算机系统50架构定义的其他设施可由架构化设施例程模拟,其他设施 包括诸如(例如)通用寄存器、控制寄存器、动态地址转译及输入/输出(I/O)子系统支持 及处理器高速缓冲存储器的设施。模拟例程也可利用原生处理器27中可用的功能(诸如 通用寄存器及虚拟地址的动态转译)来改进模拟例程的性能。也可提供特殊硬件及卸载引 擎以帮助原生处理器27模拟主机计算机系统50的功能。
[0036] 在大型计算机中,程序设计师(通常,现今的"C"程序设计师)常常通过编译器应 用程序来使用架构化机器指令。存储在存储介质中的这些指令可原生地在z/Architecture IBM服务器中执行,或替代地在执行其他架构的机器中执行。可在现有及未来的IBM大型 计算机服务器中及在IBM的其他机器(例如,pSeries?服务器及xSeries?服务器)上模 拟指令。可于在广泛多种机器(使用由IBM?、Intel?、AMD?、SunMicrosystems及其他 公司制造的硬件)上执行Linux的机器中执行指令。除了在Z/Architecture?下在该硬件 上执行之外,也可使用Linux以及由Hercules、UMX、FundamentalSoftware,Inc. (FSI)或 PlatformSolutions,Inc. (PSI)提供的使用模拟的机器,其中执行通常在模拟模式下。在 模拟模式下,模拟软件是由原生处理器执行以模拟模拟处理器的架构。
[0037] 模拟主机计算机系统21的组件中的一个或多个将在"IBM?z/Architecture PrinciplesofOperation"(公告第SA22-7832-08 号,第 9 版,2010 年 8 月)中予以进一 步描述,该公告特此以全文引用方式并入本文中。IBM为国际商业机器公司(Armonk,New York,USA)额注册商标。本文中所使用的其他名称可为国际商业机器公司或其他公司的注 册商标、商标或产品名称。
[0038] 原生处理器27通常执行存储在包含固件或原生操作系统的模拟例程存储器23中 的模拟软件以执行对模拟处理器的模拟。该模拟软件负责提取并执行模拟处理器架构的指 令。该模拟软件维持模拟程序计数器以追踪指令边界。该模拟软件一次可提取一个或多个 模拟机器指令且将该一个或多个模拟机器指令转换成供原生处理器27执行的原生机器指 令的相应群组。这些经转换指令可被高速缓存,以使得可实现较快速转换。该模拟软件维 持模拟处理器架构的架构规则以便保证针对模拟处理器撰写的操作系统及应用程序正确 地操作。此外,该模拟软件提供由模拟处理器架构识别的资源,包括(但不限于)控制寄存 器、通用寄存器、浮点寄存器、包括(例如)段表及页表的动态地址转译功能、中断机制、上 下文切换机制、当日时间(TOD)时钟及至I/O子系统的架构化接口,以使得经设计以在模拟 处理器29上执行的操作系统或应用程序可在具有该模拟软件的原生处理器27上执行。
[0039] 被模拟的特定指令经解码,且子例程被调用以执行个别指令的功能。模拟模拟处 理器29的功能的模拟软件功能被以(例如)"C"子例程或驱动程序来实施,或以在理解优 选实施例的描述的后将在本领域普通技术人员的能力范围内的提供特定硬件的驱动程序 的某一其他方法来实施。
[0040] 在实施例中,本发明可由软件(有时被称为经授权内部码、固件、微代码、毫码 (milli-code)、微微代码(pico-code)等,其中的任一个都符合本发明)实践。参看图1A,体 现本发明的软件程序代码是由也被称为主机计算机系统50的CPU(中央处理单元)1的处 理器从存储器件11 (诸如长期存储介质、CD-ROM驱动器、带驱动器或硬驱动器)存取。软件 程序代码可体现于供数据处理系统使用的多种已知介质(诸如磁盘、硬驱动器或CD-ROM) 中的任一个上。程序代码可分布在这些介质上,或可从一个计算机系统的计算机存储器2 或存储器经由网络10至其他计算机系统地分发给用户以供这些其他系统的用户使用。
[0041