温馨提示×

Linux CPUInfo:CPU多核性能如何测试

小樊
35
2025-12-26 20:09:17
栏目: 智能运维

Linux CPU多核性能测试实操指南

一 准备与基线

  • 查看CPU拓扑与核心数:执行 lscpu,记录 CPU(s)Core(s) per socketThread(s) per coreNUMA 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-CoreMulti-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

0