本文是关于benchmark的一个普及文章。主要介绍benchmark的基本概念和特征,对当前业界典型的benchmark进行分类和介绍。
一、benchmark的基本概念
Benchmark本意就是“基准”、“基准测试”,一种定义描述如下:A computer benchmark performs a known set of operations by which computer performance can be measured。直译为计算机Benchmark执行一组已知的操作(测试程序),通过这些操作可以评测计算机的性能。
狭义的Benchmark就是通常意义上的“跑分”, 包括“跑分软件”、“跑分工具,比如名声不太好的安兔兔、鲁大师等,都属于Benchmark软件。
广义的Becnmark范围更大,基本上所有在计算机系统上运行的软件业务都可以抽象理解为一种 对应特定业务的Benchmark。
二、Benchmark的主要特征
Benchmark通常呈现出来的是一组(性能)测试程序,它能刻画应用负载的计算和数据处理的特征、 测试和预测系统的性能、可以对不同平台不同系统给出优缺点评价,有一些必要的特征。有效的benchmark必须具备的特征(spec)
a. 执行一个典型的workload:
b. 生成至少一个度量指标
c. 可复现性(reproducible)
d. 可移植性(portable)
e. 可比较性好(compareble)
f.可查验评测的有效性
g. 有明确的运行规则
三、Benchmark的分类
1) 按照Benchmark的来源和获取方式分类:
1) 按照Benchmark的来源和获取方式分类:
a. 基准组织主导发布的Benchmark,包括SPEC(The Standard Performance Evaluation Corporation)、TPC(The Transaction Processing Performance Council)、BenchCouncil(International Open Benchmark Council)等发布的Industry Standards Benchmarks
b. 开源组织或开放平台提供的组件,包括HPL、HPCG、Graph500、Green500、PARSEC、NPB等Scientific Benchmarks
c. 特定应用领域的基准组件和测试工具,包括Dhrystone、Whetstone、Stream、LMbench、IOmeter、FIO、Netperf、 iPerf等专用领域基准软件和Synthetic Benchmarks
更多的benchmark内容可以参考维基百科:https://en.wikipedia.org/wiki/Benchmark_(computing)
2)按照Benchmark的组成形式和应用目的分类
a. application benchmarks:用户真实的应用程序,属于广义上的Benchmark,真实的用户应用程序一般测试环境比较复杂,涉及应用类型多,源代码不易获取
b. System Benchmarks :由真实应用程序中的核心代码(kernel program)组成的Benchmark suites,包括SPEC CPU 2006&2017,SPEC jbb2015、SPECpower2008、SPECvirt2013、HPL、HPCG等。最大程度反映真实业务的应用特征和对计算机系统的需求
c. Micro Benchmarks:通常由小端代码实现的基准程序或工具,针对特定测试目的。包括各种针对性的基准软件和Synthetic Benchmarks。
- 评测内核整形运算性能的Dhrystone / Coremark
- 评测内核浮点运算性能的Whetstone
- 评测内存带宽的Stream
- 评测内存子系统带宽和时延以及OS基本操作性能的Lmbench
- 评测磁盘基本读写性能的IOmeter和FIO
- 评测网口基本性能的netperf和iperf
四、Benchmark使用误区
a. ~100%的benchmark是错误的
b. benchmark测试的结果通常具有误导性:例如你好像测试了A,但是实际上衡量的维度是B,最后你的总结是测试了C
c. 常见的错误包括:
- 测试了错误的目标:例如访问disk的测试,实际上测试的是FS cache
- 无效的结果,例如benchmark本身存在bug
推翻benchmark结果需要的工作比执行benchmark测试要大得多,所以根据目标选择正确的benchmark就非常重要。
本文主要介绍Benchmark的基本概念,下一篇将对各类常用的Benchmark进行介绍。