解决 OpenWrt 下 CoreMark 跑分仅限单线程的强制多核并发测试脚本

一、背景痛点分析

在玩软路由或嵌入式开发时,我们经常使用 coremark 工具来对 CPU 的基准算力进行量化测试。然而很多在 OpenWrt 环境下内置或通过预编译包直接安装的 CoreMark,经常会遇到一个问题:

❌ 常见痛点:

直接在终端执行 coremark 时,无论你的处理器是 4 核、8 核甚至更多线程,它可能只会占用单颗核心进行单线程跑分。不仅多核总分无法正确体现,更没办法反应出高并发状态下的真实系统瓶颈与多线程加速增益。

为了解决强制这个单线程运行的问题,我编写了一个轻量高效的 Shell 脚本。它通过 Linux 底层并发机制强行将原有的二进制文件并行化多路输出,从而反应出所有逻辑核心的全部性能。

二、完整多核强跑脚本代码

创建一个名为 run_coremark.sh 的脚本文件,将以下代码粘贴进去。代码实现了多核心自动探测、并行分发以及最终多核总分的精确汇总:

#!/bin/sh
# 1. 改进的核心识别:统计 cpuinfo 中 processor 的数量
threads=$(grep -c "processor" /proc/cpuinfo)
echo "--------------------------------"
echo "检测到逻辑核心总数: $threads"
echo "正在启动全核并行跑分..."

# 2. 清理残留文件并开始后台运行
rm -f /tmp/coremark_*.log
for i in $(seq 1 $threads); do
    coremark > /tmp/coremark_$i.log 2>&1 &
done

# 3. 实时监控提示
echo "coremark运行中,请等待约 15-20 秒..."
wait

# 4. 计算总分
total_score=$(grep "Iterations/Sec" /tmp/coremark_*.log | awk '{sum += $3} END {print sum}')

echo "--------------------------------"
echo "多核总分: $total_score"
echo "平均每个核心得分: $(awk -v a=$total_score -v b=$threads 'BEGIN {print a/b}')"
echo "--------------------------------"

# 5. 清理临时文件
rm -f /tmp/coremark_*.log

三、脚本设计逻辑解析

四、使用指南

通过 SSH 客户端连接上你的 OpenWrt 路由器后,执行以下命令:

# 1. 赋予脚本可执行权限
chmod +x ./run_coremark.sh

# 2. 强跑全核并发测试
./run_coremark.sh