2016年10月27日至28日,SPEC(Standard Performance Evaluation Corporation,标准性能评估组织)于北京举办了SPEC 2016亚洲峰会,这也是SPEC组织自1988年成立以来首次在中国举办的峰会。
我们现在已经知道,SPEC是一个非营利性的第三方组织,旨在制定、修改以及认证一系列计算系统应用性能评估的标准。SPEC制作的这些基准测试以及性能指标可以广泛适用并真实反映出客户的实际计算环境。
在大会上,SPEC组织专门用了双倍的议题时间来介绍如何设计一个好的基准测试(Designing a Good Benchmark),要看懂这个话题,我们首先要知道:什么是基准测试。议题的讲师是SPECpower的架构师Jeremy Arnold,不过,谈及的内容是很具有通用性的,并不仅仅对应于SPECpower测试。
什么是基准测试
基准测试,特指英文中的Benchmark,意思是指一个或者一套用来获知一台或者一套计算机系统的性能指标的软件程序,它产生的原因就源于我们想知道这些计算机系统的性能指标,知道了这些性能指标可以用来干什么呢?可以用于营销,产品研发,或者研究,等等。
基准测试的划分
毫无疑问,基准测试有很多种,测试的性能指标也各有不同,如图所示,横轴上越往右,基准测试越来越和实际应用接近,同时,在纵轴上可以看出,它也越来越复杂,这个划分大致应该是按照基准测试程序所处的层次划分,最低的Synthetic代表“原语”级别的层次(大致上是用来测试如CPU、内存等硬件的比较纯粹的性能指标以及底层操作系统的性能),Kernel是内核调用(可以测试驱动程序、操作系统的效率),Component应该是操作系统组件或中间件,或者系统中的某一个子系统(如CPU子系统、存储子系统),Application这是应用程序本身,System的意思这是整套计算机系统。
不同层次的基准测试可以让我们获得同一个系统不同的参数,SPEC组织著名的SPEC CPU基准评测软件可以在从Component级别到Application的级别告诉我们足够多的数字,但在虚拟化和云计算当中,我们就需要SPEC Cloud IaaS这样的System级别的测试才能给我们带来准确、全面的了解。
对基准测试的“评估”——什么才是“好”的基准测试
对于一个指定的基准测试,如何评估它的好坏?这有些类似与“基准测试的性能指标”,Jeremy Arnold对此有非常好的阐述,下面有一定的文字编辑:
第一个是相关性(Relevance),也就是说我们在做基准的时候,选择到底什么样的基准时,我们要确保它和我们要做的工作是有相关性的,也就是说我们所选择的基准是能够给我们提供工作所需要的信息。
第二个是可重复性(Reproducibility),就是我们在运行基准的时候,同一个环境下运行多次同一个基准测试,我们会希望得到共同的结果,如果每一次不同的运行结果是不一样的。这就意味着不是一个好的测试,不具有可重复性。
第三是公平性(Fairness),这在基准测试的指标中是至关重要的,也就是说我们不必希望这基准测试在某一些服务器的系统上性能好,在某另一些的服务器上性能不好。我们希望各个不同的服务器上和供应商上都能够有同样的表现。
第四个是可验证性(Verifiability),指的就是说基准测试本身是可以验证其是否准确的,我们从而可以知道这个基准测试时候具有准确性,很多测试在这一点上其实比较缺乏。
最后一个指标是可使用性(Usability),通俗地说,就是要简单方便,也就是说要用户友好,我们要能够不那么困难就可以正确地使用这些基准测试,从而能够获得我们想获得的测试数据。
基准测试的组成——如何设计一个好的基准测试
基准测试当中最重要的组件之一,就是工作负载(Workload)。工作负载是基准测试最重要的特征,基于什么样的工作负载,决定了我们的基准测试可以得到什么类型、什么样的测试结果。
其次是一个测试的可用性(Harness),这个词比较模糊,大致是指这个基准测试的“可依赖性”、“可使用性”,可用的基准测试才有意义,才可以得到有意义的测试数据以供进一步的分析研究。
第三个是结果报告(Reporting),也就是说我们运行基准测试之后得到的一个结果,一个基准测试的报告。报告当中一个很重要的部分就是具体的数字和指标,这具体的数字和指标我们是从系统当中测试得出的。一般来说,报告还应当包含一些额外的详细信息,关于比如说一些额外的性能参数以及其它的一些系统的行为等等,它们可以让我们更好地了解测试的系统,以帮助进一步的分析。
第四个是文档(Documentation),包括用户指南之类的说明,一个良好的文档对于测试顺利进行的作用是毋庸置疑的。
第五个是运行规则(Run Rules),这是非常重要的,一个基准测试遵循了什么样的标准,什么样的规范,制定了什么样的规则,这些对公平性非常重要,而且这也应该是公开的。运行规则还有另外一个含义就是指定的测试可能使用了不同的规则,那么也需要列出。
第六个是Peer Review,同行审查,原本是学术界常用的一个术语,在工业界就不那么常见了,因此,并不是所有的基准测试都会具有这个审查。对于SPEC组织的基准测试而言,所有上传的测试结果都会经过委员会的检查,确保是否遵循了运行的规则,审查之后才会公开发表。这种方式对提高测试结果的可用性以及去掉一些恶意测试结果是很有用的,很大程度上也是必须的。
最后一个是Fair Use Guidelines,公平使用指南,外国人比较讲究这个,但这也是基准测试必须讲究的。某种程度上这是一种约束或者约定,确保测试结果可以以一种公平、合理的方式来得到使用。
综上所述,按照这些原则就可以设计出“好”的基准测试。显而易见的是,SPEC组织的基准测试就是按照这些规则来设计的,本次大会还花费了比较多的时间来讲解SPEC CPU测试,有机会我们将会对其进行更详细的介绍。