(KVM连载) 8.2.3 KVM CPU性能测试方法
8.2.3 性能测试方法
本节的CPU性能测试选取了SPEC CPU2006、内核编译和Super PI这三个基准测试来对比KVM客户机与原生系统的性能。下面分别介绍一下在本次性能中使用的具体测试方法。
1)SPEC CPU2006
在获得SPEC CPU2006的测试源代码后,进入其主目录后,运行install.sh脚本即可安装SPEC CPU2006,然后用source命令执行shrc脚本来配置运行环境,最后执行bin/runspec这个Perl脚本即可正式开始运行基准测试。SPEC CPU2006还提供了在Windows系统中可以执行的对应的.bat脚本文件。在Linux系统中,将这些基本执行步骤整合到一个Shell脚本中,如下:
#!/bin/bash
cd /root/cpu2006/
./install.sh
echo "starting SPECCPU2006 at $(date)"
source shrc
bin/runspec --action=validate -o all -r 4 -c \ Example-linux64-amd64-gcc43.cfg all
echo "SPECCPU2006 ends at $(date)"
本次示例中runspec脚本用到的参数中,--action=validate表示执行validate这个测试行为(包括编译、执行、结果检查、生成报告等步骤),-o all表示输出测试报告的文件格式为尽可能多的格式(包括html、pdf、text、csv、raw等),-r 4(等价于--rate --copies 4)表示本次将会使用4个并发进程执行rate类型的测试(这样可以最大限度地消耗分配的4个CPU线程资源),--config xx.cfg表示使用xx.cfg配置文件来运行本次测试,最后的all表示执行整型(int)和浮点型(fp)两种测试类型。runspec的参数比较多也比较复杂,可以参考其官方网站的文档[4]了解各个参数的细节。
在执行完上面整合的测试脚本后,在SPEC CPU2006的主目录下的result目录中,就会出现关于本次运行测试的各种测试报告,本次示例使用的报告是HTML格式的CINT2006.001.ref.html(对整型的测试报告)和CFP2006.001.ref.html(对浮点型的测试报告)两个文件。在这两个报告文件中,在报告的第一部分中有总体的测试分数,在报告中部的结果表格中记录了各个具体的基准测试的得分情况。分别在非虚拟化的原生系统和KVM客户机系统执行SPEC CPU2006,然后对比它们的测试报告中的分数即可得到对KVM虚拟化环境中CPU虚拟化性能的评估。
2)内核编译
本次内核编译的基准测试中,采用的方法是:对Linux 3.7.0正式发布版本的内核进行编译,并用time命令对编译过程进行计时。关于内核编译测试中的内核配置,可以随意进行选择,只是需要注意:不同的内核配置,它们的编译时间长度可能会相差较大。内核编译过程可以参考3.3.3节“编译KVM”中的详细介绍。执行make命令进行编译,用time命令计时,命令行操作如下:
[root@kvm-guest linux.git]# time make -j 4
<!-- 省略编译过程的输出信息;下面是时间只是演示需要,并非编译用的真实时间 -->
real 1m0.259s
user 0m18.103s
sys 0m3.825s
time输出信息中,第一行real的时间标识表示实际感受到的从程序开始执行到程序终止所经过的时间长度,第二行user的时间表示CPU在用户空间执行的时间长度,第三行sys表示CPU在内核空间执行的时间长度。在本次内核编译测试中,统计的时间是time命令输出信息的第一行(用real标识)中的时间长度。
3)Super PI
从http://superpi.ilbello.com/ 网页下载Linux版本的Super PI,然后运行super_pi这个可执行程序,本次Super PI的基准测试中选择执行了计算圆周率π的小数点后1048576(2的20次方)个数据位。在计算完成后,程序会输出本次计算花费的时间,命令行示例如下:
[root@kvm-guest super-pi]# ./super_pi 20
<!--省略其余输出信息 -->
Start of PI calculation up to 1048576 decimal digits
<!--省略其余输出信息 -->
Total calculation(I/O) time= 10.236( 0.284) Sec.
在x86-64架构的系统上运行该Super PI执行程序,可能会遇到找不到ld-linux.so.2共享库的一个错误提示,这是由于该Super PI程序比较老,是用32位的glibc链接而生成的,所以只需要在该64位系统中安装上32位的glibc库即可,命令行示例如下:
[root@kvm-guest super-pi]# ./super_pi 20
./super_pi: ./pi: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
[root@kvm-guest super-pi]# yum install glibc-2.12-1.80.el6.i686