概述
计算机硬件的不断的升级带来系统处理性能持续的提高,如何对平台或系统的性能作出正确的判断就是性能测试的主要目标。
如何保证性能测试不偏不倚,而不是公说公有理婆说婆有理,就引入基准测试,即Benchmark测试。测试时,把应用程序中用得最多、最频繁的那部分核心程序作为评价计算机性能的标准程序,称为基准测试程序。
业界也有多种基准测试,有基于实际的应用种类如TPC-C,有测试系统的某一部分的性能,如测试硬盘吞吐能力的IOmeter,测试内存带宽的stream。
常识:
- MIPS:Million Instructions Per Second,每秒处理的百万级的机器语言指令数
- IOPS:I/Os Per Second,每秒IO数
- Ramp Up Time:可以理解为机器启动时间、程序就绪时间、应用准备时间等。为了保证测试程序的准确性,很多基准测试程序需要配置Ramp Up Time
IOmeter
官网,一个用于测试I/O子系统的工具,可广泛应用于衡量磁盘、文件、网络或系统的IO性能,可用于单机或集群。下载地址,包含两个程序:
- Iometer:控制程序。带有图形用户界面,可配置工作负载、设置操作参数以及启动和停止测试。Iometer告诉Dynamo执行哪些操作,收集结果数据,并将结果汇总到输出文件中。一次只能运行Iometer的一个副本;通常在服务器上运行。
- Dynamo:工作负载生成器,没有用户界面。Dynamo根据Iometer的命令执行I/O操作并记录性能信息,然后将数据返回给Iometer。一次可能有多个Dynamo副本同时在运行;通常,一个副本运行在服务器上,其他各个副本分别运行在各个客户端计算机上。
测试性能时,在Windows系统上安装Iometer图形界面程序,可以直接安装和启动Iometer,不必额外安装Dynamo。Dynamo则安装在被测试的Linux服务器上,且需要和Windows服务器处于同一个网络环境下。
Stream
Stream测试,用于测量可持续的内存带宽(MB/s),有fortran和c两类程序源码,这两种语言在数学计算方面的高效率,使得stream测试例程可以充分发挥出内存的能力。Stream对于CPU的计算能力要求很小,对CPU内存带宽压力很大。
Stream测试得到的是可持续性运行的内存带宽最大值,数组的值采用双精度,主要包括四种数组运算:
- Copy:数组的复制,从内存单元中读取一个数,并复制到其他内存单元中。两次访问内存操作,1R1W。
- Scale:数组的乘法(尺度变换),从内存单元中读取一个数,与常数相乘,得到的记过存到其他内存单元。两次访问内存操作,1R1W。
- ADD:数组的矢量求和。从两个内存单元中分别读取两个数,将其进行加法操作后,得到的结果写入另一个内存单元中。3次访问内存操作,2R1W。
- Triad:加法、乘法和复制三种操作的结合。从内存中读取一个数,与一个常数相乘得到一个乘积,然后从另一个内存单元中读取一个数与刚才乘积结果相加,得到的结果写入内存。3次访问内存操作,2R1W。
测试的一般规律是Add>Triad>Copy>Scale。一次Add和Triad操作都需要三次访问内存,Copy和Scale操作需要进行两次访问内存,访问内存次数越多越能够掩盖访存延迟,带宽越大。
参考Benchmark程序:GitHub
Whetstone
20世纪70-80年代开始流行的四个性能测试标准:Livermore、Whetstone、Dhrystone、Linpack,被合称为Classic Benchmark,参考:四大经典性能测试标准历史:
- Livermore:Numeric benchmark for supercomputers
- Whetstone:Floating point benchmark for minicomputers
- Dhrystone:Integer benchmark for UNIX systems
- Linpack:Floating point benchmark for workstations
Whetsone于1972年所开发,主要目的是模仿60个1970年后的程序算法。其最有名的版本为Fortran版,高度反映60年代数字计算方向的综合性测试程序,主要包括:浮点运算、整数算术运算、功能调用、数组变址、条件转移、超越函数。测试结果用Kwips表示。
Dhrystone
由Reinhold P. Weicker在1984年提出来的一个基准测试程序,其主要目的是测试处理器的整数运算和逻辑运算的性能,首先用Ada语言发布。
后来Rick Richardson为Unix开发用C语言编写的Version 1.1,成功推动Dhrystone的广泛应用。包括100条语句:各种赋值语句,各种数据类型和数据区,各种控制语句,过程调用和参数传送,整数运算和逻辑操作。
Dhrystone标准程序的测试方法,就是单位时间内跑多少次Dhrystone程序,其指标单位为DMIPS/MHz。DMIPS,即D MIPS,表示在Dhrystone标准的测试方法下的MIPS。因为历史原因把在VAX-11/780机器上的测试结果1757 Dhrystones/s定义为1 DMIPS,因此在其他平台测试到的每秒Dhrystones数应除以1757,才是真正的DMIPS数值,DMIPS其实表示的是一个相对值。
Dhrystone与Whetsone不同之处在于其并不包括浮点运算。
SPEC
官网,Standard Performance Evaluation Corporation,标准性能评估公司,美国一家非营利性公司,成立于1988年,旨在生产,建立,维护和认可一套标准化的计算机性能基准。
SPEC基准测试程序,能够全面反映机器的性能,具有很高的参考价值。
SPEC以AX-11/780 的测试结果作为基数,当前主要的基准测试程序有SPEC int_base_rate 2000、SPEC fp_base_rate 2000和SPEC JBB 2000等。还有基于某种数据库运行环境下的测试,也是可以参考的数值。在采用通用基准测试程序时,要注意真实的业务流程和使用环境与通用测试基准的业务流程和使用环境的异同,这样,基准测试值才有参考价值。
SPEC已公布如下的基准程序组:
- SPEC 95:测量CPU、存储器系统和编译器代码生成性能
- SPEC hpc 96:测量运行工业型应用程序的高性能计算系统的性能它包括两个基准程序:地震处理基准程序SPEC seis 96和计算化学基准程序SPEC chem 96
- SPEC web 96:测量基于由现实世界WWW服务器运行记录而获得的工作负载的Web服务器性能
- SFS:系统级文件服务器基准程序,包含有LADDIS基准程序并测量不同负载情况下的NFS文件服务器的响应时间和吞吐率
- SDM:为系统开发多任务基准程序,测量一个系统如何处理一个有大量用户发出典型的Unix软件开发命令(如make、cp、grep及spell等)的环境。它含有两个由Unix shell脚本构成的多用户Unix命令基准程序
- GPC:图形性能特征描述基准程序,测量图形学性能。包含3个正在不断发展的研究项目:
- PLB:Picture Level Benchmark,图片级基准程序,测量图形处理能力,指标包括:每秒向量数和每秒多边形数
- XPC:X Performance Characterization,X性能特征描述,开发Xmark 93基准程序测试工具以测量X窗口性能
- OPC:Open G1 Performance Characterization,Open GL性能特征描述,项目已开发Viewperf基准程序以测量Open GL性能
- SpecCPU2017:
SPEC 2004
服务器应用性能测试是一个全面衡量Web应用中Java企业应用服务器性能的基准测试,是SPEC 2002的升级版本,一个新的行业标准基准测试。
SPEC 2004测试采用JOPS(每秒总的操作次数)作为测试结果的衡量标准(SPEC 2002测试结果的衡量标准与此相同,但表示为TOPS),JOPS为订单事务数加上制造工作订单数,再除以以秒为单位的测试时间。
SPEC 2004与SPEC 2002相比,具有实质区别,它更为严格和完善,更为复杂。SPEC 2004的测试模型基于一个规模庞大、极为复杂、足以代表现实世界电子商务系统的分布式应用程序。模拟电子化业务工作模型体现了软、硬件平台整体解决方案的性能指标全面衡量应用服务器、数据库服务器硬件各子系统的性能被众多用户作为选择硬件设备的选型指标。
SPEC CPU
SPEC CPU是SPEC组织推出的CPU子系统基准测试程序。SPEC CPU的测试程序以源码形式发布,包含多种改进后的实际应用程序,可以运行在多种体系结构之上。SPEC CPU测试中,测试系统的处理器、内存子系统和使用到的编译器都会影响最终的测试性能,而I/O(磁盘)、网络、操作系统和图形子系统对于SPEC CPU 2006的影响非常的小。目前SPEC CPU的最新版本是SPEC CPU 2017,最早的是SPEC CPU 92。
SPEC CPU 2017是一套CPU子系统测试工具,包括4大类共43个基准测试。
简称 | 套件名 | 内容 | 指标 | 备注 |
---|---|---|---|---|
Intspeed | SPECspeed2017Integer | 10 integer benchmarks | SPECspeed2017_int_base、SPECspeed2017_int_peak SPEC | speed套件为每个基准运行一个副本;得分高的意味着花费的时间越少。 |
Fpspeed | SPECspeed2017 Floating Point | 10 floating point benchmark | SPECspeed2017_fp_base、SPECspeed2017_fp_peak | SPECspeed套件为每个基准运行一个副本;得分高的意味着花费的时间越少。 |
Intrate | SPECrate2017Integer | 10 integer benchmarks | SPECrate2017_int_base、SPECrate2017_int_peak | SPECrate套件为每个基准运行多个并发的副本;由测试人员选择多少个副本;得分高的意味着有更高的吞吐量。 |
fprate | SPECrate2017Floating Point | 13 floating point benchmark | SPECrate2017_fp_base、SPECrate2017_fp_peak | SPECrate套件为每个基准运行多个并发的副本;得分高意味着更高的吞吐量。由测试人员选择多少个副本 |
SPECspeed是基于时间的指标;SPECrate是吞吐量指标。
SPECspeed指标 | SPECrate指标 |
---|---|
套件中每个基准测试运行一个副本 | 测试人员自己定义运行的并发副本数 |
测试人员可以选择使用多少个OpenMP线程 | 禁用OpenMP |
对于每个基准,性能比计算如下:参考机器所用时间/SUT上的时间 | 对于每个基准,性能比计算如下:副本数(参考机器所用的时间/SUT上的时间) |
所用时间越少,分数越高 | 每单位时间做的工作越多,分数越高 |
SPEC Power
SPEC Cloud
SPEC ML
国际最新AI算力评测标准,模拟AI训练和推理不同场景的端到端全栈流程,涵盖业界最丰富的主流AI工作负载,评估包括多个AI场景的综合性能、集群扩展性、能效等多种关键参数,可以帮助用户更好地理解算力系统的瓶颈并进行优化,是一款更贴近用户真实AI业务需求的算力测试基准
TPC
Transaction Processing Council,事务处理委员会,成立于1988年,用于评测计算机的事务处理、数据库处理、企业管理与决策支持等方面的性能。1989年以来相继发表的TPC基准测试程序包括:
- TPC-A:用于在线联机事务处理下更新密集的数据库环境下的性能测试,基于DebitCredit(Jim Gray等人提出),已不再使用
- TPC-B:用于数据库系统及运行它的操作系统的核心性能测试,基于TP1(IBM提出),可理解为TPC-A的Batch模式,已不再使用
- TPC-C:则用于在线联机事务处理测试,OLTP的标准,1992年7月发布。与TPC-A等以前的OLTP基准测试相比,TPC-C更复杂,因为它具有多种事务类型,更复杂的数据库和整体执行结构。涉及五个不同类型和复杂性的并发事务的混合,可以在线执行或排队等待延迟执行。该数据库由九种类型的表组成,具有广泛的记录和人口规模。TPC-C以每分钟事务数(tpmC)衡量。 虽然基准描述批发供应商的活动,但TPC-C并不限于任何特定业务领域的活动,而是代表必须管理,销售或分销产品或服务的任何行业。
- TPC-D:用于决策支持系统测试,1994年提出,已不再适用于当前高性能服务器和算法等
- TPC-H:基于TPC-D基础上决策支持基准测试,1999年提出,面向商品零售业,定义8张表,22个查询,遵循SQL92;TPC-H基准的数据库模式遵循第三范式。新兴的数据仓库开始采用新的模型,如星型模型、雪花模型。TPC-H已经不能精准反映当今数据库系统的真实性能。故而推出TPC-DS。
- TPC-W:用于电子商务应用软件测试
- TPC-DS:DS即Decision Support,决策支持,TPC-H的最新版,有V2和V3两个版本。主要针对零售行业,采用星型、雪花型等多维数据模式。它包含7张事实表,17张纬度表平均每张表含有18列。提供99个SQL查询(SQL99或2003),分析数据量大,测试数据与实际商业数据高度相似(数据倾斜),同时具有各种业务模型(分析报告型,数据挖掘型等等)。
FDR
Full Disclosure Report,在做完benchmark后需要提交一份报告,即FDR,包含以下内容:
- Report:完整环境搭建,测试结果等
- Executive Summary:包含Load Test,Power Test,Throughput Test,Data Maintenance Test的结果,其实Report也包含这部分,单独把这个拎出来作为一个单独文件,毕竟这是核心指标
- Support files:代码,脚本等
FDR的目的是可以让用户可以按照报告中的描述去复现结果。
Linpack
Linear System Package,Linpack是国际上最流行的用于测试高性能计算机系统浮点性能的测试。通过对高性能计算机采用高斯消元法求解一元N次稠密线性代数方程组的测试,评价高性能计算机的浮点性能。
很大程度上已被在现代架构上运行更高效的LAPACK取代。
浮点测试程序,用FORTRAN语言编写,主要是浮点加法和浮点乘法操作。用MFPOPS(Million Floating Point Operations Per Second)表示GFLOPS、TFLOPS。
Linpack测试包括三类:
- Linpack100:Linpack100求解规模为100阶的稠密线性代数方程组,它只允许采用编译优化选项进行优化,不得更改代码,甚至代码中的注释也不得修改
- Linpack1000:Linpack1000要求求解1000阶的线性代数方程组,达到指定的精度要求,可以在不改变计算量的前提下做算法和代码上的优化
- HPL
HPL
High Performance Linpack,也叫高度并行计算基准测试,它对数组大小N没有限制,求解问题的规模可以改变,除基本算法(计算量)不可改变外,可以采用其他任何优化方法。前两种测试运行规模较小,已不太适合现代计算机的发展。
HPL是针对现代并行计算机提出的测试方式。用户在不修改任意测试程序的基础上,可以调节问题规模的大小(矩阵大小)、使用CPU数目、使用各种优化方法等来执行该测试程序,以获取最佳的性能。HPL采用高斯消元法求解线性方程组。
求解问题规模为N时,浮点运算次数为$frac{2}{3} N^{3} frac{3}{2} N^{2}$。因此,只要给出问题规模N,测得系统计算时间T,
$峰值=frac{frac{2}{3} N^{3} frac{3}{2} N^{2}}T (FLOPS)$
测试结果以浮点运算每秒(Flops)给出。HPL测试结果是TOP500排名的重要依据。
https://www.netlib.org/benchmark/hpl/ ,最新版hpl-2.3.tar.gz
LAPACK
Linear Algebra PACKage缩写,是以Fortran编程语言写的,用于数值计算的函数集。LAPACK提供丰富的工具函数,可用于诸如解多元线性方程式、线性系统方程组的最小二乘解、计算特征向量、用于计算矩阵QR分解的Householder变换、以及奇异值分解等问题。
参考
- 使用Iometer测试服务器性能
- Linpack-HPL
- Stream测试
- TPC和TPC-DS介绍
- TPC-C 、TPC-H和TPC-DS区别
- Linux测试