一、Spec CPU 2017简介
SPEC是标准性能评估公司(Standard Performance Evaluation Corporation)的简称。SPEC CPU是SPEC组织推出的CPU子系统基准测试程序,最新版本是SPEC CPU 2017。SPEC CPU测试类型包括两种:整型运算和浮点运算,每个类型又分为两个部分:speed单任务速度测试,rate多任务吞吐量测试。
其中speed是针对单任务的计算速度测试,rate针对系统运行多任务的吞吐量进行测试。每种模式有基值(Base)和峰值(Peak)两个性能衡量指标,base测试对编译有严格的规定,比如仅仅允许使用一种编译器、编译优化选项不能超过4个等等;而peak测试中可以针对不同的测试项目使用不同的编译器和不同的优化选项,从而让各项测试的测试结果达到最优。通常来讲,base的测试更严格所以大部分情况下可以只测试base来衡量CPU的性能水平。
SPEC测试推荐使用Linux操作系统,并且对编译器的版本要求较高。glbic不低于2.27、gcc不低于7.3.0,不同版本的gcc对性能的影响也不同,建议安装高版本。本指导使用Ubuntu22.04系统进行SPEC CPU2017的安装和测试。
SPEC CPU 2017是一套CPU子系统测试工具,包括4大种类共43个测试。
4个种类为: SPECrate 2017 Integer SPECrate 2017 Floating Point
对应用例编号为5XX
SPECspeed 2017 Integer SPECspeed 2017 Floating Point
对应用例编号为6XX
Int整型测试
SPECrate@2017Int
SPECspeed@2017Int
编程语言
用例含义
500.perlbench_r
600.perlbench_s
C
PERL 编程语言
502.gcc_r
602.gcc_s
C
GNU C编译器
505.mcf_r
605.mcf_s
C
路线规划
520.omnetpp_r
620.omnetpp_s
C++
离散事件模拟-计算机网络
523.xalancbmk_r
623.xalancbmk_s
C++
通过XSLT进行XML到HTML转换
525.x264_r
625.x264_s
C
视频压缩
531.deepsjeng_r
631.deepsjeng_s
C++
人工智能:-beta树搜索(国际象棋)
541.leela_r
641.leela_s
C++
人工智能:Monte Carlos树搜索(GO)
548.exchange2_r
648.exchange2_s
Fortran
人工智能:递归式解决方案发生器(数独)
557.xz_r
657.xz_s
C
一般数据压缩
float浮点型测试
SPECrate@2017Floating Point
SPECspeed@2017Floating Point
编程语言
用例含义
503.bwaves_r
603.bwaves_s
C++, C, Fortran
爆炸建模
507.cactuBSSN_r
607.cactuBSSN_s
C++
物理:相对论
508.namd_r
C++
分子动力学
510.parest_r
C++
生物医学成像:有限元素的光学断层扫描
511.povray_r
C++, C
光线跟踪
519.lbm_r
619.lbm_s
C
流体力学
521.wrf_r
621.wrf_s
Fortran, C
天气预报
526.blender_r
C++, C
3D渲染和动画
527.cam4_r
627.cam4_s
Fortran, C
大气建模
628.pop2_s
Fortran, C
大规模海洋建模(气候水平)
538.imagick_r
638.imagick_r
C
图像操作
544.nab_r
644.nab_r
C
分子动力学
549.fotonik3d_r
649.fotonik3d_r
Fortran
计算电磁学
554.roms_r
654.roms_r
Fortran
区域海洋建模
cpu2017目录结构:
1、benchspec -> CPU -> 主要500-999,43个基准 -> 1) src:源码文件 2)build:编译目录 3)run:运 行目录 4)exe:可执行文件目录 5)data:三个数据集目录
2、benchspec -> Makefile.defaults makefile模板文件
3、bin -> runcpu runcpu命令文件
4、bin -> harnes
5、config -> Example-gcc-linux-x86.cfg 模板配置文件,例如:gcc_dir, label, optimize优化参数等
result 存放运行日志
二、安装编译器
2.1、安装编译器
本例使用ubuntu22.04,默认gcc版本为9.4,通过手动apt install升级到11.4版本。
apt install gcc gfortran g++
确认当前的GCC版本:
#gcc -v
注:Centos系统需要安装以下依赖
yum install gcc gcc-c++ gcc-gfortran libgcc.i686 libstdc++-devel.i686 glibc.i686 glibc-devel.i686 libstdc++.i686 libnsl -y
2.2、挂载SPEC CPU ISO
将SPCCPU的ISO镜像上传到系统目录/home/siland/,然后挂载到创建好的testiso目录下。
创建testiso目录:#mkdir -p /root/testiso
挂载:#mount -o loop /root/cpu2017-1.1.9.iso /root/testiso/
2.3、安装SPEC2017
进入目录:#cd /root/testiso
安装:#./install.sh
2.4、设置安装目录
根据提示,输入安装目录(如/home/spc2017)并输入Y确认
三、配置gcc-config
3.1、进入speccpu安装目录下的config目录
#cd /home/spc2017/config
3.2、新建s220.cfg文件,建议拷贝一个模板然后修改。注意,intel选择x86.cfg;如果是armCPU则选择aarch64.cfg。vi
#cp Example-gcc-linux-x86.cfg test.cfg
3.3、打开复制文件,根据情况修改参数
#vim test.cfg
3.4、查询服务器CPU线程数,本例中I9-14900KF是24核(8+16,只有8核可以超线程,线程数8*2+16=32),因此将threads修改为32
threads =32
3.5、将gcc_dir目录修改为/usr
define gcc_dir "/usr" # EDIT (see above) gcc
3.6、如果gcc版本为≥10,还需要取消如下注释
如果打算测试后上报官网,还需打开reportable:默认reportable选项为0关闭。测试时如果不打算上传官网,可以带参数--noreportable
修改完成后保存退出
四、gcc测试
摸底测试参照以下指导进行,多次测试后如果开始正式测试,请做好软硬件检查和优化,确保环境最优条件下测试。
4.1、执行命令使得配置生效
#source ../shrc
4.2、设置ulimit
#ulimit -s unlimited
4.3、清理系统缓存
#echo 3 > /proc/sys/vm/drop_caches
4.4、测试模型主要有intrate intspeed fprate fpspeed四种,可以一次性跑,也可以分开跑。
测试1:四种模型都跑(不建议,时间长,出错不易发现)
#runcpu -c /home/spec2017/config/test.cfg intrate intspeed fprate fpspeed --noreportable
测试2:四种模型分开跑,且只跑1次(默认3次)
#runcpu -c /home/spec2017/config/test.cfg intrate -n 1 --noreportable
#runcpu -c /home/spec2017/config/test.cfg intspeed -n 1 --noreportable
#runcpu -c /home/spec2017/config/test.cfg fprate -n 1 --noreportable
#runcpu -c /home/spec2017/config/test.cfg fpspeed -n 1 –noreportable
测试3:只跑单一运算模型如500.perlbench_r编程语言
#runcpu -c /home/spec2017/config/test.cfg 500.perlbench_r --noreportable -n 1 --rate
参数介绍:
--tune :base|peak|all指定测试范围,只测base或peak,默认all全部测试。
--copies:32,线程数。默认为config中设置。
-n :1 测试次数,默认是跑3次,如果想快速出结果可以指定只跑1次。
--noreportable:选择不上报测试结果到官网
备注:测试会产生大量临时测试数据,会占用大量空间,请及时清除
五、结果分析
从测试时间来看,4项测试耗时均比较长。测试次数设置为1,测试时间累计约16h。而通常标准的测试要求次数为3(测试次数少于3,SPEC报告会有Invalid Run标识并且errors上报did not have enough runs),因此预计耗时至少48h。
从测试分数来看,影响测试性能的因素有很多。服务器的硬件如风扇、电源、硬盘、内存和环境温度,BIOS配置、OS下系统优化设置等。要参考多方因素,针对不同的测试大类调整对应的系统设置,才能得到较高的测试数据,因此需要消耗大量的时间反复测试和优化。例如:speed为单任务速度测试,BIOS需要关闭超线程Hyper Threading;而rate为多任务吞吐量测试,需要打开超线程。
六、建议硬件配置
1.风扇:
满配高性能风扇,提高散热性能,降低散热引起的频率波动。环境温度要确保在正常运行范围,确保散热能力。
2.电源:
满配电源,性能测试对功耗要求较高,供电能力直接影响到性能。
3.硬盘:
使用NVMe硬盘,性能测试对数据读写要求较高,读写速度快的硬盘可以有效提高测试性能。
4.CPU:
测试前最好对CPU进行跑分或者压测确保CPU不存在其他问题。建议使用PTU工具进行压测。
5.内存:
选择大厂、颗粒质量好的高性能内存,并且注意插法。1DPC:白槽位满插,2DPC:黑白槽位满插。
七、BIOS调优设置
BIOS
Default
Speed
Rate
备注
Enable LP[Global](Hyper Threading)
ALL LPs
Single LP
ALL LPs
超线程,speed单任务速度测试需要关闭,rate多任务吞吐测试需要开启
Intel Turbo Boost Technology
Enable
Enable
Enable
Core Prefetchers (Hardware, Adjacent
Cache,DCU Streamer, DCU IP
All Enable
All Enable
All Enable
CPU C6 Report
Disable
Disable
Disable
深层省电模式,开启有助于性能
Intel VT-d
Disable
Disable
Disable
Intel虚拟化,减少VMM管理IO流量
八、OS系统优化
8.1、将CPU的运行优先级设置最高
#nice -n -20 runcpu
8.2、将 CPU 运行频率设置为高性能模式:
#cpupower frequency-set -r -g performance
如没有该命令,根据提示自行安装。
8.3、最后执行如下命令:
#sysctl -w vm.dirty_ratio=1
备注:vm.dirty_ratio 可以用脏数据填充的绝对最大系统内存量,当系统到达此点时,必须将所有脏数据提交到磁盘,同时所有新的 I/O 块都会被阻塞,直到脏数据被写入磁盘。
九、报错分析
关于Error "reportable flag is not set"
解决方案:可以在.config中找到reportable选项并设为1,开启
关于Error"base did not have enough runs"
解Spec cpu决方案:可以利用将all替换为出错基准程序单个跑去查阅报错,大概率是次数没有跑足3次
关Spec cpu于gfortran: error: unrecognized command line option '-fallow-argument-mismatch'; did you mean '-Wno-argument-mismatch'?
版权归原作者 C1rcle3 所有, 如有侵权,请联系我们删除。