虚拟机基准测试工具



现在大家都从共享主机慢慢转移到Linux VPS了。虽然各VPS主机提供商出售的VPS主机配置都大同小异,除了硬盘容量,带宽之外,Linux  VPS性能又如何来衡量呢?这里推荐给大家一款Linux VPS性能测试软件UnixBench。

一.VPS性能测试软件Unixbench介绍

UnixBench的目的是给类Unix系统的性能提供一种基本的指标; 因此,多个测试被用于测试系统性能的各种各样的方面。 然后将这些测试结果与从基础系统的分数比较,产生一个预定值,这个预定值比原始的分数更容易处理。 综合整套系列的预定值将得出一个系统全面的索引。Unixbench包含了一些非常简单的图形测试,实现了测量系统的2D和3D图形性能。 Unixbench也能处理多处理器系统。 如果您的系统有多个CPUs,缺省行为是两次进行选择的测试 -- 一次与每个测试程序的一个拷贝每次跑,和与N一次复制,其中N是CPUs的数量。

这些设计使您能评价:当运行唯一任务时您系统的性能;多任务时您系统的性能;实施并行处理后你的系统性能的提高。

请注意unixbench是一个系统基准测试工具,不是CPU、RAM或者磁盘基准测试工具。 结果不仅依靠您的硬件,还要依靠您的操作系统,库甚至编译器。

二、UnixBench下载

UnixBench托管在Google Code上面,官方网站是: http://code.google.com/p/byte-unixbench/ 。 安装使用UnixBench的流程如下

curl http://byte-unixbench.googlecode.com/files/unixbench-5.1.2.tar.gz -o unixbench-5.1.2.tar.gz

tar zxvf unixbench-5.1.2.tar.gz

cd unixbench-5.1.2

make

./Run

三、UnixBench安装注意事项:

UnixBench 1.5.2版默认打开了图形测试,如果你没有使用GUI的话,需要在Makefile里面注释掉图形图像测试:

# GRAPHICS TESTS: Uncomment the definition of "GRAPHIC_TESTS" to enable
# the building of the graphics benchmarks.  This will require the
# X11 libraries on your system.
#
# Comment the line out to disable these tests.
#GRAPHIC_TESTS = defined

UnixBech编译需要gcc,如果系统没有装gcc的话需要安装一个。

apt-get install gcc

四、UnixBench测试内容:

Unixbench包含有很多单独的针对特定范围的测试,总结如下:

Dhrystone

这个基准测试使用来计算和比较计算机性能的。由于没有浮点操作,这个测试主要集中在字符串处理上。这个测试深受以下因素的影响:硬件和软件 设计,编译程序和链接程序选项,代码优化 ,高速缓冲存储器, 等待状态和整数数据类型。

Whetstone

这个测试测量浮点运算速度和效率。这个测试包含几个模块,这些模块被认为是由在典型运用在科学应用中的操作组成的混合体。 各种各样的C函数,包括sin、cos、sqrt、exp和log还有整形,浮点算术操作、数组访问、条件转移和过程调用,都使用了。 整数和浮点算术,在这个测试中都会计算。

Execl Throughput

这个测试计算每秒钟出现的execl调用数。Execl是 exec 函数家族的一部分。它用一个新的进程映像更新当前的进程映像。 它和许多其他相似的命令都是execve()的前端程序。

File Copy

这个测试测量使用不同的缓冲区大小时,数据可以从一个文件被传输到另一个的速率。文件的读写复制测试可以获得在指定时间内(默认为10秒) 能够读、写、复制的字符数目。

Pipe Throughput

管道是进程间通信最简单的方式之一。管道吞吐量指的是每秒中,一个进程能将512个字节数据写入管道和从管道中回读它们的次数。这个测试在 真实的程序设计中并没有对应物。

Pipe-based Context Switching

这个测试是计算两个进程通过管道交换一个增长的整数的次数。基于管道的上下文切换测试更像一个真实的应用程序。这个测试产生一个可以用来继 续双向管对话的子进程。

Process Creation

这个测试计算一个进程派生和收获一个马上退出的子进程的次数。由于进程创建涉及创建进程控制块和为新的进程分配内存,因此这项测试直接取决 于内存带宽。这个测试一般地会用于比较各种各样的操作系统进程创建调用的执行。

Shell Scripts

