acm-header
登录

ACM通信

研究突出了

醒醒,闻闻咖啡:21世纪的评价方法


评估方法是实验计算机科学中所有创新的基础。它需要相关的工作负载,适当的实验设计,而且严格的分析。不幸的是,方法论并没有跟上我们这个领域的变化。过去十年中Java、c#和Ruby等管理语言的崛起,以及未来十年中商品多核体系结构的即将崛起,带来了尚未被广泛理解的新的方法论挑战。本文探讨了我们集体忽视创新方法论的后果,提出了在一个领域解决这个问题的建议,并为其他领域提供了指导方针。我们将描述用于评估Java应用程序的基准测试套件设计、实验设计和分析。例如,我们引入了新的标准,用于为基准测试套件度量和选择不同的应用程序。我们展示了Java运行时系统的复杂性和不确定性使实验设计成为一阶考虑因素,并且我们推荐了解决复杂性和不确定性的机制。根据这些结果,我们建议如何更广泛地适应方法。为了继续提供创新,我们的领域需要显著增加参与和资金,以发展健全的方法基础。

回到顶部

1.简介

方法是判断实验计算机科学创新的基础。因此,它指导和误导了我们的研究。有缺陷的方法会让好主意看起来很糟糕,也会让坏主意看起来很好。就像任何基础设施,如桥梁和电线,方法往往是世俗的,因此容易被忽视。然而系统性的研究误导并不像桥梁倒塌那么戏剧化11或者完全断电,10科学和经济成本可能相当可观。合理的方法包括使用适当的工作量、有原则的实验设计和严格的分析。不幸的是,我们中的许多人难以适应快速变化的计算机科学领域。我们使用陈旧的基准、过时的实验设计和/或不充分的数据分析。本文探讨了研究方法上的差距、产生的后果和解决方法。我们用过去十年中对托管语言的商业吸收作为驱动例子。

今天许多开发人员选择托管语言,这些语言提供:(1)内存和类型安全,(2)自动内存管理,(3)动态代码执行,以及(4)类型安全代码和不安全代码(例如JNI和Pinvoke)之间良好定义的边界。许多这样的语言也是面向对象的。托管语言包括Java、c#、Python和Ruby。C和c++不是托管语言;它们是预先编译的,没有垃圾收集,而且不安全。不幸的是,托管语言至少为实验评估增加了三个新的自由度:(1)a时空的权衡由于垃圾回收,其中堆大小是一个控制变量,(2)非确定性由于自适应优化和采样技术,(3)系统热身由于动态类加载和即时(JIT)编译。

尽管编程语言研究人员已经接受了托管语言,但许多人还没有发展出自己的评估方法来处理这些额外的自由度。正如我们将展示的,薄弱的方法导致不正确的结果。同样有问题的是,大多数体系结构和操作系统研究人员没有使用适当的工作负载。大多数人完全忽视了管理语言,尽管它们在商业上很突出。他们继续使用C和c++基准,可能是因为在新的基础设施中开发专业知识的巨大成本和挑战。不管原因是什么,托管语言的方法的当前状态经常提供糟糕的结果或没有结果。

为了对抗这种忽视,计算机科学家必须在他们的方法上保持警惕。本文描述了我们如何为Java解决这些问题,并对其他领域提出了建议。我们将讨论基准设计人员如何创建基准前瞻性和多样化的工作负载以及研究人员应该如何使用它们。然后我们提出了一套实验设计指南以适应复杂和不确定的工作负载。我们表明,托管语言使产生有意义的结果变得更加困难,并建议如何识别和探索控制变量。最后,我们讨论了的重要性严格的分析8对于复杂的非确定性系统,这些系统不适用于简单的经验方法。

我们在某个时间点处理某个领域的忽视,但更广泛的问题是普遍存在的,而且在不断增长。例如,研究人员和工业界正在为嵌入式系统、多核体系结构和并发编程模型投入资源并探索新的方法。然而,如果没有相应的方法论投资,我们如何能够自信地评估这些方法呢?社区必须对方法论负责。例如,许多Java计算仍然使用SPECjvm98,这已经严重过时了。过时的基准是有问题的,因为它们提出了去年的问题,并可能导致不同的结论。17为了确保未来创新的坚实基础,社会必须进行持续和大量的投资。建立社区标准和维持这些投资需要开放的软件基础设施,其中包含相应的工件。

