硬件压力测试
2026-02-11
运维
00
请注意,本文编写于 52 天前,最后修改于 5 天前,其中某些信息可能已经过时。

目录

一、测试哲学:理解「瞬冲」与「稳态」
二、CPU 压力测试
2.1 基础满载测试
2.2 温度与节流观察
2.3 系统级随机轰炸
三、内存压力测试
3.1 基础压测
3.2 ECC 错误检测(企业级关键)
3.3 故障内存条定位流程
四、磁盘与 I/O 压力测试
五、GPU 压力测试(核心章节)
5.1 工具安装
5.2 基础压测
5.3 与 FurMark 的对比
5.4 温度与故障定位
六、高级:GPU 热插拔与维护
6.1 软件层面卸载(内核 4.19+)
6.2 重新启用
七、完整验收测试脚本
八、关键结论与建议

一、测试哲学:理解「瞬冲」与「稳态」

测试类型代表工具特点适用场景
瞬冲极限FurMark、gpu-burn人为解锁功耗墙,散热允许下的绝对极限散热设计验证、出厂烤机
稳态负载实际训练任务、stress-ng持续可预期的负载模式日常稳定性评估
随机轰炸stress-ng 混合模式CPU/内存/IO/中断同时扰动系统级鲁棒性测试

关键认知

  • 压测工具的「瞬冲」是 人为解锁 + 散热允许 的极限场景
  • 日常训练/推理 不会触及 这种极限(有自动降频、队列调度)
  • 故障定位时,先稳态复现,再瞬冲确认

二、CPU 压力测试

2.1 基础满载测试

展开代码
# 全核满载 5 分钟(自动选择最优算法) stress-ng --cpu 0 --timeout 5m --times # 指定 8 线程跑矩阵乘法 30 分钟(AVX/AVX-512 自动启用) stress-ng --cpu 8 --cpu-method matrixprod --timeout 30m

2.2 温度与节流观察

展开代码
# 全核满载 + 实时温度监控(10 分钟) stress-ng --cpu 0 --matrix 0 --tz -t 600 # 90% 负载非满血(观察动态调频行为) stress-ng --cpu 0 --cpu-load 90 --timeout 10m

关键指标

  • tz 列显示温度,超过 85°C 观察是否触发 CPU MHz 降频
  • bogo-ops/s 突降 = 热节流发生

2.3 系统级随机轰炸

展开代码
# CPU + IO + VM + 磁盘同时扰动(模拟混沌生产环境) stress-ng --cpu 4 --io 4 --vm 2 --hdd 2 --timeout 5m --times

三、内存压力测试

3.1 基础压测

展开代码
# 安装 sudo apt install stress-ng # 4 个 worker 分配 4GB,占住不释放,20 分钟 stress-ng --vm 4 --vm-bytes 4G --vm-keep --timeout 20m # 按总内存百分比施压(24GB 系统压 20% ≈ 4.8GB) stress-ng --vm 0 --vm-bytes 20% --vm-keep --timeout 10m

3.2 ECC 错误检测(企业级关键)

展开代码
# 压测同时开另一个终端监控 sudo dmesg -w | grep -iE 'edac|ecc|corrected|uncorrected|hardware error' # 或通过 IPMI 查看系统事件日志 sudo ipmitool sel list | grep -iE 'memory|ecc|dimm' # 查看 EDAC 驱动统计 cat /sys/devices/system/edac/mc/mc*/csrow*/ch*_ce_count # 可纠正错误 cat /sys/devices/system/edac/mc/mc*/csrow*/ch*_ue_count # 不可纠正错误

3.3 故障内存条定位流程

展开代码
# 步骤 1:带外日志定位故障 DIMM 槽位 sudo dmidecode -t memory | grep -B5 -A5 "Locator:.*DIMM.*" | grep -E "Locator:|Size:|Type:|Speed:" # 步骤 2:物理拔出后,单条压力测试验证 stress-ng --vm 4 --vm-bytes 80% --vm-method flip -t 5m --times # 步骤 3:复测带外日志确认无新增 ECC sudo ipmitool sel clear && stress-ng ... && sudo ipmitool sel list

关键参数 --vm-method flip: 对内存地址做位翻转(bit flip),专门触发潜在硬件缺陷。


四、磁盘与 I/O 压力测试

展开代码
# 4 路并发随机写,每路 8GB,5 分钟 stress-ng --hdd 4 --hdd-bytes 8G --timeout 5m # 同时压测 + IO 延迟监控 iostat -x 1 & stress-ng --hdd 8 --hdd-bytes 10G --timeout 10m kill %1

观察指标

  • %util 接近 100% 但 await < 10ms = 健康
  • %util 100% 且 await > 50ms = 磁盘瓶颈或故障