这个shells scripts测试测量每秒进程能够启动和收获一组1,2,4,8个shell脚本程序的并行的拷贝的次数。The shells scripts test measures the number of times per minute a process can start and reap a set of one, two, four and eight concurrent copies of a shell scripts where the shell script. applies a series of transformation to a data file.

System Call Overhead

这个测试是估计进入和离开操作系统内核的开销。例如执行一个系统调用的开销。它由一个简单的系统组成,这个系统重复的调用getid系统调 用,getid返回调用进程的进程IS号。这个测试是用执行这些调用的时间来估算进入和离开内核的开销。

Graphical Tests

这个测试提供了2D,3D的图形化测试。报告性能不仅依赖于硬件,还与你的系统是否对硬件有合适的驱动程序有关 。

五、UnixBench测试结果

下面是我的Burst上面的VPS的测试结果,大家可以参考一下:

------------------------------------------------------------------------
Benchmark Run: Sun Nov 27 2011 14:47:45 - 15:15:58
1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       16731426.1 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2616.4 MWIPS (9.9 s, 7 samples)
Execl Throughput                               3539.0 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        472111.8 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          134027.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1111487.1 KBps  (30.0 s, 2 samples)
Pipe Throughput                              807220.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 241082.5 lps   (10.0 s, 7 samples)
Process Creation                              12191.2 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   5490.2 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    696.3 lpm   (60.1 s, 2 samples)
System Call Overhead                         657156.8 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   16731426.1   1433.7
Double-Precision Whetstone                       55.0       2616.4    475.7
Execl Throughput                                 43.0       3539.0    823.0
File Copy 1024 bufsize 2000 maxblocks          3960.0     472111.8   1192.2
File Copy 256 bufsize 500 maxblocks            1655.0     134027.3    809.8
File Copy 4096 bufsize 8000 maxblocks          5800.0    1111487.1   1916.4
Pipe Throughput                               12440.0     807220.4    648.9
Pipe-based Context Switching                   4000.0     241082.5    602.7
Process Creation                                126.0      12191.2    967.6
Shell Scripts (1 concurrent)                     42.4       5490.2   1294.9
Shell Scripts (8 concurrent)                      6.0        696.3   1160.5
System Call Overhead                          15000.0     657156.8    438.1
                                                                   ========
System Benchmarks Index Score                                         893.4



前一段时间进行了 虚拟机平 台的 性能测试, 大家围绕物理机、虚拟机之间的模型,单模块性能测试和集成性能测试方案反复争论了很久。因为是初次尝试,而且这个平台底层依赖Xen,Xen又依 赖 Linux内核;依赖云计 算的 操作系统; 依赖服务器硬件;同时业务上又被上层应用网站依赖,必须考虑客户网站的性能指标;牵扯点比较多,还是比较复杂的。

  最终达成了几点一致:

  1. 在生产环境集群进行性能测试,因为是尚未上线的项目,所以具备这个条件。另一方面也是考虑到虚拟机平台对物理机的性能、物理机的内核均存在较高的依赖性。 在功能测试过 程中也经常发现由于硬件或内核的兼容性问题导致整个服务宕机的情况。

  2. 将模型简化为

  a)单物理机单Vm:重点在与物理机的性能进行比较

  b)单物理机多VM:重点在看一台物理机理想情况下的能支撑多少台虚拟机

  c)多物理机多VM:重点在模拟真实场景下的对虚拟机平台的压力。当然需要有业务指标来权衡如何设置vm的数量和集群机器数量

  d)VM镜像性能评估:重点在模拟真实场景下,在虚拟机建站后,站点的性能情况

  3. 针对和云计算的操作系统的关联进行单独测试。我们形象的称为灰盒性能测试。

  4. 长时间压力场景下的稳定性测试

  5. 重点关注的性能指标:IO、IOPS、Response Time、Memory,没有考虑CPU因为基本上CPU不是瓶颈,在CPU瓶颈之前IO早就撑不住了,当然这也和虚拟化平台本身的设计有关

  另外还有很多技术细节,我们这的性能测试工程师也花了不少心思。比如如何IO读写的效率,多VM性能的监控,如何对磁盘产生并发的读写压力, 挺有意思



首先了解一下需要用到的命令:

查看CPU的基本信息:

查看物理CPU的个数
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
查看逻辑CPU的个数
#cat /proc/cpuinfo |grep "processor"|wc -l 
查看CPU是几核
#cat /proc/cpuinfo |grep "cores"|uniq
查看CPU的主频
#cat /proc/cpuinfo |grep MHz|uniq

