计算机系统性能评价
在20世纪60年代中期,出现了多任务、多用户的计算机系统,随着大家对这种系统的应用,人们发现这些系统表现出来的实际性能并没有预计的好,从而引发了对计算机系统性能评价的研究。计算机系统性能评价就是采用测量、模拟、分析等方法和工具,研究计算机系统的生产率、利用率、响应特性等系统性能。这里,性能代表系统的使用价值。
性能评价技术就是将看不见摸不着的性能转换为人们能够数量化和可以进行度量和评比的客观指标,以及从系统本身或从系统模型获取有关性能信息的方法。前者即测量技术,后者包括模拟技术和分析技术。
性能评价通常是与成本分析结合在一起,以获得各种系统性能和性能价格比的定量值,然后可以指导新型计算机系统(如分布式文件系统)的设计和改进,以及指导计算机应用系统的设计和改进,包括选择计算机类型、型号和确定系统配置等。
按照某个或某类计算机系统的用途,求出它的性能指标,并给出其优劣性的评论,研究计算机系统配置、系统负载和性能指标之间的相互关系,进一步优化计算机系统,或者推荐用户选购更合适的计算机系统。
注意:评价的目标系统可能已经存在,也可能尚在设计优化之中。
无论生产商还是用户,都需要某种方法来衡量计算机系统的性能,以便于生产商确定最佳的设计方案,或者发现影响系统性能的瓶颈,以进行优化改进;或者为用户选购最适合的计算机系统提供决策依据。
一般来说,计算机系统性能有如下几种:
1)处理能力:一般包含计算速度、吞吐率、响应时间/平均响应时间。其中计算速度有峰值速度、持续可用速度、定点或浮点运算速度,计算速度是用来评价计算机尤其是高性能计算机的主要考量,如我们选购计算机时关注的CPU的主频,严格来说,CPU的主频与CPU实际的运算能力并没有直接关系,因为CPU的运算速度还要看CPU的流水线的各方面的性能指标(缓存、指令集,CPU的位数等等),虽然CPU的主频不代表CPU的速度,但提高主频对于提高CPU运算速度却是至关重要的;吞吐率是单位时间内计算机系统完成的任务数,吞吐率越高,计算机系统的处理能力就越强;响应时间/平均响应时间是从计算机系统得到输入到给出输出结果之间的时间,一般用户比较关心,不过一般响应时间还和使用的软件有关。
2)可靠性:计算机系统正常工作的能力。它要求计算机系统首先是可靠的,或者一旦计算机系统发生故障,它应该具有容错的能力,再或者系统出错后能迅速恢复。通俗的讲,即计算机系统最好不要出错,或者少出错,或者出错后能够及时恢复工作状态。由于计算机系统由硬件和软件组成,它们对整个系统的可靠性影响呈现完全不同的特性:硬件和一般人工产品的机件一样,时间一长就要出毛病。软件则相反,时间越长越可靠。因为潜藏的错误(Bug)陆续被发现并解决,它又没有磨损、氧化、松动等问题。所以,计算机的可靠性是指分别研究硬件的可靠性和软件的可靠性。
3)利用率:即在一段时间内被使用的时间(次数)占总时间(总使用次数)的百分比,有硬件利用率、软件利用率、指令利用率等。提高计算机硬件性能利用率多半是对服务器而言,比如很多不同目的的服务器,大部分时间只使用了30%左右的硬件资源,剩余的都是闲置的。目前一般采用VM等虚拟化技术提高计算机利用率。
4)易用性:计算机系统方便用户使用的用户感知度,这是用户选购计算机系统时会考虑的重要指标,通常是对软件系统来说的,比如Windows和Unix的区别,一般用户肯定倾向于使用Windows系统,只有专业人士或者要求安全性高的用户会使用Unix系统。
5)功耗及对环境的要求:对于特殊环境下使用的计算机系统尤其重要,如军用、航天计算机、水下计算机等。计算机系统设计人员也需要考虑对环境的因素,如电压是否稳定等。
常用的有如下三种方法:测量法、模拟法和模型法。本篇主要介绍测量法。
1)测量法:通过测试设备或测试软件直接对计算机系统进行测试,并得到相应的性能指标。使用这种方法评价的条件是必须有具体的计算机系统。这种方法的优点是真实,可靠;缺点是评价结果可能与被测量计算机系统的具体用途有很大关系。
2)模拟(仿真)法:通过建立仿真模型,在一台现有的计算机系统上模拟目标系统的全部行为。这种方法在计算机系统设计特别是CPU设计上得到广泛的应用。
3)模型法:首先对被评价的计算机系统建立一个数学模型,再求出该模型的性能指标。这种方法的优点是成本低,但是采用这种方法的条件是:之前曾在相似的具体的计算机系统上通过测量法验证过模型法中的数学模型,证明是可行且近似相近的。
三种方法的比较
|
模型法 |
模拟法 |
测量法 |
适用范围 |
任意系统 |
任意系统 |
已有系统 |
所需时间 |
短 |
中 |
长 |
所需工具 |
模型 |
程序语言 |
设备 |
精确性 |
低 |
中 |
不确定 |
参数之间的折衷 |
容易 |
适中 |
困难 |
费用 |
低 |
中 |
高 |
计算机的时钟频率在一定程度上反映了机器速度,一般来说,主频越高,速度越快。这是我们选购计算机时最常用的性能指标,但是否主频越高,计算机的性能也越高呢?答案很显然是否定的。
CPU的主频表示在CPU内数字脉冲信号震荡的速度,与CPU实际的运算能力并没有直接关系。主频和实际的运算速度存在一定的关系,但目前还没有一个确定的公式能够定量两者的数值关系,因为CPU的运算速度还要看CPU的流水线的各方面的性能指标(缓存、指令集,CPU的位数等等)。由于主频并不直接代表运算速度,所以在一定情况下,很可能会出现主频较高的CPU实际运算速度较低的现象。比如AMD公司的AthlonXP系列CPU大多都能已较低的主频,达到英特尔公司的Pentium4系列CPU较高主频的CPU性能,所以AthlonXP系列CPU才以PR值的方式来命名。因此主频仅是CPU性能表现的一个方面,而不代表CPU的整体性能。虽然CPU的主频不代表CPU的速度,但提高主频对于提高CPU运算速度却是至关重要的。
计算机被发明出来首先是为了满足计算功能的,所以早期曾用加法指令的运算速度来衡量计算机的速度,速度是计算机的主要性能指标之一。因为加法指令的运算速度大体上可反映出乘法、除法等其他算术运算的速度,而且逻辑运算、转移指令等简单指令的执行时间往往设计成与加发指令相同,因此加法指令的运算速度有一定代表性。当时表征机器运算速度的单位是KIPS(每秒千条指令),后来随着机器运算速度的提高,计量单位由KIPS发展到MIPS(millioninstructions per second),现在已经有千万亿次的超级计算机出现。
需要主要的是,执行指令速度主要取决于CPU时钟频率和一、二级缓存的大小以及系统总线,另外内存、硬盘带宽大小等也会影响执行指令的速度,因为CPU要与外界交换数据。
它表示每秒百万条指令数,对于一个给定的程序,
它定义为:MIPS=指令条数/(执行时间*10^6)=时钟频率/(CPI*10^6)
程序的执行时间为:T=指令条数/(MIPS*10^6)
其中:T为程序执行时间,CPI为每条指令的平均时钟周期,时钟频率为每秒周期数即每周期的时间的倒数。显然,机器愈快其MIPS愈高,但MIPS对指令系统和程序的依赖性很大,故在某些情况下不能准确反映系统的性能。例如,执行百万次的空指令和百万次的加法指令所用的时间显然是不同的,所以用MIPS表示计算机系统性能并不完善。
随着计算机系统的发展,MFLOPS(million floating pointoperations per second)被提出来评价计算机系统性能。MFLOPS表示每秒百万次浮点操作次数,它的定义:MFLOPS=程序中浮点操作次数/(执行时间*10^6)。
显然,MFLOPS可以用来衡量机器浮点操作的性能,因为同一程序在不同机器上执行的指令可能不同,但执行的浮点运算却是完全相同的。但是,MFLOPS不能体现机器的整体性能;MFLOPS取决于机器和程序两个方面,因为不同机器浮点运算集不同,因此不同的浮点操作类型运算时间不同。
随着计算机指令系统的发展,指令的种类大大增加,用单位指令的MIPS或MFLOPS值来表征机器的运算速度的局限性日益暴露,因此很快出现了改进的办法,称之为吉普森(Gibson)混合法或等效指令速度法。等效指令速度法统计各类指令在程序中所占比例,并进行折算。设某类指令i在程序中所占比例为wi,执行时间为ti,则等效指令的执行时间为:
其中n为指令的种类数。
很明显,等效指令速度避免采用单一的定点或浮点运算来评价计算机系统指令速度,但是各种指令所占比例如何确定又是一大问题。
美国政府商务部曾用 PDR 值作为一类计算机CPU性能值,并作为出口许可证的限制性指标。美国政府商务部在1980年10月规定出口到中国的计算机系统的PDR不能超过32,到1981年12月,将标准改为PDR不能超过64。
在不同程序中,各类指令的使用频率是不同的,所以固定比例方法存在着很大的局限性;而且数据长度与指令功能的强弱对解题的速度影响极大。同时这种方法也不能反映现代计算机中高速缓冲存储器(cache)、流水线、交叉存储等结构的影响,具有这种结构的计算机的性能不仅与指令的执行频率有关,而且也与指令的执行顺序与地址分布有关。
数据处理速率PDR法采用计算“数据处理速率”PDR值的方法来衡量机器性能,PDR值越大,机器性能越好。PDR与每条指令和每个操作数的平均位数以及为条指令的平均运算速度有关,其计算方法如下:PDR = L/ R
其中:L = 0.85G + 0.15H + 0.4J + 0.15K R = 0.85M+ 0.09N + 0.06P
式中:
G是每条定点指令的位数;
M是平均定点加法时间;
H是每条浮点指令位数;
N是平均浮点加法时间;
J是定点操作数的位数;
P是平均浮点乘法时间;
K是浮点操作数的位数。
此外,还作了如下规定:G > 20位,H > 30位;从主存取一条指令的时间等于取一个字的时间;指令与操作数存放在主存,无变址或间址操作;允许有并行或先行取址指令功能,此时选择平均取指令时间。
PDR值主要对CPU和主存储器的速度进行度量,但不适合衡量机器的整体速度,因为它没有涉及cache、多功能部件等技术队性能的影响。
随着超级计算机的出现,MFLOPS早已赶不上计算机计算速度的步伐,现在超级计算机的指令速度已经达到GFLOPS(每秒十亿次浮点指令),TFLOPS(每秒万亿次浮点指令)和PFLOPS(每秒千万亿次浮点指令),G、T、P都是是常量,1P=1024T,1T=1024G,1G=1024M,1M=1024K,PFLOPS就是每秒运算能力为千万亿次。
超级计算机排名机构http://top500.org/对全球超级计算机评测排名, 截止到2012年11月的前几名如下:(我国的天河一号排名第8)
上述性能评价方法主要针对CPU(有时包括主存),它没有考虑诸如I/O结构、操作系统、编译程序的效率等系统性能的影响,因此难以准确评价计算机的实际工作能力。
基准程序测试法(Benchmark)是研究较多的一种方法,它把应用程序中用得最频繁的那部分核心程序作为评价计算机性能的标准程序,在不同的机器上运行,测得其执行时间,作为各类机器性能评价的依据。机器软硬件结构的特点能在核心程序中得到反映,但是核心程序各部分之间得联系较小。由于程序短,所以访问存储器得局部性特征很明显,以致cache的命中率比一般程序高。
基准程序法是目前一致承认的测试性能的较好方法,有多种多样的基准程序,如主要有测试整数性能的基准程序、测试浮点性能的基准程序等等。
Dhrystone是测量处理器运算能力的最常见基准程序之一,常用于处理器的整形运算性能的测量。程序是用C语言编写的,因此C编译器的编译效率对测试结果也有很大影响。它是一个综合性的基准测试程序,为了测试编译器和CPU处理整数指令和控制功能的有效性,人为地选择一些“典型指令综合起来形成的测试程序。基准程序用了100条语句,由下列操作组成:各种赋值语句、各种数据类型的数据区、各种控制语句、过程调用和参数传送、整数运算和逻辑操作。
不过不同厂家在测试MIPS值时,使用的基准程序一般不一样的,因此不同厂家机器的MIPS值有时虽然相同的,但是性能却可能相差很大,那是因为各厂家在设计计算机时针对不同的应用领域,如科学和工程应用、商业管理应用、图形处理应用等,而采用了不同的体系结构和实现方法。一般情况下,同一个厂家的机器,采用相同的体系结构,用相同的基准程序测试,得到的MIPS值越大,一般说明机器速度越快。
在计算机科学工程应用领域内,浮点计算工作量占很大比例,因此机器的浮点性能对系统的应用有很大的影响。有些机器只标出单个浮点操作性能,如浮点加法、浮点乘法时间。而大部分工作站采用Linpack和Whetstone基准程序测得浮点性能。
理论峰值浮点速度
巨型机和小巨型机在说明书中经常给出“理论峰值速度”的MFLOPS值。它不是机器实际执行程序时的速度,而是机器在理论上能完成的浮点处理速度。它不仅与处理机时钟周期有关,而且还与一个处理机里能并行执行操作的流水线功能部件数目和处理机的数目有关。多个CPU机器的峰值速度是单个CPU的峰值速度与CPU个数的乘积。
理论浮点峰值 = CPU主频 × CPU每个时钟周期执行浮点运算的次数 × 系统中CPU核心数目
Linpack基准测试程序
Linpack是第一个内核级的测试程序,它现在在国际上已经成为最流行的用于测试高性能计算机系统浮点性能的benchmark。通过利用高性能计算机,用高斯消元法求解一元N次稠密线性代数方程组的测试,评价高性能计算机的浮点性能。
Linpack基准程序是一个用FORTRN语言写成的子程序软件包,称为基本线性代数子程序包,此程序完成的主要操作是浮点加发和浮点乘法操作。测量计算机系统的Linpack性能时,让机器运行Linpack程序,测量运行时间,将结果用MFLOPS表示。向量化百分比指的是向量成分的计算量占整个程序计算量的百分比。在同一台机器中,向量化程度越高,机器的运算速度越快,因为不管n的大小,求解方程时花的非向量操作的时间差不多是相等的。
但是,Linpack中浮点运算的比例很高,单有一些运算很少用到,如浮点除法;在Linpack测试中执行时间大部分用在了一小部分代码模块上,所以只需要很小的一块指令内存缓冲区即可有很高的命中率;数据命中率对内存大小要求很高,Linpack对内存的设置很敏感,200*201与200*200规模的数组计算在内存中的映射可能不同,从而导致执行时间有一个相当程度的变化。
Whetstone基准测试程序
Whetstone是1976年发布的benchmark程序,它是用FORTRAN语言编写的综合性测试程序,由几个模块组成,每个模块包括一个特定种类的语句,例如整型操作,浮点操作,if语句,calls语句等等。它有很多的浮点数据和浮点操作,同时由于有很多的循环,所以代码的局部性非常高,指令cache命中率将近100%。Whetstone的测试结果用Kwips表示,1Kwips表示机器每秒钟能执行1000条Whetstone指令。
Whetstone所依据的统计数据均为70年代收集的,不能代表当今的程序特点,有些语言特点如指针、记录等都未涉及到;浮点运算太多,即使对科学计算型的任务来说,它的浮点运算也太多了;程序中操作数的选取或者是任意的,或者是为了满足其设计准则,没有考察这些参数是否有代表性;对I/O系统和监督软件的调用无代表性;涉及到的存储空间太小,目标码和涉及到的数据太小。目标文件太小,在有无cache的机器上会产生很大的差别;模块太简单,使用的语言现象太少。
SPEC是System Performance EvaluationCooperative的缩写,是一个全球性的、权威的第三方应用性能基准测试组织,它旨在确立、修改以及认定一系列服务器应用性能评估的标准。
由于它体现了软、硬件平台的性能和成本指标,被金融、电信、证券等关键行业用户作为选择IT系统一项权威的选型基准测试指标。
SPEC版本1.0是1989年10月发布的,它是一套复杂的基准程序集,主要用于测试与工程和科学应用有关的数值密集型的整数和浮点数方面的计算。源程序超过15万行,包含10个测试程序(4个整数程序,6个浮点程序),使用的数据量比较大,分别测试应用的各个方面。SPEC基准程序测试结果一般以SPECmark(SPEC分数)、SPECint(SPEC整数)和SPECfp(SPEC浮点数)来表示。其中SPEC分数是10个程序的几何平均值,SPEC整数是4个整数程序的几何平均值,SPEC浮点数是6个浮点程序的集合平均值。1992年在原来SPECint89和SPECfp89的基础上增加了两个整数测试程序和8个浮点数测试程序,因此SPECint92由6个程序组成,SPECfp92由14个程序组成。这20个基准程序是基于不同的应用写成的,主要测量32位cpu、主存储器、编译器和操作系统的性能。参加这个组织的主要成员有:IBM、AT&T、BULL、Compag、CDC、DG、DEC、Fujitsu、HP、Intel、MIPS、Motorola,SGI,SUN和Unisys等。
目前SPEC主要包括针对CPU性能的SPECCPU2006、SPECCPU2000等,针对Web服务器的SPECweb2009、SPECweb2005等,针对图形与工作站的SPECviewperf® 11、SPECapcSM for 3ds Max™ 2011、SPECapcSM for Lightwave 3D® 9.6等等;以及针对高性能计算的SPEC MPI2007、SPECOMP2001、SPEC HPC2002等。SPEC家族还有很大其他的Benchmarks,更多的内容可以见其官网:http://www.spec.org/。
TPC(Transaction processingPerformance Council,事务处理性能委员会)是由数十家会员公司创建的非盈利组织,总部设在美国。TPC的成员主要是计算机软硬件厂家,而非计算机用户,其功能是制定商务应用基准测试程序的标准规范、性能和价格度量,并管理测试结果的发布。
作为一家非盈利性机构,TPC负责定义诸如TPC-C、TPC-H和TPC-W基准测试之类的事务处理与数据库性能基准测试,并依据这些基准测试项目发布客观性能数据。
TPC不给出基准测试程序的代码,而只给出基准测试程序的标准规范。任何厂家或其他测试者都可以根据规范,最优地构造出自己的测试系统(测试平台和测试程序)。为保证测试结果的完整性,被测试者(通常是厂家)必须提交给TPC一套完整的报告(FullDisclosure Report),包括被测系统的详细配置、分类价格和包含5年维护费用在内的总价格。该报告必须由TPC授权的审核员核实(TPC本身并不做审计)。TPC在全球只有不到10名审核员,全部在美国。
目前最为“流行”的TPC-C是在线事务处理(OLTP)的基准测试程序,TPC-C测试规范经过两年的研制,于1992年7月发布,现今已被业界逐渐接受。需要注意的是,TPC-C值描述的是C/S整体系统的性能,它与系统的服务器和客户机的性能都有关系,也就是说,同样的服务器配置不同的客户端将会影响TPCC值,任何厂商和测试者都可以根据TPC提供的测试规范构造出自己最优的系统,前提条件是测试的结果必须要经过TPC的审核。
TPC体系其他的Benchmarks还有TPC-E、TPC-H、TPCEnergy以及过时的TPC-A、TPC-B、TPC-D、TPC-R、TPC-W、TPC-App等等。更多的内容可以见其官网:http://www.tpc.org/。
上面介绍了计算机系统性能评价常用的测量方法,我们要知道没有一个标准能反映计算机系统的全部性能,它们代表的只是性能的一个侧面,只局限于计算机系统的某一层次,不能得到系统整体的性能特征。即便是最常用的Benchmark,也只能作为参考。如果脱离实际,那么对计算机系统性能的评价就会沦为“盲人摸象”。
从Benchmark出现之后,Benchmark体系已经相当成熟了。尽管如此,相对于用户应用计算机系统环境的千差万别,它仍然只是一个最优化环境中产生的“实验室结果”,并不能完全反映到用户的实际应用中。实际上,Benchmark它本质上是个应用,除了对硬件环境有要求外,与系统的编译、应用的优化都是有关系的,换句话说,所有的Benchmark都是基于最优化环境产生的,这一点用户心里一定要清楚。没有任何一家公司会仅仅根据Benchmark的测试结果作为平台的采购选择依据,在做决定时我们往往会综合考虑更重要的因素,如对硬件平台的熟悉程度以及与现有系统的兼容性等。
所以,我们需要有成熟的心态,科学地、全面地看待并应用Benchmark,应用Benchmark评价时需注意如下几点:
1.基准测试作为专项指标,并不全面
任何一个基准测试都只能反映系统在某一方面的性能,而不可能反映系统的全面特性,比如SPECfp测试的是浮点能力,而不能反映系统I/O上的特性。即使是某些应用的专用基准测试程序(如SAP-SD),也同样不能完全反映用户的实际生产环境。所以在性能评价过程中,首先要做认真分析应用的特点,以此采用相应的基准测试指标作为性能评价的重点。最能够反映计算机系统性能的依然是实际(或仿真)应用的线上测试。
2.考虑系统性能的线性能力
在多处理器系统中,随着处理器数目的增加,服务器性能往往不能同步线性增加,在OLTP、浮点等运算中,双处理器的性能往往只是单处理器的1.4到1.7倍,而4路MP服务器、8路服务器的线性能力会更弱。在英特尔至强(Xeon)及安腾处理器当中,通过超强的并行能力及大量的板上资源,使得处理器的线性能力得到加强。在选型过程中,用户如果使用多处理器或多服务器并行的应用,应该对处理性能的线性能力给以足够关注,在基准测试报告中会给出不同配置下的结果。
3.基准测试只反映性能,但不是全部
基准测试可以帮助用户判断系统的性能特征,但适用性本身不止是性能,特别是在大型系统中,其它一些因素,包括耗电量、散热、可管理能力等等,直接影响用户的拥有成本及维护难度,应予以充分考虑。
总之,对计算机系统性能的评测并没有统一标准,对待这个问题也是一个见仁见智的过程。