| 测试类型 | 代表工具 | 特点 | 适用场景 |
|---|---|---|---|
| 瞬冲极限 | FurMark、gpu-burn | 人为解锁功耗墙,散热允许下的绝对极限 | 散热设计验证、出厂烤机 |
| 稳态负载 | 实际训练任务、stress-ng | 持续可预期的负载模式 | 日常稳定性评估 |
| 随机轰炸 | stress-ng 混合模式 | CPU/内存/IO/中断同时扰动 | 系统级鲁棒性测试 |
关键认知:
展开代码# 全核满载 5 分钟(自动选择最优算法) stress-ng --cpu 0 --timeout 5m --times # 指定 8 线程跑矩阵乘法 30 分钟(AVX/AVX-512 自动启用) stress-ng --cpu 8 --cpu-method matrixprod --timeout 30m
展开代码# 全核满载 + 实时温度监控(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 突降 = 热节流发生展开代码# CPU + IO + VM + 磁盘同时扰动(模拟混沌生产环境) stress-ng --cpu 4 --io 4 --vm 2 --hdd 2 --timeout 5m --times
展开代码# 安装 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
展开代码# 压测同时开另一个终端监控 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 # 不可纠正错误
展开代码# 步骤 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),专门触发潜在硬件缺陷。
展开代码# 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 = 磁盘瓶颈或故障展开代码# 官方源(国内可能慢) 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
展开代码# 全卡满载 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
| 特性 | FurMark | gpu-burn |
|---|---|---|
| 平台 | Windows/Linux GUI | Linux CLI |
| 负载类型 | 图形渲染 | CUDA GEMM 计算 |
| 覆盖单元 | 核心 + 显存 | 核心 + 显存 + Tensor Core |
| 自动化 | 难 | 易(脚本化) |
| 数据中心适用性 | 低 | 高 |
展开代码# 实时观察(另开终端) 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 设备温度,最高即目标卡
展开代码# 查看卡槽地址 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**
展开代码# 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 60 | 1 分钟 | 温度 < 80°C |
| 故障内存定位 | stress-ng --vm-method flip + 单条测试 | 5 分钟/条 | 故障条复现 ECC,健康条无错 |
| GPU 散热验证 | gpu_burn 300 | 5 分钟 | 温度 < 83°C 无降频 |
| 混沌测试 | stress-ng --cpu 4 --io 4 --vm 2 --hdd 2 | 10 分钟 | 系统不崩溃、服务不中断 |
本文作者:zzz
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!