指定进程到具体CPU上运行:

# taskset

-p,  设定一个已存在的pid,而不是重新开启的一个新任务

-c,  指定一个处理,可以指定多个,以逗号分隔,也可指定方位,如2,4,5,6-8

1,切换某个进程到指定的CPU上

taskset -cp 3 13290

2,让某程序运行在指定的CPU上

taskset -c 1,2,4-7 tar jcf test.tar.gz test

 

查看物理主机的CPU个数为16个:

1[root@test8 home]# cat /proc/cpuinfo |grep "processor"|wc -l
216

将CPU14和CPU15进行隔离:修改/boot/grub/grub.conf文件,在kernel一行的后面添加isolcpus=14,15

1root (hd0,0)
2kernel /boot/vmlinuz-2.6.32-279.2.1.el6.x86_64 ro root=UUID=4f8c5d8b-fc5f-49d2-96c8-71effe86e58f rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet isolcpus=14,15
3initrd /boot/initramfs-2.6.32-279.2.1.el6.x86_64.img

注意:grub.conf是启动的配置文件,非常重要,提示在修改前对grub.conf做一下备份

配置grub.conf完成后,重新启动主机,使用命令ps -eLo psr | grep 0 | wc -l可以查看CPU的使用情况

01 [root@test8 home]# ps -eLo psr | grep 0 | wc -l
02131
03[root@test8 home]# ps -eLo psr | grep 1 | wc -l
04310
05[root@test8 home]# ps -eLo psr | grep 2 | wc -l
0684
07[root@test8 home]# ps -eLo psr | grep 14 | wc -l
0821
09[root@test8 home]# ps -eLo psr | grep 15 | wc -l
1021

显示CPU14和CPU15运行了21个线程(这些线程都是系统启动的守护线程,CPU14和CPU15中运行的相同)

 

创建两个相同的虚拟机,查看系统中的虚拟机程序运行的进程号

1[root@test8 home]# ps -eLo ruser,pid,ppid,lwp,psr,args | grep qemu | grep -v grep
1qemu     11535     1 11535   3 /usr/libexec/qemu-kvm -name centosb -S -M rhel6.4.0 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 ......
2qemu     11535     1 11556   0 /usr/libexec/qemu-kvm -name centosb -S -M rhel6.4.0 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 ......
3qemu     11535     1 13001   3 /usr/libexec/qemu-kvm -name centosb -S -M rhel6.4.0 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 ......
4qemu     13224     1 13224  15 /usr/libexec/qemu-kvm -name test1 -S -M rhel6.4.0 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1......
5qemu     13224     1 13248   4 /usr/libexec/qemu-kvm -name test1 -S -M rhel6.4.0 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1......
6qemu     13224     1 17191   0 /usr/libexec/qemu-kvm -name test1 -S -M rhel6.4.0 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1.....

大致的意思是,创建两个虚拟机centosb和test1的进程号分别是11535、13224。

将进程11535和13224分别绑定到CPU14(centosb)和CPU15(test1)上。在centosb上运行程序测试 CPU性能。

进程测试之前的CPU情况:

1 [root@test8 home]# mpstat -P ALL
2Linux 2.6.32-279.2.1.el6.x86_64 (test8.localdomain)     2013 年12月17日  _x86_64_        (16 CPU)
0121时01分14秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
0221时01分14秒  all    4.87    0.00    0.40    0.59    0.00    0.02    0.00    0.42   93.71
0321时01分14秒    0   22.44    0.00    1.30    4.55    0.00    0.19    0.00    0.23   71.28
0421时01分14秒    1   16.33    0.00    1.04    3.35    0.00    0.07    0.00    0.18   79.03
0521时01分14秒    2    6.04    0.00    0.42    0.09    0.00    0.00    0.00    0.10   93.34
0621时01分14秒    3    3.54    0.00    0.37    0.12    0.00    0.00    0.00    0.12   95.84
0721时01分14秒    4    4.07    0.00    0.25    0.08    0.00    0.00    0.00    0.05   95.55
0821时01分14秒    5    3.58    0.00    0.34    0.04    0.00    0.00    0.00    0.10   95.94
0921时01分14秒    6    2.31    0.00    0.19    0.04    0.00    0.00    0.00    0.10   97.35
1021时01分14秒    7    3.71    0.00    0.26    0.06    0.00    0.00    0.00    0.05   95.91
1121时01分14秒    8    3.46    0.00    0.39    0.36    0.00    0.01    0.00    0.02   95.76
1221时01分14秒    9    4.06    0.00    0.41    0.24    0.00    0.01    0.00    0.04   95.25
1321时01分14秒   10    3.15    0.00    0.41    0.09    0.00    0.00    0.00    0.02   96.33
1421时01分14秒   11    3.08    0.00    0.42    0.08    0.00    0.01    0.00    0.04   96.38
1521时01分14秒   12    1.52    0.00    0.23    0.08    0.00    0.01    0.00    0.06   98.11
1621时01分14秒   13    0.62    0.00    0.17    0.09    0.00    0.00    0.00    0.01   99.10
1721时01分14秒   14    0.01    0.00    0.06    0.03    0.00    0.00    0.00    0.03   99.88
1821时01分14秒   15    0.01    0.00    0.06    0.03    0.00    0.00    0.00    0.03   99.88