就我们而言,我们开发了一个新的基准测试套件和新的方法。我们估计,到目前为止,我们已经花费了10,000个人小时来开发DaCapo套件和相关的基础设施,其中没有一个是直接资助的。这一重大工作离不开大量的捐助机构和个人。正如NSF和DARPA已经投资于网络基础设施,以培养过去和未来几代互联网,我们的社区需要在方法论基础设施方面的基础投资,以构建下一代应用程序、软件系统和架构。如果没有这些投资,研究人员、行业和社会在失去机会方面将付出什么代价?

回到顶部

2.工作负载的设计和使用

在我们向NSF评审小组强调了缺乏现实的Java基准测试之后,DaCapo研究小组于2003年开始着手构建Java基准测试套件。小组建议我们解决自己的问题,但我们的拨款是用于动态优化。NSF没有为基准开发提供额外的资金,但我们不管不顾地继续前进。当时的标准工作负载是SPECjvm98和SPECjbb2000,1415都过时了。例如,SPECjvm98和SPECjbb2000很少使用Java语言特性,SPECjvm98的代码和内存占用很小。(SPEC测量结果在技术报告中3.)。因此,我们开始创建一个适合研究的套件,这个目标增加了SPEC产品比较目标之外的新需求。我们的目标是:

相关的和多样化的工作负载:一组广泛使用的多样化的重要应用程序,为创新提供了一个引人注目的平台。

适合研究:可控制的、可处理的工作量,适于分析和实验。

基于下面描述的标准,我们为DaCapo套件的初始版本选择了以下基准。

  • antlr:解析器生成器和翻译器生成器
  • 膨胀: Java字节码级优化分析工具
  • 图表:绘图工具和PDF渲染器
  • eclipse:集成开发环境(IDE)
  • fop:独立于输出设备的打印格式化器
  • hsqldb:用Java编写的SQL关系数据库引擎
  • jython:用Java编写的Python解释器
  • luindex:文本索引工具
  • lusearch:文本搜索工具
  • pmd: Java源代码分析器
  • xalan: XML文档的XSLT转换器

*2.1.相关性和多样性

没有工作负载是确定的,但是狭窄的范围可以达到一定的覆盖率。我们将DaCapo套件限制为重要的、积极维护的真实Java应用程序。我们征求和收集候选人的申请。因为源代码支持研究,所以我们只考虑开源应用程序。我们首先将候选对象打包到一个原型DaCapo线束中,并使用产生的输入对其进行调整易处理的适合实验的执行时间,即在2006年的商品硬件上大约一分钟。第2.2节介绍DaCapo封装如何提供可处理性和标准化。

然后我们定量和定性地评估每个候选人。表1列出我们用来确保基准是相关的和多样化的静态和动态指标。我们的原创论文4介绍DaCapo测量数据和我们的技术报告3.添加SPECjvm98和SPECjbb200。我们以SPEC作为参照点进行比较,并对候选对象进行比较,以确保多样性。

我们使用了新的标准指标。我们的标准度量包括静态CK度量,它度量面向对象程序的代码复杂度6;动态堆组成图,它度量堆的时变生命周期属性16;以及诸如分支错误预测率和指令混合等体系结构特征。我们引入了新的度量来捕获Java特定于领域的特征,例如分配率、已分配内存与活动内存的比率和堆突变率。这些新的指标包括已分配和活动对象大小人口统计的摘要和时间序列,指针距离的摘要和时间序列,以及突变距离的摘要和时间序列。指针距离和变异距离时间序列指标总结了构成应用程序对象图的边的长度。我们将这些度量及其收集方法设计为抽象的,以便度量与vm无关。4

