KeyarchOS(浪潮信息云峦操作系统,KOS) | SPECCPU在RSICV环境下的适配和测试问题整理

目录

1 简介

2 编译内部工具并安装时遇到的问题

2.1 编译SPEC CPU中的make工具

2.2 编译某个tool

2.3 编译perl

2.4 build TimeDate

3 SPEC CPU 2017跑测试时遇到的问题


1 简介

当用户得到的SEPC CPU2017版本小于1.1.9时,此工具对RISC-V的支持存在很多不足。在RISC-V架构的环境下,当得到SPEC CPU的安装镜像并挂载后,运行install.sh脚本,会出现toolset相关的报错,提示当前没有适配RISC-V架构的tools,需要我们自己重新编译。自己编译这些SPEC CPU2017内部的工具集时,以及启动测试时,都会遇到一些问题,在此作一个整理,希望能帮到有相关需求的人。

参考资料:

https://zhuanlan.zhihu.com/p/425497845

https://gitee.com/lvxiaoqian/memo/blob/master/%E5%9C%A8unmatched%20Ubuntu21.04%E4%B8%8A%E8%B7%91cpu2017.md

SPEC CPU 2017快速使用指南:

https://www.spec.org/cpu2017/Docs/quick-start.html

2 编译内部工具并安装时遇到的问题

替换掉工具集目录中一些项目源码中的config.guess和config.sub文件

要替换的文件的路径大致如下:

./specinvoke/config.guess./specsum/build-aux/config.guess./tar-1.28/build-aux/config.guess./make-4.2.1/config/config.guess./rxp-1.5.0/config.guess./expat-2.1.0/conftools/config.guess./xz-5.2.2/build-aux/config.guess

需要替换成下面两个较新的文件:

http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess

http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub

2.1 编译SPEC CPU中的make工具

问题:出现”undefined reference to __alloca”以及”undefined reference to __stat”

解决方法:

在make-*/glob/glob.c文件中,顶部(包含头文件之后)加上:

#include <alloca.h>#define __alloca alloca#define __stat stat

2.2 编译某个tool

问题:出现“you should not run configure as root….”

解决方法:

export FORCE_UNSAFE_CONFIGURE=1

问题:出现“can’t locate test_driver.pl…..”

解决方法:

在make-*顶层源码目录下执行:

export PERL5LIB=$(pwd)/tests

这样Perl在加载模块时就会先在tests/目录里找得到test_driver.pl。

2.3 编译perl

问题:build perl 在 gcc10 环境下会报错。

解决方法:

由于build perl在gcc10上面有bug,修改Configure和cflags.SH文件中case "$gccversion" in相关1* 改为 1.*

2.4 build TimeDate

问题:构建TimeDate时,会报错:”error running TimeDate-2.30 test suite”

解决方法:

原因为在2020年之后,跑test就会出现此类错误,修改TimeDate-2.30/t/getdate.t

require Time::Local;-my $offset = Time::Local::timegm(0,0,0,1,0,70);+my $offset = Time::Local::timegm(0,0,0,1,0,1970);

编译成功:

编译完成内在工具集后,执行./install.sh脚本来安装SPEC CPU2017,安装成功显示如下:

3 SPEC CPU 2017跑测试时遇到的问题

问题一:

运行SPEC CPU2017的intrate测试集时,在502.gcc_r基准测试中遇到了一个非零退出码(exit code=137),导致runcpu没能完成。

原因分析:

在Linux系统中,退出码137表示:

128 + 9 = 137

即:进程被信号9(SIGKILL)杀死。

这通常是由于系统资源不足(尤其是内存不足)导致操作系统OOM Killer杀死了该进程。

运行命令:

journalctl | grep -i 'out of memory'

确实可以看到内核OOM Killer杀死了cpugcc_r_base.m进程。

解决方法:

方法一:减少并行副本数

即修改config/…cfg文件中的设置:

copies = xxxx #改小

方法二:启用并扩大Swap空间

实际措施:

两方面下手:减少copies(=6)以及启用swap(8g)。

swap操作参考:

https://blog.youkuaiyun.com/frdevolcqzyxynjds/article/details/131464777

sudo fallocate -l 8G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile

将以下内容加入/etc/fstab以开机自动挂载:

/swapfile none swap defaults 0 0 (这是qwen3给的内容)
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab (这是参考给的)

问题二:

在运行fprate测试集时,遇到错误:

解决方法:

取消config文件中“%define GCCge10 # EDIT: remove the '#' from column 1 if using GCC 10 or later”这一行的注释,让GCCge10变量有效。因为开发板环境中的gcc >= 10。

问题三:

在运行fprate测试集时,遇到错误:

解决方法:

503.bwaves_r,这是一个基于 Fortran 的流体动力学模拟程序,通常涉及大量数组运算和局部变量分配,非常容易受到栈大小限制的影响。

建议在运行 SPEC 测试前执行:

ulimit -s unlimited

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值