title: CPU 测试
created: 2026-06-20
updated: 2026-08-14
type: concept
tags: [cpu, benchmark, stress-test, burn-in]
sources:
- raw/scripts/0cpu.sh
- raw/scripts/cpuburn_run.sh
- raw/scripts/mprime.sh
- raw/scripts/sysbench.sh
- raw/scripts/lmbench.sh
- raw/scripts/mlc.sh
CPU 测试
CPU 测试涵盖信息查看、基准性能测试(benchmark)和压力/稳定性测试(stress-test / burn-in)三大类。本文梳理常用工具及其典型用法。
1. CPU 基本信息查看
lscpu
lscpu 从 /proc/cpuinfo 和 sysfs 中提取 CPU 架构信息,是最常用的概览命令。
lscpu
关键输出字段:
- Architecture — 架构(x86_64 / aarch64)
- CPU(s) — 逻辑核心总数
- Thread(s) per core — 每核超线程数
- Core(s) per socket — 每 socket 物理核数
- Socket(s) — 物理 CPU 颗数
- NUMA node(s) — NUMA 节点数
- L1d / L1i / L2 / L3 cache — 各级缓存大小
/proc/cpuinfo
直接读取 procfs 获取更细粒度信息:
cat /proc/cpuinfo
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l # 物理 CPU 数量
cat /proc/cpuinfo | grep "cpu cores" | uniq # 每核物理核心数
cat /proc/cpuinfo | grep "siblings" | uniq # 每核线程数
cat /proc/cpuinfo | grep -c "processor" # 逻辑处理器总数
CPU 温度监控
通过 lm_sensors 读取 CPU 温度,常在压力测试中配合采集:
sudo yum install -y lm_sensors
sudo sh -c "yes|sensors-detect"
sensors
参见:memory-testing(温度采集常用于内存压力测试场景)、disk-storage-testing(NVMe 温度监控类似)
2. 基准性能测试(Benchmark)
Linpack(Intel MKL)
Linpack 通过求解高密度线性方程组(浮点运算)衡量 CPU 科学计算性能。结果单位为 GFLOPS。
wget https://software.intel.com/content/dam/develop/external/us/en/documents/l_mklb_p_2021.1.1.001.tgz
cd l_mklb_p_2021.1.1.001/benchmarks_2021.1.1/linux/mkl/benchmarks/linpack
sh runme_xeon64
./xlinpack_xeon64
- 测试内容:大规模矩阵乘法和 LU 分解
- 结果解读:关注
GFlops值,越高越好。对比不同线程数下的扩展效率。 - 典型参数:矩阵规模(N)、步长(NB)、处理器数(NP)
Geekbench
跨平台综合跑分工具,评估单核/多核性能:
curl -Ol https://cdn.geekbench.com/Geekbench-5.4.1-Linux.tar.gz
tar -xvf Geekbench-*-Linux.tar.gz
cd Geekbench-5.4.1-Linux
- 测试内容:整数加密、浮点运算、内存、图像处理等子项
- 结果解读:输出 Single-Core Score 和 Multi-Core Score
- 在线对比:结果自动上传至 geekbench.com 供横向比较
sysbench CPU
sysbench 的 CPU 测试通过素数计算(查找指定上限内的素数)评估整数运算能力:
sysbench cpu --cpu-max-prime=10000 --threads=1 run
sysbench cpu --cpu-max-prime=10000 --threads=$N run > sysbench.$N.out
--cpu-max-prime=N— 素数搜索上限(默认 10000),越大计算量越大--threads=N— 并发线程数- 结果解读:输出总耗时(total time)和每秒事件数(events per second)。耗时越短 / 事件率越高,性能越好。建议从 1 到满核逐步增加线程,观察线性扩展性。
- 典型用法:
--threads=1,2,4,8,16,32,64,128分别测试,输出来对比多核扩展效率
Pi 测算(Super PI)
通过计算圆周率 π 的小数位数来评估 CPU 浮点性能:
wget ftp://pi.super-computing.org/Linux/super_pi.tar.gz
tar -xzvf super_pi.tar.gz
./super_pi 20 # 参数为位数
./super_pi 10000
- 测试内容:单线程浮点迭代运算
- 结果解读:输出计算耗时,耗时越短越好
- 适用场景:快速验证单核浮点能力,常用于超频稳定性检查
SPEC CPU
业界权威的 CPU 综合基准测试套件,分为 SPEC CPU 2006 和 SPEC CPU 2017:
# 加载环境
. ./shrc
# CPU 2006 — 飞腾 S5000C 示例
runspec -c cpu2006-phygcc1032-5000C.cfg -T base -n 1 -l -r 1 -i ref fp
runspec -c cpu2006-phygcc1032-5000C.cfg -T base -n 1 -l -r 128 -i ref int
# CPU 2017
echo 3 > /proc/sys/vm/drop_caches
runcpu -c cpu2017-phygcc1032-5000C.cfg -I -T base -n 1 --threads=128 -i ref intspeed
-c config_file— 指定编译器优化配置文件-T base|peak— base 为标准优化,peak 为激进优化-n / --iterations=N— 每项运行次数(≥3 次才能自动算分)-r / --copies=N— 并行副本数--threads=N— 每副本线程数(intspeed/fpspeed 模式使用)-i ref|test— 数据集大小,ref 为最大正式数据集- 结果解读:输出 SPECint / SPECfp 评分,比值越高越好
lmbench
lmbench 是一套微基准测试工具,涵盖 CPU 和内存延迟/带宽:
make results
make see
- 测试内容:进程创建延迟(lat_proc)、上下文切换(lat_ctx)、信号处理(sig inst/hndl)、内存延迟(lat_mem_rd)等
- 结果解读:
results/目录下的 summary.out 文件中包含了各项微基准测试结果 - 常见问题:ARM 平台编译需修改
src/Makefile(注释 231 行的bk.ver)和scripts/gnu-os(830 行arm→aarch64) make see— 自动生成 summary 汇总报告
3. 压力 / 稳定性测试(Stress-Test & Burn-In)
cpuburn
cpuburn 通过让 CPU 持续执行密集型指令来产生高热和高压,用于验证散热和长期稳定性:
# 下载并运行
wget https://cdn.pmylund.com/files/tools/cpuburn/linux/cpuburn-1.0-amd64.tar.gz
tar -xf cpuburn-1.0-amd64.tar.gz
cd cpuburn
# 单个核心,运行 3600 秒
./cpuburn -u 3600
# 两个核心,每 5 秒输出一次状态
./cpuburn -n 2 -u 5
-n N— 并发烧录的核心数(默认:全部可用核心)-u N— 运行时长(秒),-u 3600即 1 小时- 结果解读:无输出即正常运行。配合
sensors或ipmitool sdr监控温度。若系统没有因过热降频或崩溃,则通过测试。 - 生产环境脚本:
cpuburn_run.sh自动部署 cpuburn、配置 cron 定时记录温度,后台运行 600 秒
mprime(Prime95)
mprime 是 Linux 版 Prime95,业界公认的 CPU 稳定性测试工具:
mkdir Prime95
tar xvf p95v308b17.linux64.tar.gz -C Prime95
cd Prime95
./mprime -t
交互菜单选择压力模式:
| 模式 | 选项 | 说明 |
|---|---|---|
| Smallest FFTs | 1 | 测试 L1/L2 缓存,高功耗/高温 |
| Small FFTs | 2 | 测试 L1/L2/L3 缓存,最高功耗/高温 |
| Large FFTs | 3 | 压力内存控制器和 RAM |
| Blend | 4(默认) | 综合测试 |
-t— 直接进入压力测试模式- 结果解读:测试期间若发生计算错误("FATAL ERROR"),说明 CPU 或内存不稳定。通常建议运行 24-72 小时 作为 burn-in 验收标准
- 温度监控:脚本自动配置 cron 每 10 分钟记录
sensors数据
4. 微架构性能计数器(MLC)
Intel Memory Latency Checker(MLC)也包含 CPU 相关检测,详见 memory-testing。
关键指标对比
| 工具 | 测试类型 | 主要关注指标 | 适用场景 |
|---|---|---|---|
| Linpack | 浮点科学计算 | GFLOPS | HPC 节点验收 |
| sysbench | 整数计算 | events/sec, total time | 快速多核扩展评估 |
| Geekbench | 综合跑分 | Single/Multi-Core Score | 跨平台对比 |
| SPEC CPU | 综合标准基准 | SPECint/SPECfp 评分 | 官方认证基准 |
| cpuburn | 稳定性/散热 | 温度、是否 crash | 散热验证 |
| mprime | 稳定性/缓存 | FFH 错误数 | Burn-in 验收 |
| lmbench | 微基准 | 延迟、带宽 | 系统调优分析 |
| Super PI | 浮点单核 | 计算耗时 | 快速浮点验证 |
出链
- memory-testing — 内存带宽与延迟测试,与 CPU 缓存性能密切相关
- disk-storage-testing — 存储 I/O 测试,CPU 性能直接影响 I/O 吞吐
sysbench 详解
sysbench — 多维度基准测试工具
sysbench 是一个模块化、跨平台的基准测试工具,支持 CPU、内存、文件 I/O、线程、互斥体和数据库(MySQL)等多维度性能测试。它的设计哲学是"一个工具搞定所有基础性能评估",常用于服务器硬件验收、性能基线建立和系统调优前后的对比测试。
安装方法
包管理器安装(推荐)
# Ubuntu/Debian
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench
# RHEL/CentOS
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench
源码编译安装
# 从 GitHub 克隆
git clone https://github.com/akopytov/sysbench.git
cd sysbench
# 编译(不含 MySQL 支持)
./autogen.sh
./configure --without-mysql
make -j
make install
# 验证安装
sysbench --version
命令语法
sysbench [options]... [testname] [command]
- testname:测试名称,如
cpu、memory、fileio、threads、mutex或oltp_* - command:
prepare(准备数据)、run(执行测试)、cleanup(清理数据)
CPU 测试
CPU 测试通过计算指定范围内的素数来评估处理器的整数运算能力。
基本命令
sysbench cpu run
# 指定最大素数和线程数
sysbench cpu --cpu-max-prime=10000 --threads=1 run
多线程扩展性测试
通过逐步增加线程数,观察 CPU 性能的扩展曲线,评估多核处理能力:
for threads in 1 2 4 8 16 32 48 128; do
sysbench cpu --cpu-max-prime=10000 --threads=$threads run \
> sysbench.$threads.out
done
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
--cpu-max-prime |
10000 | 素数的上界,值越大计算量越大 |
--threads |
1 | 并发线程数 |
结果解读
CPU speed:
events per second: 452.63
- events per second:每秒完成的事件数(即每秒完成的素数计算次数),越高表示 CPU 性能越好
- total time:总测试耗时
- total number of events:完成的总事件数
内存测试
内存测试通过大块数据的顺序或随机读写来评估内存子系统的吞吐能力。
基本命令
sysbench memory run
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
--memory-block-size |
1K | 每次内存操作的块大小 |
--memory-total-size |
100G | 总传输数据量(越大测试越充分) |
--memory-scope |
global | 内存访问范围(global/local) |
--memory-hugetlb |
off | 是否使用 HugeTLB 页 |
--memory-oper |
write | 操作类型:write(写)/ read(读) |
--memory-access-mode |
seq | 访问模式:seq(顺序)/ rnd(随机) |
典型测试场景
# 顺序写测试
sysbench memory --memory-block-size=1M --memory-total-size=50G \
--memory-access-mode=seq --memory-oper=write run
# 随机读测试
sysbench memory --memory-block-size=1M --memory-total-size=50G \
--memory-access-mode=rnd --memory-oper=read run
结果解读
Total operations: 10485760 (983456.32 per second)
30720.00 MiB transferred (3021.34 MiB/sec)
- Total operations:完成的总内存操作次数
- per second:每秒操作数(OP/s)
- MiB transferred:总传输数据量
- MiB/sec:内存带宽(关键指标)
文件 I/O 测试
文件 I/O 测试模拟文件系统层面的读写负载。
测试流程
# 第 1 步:准备测试文件
sysbench fileio --file-num=8 --file-total-size=256M prepare
# 第 2 步:运行测试(选择一种模式)
sysbench fileio --file-num=8 --file-total-size=256M --file-test-mode=rndrw run
sysbench fileio --file-num=8 --file-total-size=256M --file-test-mode=seqrd run
sysbench fileio --file-num=8 --file-total-size=256M --file-test-mode=seqwr run
# 第 3 步:清理测试文件
sysbench fileio --file-num=8 --file-total-size=256M cleanup
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
--file-num |
128 | 测试文件数量 |
--file-total-size |
2G | 所有测试文件的总大小 |
--file-test-mode |
— | 测试模式:rndrw, seqrd, seqwr, rndrd, rndwr |
测试模式
| 模式 | 含义 | 模拟场景 |
|---|---|---|
rndrw |
随机混合读写 | 数据库事务处理 |
seqrd |
顺序读 | 大文件流式读取 |
seqwr |
顺序写 | 日志写入、文件导出 |
rndrd |
随机读 | 文件服务器 |
rndwr |
随机写 | 缓存更新 |
线程/互斥体测试
用于评估系统在大量线程并发情况下的调度和同步性能。
线程测试
sysbench threads run
| 参数 | 默认值 | 说明 |
|---|---|---|
--thread-yields |
1000 | 每次请求的 yield 次数 |
--thread-locks |
8 | 每个线程持有的锁数量 |
互斥体测试
sysbench mutex run
| 参数 | 默认值 | 说明 |
|---|---|---|
--mutex-num |
4096 | 互斥体数组大小 |
--mutex-locks |
50000 | 每个线程的互斥体锁定次数 |
--mutex-loops |
10000 | 互斥体锁外空循环次数 |
MySQL 数据库 OLTP 测试
sysbench 内置了 oltp_* 测试套件,用于评估 MySQL 数据库的 OLTP(在线事务处理)性能。
测试流程
# 准备数据
sysbench --mysql-host=localhost --mysql-port=3306 \
--mysql-user=test --mysql-password=mima \
--mysql-db=tempdb oltp_insert prepare
# 运行测试
sysbench --mysql-host=localhost --mysql-port=3306 \
--mysql-user=test --mysql-password=mima \
--mysql-db=tempdb oltp_insert run
# 清理数据
sysbench --mysql-host=localhost --mysql-port=3306 \
--mysql-user=test --mysql-password=mima \
--mysql-db=tempdb oltp_insert cleanup
支持的 OLTP 测试模式包括:oltp_insert、oltp_read_write、oltp_read_only、oltp_update_index 等。
结果解读总结
| 测试类型 | 关键指标 | 说明 |
|---|---|---|
| CPU | events/sec | 每秒事件数,越高越好 |
| 内存 | MiB/sec | 内存带宽,越高越好 |
| 文件 I/O | read/write MiB/sec, IOPS | 文件系统吞吐和 IOPS |
| 线程 | events/sec | 线程调度性能 |
| MySQL | tps, qps | 每秒事务数/查询数 |
相关概念
- cpu-testing — CPU 基准测试和压力测试方法(Linpack、cpuburn、mprime 等)
- memory-testing — 内存带宽与稳定性测试(STREAM、memtester、MLC 等)
- disk-storage-testing — 磁盘与存储 I/O 测试综合指南