图1定性地说明了两个基准的堆组成和指针距离度量的时间复杂度,_209_db而且eclipse。根据我们的指标,eclipse在质量上比_209_db从SPECjvm98。我们的原始论文解释了如何读取这些图表,并包含了几十个图表,代表了大量的数据。4此外,它表明DaCapo基准在所有度量指标上都比SPECjvm98有了很大的改进。为了确定集合的多样性,我们应用了主成分分析(PCA)。7到汇总度量。主成分分析(PCA)是一种多变量统计技术N-维空间变为低维不相关空间。如果基准在低维空间中不相关,那么它们在高维空间中也不相关。分析表明,DaCapo基准测试是多种多样的、重要的现实应用程序,具有显著的内存负载、代码复杂性和代码大小。

由于应用程序来自活动项目,它们包括未解决的性能异常、典型和不寻常的编程习惯和错误。尽管不是我们的意图,但他们对Java特性的丰富使用揭露了一些商业jvm中的错误。该套件明显省略了Java应用程序服务器、嵌入式Java应用程序和数字密集型应用程序。只有少数基准测试是显式并发的。为了保持相关性,我们计划每两年更新DaCapo基准到它们的最新版本,添加新的应用程序,并删除不那么相关性的应用程序。这种相对紧凑的时间表应该会减少供应商将产品调优到基准测试的程度(这是标准实践,尤其是SPECjbb2000)1).

据我们所知,我们是第一个使用量化指标和PCA分析来确保我们的套件是多样化和非平凡的。未来套件的设计人员应该选择直接处理感兴趣领域的附加聚合和时变度量。例如,并发或嵌入式应用程序的度量可能包括用于执行纯顺序代码的时间百分比的度量、最大并行度和随时间变化的程度,以及线程之间共享的度量。

*2.2.适合研究

我们决定,使基准易于处理、标准化并适合于研究是一个高度优先级。虽然技术上不深入,但好的包装非常耗时,而且会影响可用性。研究人员需要易于处理的工作负载,因为他们经常为一个实验执行数千次。考虑在16个堆大小上比较4个垃圾收集器,也就是说,我们需要度量64个组合。用多个硬件性能监视器分离性能差异可能会在每个组合中增加8个或更多不同的测试运行。使用五次试验来确保统计显著性总共需要2560次测试运行。如果一个基准测试运行需要20分钟(SPECjbb上的时间限制是30分钟15),我们需要一个多月的时间在一台机器上进行一个基准比较,当然我们应该在多个基准上测试这四个垃圾收集器,而不是只在一个基准上。

此外,有时间限制的工作负载不能保持工作不变,因此在分析上不方便再现性和控制JIT编译器和垃圾收集器上的负载。周期精确的模拟将执行速度降低了几个数量级,这进一步增加了对可驯服性的需求。因此,我们提供了具有三种输入大小的工作限制基准测试:小的、默认的和大的。对于某些基准测试,大型和默认是相同的。在大约2006年的商品高性能架构上,最大的测试通常在一分钟左右执行。

我们把简单作为包装的重点;我们将套件作为一个独立的Java jar文件发布。该文件包含所有基准测试、一个工具、输入数据和正确性校验和。该工具对每个迭代的输出进行校验和,并将其与存储的值进行比较。如果值不匹配,则基准测试失败。我们提供了大量的配置选项,用于指定迭代的次数,使用自定义的收敛标准运行收敛的能力,以及每次迭代前后的回调钩子。例如,用户定义的回调可以打开和关闭硬件性能计数器,或者切换模拟器进入和退出详细的模拟模式。我们广泛地使用这些功能,并很高兴看到其他人也在使用它们。12为了标准化和分析的清晰性,我们的基准测试只需要一个主机,并且我们避免了需要用户配置的组件。相比之下,模拟真实应用程序服务器的SPEC jAppServer需要多个主机,并依赖于第三方可配置的组件,如数据库。在这里,我们用控制和分析的清晰性交换了一些相关性。

我们提供了一个单独的“源”jar来从头构建整个套件。出于许可的原因,源jar自动从许可方下载Java代码。在我们用户的帮助下,5我们的打包现在促进了静态的整个程序分析,这是标准Java实现所不需要的。由于整个套件和工具都是开源的,我们很乐意接受用户的贡献。

*2.3.研究人员

