4.6.7 基准测试与容量评估
基准测试与容量评估的目标是量化CPU在不同负载模型下的吞吐、延迟与资源消耗,为容量规划、扩容阈值与性能基线提供依据。测试环境应尽量与生产一致(CPU型号、内核参数、频率调节、NUMA策略、编译选项),并在测试前固定变量(关闭不必要服务、绑定CPU频率、统一CGroup限制、清空缓存或明确缓存策略)。
原理草图(测试流程与容量评估)
测试原则与流程#
- 明确业务模型:CPU密集、混合型或系统调用密集,区分单线程与多线程负载。
- 选择代表性数据与请求分布:读写比例、请求大小、并发度、突发程度。
- 设定指标:吞吐(TPS/QPS)、平均/分位延迟(P95/P99)、CPU利用率、上下文切换、IPC、每核利用率差异。
- 基线建立:空载、轻载、中载、极限四阶段;每阶段稳定运行足够时间(5–30分钟)。
- 可重复性:至少三轮测试取中位数,记录系统版本、内核参数和工具版本。
工具安装与环境准备(示例)#
Ubuntu/Debian
apt update
apt install -y sysbench stress-ng linux-tools-common linux-tools-$(uname -r) \
util-linux procps git
# wrk 需编译
apt install -y build-essential libssl-dev
git clone https://github.com/wg/wrk.git /opt/wrk
cd /opt/wrk && make
ln -s /opt/wrk/wrk /usr/local/bin/wrk
CentOS/RHEL
yum install -y epel-release
yum install -y sysbench stress-ng perf util-linux procps-ng git
# wrk 编译
yum groupinstall -y "Development Tools"
yum install -y openssl-devel
git clone https://github.com/wg/wrk.git /opt/wrk
cd /opt/wrk && make
ln -s /opt/wrk/wrk /usr/local/bin/wrk
固定CPU频率与性能模式
# 查看当前 governor
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# 设置为 performance(需 root)
for c in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
echo performance > "$c"
done
绑定NUMA与CPU亲和性(示例)
# 将进程绑定到 NUMA node0 的 CPU
numactl --cpunodebind=0 --membind=0 -- ./your_test_binary
# 绑定指定CPU核
taskset -c 0-3 ./your_test_binary
常用CPU基准工具与命令示例#
1) sysbench(CPU计算基准)#
单核与多核测试
# 单核
sysbench cpu --cpu-max-prime=20000 --threads=1 run
# 多核(例如 8 核)
sysbench cpu --cpu-max-prime=20000 --threads=8 run
关键字段解释
- events per second:吞吐能力(事件/秒)
- total time:总耗时
- min/avg/max/95th percentile:延迟指标
期望输出片段(示例)
events per second: 2100.45
total time: 10.0002s
95th percentile: 5.15ms
2) stress-ng(多模型压力)#
# 纯CPU算术压力,8个worker,运行60秒
stress-ng --cpu 8 --timeout 60s --metrics-brief
# 系统调用压力
stress-ng --syscall 6 --timeout 60s --metrics-brief
说明
- --metrics-brief 输出每项压力的吞吐与失败计数,便于对比。
3) perf stat(微架构指标)#
# 采集IPC、分支预测、缓存命中
perf stat -e cycles,instructions,branches,branch-misses,cache-misses \
-a -- sleep 10
解读
- IPC = instructions / cycles,低IPC可能是缓存未命中或分支预测失败。
4) hackbench(上下文切换)#
# 评估线程调度与上下文切换压力
hackbench -g 20 -l 10000
5) 业务型基准:wrk(HTTP)#
# 10线程/200连接,压测60秒
wrk -t10 -c200 -d60s http://127.0.0.1:8080/health
常见指标
- Requests/sec:吞吐
- Latency:平均与分位延迟
关键指标解读(配合命令)#
- IPC 低 +
cache-misses高:优先检查缓存局部性与数据结构布局。 - 上下文切换高(
vmstat 1的cs):线程数过多或锁竞争。 - 负载均衡度差(
mpstat -P ALL 1):线程绑定不合理或负载分发策略不佳。 - CPU饱和:
top或mpstat显示接近100%但吞吐不提升,说明达到CPU瓶颈。
命令配套采样
mpstat -P ALL 1
vmstat 1
pidstat -w 1
容量评估方法与示例#
1) 线性外推法#
公式:最大吞吐 ≈ 基线吞吐 × (目标核数 / 基线核数) × 效率因子
示例
- 4核基线吞吐 20k QPS,目标 8核,效率因子 0.85
最大吞吐 ≈ 20k × (8/4) × 0.85 = 34k QPS
2) 拐点法(饱和点)#
逐步提高并发,绘制 QPS 与 P95 延迟曲线。拐点出现时作为安全容量上限。
3) SLA驱动法#
以 P95/P99 延迟满足目标为约束,求最大稳定 QPS。
4) 冗余与峰值系数#
保留20%–40%冗余,结合峰谷比与突发流量进行容量缓冲。
基准测试执行脚本(完整示例)#
#!/usr/bin/env bash
# 文件: /opt/bench/cpu_bench.sh
# 目的: 固定频率 + sysbench + perf + 结果记录
set -euo pipefail
OUT=/opt/bench/result_$(date +%F_%H%M).log
mkdir -p /opt/bench
echo "[1] Set governor to performance" | tee -a "$OUT"
for c in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
echo performance > "$c"
done
echo "[2] sysbench cpu single-thread" | tee -a "$OUT"
sysbench cpu --cpu-max-prime=20000 --threads=1 run | tee -a "$OUT"
echo "[3] sysbench cpu multi-thread" | tee -a "$OUT"
sysbench cpu --cpu-max-prime=20000 --threads=8 run | tee -a "$OUT"
echo "[4] perf stat 10s" | tee -a "$OUT"
perf stat -e cycles,instructions,branch-misses,cache-misses -a -- sleep 10 2>>"$OUT"
echo "[5] mpstat snapshot" | tee -a "$OUT"
mpstat -P ALL 1 5 | tee -a "$OUT"
echo "Done. Result: $OUT"
执行
chmod +x /opt/bench/cpu_bench.sh
/opt/bench/cpu_bench.sh
排错清单(常见问题)#
- 工具缺失或版本不兼容
- 现象:perf: command not found
- 处理:安装linux-tools-$(uname -r)或perf包。 - 频率未固定导致结果抖动
- 现象:多轮测试波动大
- 处理:设置 governor 为performance,关闭intel_pstate或固定频率。 - 容器/虚拟化限制导致“虚高/虚低”
- 现象:CPU利用率与吞吐不一致
- 处理:检查cgroup限额、vCPU超分、宿主机争用。 - NUMA跨节点访问
- 现象:吞吐下降,延迟飙升
- 处理:使用numactl绑定节点并验证内存策略。
练习题#
- 使用
sysbench cpu分别测试 1、2、4、8 线程,记录events/sec与95th percentile,绘制曲线并判断线性扩展区间。 - 使用
perf stat对比stress-ng --cpu 8与sysbench cpu的 IPC,分析谁更偏计算密集。 - 使用
wrk对一个本地 HTTP 服务进行 3 轮压测,找出 P95 延迟拐点并给出容量上限建议。
通过规范化的基准测试与容量评估,可建立可信的CPU性能基线,为扩容计划、资源配额与性能优化提供量化依据。