(KVM连载) 8.2.1 CPU性能测试工具
8.2.1 CPU性能测试工具
CPU是计算机系统中最核心的部件,CPU的性能直接决定了系统的计算能力,故对KVM虚拟化进行性能测试首先选择对客户机中CPU的性能进行测试。任何程序的执行都会消耗CPU资源,所以任何程序都几乎可以作为衡量CPU性能的基准测试工具,不过最好是选择CPU密集型的测试程序。有很多的测试程序可用于CPU性能的基准测试,包括:SPEC组织的SPEC CPU和SPECjbb系列、UnixBench、SysBench、PCMark、PC内核编译、Super PI、等等,下面对其中的几种进行简单的介绍。
1)SPECCPU2006
SPEC(Standard Performance Evaluation Corporation)是一个非盈利组织,它专注于创建、维护和支持一系列标准化的基准测试程序(benchmark),让这些基准测试程序可以应用于对高性能计算机的性能测试。IT界的许多大公司,如IBM、Microsoft、Intel、HP、Oracle、Cisco、EMC、华为、联想、中国电信等,都是SPEC组织的成员。SPEC系列的基准测试工具,针对不同的测试重点,有不同的测试工具,如:测试CPU的SPEC CPU、测试Java应用的SPECjbb、测试电源管理的SPECpower、测试Web应用的SPECweb、测试数据中心虚拟化服务器整合的SPECvirt_sc,等等。相对来说,SPEC组织的各种基准测试工具在业界的口碑都比较良好,也具有一定的权威性。
SPEC CPU2006是SPEC CPU系列的最新版本,之前的版本有CPU2000、CPU95等,其官方主页是:http://www.spec.org/cpu2006/ 。SPEC CPU2006既支持在Linux系统上运行又支持在Windows系统上运行,是一个非常强大的CPU密集型的基准测试集合,里面包含有分别针对整型计算和浮点型计算的数十个基准测试程序[2]。在SPEC CPU2006的测试中,有bzip2数据压缩测试(401.bzip2)、人工智能领域的象棋程序(458.sjeng)、基于隐马尔可夫模型的蛋白质序列分析(456.hmmer)、实现H.264/AVC标准的视频压缩(464.h264ref)、2D地图的路径查找(473.astar)、量子化学中的计算(465.tonto)、天气预报建模(481.wrf)、来自卡内基梅隆大学的一个语音识别程序(482.sphinx3),等等。当然,其中一些基准测试也是内存密集型的,如其中的429.mcf的基准测试就既是CPU密集型又是内存密集型的。当测试完成后,可以生成html、PDF等格式的测试报告。测试报告中,有分别对整型计算和浮点型计算的总体分数,并且有各个具体的基准测试程序的分数。分别在非虚拟化原生系统和KVM虚拟化客户机系统中运行SPEC CPU2006,然后对比它们的得分即可大致衡量虚拟化中CPU的性能。
2)SPECjbb2005
SPECjbb2005是SPEC组织的一个用于评估服务器端Java应用性能的基准测试程序,其官方主页为:http://www.spec.org/jbb2005/ 。该基准测试主要测试了Java虚拟机(JVM)、JIT编译器、垃圾回收、Java线程等各个方面,它也同样对CPU、缓存、内存结构的性能进行度量。SPECjbb2005既是CPU密集型也是内存密集型的基准测试程序,它用Java应用能够比较真实地反映Java程序在某个系统上的运行性能。
3)UnixBench
UnixBench(也即曾经的BYTE基准测试)为类Unix系统提供了基础的衡量指标,其官方主页为:http://code.google.com/p/byte-unixbench/ 。它并不是专门测试CPU的基准测试,而是测试了系统的许多方面,它的测试结果不仅会受系统的CPU、内存、磁盘等硬件的影响,也会受操作系统、程序库、编译器等软件系统的影响。UnixBench中包含了许多测试用例,如:文件复制、管道的吞吐量、上下文切换、进程创建、系统调用、基本的2D和3D图形测试,等等。
4)SysBench
SysBench是一个模块化的、跨平台的、支持多线程的基准测试工具,它主要评估的是系统在模拟的高压力的数据库应用中的性能,其官方主页为:http://sysbench.sourceforge.net/ 。其实,SysBench并非是一个完全CPU密集型的基准测试,它主要衡量了CPU调度器、内存分配和访问、文件系统I/O操作、线程创建等多方面的性能。
5)PCMark
PCMark是由Futuremark公司开发的针对一个计算机系统整体及其部件进行性能评估的基准测试工具,其官方网站是:http://www.futuremark.com/benchmarks/pcmark 。在PCMark的测试结果中,会对系统整体和各个测试组件进行评分,得分的高低就直接反映其性能的好坏。目前,PCMark只能在Windows系统中运行,PCMark分为几个不同等级的版本,其中基础版是可以免费下载和使用的,而高级版和专业版都需要支付一定的费用才能合法使用。
6)内核编译(kernel build或kernel compile)
内核编译,就是以固定的配置文件对Linux内核代码进行编译,它是Linux开发者社区(特别是内核开发者社区)中最常用的系统性能测试方法,也可以算作是一个典型的基准测试。内核编译是CPU密集型,也是内存密集型,而且是磁盘I/O密集型的基准测试,而且使用make命令进行编译时可以添加“-j N”参数来使用N进程协作编译,所以它也可以评估系统在多处理器(SMP)系统中多任务并行执行的可扩展性。只要使用相同的内核代码,使用相同的内核配置,使用相同的命令进行编译,然后对比编译时间的长短即可评价系统之间的性能差异。另外,关于Linux内核编译步骤可以参考3.3.3节“编译KVM”中的详细介绍。
7)Super PI
Super PI是一个计算圆周率π的程序,是一个典型的CPU密集型基准测试工具。Super PI最初是在1995年时日本数学家金田康正[3]用于计算圆周率π的程序,当时他将圆周率计算到了小数点后的4G(2的32次方)个数据位。Super PI基准测试程序的原理非常简单,它根据用户的设置计算圆周率π的小数点后N个位数,然后统计消耗的时间,根据时间长度的比较就能初步衡量CPU计算能力的优劣。Super PI最初是一个Windows上的应用程序,可以从http://www.superpi.net/ 网站下载,目前支持计算小数点后32M(2的25次方)个数据位。不过,目前也有Linux版本的Super PI,可以从http://superpi.ilbello.com/ 网站下载,它也是支持计算到小数点后32M个数据位。目前的Super PI都支持单线程程序,可以执行多个实例从而实现多个计算程序同时执行,另外,也有一些测试程序实现了多线程的Super PI,如:Hyper PI (http://virgilioborges.com.br/hyperpi/)。
在实际生产环境中,运行实际的CPU密集型程序(如可以执行MapReduce的Hadoop)当然是测试CPU性能较好的方法,不过,为了体现更普通而不是特殊的应用场景,本节选择了3个基准测试程序用于测试KVM虚拟化中的CPU性能,包括一个比较权威SPEC CPU2006、一个Linux社区中常用的内核编译和一个非常简单的Super PI。