适当的工作负载选择是社区、联盟、工作负载设计人员和研究人员的任务。研究人员在进行实验时,或隐或显地进行工作量选择。这种选择通常是自动的:“让我们使用上次使用的相同内容!”由于研究人员在他们的评估方法和基础设施上投入了大量资金,这条道路提供的阻力最小。相反,我们需要确定最适合研究评估的工作量和方法。如果没有令人满意的答案,那么是时候组建或加入一个联盟,创建新的合适的工作负载和支持基础设施了。

不要挑三拣四!一个设计良好的基准测试套件反映了一系列行为,应该作为一个整体来使用。Perez等人以惊人的清晰证明,择优选择会改变绩效评估的结果。13他们在一套26个SPECcpu基准测试上模拟了12个以前发表的缓存架构优化。在所有26个基准中,有一个明显的赢家。有2个不同的优胜者和23个适当的基准子集,6个优胜者和18个子集,11个优胜者和7个基准子集。当方法论允许研究人员从12个候选人中从11个获胜者中进行选择时,由于恶作剧或错误而得出错误结论的风险就太高了。3.1节展示了Java同样容易受到子集的影响。

运行每个基准测试。如果由于空间或时间限制、bug或相关性,不可能报告每个基准测试的结果,请解释原因。例如,如果建议对多线程Java工作负载进行优化,则可能希望排除不具有并发性的基准测试。在这种情况下,我们建议报告所有的结果,但突出显示最相关的结果。否则,读者只能猜测“优化”对省略的工作负载的影响,因为关键数据被省略了,读者和审稿人不应该给研究人员以怀疑的好处。

回到顶部

3.实验设计

声音实验设计需要有意义的基线和控制关键参数的比较。大多数研究人员都能很好地选择和证明基线,但确定控制哪些参数以及如何控制它们是一项挑战。

*3.1.游戏你的结果

这些系统固有的复杂性和自由度很容易通过错误、遗漏或恶作剧产生误导的结果。图2通过对两个垃圾收集器的详细比较,给出四个结果。JVM、体系结构和其他评估细节出现在原始论文中。4更多垃圾收集器实现细节见Blackburn等人。2每个图都显示了一系列堆大小的标准化时间(越低越好),暴露了实现两种规范垃圾收集器设计(半空间和MarkSweep)的时空权衡。

构造子集图2至少在三个方面严重误导我们:(1)图2 (c)说明通过选择单个堆大小而不是绘制一个连续体,结果可以产生截然相反的结论。在2.1 ×最大堆大小时,MarkSweep的性能比semspace好得多,而在6.0 ×最大堆大小时,semspace的性能更好。图2 (a)而且2 (d)展示同样的二分法,但有不同的交叉点。不幸的是,一些研究人员仍在评估垃圾收集语言的性能没有改变堆大小。(2)图2 (a)而且2 (b)确认需要使用整个基准测试套件。虽然_209_db而且hsqldb都建立了内存数据库基准,SemiSpace在_209_db在大堆,而MarkSweep总是更好的hsqldb。(3)图2 (c)而且2 (d)说明在这些堆大小范围内,体系结构对结论有显著影响。MarkSweep在更多堆大小的AMD硬件上表现更好,如图所示图2 (c).然而,图2 (d)说明对于PowerPC (PPC)硬件,semspace在堆大小更大时表现更好。这个垃圾收集评估示例演示了评估托管语言性能时的一小部分缺陷。

*3.2.在变化的世界中控制

理解在实验系统中控制什么以及如何控制显然很重要。对于Fortran、C或c++系统的经典比较,至少有两个自由度可以控制:(a)主机平台(硬件和操作系统)和(b)语言运行时(编译器和相关库)。多年来,研究人员已经发展出可靠的方法来评估针对这些语言的编译器、库和体系结构增强。考虑一个编译器优化来改善缓存位置。公认的做法是编译时有或没有优化,并报告编译器应用优化的频率。为了消除来自其他过程的干扰,可以在一个或多个体系结构上独立运行版本,并使用性能计数器或模拟器测量失误率。这种方法不断发展,但现在已经非常熟悉了。一旦研究人员投资于一种方法,挑战就在于注意到世界何时发生了变化,并加以解决如何去适应。