CPU14和CPU15的情况一样,运行一段测试程序后的使用情况

1 [root@test8 ~]# mpstat -P ALL
2Linux 2.6.32-279.2.1.el6.x86_64 (test8.localdomain)     2013 年12月18日  _x86_64_        (16 CPU)
0109时12分53秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
0209时12分53秒  all    4.74    0.00    0.35    0.44    0.00    0.02    0.00    0.18   94.26
0309时12分53秒    0   25.30    0.00    1.33    4.11    0.00    0.23    0.00    0.03   69.01
0409时12分53秒    1   15.11    0.01    0.90    2.33    0.00    0.06    0.00    0.02   81.57
0509时12分53秒    2    5.39    0.01    0.37    0.03    0.00    0.00    0.00    0.01   94.19
0609时12分53秒    3    3.42    0.00    0.31    0.03    0.00    0.00    0.00    0.01   96.22
0709时12分53秒    4    3.86    0.00    0.23    0.02    0.00    0.00    0.00    0.01   95.89
0809时12分53秒    5    2.96    0.00    0.20    0.01    0.00    0.00    0.00    0.01   96.82
0909时12分53秒    6    2.19    0.00    0.17    0.01    0.00    0.00    0.00    0.01   97.61
1009时12分53秒    7    3.33    0.00    0.21    0.01    0.00    0.00    0.00    0.01   96.44
1109时12分53秒    8    3.03    0.00    0.34    0.20    0.00    0.00    0.00    0.00   96.42
1209时12分53秒    9    3.75    0.01    0.38    0.11    0.00    0.00    0.00    0.00   95.75
1309时12分53秒   10    2.53    0.00    0.30    0.02    0.00    0.00    0.00    0.00   97.15
1409时12分53秒   11    2.64    0.00    0.30    0.02    0.00    0.00    0.00    0.00   97.03
1509时12分53秒   12    1.48    0.00    0.18    0.01    0.00    0.01    0.00    0.01   98.30
1609时12分53秒   13    0.91    0.01    0.18    0.02    0.00    0.00    0.00    0.00   98.89
1709时12分53秒   14    0.01    0.00    0.11    0.10    0.00    0.00    0.00    2.64   97.14
1809时12分53秒   15    0.02    0.00    0.14    0.09    0.00    0.00    0.00    0.10   99.65

可以看到CPU14在%guest中的数据2.64是明显高于CPU15的%guest的0.10,如果你运行测试程序更长的时间,这个值 会更高(为什么是%guest 这个值高,因为我是远程登录到测试主机,并运行程序的,所以是guest)

一,使用taskset充分利用多核cpu,让cpu的使用率均衡到每个cpu上

#taskset
-p,    设定一个已存在的pid,而不是重新开启一个新任务
-c,    指定一个处理,可以指定多个,以逗号分隔,也可指定范围,如:2,4,5,6-8。

1,切换某个进程到指定的cpu上
taskset -cp 3 13290

2,让某程序运行在指定的cpu上
taskset -c 1,2,4-7 tar jcf test.tar.gz test

需要注意的是,taskset -cp 3 13290在设定一个已经存在的pid时,子进程并不会继承父进程的,
因此像tar zcf xxx.tar.gz xxx这样的命令,最好在启动时指定cpu,如果在已经启动的情况下,则需要指定tar调用的gzip进程。

二,使用nice和renice设置程序执行的优先级
格式:nice [-n 数值] 命令

