公司动态
在ARM架构Ubuntu系统上部署与配置SPECCPU2017基准测试套件
1. ARM架构Ubuntu系统环境准备在ARM架构的Ubuntu系统上部署SPECCPU2017之前需要做好充分的准备工作。不同于x86架构ARM平台需要特别注意交叉编译工具链的配置。我曾在树莓派4B和鲲鹏920服务器上都部署过这个测试套件总结出一些实用经验。首先需要安装基础编译工具链。打开终端执行以下命令sudo apt update sudo apt install -y gcc-aarch64-linux-gnu g-aarch64-linux-gnu gfortran-aarch64-linux-gnu这些包分别对应C、C和Fortran的交叉编译器。特别提醒如果你使用的是32位ARM系统如某些旧版树莓派需要将aarch64替换为arm-linux-gnueabihf。接下来安装必要的依赖库sudo apt install -y libncurses5 libncurses5-dev libssl-dev libbz2-dev \ libgmp3-dev libmpfr-dev libmpc-dev zlib1g-dev内存和存储空间也需要特别注意。SPECCPU2017在编译ref规模测试时需要至少16GB内存实测503.bwaves_r需要约12GB磁盘空间建议预留50GB以上。如果物理内存不足可以适当增加swap空间sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile2. SPECCPU2017安装详解获取SPECCPU2017镜像文件后建议先验证MD5校验和。我遇到过几次因下载不完整导致的安装失败后来养成了校验的习惯md5sum cpu2017-1.0.5.iso # 正确MD5应为a4d3a9d7e228b8a6f907e5e66e360e1e创建安装目录并挂载ISO镜像mkdir -p ~/speccpu2017 sudo mount -o loop cpu2017-1.0.5.iso /mnt cd /mnt执行安装脚本时有个小技巧先准备好响应文件可以避免交互式输入。创建install_answers文件yes /home/yourname/speccpu2017然后通过管道自动安装./install.sh install_answers安装完成后建议立即备份原始配置文件cd ~/speccpu2017 cp config/Example-gcc-linux-aarch64.cfg config/my_aarch64.cfg.bak3. ARM架构专属配置调整针对ARM架构的配置修改是整个过程的关键。打开config/my_aarch64.cfg文件需要重点关注以下几个部分首先是编译器路径设置。找到%ifndef %{gcc_dir}部分修改为%ifndef %{gcc_dir} % define gcc_dir /usr %endif然后是工具链前缀设置。将SPECLANG相关部分修改为SPECLANG %{gcc_dir}/bin/aarch64-linux-gnu- CC $(SPECLANG)gcc -stdc99 %{model} CXX $(SPECLANG)g -stdc03 %{model} FC $(SPECLANG)gfortran %{model}对于不同版本的编译器需要添加版本后缀。例如使用gcc-9时CC $(SPECLANG)gcc-9 -stdc99 %{model}优化选项也需要特别调整。在basepeakbase部分建议使用以下配置OPTIMIZE -O3 -mcpunative -fno-strict-aliasing -fno-unsafe-math-optimizations4. 编译与运行基准测试初始化SPEC环境cd ~/speccpu2017 source shrc首次编译建议先测试单个benchmark验证配置runcpu --configmy_aarch64 --actionbuild 500.perlbench_r完整编译所有测试项耗时较长建议使用screen或tmuxruncpu --configmy_aarch64 --actionsetup --sizeref all运行测试时可以根据硬件情况调整并行度。例如在64核ARM服务器上runcpu --configmy_aarch64 --copies64 --threads64 intrate监控测试进度的小技巧tail -f result/CPU2017.001.log.debug | grep -i success5. 常见问题排查问题1编译时报错unrecognized command line option这通常是优化选项不兼容导致的。解决方法是在配置文件中移除ARM架构不支持的选项如-marchnative。问题2运行时报内存不足可以尝试使用test规模测试--sizetest增加swap空间修改ulimitulimit -s unlimited问题3浮点测试项异常检查是否启用了正确的浮点ABI。在配置文件中添加EXTRA_FFLAGS -marcharmv8-asimd EXTRA_FLAGS -marcharmv8-asimd问题4性能结果异常偏低建议检查CPU频率是否锁定cpupower frequency-info是否启用了正确的CPU特性cat /proc/cpuinfo | grep Features系统负载情况top -H -p $(pgrep runcpu)6. 测试结果分析与优化完成测试后结果文件位于result目录下。重点关注几个关键指标执行时间result/CPU2017.001.result.txt性能分数result/CPU2017.001.log.debug硬件利用率通过sar或perf记录的数据对于性能调优可以尝试以下方法编译器优化EXTRA_OPTIMIZE -flto -fuse-linker-plugin -fno-semantic-interposition内存子系统优化EXTRA_LDFLAGS -Wl,--hash-stylegnu -Wl,--as-needed进程绑定对于NUMA系统submit taskset -c $SPECCOPYNUM $command在实际项目中我发现ARM架构上SPECCPU2017的分数对内存延迟特别敏感。通过调整numactl参数在一台鲲鹏服务器上获得了约7%的性能提升numactl --localalloc --cpunodebind0 runcpu ...