像Java这样的现代托管运行时至少增加了三个自由度:(c)堆大小,(d)非确定性,和(e)热身运行时系统的。

堆大小:托管语言使用垃圾收集来检测不可访问的对象,而不是依靠程序员显式地删除对象。垃圾回收基本上是空间回收的效率和回收对象所花费的时间之间的时空权衡;堆大小是关键的控制变量。堆大小越小,垃圾收集器调用的频率就越高,执行的工作也就越多。

非确定性:确定性分析度量是昂贵的。因此,高性能jvm使用通过低开销动态采样计算出的近似执行频率来选择JIT编译器将优化哪些方法以及如何优化。例如,一个方法可能恰好被采样N一次调用的次数N另一个+ 3;如果优化器使用的热方法阈值为N+ 1,它会做出不同的选择。由于这种不确定性,代码质量通常达不到相同跨独立JVM调用的确定性工作负载上的稳定状态。

热身:JVM的一次调用通常会重复执行相同的应用程序。应用程序的第一次迭代通常包含最多的动态编译。之后的迭代通常编译更少,应用程序代码质量更好。最终,代码质量可能会达到一个稳定的状态。代码质量因此“升温”。稳态是最常见的用例。例如,应用服务器在同一个JVM调用中多次运行它们的代码,因此最关心的是稳态性能。控制代码预热是高性能运行时实验设计的一个重要方面。

*3.3.案例研究

我们考虑一种新型垃圾收集器的性能评估作为实验设计的一个例子。我们描述了背景,然后展示了如何控制上述因素,以产生一个合理的实验设计。

垃圾收集评估的两个关键的上下文特定因素是(a)时空的权衡如上面所讨论的和(b)收集器与突变(垃圾收集文献中应用程序本身的术语)。为简单起见,我们考虑停止一切垃圾收集器,其中收集器和mutator在执行中从不重叠。这种分离简化了诱变剂和集电极的测量。一些特定于收集器的代码混合了mutator:对象分配和写屏障,它们标识交叉在独立收集区域之间的指针。这段代码对mutator和JIT编译器都有影响。此外,由于分配策略和收集时对象的任何移动,收集器极大地影响突变器的位置。

有意义的基准:与最先进的技术进行比较是理想的,但只有当研究人员将其实现公开可用时,才具有实际意义。然后,研究人员可以使用相同的工具或控制基础设施的差异来实现他们的方法,从而进行苹果与苹果的比较。垃圾收集评估通常使用分代MarkSweep收集器作为基线,因为这些收集器在高性能vm中广泛使用,性能良好。

主机平台:垃圾收集器显示与体系结构相关的性能属性,这些属性最好通过跨多个体系结构的评估来显示,如图2 (c)而且2 (d).这些属性包括局部性、写障碍的代价和同步指令的代价。

语言运行时:语言运行时、库和JIT编译器直接影响内存负载,因此应该加以控制。在公共工具包中实现各种收集器可以排除常见的共享机制,并将重点放在收集器之间的算法差异上进行比较。

堆大小:垃圾收集评估应该在特定于基准的相对堆大小的范围内比较性能,从任何被测量的收集器都可以运行的最小堆开始,如图2.每个被评估的系统必须经历相同的内存负载,这需要在迭代之间强制集合以规范化堆并控制JIT编译器。

非确定性:不确定的JIT优化计划会导致不确定的突变性能。特定于收集器的代码的JIT优化、省略分配的优化以及在收集中花费的时间的比例可能会以无法预测或重复的方式影响突变器行为。例如,在Jikes RVM(研究人员广泛使用的Java-in-Java VM)中,JIT编译器活动直接生成垃圾收集负载,因为编译器在与应用程序相同的堆中分配和执行。这些影响使得不确定性更加尖锐。

热身:对于多次迭代实验,随着系统升温,突变器速度增加,而JIT编译器活动减少分数花在收集上的时间通常会增加。因此,与启动相比,稳态执行更强调垃圾收集器的影响。此外,特定于收集器的代码的相对影响将随着代码更积极地优化而改变。因此,评估必须控制代码质量和预热。