五、GPU 压力测试(核心章节)

5.1 工具安装

展开代码
# 官方源(国内可能慢) git clone https://github.com/wilicc/gpu-burn.git # 国内加速镜像 git clone https://ghfast.top/https://github.com/wilicc/gpu-burn.git cd gpu-burn && make

5.2 基础压测

展开代码
# 全卡满载 120 秒(显存 100% + 核心 100% + Tensor Core) ./gpu_burn 120 -m 100% # 稳定 80% 负载 500 秒(模拟实际训练强度) ./gpu_burn 500 # 指定显卡(0 号和 3 号卡) export CUDA_VISIBLE_DEVICES=0,3 ./gpu_burn 100

5.3 与 FurMark 的对比

特性FurMarkgpu-burn
平台Windows/Linux GUILinux CLI
负载类型图形渲染CUDA GEMM 计算
覆盖单元核心 + 显存核心 + 显存 + Tensor Core
自动化易(脚本化)
数据中心适用性

5.4 温度与故障定位

展开代码
# 实时观察(另开终端) watch -n 1 nvidia-smi # 关键指标 nvidia-smi -q -d TEMPERATURE,PERFORMANCE,POWER

过热处理流程

展开代码
# 1. 识别故障卡 PCI 槽位 lspci -vv -s 0000:41:00.0 | grep -i "physical slot" # 或 sudo dmidecode -t slot # 2. 获取 SN 码(报修用) nvidia-smi -q | grep "Serial Number" # 3. 若以上无效,跑压力测试 + 带外温度对比定位 ./gpu_burn 60 & # 然后到 BMC/IPMI 查看各 PCIe 设备温度,最高即目标卡

六、高级:GPU 热插拔与维护

6.1 软件层面卸载(内核 4.19+)

展开代码
# 查看卡槽地址 nvidia-smi -q | grep "Bus Id" # 输出:Bus Id : 0000:41:00.0 # 热卸载(需无进程占用) sudo nvidia-smi drain -p 0000:41:00.0 -m 1 # 验证状态 nvidia-smi # 显示:| 2 Tesla V100-PCIE... Off | 00000000:41:00.0 Off | **Drain**

6.2 重新启用

展开代码
# 1. 解除 drain sudo nvidia-smi drain -p 0000:41:00.0 -m 0 # 2. 重扫 PCIe 总线 echo 1 | sudo tee /sys/bus/pci/rescan # 3. 验证 nvidia-smi

七、完整验收测试脚本

展开代码
#!/bin/bash # hardware_stress_test.sh - 出厂验收全流程 LOG="stress_$(date +%F_%H%M).log" echo "=== 硬件压力测试开始 $(date) ===" | tee $LOG # 1. CPU 10 分钟满载 + 温度 echo "[1/4] CPU 压力测试..." | tee -a $LOG stress-ng --cpu 0 --matrix 0 --tz -t 600 --times 2>&1 | tee -a $LOG # 2. 内存 20 分钟 + ECC 监控 echo "[2/4] 内存压力测试..." | tee -a $LOG stress-ng --vm 0 --vm-bytes 80% --vm-method flip -t 20m --times 2>&1 | tee -a $LOG & PID=$! sleep 10 echo "ECC 错误统计:" | tee -a $LOG cat /sys/devices/system/edac/mc/mc*/csrow*/ch*_ce_count 2>/dev/null | tee -a $LOG wait $PID # 3. 磁盘 5 分钟 echo "[3/4] 磁盘压力测试..." | tee -a $LOG stress-ng --hdd 4 --hdd-bytes 8G -t 5m --times 2>&1 | tee -a $LOG # 4. GPU 2 分钟满载 echo "[4/4] GPU 压力测试..." | tee -a $LOG if [ -x ./gpu_burn ]; then timeout 130 ./gpu_burn 120 -m 100% 2>&1 | tee -a $LOG else echo "gpu-burn 未安装,跳过" | tee -a $LOG fi echo "=== 测试完成 $(date) ===" | tee -a $LOG echo "日志保存至: $LOG"

八、关键结论与建议

场景推荐工具时长通过标准
出厂验收上述完整脚本40 分钟无 ECC 错误、无热节流、无掉卡
日常巡检stress-ng --cpu 0 -t 601 分钟温度 < 80°C
故障内存定位stress-ng --vm-method flip + 单条测试5 分钟/条故障条复现 ECC,健康条无错
GPU 散热验证gpu_burn 3005 分钟温度 < 83°C 无降频
混沌测试stress-ng --cpu 4 --io 4 --vm 2 --hdd 210 分钟系统不崩溃、服务不中断

本文作者:zzz

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!