nice 指令可以改变程序执行的优先权等级。指令让使用者在执行程序时,指定一个优先等级,称之为 nice 值。
这个数值从最高优先级的-20到最低优先级的19。负数值只有 root 才有权力使。
一般使用者,也可使用 nice 指令來做执行程序的优先级管理,但只能将nice值越调越高。

可以通过二种方式来给某个程序设定nice值:
1,开始执行程序时给定一个nice值,用nice命令
2,调整某个运行中程序的PID的nice值,用renice命令
通常通过调高nice值来备份,为的是不占用非常多的系统资源。

例:
nice -n 10 tar zcf test.tar.gz test

由nice启动的程序,其子进程会继承父进程的nice值。

查看nice值
# nice -n -6 vim test.txt &
# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 19427  2637  0  75   0 – 16551 wait   pts/6    00:00:00 bash
4 T     0 21654 19427  0  71  -6 – 23464 finish pts/6    00:00:00 vim

renice调整运行中程序的nice值
格式:renice [nice值] PID

三,使用ulimit限制cpu占用时间
注意,ulimit 限制的是当前shell进程以及其派生的子进程。因此可以在脚本中调用ulimit来限制cpu使用时间。
例如,限制tar的cpu占用时间,单位秒。
# cat limit_cpu.sh
ulimit -SHt 100
tar test.tar.gz test

如果tar占用时间超过了100秒,tar将会退出,这可能会导致打包不完全,因此不推荐使用ulimit对cpu占用时间进行限制。
另外,通过修改系统的/etc/security/limits配置文件,可以针对用户进行限制。

四,使用程序自带的对cpu使用调整的功能
某些程序自带了对cpu使用调整的功能,比如nginx服务器,通过其配置文件,可以为工作进程指定cpu,如下:
worker_processes  3;
worker_cpu_affinity 0001 0010 0100 1000;

这里0001 0010 0100 1000是掩码,分别代表第1、2、3、4颗cpu核心,这就使得cpu的使用比较平均到每个核心上。



如何找出Linux CPU使用率


用mpstat 和其他工具找出Linux CPU使用率

  请注意,使用下面的命令,安装你需要的特殊包sysstat。这个包包含Linux系统性能工具(Red Hat Linux/RHEL默认包含这些工具)。

  安装sysstat输入命令:

  # apt-get install sysstat

  如果你正在使用RHEL可以使用up2date命令:

  #up2date sysstat

  用mastpat显示每一个CPU的使用率

  如果你现在用的是SMP(多CPU)系统,就用maptat命令去显示每一个CPU使用率。它报告与处理器有关的统计。例如,输入命 令:

  # mpstat

  Mpstat命令可显示每一个可用处理器活动,从处理器为0开始。同时也可显示报告所有处理器的全书局平均 活动。Mpstat命令也可用在SMP和UP机器上,但对于后者,只显示所有处理器的全书局平均活动。

  输入命令:

  # mpstat -P ALL


要获得多个样本,多份报告,可用sar命令设置一个输出文件。运行sar命令作为背景使用过程中。

  命令:

  # sar -o output.file 12 8 >/dev/null 2>&1 &

  更好地使用nohup命令,以便您可以注销和用来以后检查报告。

  命令:

  # nohup sar -o output.file 12 8 >/dev/null 2>&1 &

  所有数据都以二进制形式记录并保存到一个文件中(数据文件)。这些数据可以用sar命令f选项有选择地显示。命令如下:

  # sar -f data.file

  任务:找出谁独占了CPUS

  最后,你需要确定谁独占了CPUS。用下面的命令可在Linux系统中显示前10个CPU用户。

  输入命令:

  # ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10

  或者:

  # ps -eo pcpu,pid,user,args | sort -r -k1 | less

你可以用下面的命令,每5秒输出3条信息。(正如前面的命令让自上次重新启动信息。)

  输入命令:

  $ iostat -xtc 5 3

  GUI工具可用笔记本/台式

  远程服务器上,最重要的工具/命令是相当有用的。您可以尝试gnome-system-monitor,用于X界面本地系统安装。您可 以访问内存的地址映射、发出信号、并终止进程。

  输入命令:

  $ gnome-system-monitor


Iostat 命令

  您也可以使用iostat命令报告中央处理器(CPU)的统计和输入/输出设备和分区统计。它可以用来查找 从上次重启后系统平均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。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值