Linux CPU多核性能测试实操指南
一 准备与基线
- 查看CPU拓扑与核心数:执行 lscpu,记录 CPU(s)、Core(s) per socket、Thread(s) per core、NUMA node(s),据此设置测试线程数(通常取接近物理核心数的线程数,超线程开启时可略增)。
- 预热与稳定:重启后静置数分钟,关闭不必要前台/后台服务,避免省电策略干扰(如将 CPU 调频策略设为 performance)。
- 环境一致:尽量在相同内核/驱动/虚拟化配置下重复测试,非生产环境执行,避免影响业务。
- 多次取平均:建议同配置重复 ≥3 次取中位数,降低偶然波动影响。
二 快速测试工具与命令
- sysbench(质数计算,易量化对比)
- 安装:yum/apt 安装 sysbench
- 多核示例:sysbench cpu --threads=$(nproc) --cpu-max-prime=20000 run
- 关注指标:事件总数、耗时、events per second(events/s),多核应显著高于单核且随线程数接近线性提升(受 NUMA/超线程影响)。
- UnixBench(综合CPU子项,生成 Index 分数)
- 安装与运行:下载源码、make 后执行
- 单核:./Run -c 1
- 多核:./Run -c $(nproc)
- 关注指标:System Benchmarks Index(多核分数应明显高于单核,数值越高越好)。
- Geekbench(跨平台对比)
- 下载并运行:./geekbench6(或 geekbench5),查看 Single-Core 与 Multi-Core 分数,便于与同类机型横向对比。
- stress / stress-ng(压力稳定性)
- 示例:stress-ng --cpu $(nproc) --timeout 60s --metrics-brief(满载运行 60 秒并输出简要指标),用于验证稳定性与调度/散热能力。
三 进阶与专项测试
- 编译测试(贴近真实工作负载)
- 示例:time make -j$(nproc);与 -j1 对比可直观看到并行构建的加速比,适合评估编译密集型场景的多核利用效率。
- 浮点计算专项(SuperPI)
- 单核示例:time echo “scale=5000;4*a(1)” | bc -l -q
- 多核思路:对各个逻辑 CPU 使用 taskset 并行执行 bc 计算,观察整体耗时与稳定性(更偏向浮点/稳定性验证)。
四 结果判读与瓶颈定位
- 可扩展性:多核分数/吞吐应随线程数增加而上扬;若增加线程后提升趋缓或下降,可能存在 NUMA 亲和性不佳、内存带宽瓶颈、超线程争用、频率降档/热限 等。
- 稳定性:压力测试期间频率是否稳定、是否出现降频/过热降载;长时多核测试更能暴露散热与电源策略问题。
- 虚拟化场景:留意宿主机资源争用、虚拟机 CPU 绑定/份额、超线程/拓扑透传设置;必要时固定 CPU 亲和并隔离干扰负载。
- 对比方法:保持工具版本、测试时长/参数一致,跨环境对比时标注内核/驱动/虚拟化平台版本,便于归因。
五 一键脚本示例
#!/usr/bin/env bash
set -e
echo "=== CPU 多核性能快速测试 ==="
echo "CPU 信息:"
lscpu | egrep '^(CPU\(s\)|Thread|Core|NUMA)'
threads=$(nproc)
echo "使用线程数:$threads"
echo -e "\n[1/3] sysbench CPU(质数到20000)"
sysbench cpu --threads=$threads --cpu-max-prime=20000 run
echo -e "\n[2/3] UnixBench 多核"
pushd /tmp/UnixBench/UnixBench >/dev/null 2>&1 || {
git clone https://github.com/kdlucas/byte-unixbench.git /tmp/UnixBench
pushd /tmp/UnixBench/UnixBench >/dev/null
make -j$threads
}
./Run -c $threads
echo -e "\n[3/3] stress-ng 稳定性(满载60秒)"
stress-ng --cpu $threads --timeout 60s --metrics-brief
echo "=== 完成 ==="
- 使用提示:将脚本中的路径与版本按实际环境调整;若需单核基线,分别运行 sysbench 与 UnixBench 时将线程设为 1。