*3.4.控制非确定性

在第3.2节概述的三个新的自由度中,我们发现处理非决定论在方法上是最具挑战性的。随着时间的推移,我们采用并推荐了三种不同的策略:(a)使用确定性重播的优化计划,这需要JVM支持;(b)在达到稳定状态并关闭JIT编译器后,在单个JVM调用中进行多次度量;(c)生成足够的数据点并应用适当的统计分析。8根据实验的不同,研究人员可能想要执行一个、两个或所有这些实验。前两种方法通过控制其来源来减少分析目的的不确定性。对(a)和(b)结果的统计分析将揭示与其余不确定性的差异是否显著。(c)的选择容纳了更大的不确定性因素(见第4节),可能更现实,但需要明显更多的数据点,以牺牲其他实验为代价。

重播编译:重放编译从一个或多个训练运行中收集概要数据和编译计划,形成优化计划,然后在后续的独立计时调用中重放它。9这种方法确定地应用JIT编译器,但需要对JVM进行修改。它隔离了JIT编译器活动,因为replay会主动编译到计划的最终优化级别,而不是懒惰地依赖于动态重新编译触发器。研究人员可以测量第一次迭代的确定性特征的启动行为。Replay还消除了与自适应优化系统相关的大部分分析开销,该系统已关闭。据我们所知,生产jvm不支持重播编译。

Multi-Iteration决定论:另一种不依赖于运行时支持的替代方法是在一次调用中运行基准的多个度量迭代,运行时已达到稳定状态。与回放不同的是,这种方法不支持热身的确定性测量。我们在从多个硬件性能计数器收集数据时使用这种方法,这需要对同一系统进行多个不同的度量。我们首先表演N在JIT编译器对代码进行预热时,对基准进行1次未测量的迭代。然后关闭JIT编译器并执行N第th迭代未测量以耗尽任何JIT工作队列。我们测量下一个K迭代。在每次迭代中,我们收集不同的感兴趣的性能计数器。既然代码质量已经达到稳定状态,那么它应该是优化代码和未优化代码的典型组合。由于JIT编译器被关闭,后续迭代之间的变化应该很低。这种变化是可以测量和验证的。

*3.5.在其他环境下的实验设计

在每个实验环境中,自由度的相对影响以及如何控制它们都是不同的。例如,当计算a新的编译器优化,研究人员应该保持垃圾收集活动恒定,以防止它掩盖优化的效果。在多个体系结构上进行比较是最好的,但受编译器后端限制。当评估新的架构,改变垃圾收集负载和JIT编译器活动,因为两者都有不同的执行配置文件。由于体系结构评估通常涉及非常昂贵的模拟,因此消除不确定性尤为重要。

回到顶部

4.分析

研究人员使用数据分析来确定和阐明实验结果的意义。当系统及其评估变得更加复杂,结果的绝对数量增加时,这项任务就更加具有挑战性。主要的数据分析任务是聚合:(a)通过重复的实验消除实验噪声(b)通过不同的实验得出结论。

在重复实验中聚合数据是在嘈杂环境中提高可信度的标准技术。8在极限情况下,这种方法与温顺,因为研究人员只有有限的资源。通过合理的实验设计减少不确定性的来源,提高了可驾驭性。由于噪声不能完全消除,多次试验是不可避免的。研究人员必须汇总来自多个试验的数据,并提供诸如置信区间等证据,以揭示研究结果是否显著。乔治等人。8用一项调查来说明目前的做法缺乏统计上的严密性,并解释比较备选方案的适当检验方法。

2.3节告诫研究人员不要挑选基准。然而,研究人员需要简洁地传达来自不同实验的结果,这就需要聚合。我们鼓励研究人员(a)包括完整的结果和(b)使用适当的摘要。例如,使用几何平均值会抑制一个优秀结果的歪斜效应。尽管工业基准通常会对套件产生单一的总分,但这种方法是脆弱的,因为结果完全取决于套件组成的变化。18例如,虽然很容易引用你最好的结果“我们优于。X最高1000%”,把最好的和最坏的结果放在一起,这样更诚实,更有洞察力。

