麒麟系统下specCPU2017性能测试与优化实践

张开发
2026/4/13 12:56:16 15 分钟阅读

分享文章

麒麟系统下specCPU2017性能测试与优化实践
1. 麒麟系统与specCPU2017测试初探第一次在麒麟系统上跑specCPU2017的时候我踩了不少坑。这个测试套件是评估CPU性能的黄金标准但在国产操作系统上跑起来确实有些特殊注意事项。先说说我的测试环境飞腾S5000C服务器搭配麒麟V10 SP3 2403系统用的是系统自带的gcc 7.3编译器。specCPU2017和2006版最大的区别在于测试用例设计。2017版的int和fp测试用例在speed和rate模式下是完全不同的这点和2006版很不一样。很多人容易搞混speed和rate测试的区别——speed测试的是单线程性能可以开启OpenMP多线程而rate测试的是吞吐量虽然可以跑多个副本但每个副本内部是禁用多线程的。2. 测试环境搭建2.1 系统准备在麒麟系统上安装specCPU2017前需要先装几个基础包。我习惯用这个命令一次性搞定yum install gcc-c numactl* gcc-gfortran这几个包缺一不可gcc-c提供C编译器numactl用于NUMA节点控制gcc-gfortran则是Fortran编译器。安装过程中如果遇到依赖问题建议先更新系统源。2.2 specCPU2017安装我用的cpu2017-1.0.5.iso镜像文件挂载后直接运行install.sh脚本。这里有个小技巧安装目录最好选在/opt下因为测试过程中会产生大量临时文件根分区空间不足会导致测试失败。安装完成后记得source一下shrc文件初始化环境变量cd /opt/cpu2017 source ./shrc3. 配置文件调整3.1 基础配置配置文件是测试的核心麒麟系统下需要特别注意这几个参数CC/CFLAGS指定编译器和优化选项PORTABILITY设置系统兼容性标志BASE/PEAK区分基础测试和峰值测试我常用的gcc7配置模板是这样的%define gcc_dir /usr %define gcc_version 7.3.0 CC $gcc_dir/bin/gcc -stdgnu99 CXX $gcc_dir/bin/g -stdgnu98 FC $gcc_dir/bin/gfortran3.2 优化参数针对飞腾S5000C处理器我推荐加入这些优化选项-O3最高级别优化-marchnative启用本地CPU特有指令集-fopenmp支持OpenMP并行-flto链接时优化实测下来正确的优化参数能让性能提升20%以上。但要注意过度优化可能导致测试结果无效。4. 测试执行与参数解析4.1 基本命令最常用的测试命令格式如下runcpu -D -c cpu2017-gcc7-5000C -T base -i ref -n 1 intspeed fpspeed参数详解-D强制重新编译-c指定配置文件(不带.cfg后缀)-T测试类型(base/peak)-i输入数据集(test/ref/train)-n运行次数(正式报告需要3次)4.2 测试集选择specCPU2017有四个主要测试集intrate整数吞吐量fprate浮点吞吐量intspeed整数速度fpspeed浮点速度如果想测试特定子项可以直接指定编号比如runcpu -c myconfig 503 510 6035. 麒麟系统专属优化5.1 内核参数调优在/etc/sysctl.conf中添加这些参数能显著提升性能vm.swappiness 10 vm.dirty_ratio 40 vm.dirty_background_ratio 10 kernel.numa_balancing0修改后执行sysctl -p生效。特别是关闭numa_balancing对多socket系统很关键。5.2 编译器优化麒麟系统自带的gcc7.3虽然稳定但性能不是最优。我推荐从源码编译gcc10./configure --prefix/opt/gcc10 --enable-languagesc,c,fortran make -j$(nproc) make install然后用新编译器重新编译测试用例浮点性能通常能提升15%左右。5.3 测试环境隔离为避免系统干扰测试前建议关闭所有非必要服务设置CPU为性能模式绑定测试进程到特定NUMA节点具体操作systemctl isolate runlevel3.target cpupower frequency-set -g performance numactl --cpunodebind0 --membind0 runcpu ...6. 结果分析与验证6.1 报告解读测试完成后会在result目录生成HTML报告。重点关注这几个指标Base Ratio基础测试分数Peak Ratio峰值测试分数Run Time实际运行时间Comp Ratio编译时间占比6.2 有效性检查有效的测试结果应该满足三次运行结果偏差3%编译日志无warning/error运行过程无异常中断如果发现异常建议检查/var/log/messages中的系统日志cpu2017/benchspec/CPU下的详细日志dmesg输出的内核消息7. 常见问题解决7.1 编译失败处理遇到编译错误时可以尝试降低优化级别(-O2代替-O3)移除-marchnative添加-Wno-errorxxx忽略特定警告7.2 性能异常排查如果测试分数明显低于预期检查CPU频率是否锁定在最高用perf stat分析CPI等指标确认numactl绑定正确7.3 内存不足问题大内存测试项(如627.cam4)可能因OOM失败解决方法增加swap空间使用hugepage减少并行测试数量8. 进阶技巧8.1 自动化测试用脚本实现自动化测试和结果收集#!/bin/bash for i in {1..3}; do runcpu -c myconfig -n 1 all run_$i.log ./parse_result.py run_$i.log summary.csv done8.2 交叉验证为验证结果可靠性我通常会在不同时间段重复测试更换不同优化参数对比与其他基准测试工具结果交叉验证8.3 性能热点分析结合perf工具找出性能瓶颈perf record -g -- runcpu ... perf report -g graph,0.5,caller这个方法帮我发现过L3缓存命中率低的问题。经过多次实践我发现麒麟系统运行specCPU2017最关键的还是系统调优和编译器选择。飞腾处理器对GCC的某些优化选项响应特别好比如-ftree-vectorize和-funroll-loops。测试过程中一定要记录详细的日志这对后期分析异常结果特别有帮助。

更多文章