回到顶部

5.结论

方法论在实验性计算机科学研究和开发中发挥着战略作用,它为评估想法和产品创造了一个共同的基础。健全的方法论依赖于相关工作量,原则性实验设计,而且严格的分析。因此,评估方法可以对一个研究领域产生重大影响,可能会加速、延缓或误导能量和创新。然而,我们工作在一个快速变化的环境中,我们的方法必须适应,以保持健全和相关。由于我们自己和其他人对技术现状的担忧,我们在8个机构花了数千个小时来研究和解决Java应用程序评估的问题。缺乏直接的资金,人们认为研究方法是平庸的,而且研究的规模很大,这些都可以解释为什么这些研究不常见。

我们具体解决了评估方法的忽视,在一个领域在一个时间点,并为实验计算机科学吸取更广泛的教训。DaCapo基准套件和相关方法的开发和维护为我们的评估和特定领域带来了一些急需的改进。然而,实验计算机科学不能指望它的方法论基础的维护落在临时志愿者的努力上。我们鼓励行业和拨款机构等利益攸关方具有前瞻性,并作出系统性承诺,制止方法上的忽视。投资于我们创新的基础。

回到顶部

致谢

我们感谢Andrew Appel, Randy Chow, Frans Kaashoek和Bill Pugh,他们在我们为期三年的NSF ITR评审中鼓励了这个项目。我们感谢Mark Wegman,他发起了Jikes RVM的公开可用性,以及Jikes RVM的开发人员。我们感谢Fahad Gilani,他为他的澳大利亚国立大学硕士论文撰写了测量基础结构的原始版本;黄翔龙和帮助开发重放方法的Narendran Sachindran;Jungwoo Ha和Magnus Gustafsson,他们帮助开发了多迭代重放方法。我们感谢Tom Horn的校对,以及Guy Steele的仔细阅读和建议。

这项工作得到了NSF ITR CCR-0085792, CNS-0719966, NSF CCF-0429859, NSF EIA-0303609, DARPA F33615-03-C-4106, ARC DP0452011, ARC DP0666059,英特尔,IBM和微软的支持。本文所表达的任何观点、研究结果和结论均为作者个人观点,并不代表主办方的观点。

回到顶部

参考文献

1.Adamson, D. Dagastine, and Sarne, S. specjbb2005年是一个基准的生命中的一年。2007SPEC基准研讨会。SPEC, 2007年1月。

2.神话与现实:垃圾收集对性能的影响。ACM计算机系统测量与建模会议论文集。第2536页,纽约,纽约,2004年6月。

3.s.m.布莱克本,R.加纳,C.霍夫曼,汗,a.m.,麦金利,R.本祖尔,迪万,A.范伯格,D.弗兰普顿,盖耶,S.Z, Hirzel, M.,霍斯金,Jump, M.,李,H.莫斯,j.e.b.,潘萨尔卡,A. Stefanovicacute_l.gif, D., VanDrunen, T., von Dincklage, D.和Wiedermann, B. DaCapo基准测试:Java基准测试开发和分析(扩展版本)。技术报告TR-CS-06-01,澳大利亚国立大学计算机科学系,2006。http://www.dacapobench.org。

4.布莱克本,s.m.,加纳,R,霍夫曼。C,汗,a.m.,麦金利,K.S.,本祖尔,R.,迪万,A.,费恩伯格,D.,弗兰普顿,盖耶,S.Z, Hirzel, M.,霍斯金,A., Jump, M.,李,H.,莫斯,J.E.B,潘萨尔卡,A., Stefanovicacute_l.gifD.凡德鲁南,Ò。,von Dincklage, D., and Wiedermann, B. The DaCapo benchmarks: Java benchmarking development and analysis.ACM面向对象编程系统、语言和应用会议,第169190页,2006年10月。

5.Bodden, E., Hendren, L.和Lhoták, O.改进运行时监视性能的分阶段静态程序分析。第21届欧洲面向对象编程会议,2007年7月30日- 8月3日,柏林,德国,编号4609,《计算机科学课堂讲稿》,525549页,施普林格Verlag, 2007。

6.面向对象设计的度量套件。软件工程汇刊,20(6): 476493、1994。

7.Dunteman, G.H.主成分分析。Sage出版社,美国CA纽伯里公园,1989年。

8.Georges, A., Buytaert, D.和Eeckhout, L.统计上严格的Java性能评估。ACM面向对象编程系统、语言和应用会议,第5776页,蒙特利尔,魁北克,加拿大,2007年。

9.黄X, Blackburn, S.M, McKinley, K.S, Moss, J.E.B,王铮,程鹏。垃圾回收的优势:提高突变子的局域性。ACM面向对象编程系统、语言和应用会议,第6980页,BC省温哥华,2004年。

10.奥克兰中央商务区供应故障。动力工程学报,12(3): 109114。1998.

11.国家运输安全委员会。NTSB敦促桥梁所有者在改建前进行承载能力计算;I-35W调查仍在继续。SB-08-02。http://www.ntsb.gov/Pressrel/2008/080115.htrnl, 2008年1月。

12.Neelakantam, N., Rajwar, R., Srinivas, S., Srinivasan, U.和Zilles, C.用于可靠软件推测的硬件原子性。ACM/ IEEE计算机体系结构国际研讨会174185页。ACM,纽约,纽约,美国,2007年。

13.Perez, d.g., Mouchard, G.和Temam, O. MicroLib:微架构机制定量比较的一个案例。微建筑国际研讨会,4354页,俄勒冈州波特兰,2004年12月。

14.标准绩效评估公司。SPECjvm98文档,发布1.03版,1999年3月。

15.标准绩效评估公司。SPECjbb2000 (Java业务基准测试)文档,发布1.01版,2001年。

16.Stefanovicacute_l.gifD。基于年龄的自动内存回收算法的性质。博士论文,计算机科学系,麻省大学,阿默斯特,马萨诸塞州,1998年12月

17.Yi, j.j., Vandierendonck, H., Eeckhout, L.和Lilja, D.J.基准测试和编译器漂移的紧迫性:用昨天的工具设计明天的处理器。超级计算国际会议,第7586页,凯恩斯,昆士兰,澳大利亚,2006年7月。

18.柳,r.m.,李,H -H - s,李,H.,和周凯。分层方法:单数字基准测试和工作负载集群分析。IISWC2007。第10届IEEE负载特性国际研讨会,pp. 204213, IEEE, 2007。

回到顶部

作者

斯蒂芬·m·布莱克本,罗宾·加纳,丹尼尔·弗兰普顿澳大利亚国立大学

凯瑟琳·s·麦金利,阿什什·潘斯卡尔,本·维德曼,玛丽亚·跳跳德克萨斯大学奥斯汀分校

克里斯·霍夫曼,阿斯贾德·m·汗,j·艾略特·b·莫斯马萨诸塞大学阿默斯特分校

Rotem Bentzur, Daniel Feinberg, Darko Stefanovicacute_l.gif新墨西哥大学

Amer Diwan, Daniel von Dincklage科罗拉多大学。

塞缪尔·盖耶塔夫斯大学。

马丁HirzelIBM。

安东尼·霍斯金表示:普渡大学。

汉李英特尔。

托马斯VanDrunen惠顿学院。

回到顶部

脚注

DOI: http://doi.acm.org/10.1145/1378704.1378723

回到顶部

数据

F1图1。两个时变选择指标。指针距离(顶部)和堆组成(底部)作为时间的函数。

F2图2。用你的结果赌博。比较两个垃圾收集器的四种方法。

回到顶部

T1表1。定量选择指标。

回到顶部


©2008 acm 0001-0782/08/0800 $5.00

允许为个人或课堂使用本作品的全部或部分制作数字或硬拷贝,但不得为盈利或商业利益而复制或分发,且副本在首页上附有本通知和完整的引用。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,需要事先获得特定的许可和/或付费。

数字图书馆是由计算机协会出版的。版权所有©2008 ACM, Inc.


没有找到条目

Baidu
map