unit_stress — GPU 服务器单元压力测试框架
1. 概述
unit_stress 是一套面向 GPU 服务器(成都研发中心)的自动化单元压力测试与日志检查框架(版本 v1.00.00,2025/07/06)。
支持的测试类型
| 测试类别 | 测试工具 | 覆盖硬件 |
|---|---|---|
| CPU 压力 | mprime (Prime95) | 所有 CPU 核心 |
| 内存压力 | stressapptest | 90% 可用内存 |
| GPU 压力 | gpu-burn (NVIDIA) / mts_system (JHS) / gemm_perf (天枢) | NVIDIA / JHS / 天枢 GPU |
| NVMe 压力 | fio (128K 顺序写) | 所有 NVMe 盘 |
| SATA 压力 | fio (4K 随机读) | 所有 SATA HDD |
| 网络压力 | iperf / ib_write_bw (RDMA) | NIC / BF3 DPU / MCX 网卡 |
| TMS 压力 | mts video transcode | TMS 转码卡 |
| BF3 压力 | ib_write_bw RDMA | BlueField-3 DPU / mini 模块 |
| 日志检查 | 黑白名单关键字过滤 | dmesg / messages / SEL / SDR |
| PCIe Switch 检查 | g4Xdiagnostics | PCIe Switch 端口错误 |
| 功耗监控 | ipmitool / bdaatool | TMS 功耗 / 整机功耗 |
2. 下载路径
2.1 本地下载📁 本地下载
提示:点击按钮将打开网络文件夹,点击即可下载
| 文件 | 版本 | 格式 |
|---|---|---|
unit_stress.zip | - | ZIP |
3. 目录结构
unit_stress/
├── unit_stress-v1.00.00.sh # ★ 主入口脚本
├── lib/ # 库函数(被主脚本 source 加载)
│ ├── color_code.sh # 终端颜色定义
│ ├── import.sh # 脚本导入辅助函数
│ ├── box_ping.sh # Box 间 ping 连通性检测
│ ├── basic_info.sh # 系统基础信息采集
│ ├── comment_set.sh # 配置解析、参数处理、目录生成
│ ├── get_sys_log.sh # 系统日志收集
│ ├── chk_fun_def.sh # 检查函数定义
│ ├── key_list_set.sh # 日志黑白名单过滤检查
│ ├── key_list.txt # 黑白名单关键字列表(v2.7)
│ ├── gen_log_folders.sh # 生成日志输出目录结构
│ ├── stress_test.sh # 压力测试调度器
│ ├── pciesw_2W_1to1.sh # PCIe Switch 检查 — 2W 1:1 拓扑
│ ├── pciesw_DPU_1to1.sh # PCIe Switch 检查 — DPU 1:1 拓扑
│ ├── pciesw_DPU_1to2.sh # PCIe Switch 检查 — DPU 1:2 拓扑
│ └── pciesw_JHS_1to2.sh # PCIe Switch 检查 — JHS 1:2 拓扑
├── stress_app/ # 压力测试应用脚本
│ ├── nvgpu_burn.sh / mprime.sh # GPU/CPU 压力
│ ├── fio_nvme.sh / fio_sata.sh # NVMe/SATA FIO 压力
│ ├── 12sata.conf / 24nvme.conf # 批量 FIO 配置
│ ├── bf3_host.sh / bf3_mini_stress.sh # BF3 RDMA
│ ├── jhs_stress/ # JHS GPU 压力
│ ├── MCX623432AS-ADAB/ # MCX 网卡测试 (iperf/DDM/updown)
│ ├── tms_stress/ # TMS 转码卡压力 (功耗/风扇)
│ └── yjs_stress/ # 云尖 RDMA/DDM
└── tools/ # 外部工具
├── g4Xdiagnostics.x86_64 # PCIe Switch 诊断工具
├── scrtnycli.x86_64 # 安全 CLI 工具
└── internet_V1.1.sh # 内网代理上网配置
4. 快速开始
4.1 前置依赖
| 依赖 | 用途 | 安装方式 |
|---|---|---|
| NVIDIA Driver 575.64 + CUDA 12.9 | GPU 驱动 | 参考 GPU_Install-Drive_操作说明.docx |
| gpu-burn-master | NVIDIA GPU 压力 | 下载编译安装,详见 7.1 节 |
| mprime (Prime95) | CPU 压力 | 已内置在 stress_app/ 中 |
| stressapptest | 内存压力 | 编译安装到 stressapptest-master/src/ |
| fio | 磁盘 I/O 压力 | apt-get install fio |
| iperf | 网络带宽测试 | apt-get install iperf |
| ipmitool | BMC/IPMI 通信 | apt-get install ipmitool |
| mts_system / bdaatool | JHS/TMS 压测 | 厂商提供 |
4.2 基本用法
# 进入脚本目录
cd /root/GPU_操作指南/unit_stress
# 运行压力测试:参数1=运行小时数,参数2=采集间隔(分钟)
./unit_stress-v1.00.00.sh 1 3
# 仅做日志检查(不启动压测)
./unit_stress-v1.00.00.sh 1 1
4.3 输出
# 进入脚本目录
cd /root/GPU_操作指南/unit_stress
# 运行压力测试:参数1=运行小时数,参数2=采集间隔(分钟)
./unit_stress-v1.00.00.sh 1 3
# 仅做日志检查(不启动压测)
./unit_stress-v1.00.00.sh 1 1运行后在当前目录生成 SYS_log/ 目录,包含所有采集的系统信息和压力测试日志。
5. 主入口脚本: unit_stress-v1.00.00.sh
路径: unit_stress/unit_stress-v1.00.00.sh
功能说明
主控脚本,负责:
- 加载所有
lib/库函数 - 解析命令行参数(运行时长、采集间隔)
- 根据硬件配置(SKU)启用对应测试项
- 循环采集系统日志并执行黑白名单检查
- 可选启动压力测试后台进程
代码流程
启动
├── 加载 color_code.sh → 终端颜色
├── 加载 import.sh → 导入辅助
├── 批量 source 所有 lib/*.sh
├── parse_arguments "$@" → 解析命令行参数
├── comment_set → 根据 SKU 设置测试开关
├── tool_chk → 检查依赖工具是否存在
├── usb_detect → USB 设备检测
├── [box1存在] → box_ping (Box 连通性)
├── key_list_set → 加载黑白名单
├── gen_log_folders → 创建日志目录
├── cal_setting_time → 计算运行时间
├── get_basic_info cfg cfg → 采集初始配置
│
└── 监控循环 (while runtime <= setting_time)
├── box_ping
├── gen_log_title
├── get_basic_info current txt
├── get_system_log → dmesg/messages/SEL/SDR
├── sys_date_default_chk → 检查系统日期
├── cfg_chk → 硬件配置一致性检查
├── test_chk → SEL/SDR 事件检查
├── print_sdr_screen → 终端输出 SDR
└── cal_runnig_time → 更新时间计数
关键参数
脚本内部通过 comment_set 函数识别 SKU(如 "SG4621-3D42GA"),不同的 SKU 会激活不同的硬件检测逻辑和压测项目。
6. lib/ 库脚本详解
6.1 color_code.sh — 终端颜色定义
路径: lib/color_code.sh
定义 ANSI 终端颜色变量,供所有脚本统一使用:
| 变量 | 颜色 | 用途 |
|---|---|---|
C_RED / C_GREEN / C_YELLOW | 红/绿/黄 | 正常色 |
C_LRED / C_LGREEN / C_LYELLOW | 亮红/亮绿/亮黄 | 高亮色(加粗) |
C_CYAN / C_LCYAN | 青色/亮青 | 信息提示 |
C_RESET | 重置 | 恢复默认颜色 |
C_RED='\033[0;31m'
C_LGREEN='\033[1;32m'
C_LCYAN='\033[1;36m'
C_RESET='\033[0m'
6.2 import.sh — 脚本导入
路径: lib/import.sh
提供 import() 函数,用于 source 外部脚本,并在导入前/后打印提示:
function import(){
echo -e "importing: ${C_GREEN} $1 ${C_RESET} ..."
. "$1"
echo -e "importing: ${C_GREEN} $1 ${C_RESET} completed!"
}
主脚本批量导入 lib 脚本时使用此机制,清晰的日志输出便于定位导入失败的脚本。
6.3 box_ping.sh — Box 连通性检测
路径: lib/box_ping.sh
功能: 对多 Box 拓扑中的 Box1/Box2 进行 ping 连通性测试,确保网络通信正常。
逻辑:
- 通过
ipmitool获取 Box1 BMC 的时间,验证 BMC 通信 - ping Box1 和 Box2 的管理 IP,记录丢包率
- 失败时写入
fail_log/目录
6.4 basic_info.sh — 系统基础信息采集
路径: lib/basic_info.sh
功能: 采集服务器的硬件和系统配置信息,分为两阶段:
第一阶段 (cfg): 启动时采集一次静态配置(CPU、内存、PCIe 设备、NVMe/SATA 磁盘、GPU 型号和数量、网卡信息、BIOS/BMC 版本)。
第二阶段 (current/txt): 每个监控周期采集一次运行时状态(CPU 使用率/频率、内存使用量、磁盘 SMART 信息、GPU 温度/功耗/使用率、SEL/SDR 日志)。
6.5 comment_set.sh — 配置与参数解析
路径: lib/comment_set.sh
功能: 最核心的配置脚本,包含 SKU 识别、命令行参数解析、测试开关控制:
cpu_stress='true' # CPU 压力测试
mem_stress='true' # 内存压力测试
nvgpu_stress='true' # NVIDIA GPU 压力
jhs_stress='false' # JHS GPU 压力
tms_stress='false' # TMS 转码卡压力
nvme_stress='false' # NVMe 压力
hdd_stress='false' # SATA 压力
iperf_stress='false' # 网络带宽压力
tianshu_stress='false' # 天枢 GPU 压力
bf3_mini_stress='false' # BF3 mini RDMA 压力
bf3_dpu_host_stress='false' # BF3 DPU Host RDMA
bf3_dpu_soc_stress='false' # BF3 DPU SoC RDMA
还包括目录创建、运行时间计算、日志标题生成、SDR 终端输出等功能。
6.6 get_sys_log.sh — 系统日志收集
路径: lib/get_sys_log.sh
功能: 每个监控周期收集系统日志:
| 日志源 | 命令 | 存储文件 |
|---|---|---|
| dmesg | dmesg (ring buffer) | dmesg.log |
| messages | /var/log/messages 或 journalctl | messages.log |
| SEL | ipmitool sel list | host_sel.log |
| SDR | ipmitool sdr elist | host_sdr.log |
| Box1 SEL | ipmitool -H <box1_ip> sel list | box1_sel.log |
| Box1 SDR | ipmitool -H <box1_ip> sdr elist | box1_sdr.log |
| Box2 SEL/SDR | 同上(若 box2 存在) | box2_sel/sdr.log |
6.7 chk_fun_def.sh — 检查函数定义
路径: lib/chk_fun_def.sh
功能: 定义各类硬件和日志的检查函数:
cfg_chk <item>: 检查硬件配置是否与初始基线一致(CPU 核心数、内存容量、GPU 数量、磁盘列表),防止硬件在运行中丢失test_chk date-default info: 检查系统日期与 BMC 日期是否一致test_chk hostsel elist/hostsdr elist: 检查 Host SEL/SDRtest_chk box1sel elist/box2sel elist: 检查 Box BMC SELtest_chk box1sdr elist/box2sdr elist: 检查 Box BMC SDRsys_date_default_chk: 检查系统时间是否被重置为出厂默认值(防止 CMOS 电池故障)sw_err_chk: 检查 PCIe Switch 端口错误计数
6.8 key_list_set.sh — 日志黑白名单检查
路径: lib/key_list_set.sh
功能: 核心日志检查逻辑,实现黑白名单过滤机制。
流程:
- 读取
key_list.txt中的关键字列表 - 对
messages.log/dmesg.log/ SEL / SDR 日志逐一扫描 - 黑名单匹配: 日志行包含黑名单关键字 → 标记为可疑
- 白名单过滤: 若同时匹配白名单关键字 → 视为已知误报,忽略
- 结果分类:
- Critical(严重): 黑名单命中且不在白名单 → 写入
fail_log/ - Informational(信息性): 黑名单命中但在白名单 → 仅记录
- Critical(严重): 黑名单命中且不在白名单 → 写入
- 输出检查摘要到终端
6.9 key_list.txt — 黑白名单关键字
路径: lib/key_list.txt
版本: v2.7 (Bytedance + Common)
包含 8 组关键字,使用 | 分隔的 POSIX 扩展正则表达式:
| 变量 | 类别 | 用途 |
|---|---|---|
ZJ_key1 | 字节跳动 messages 黑名单 | throttle, error, panic, fail, timeout, OOM, NVRM: Xid... |
ZJ_key2 | 字节跳动 messages 白名单 | 已知误报(如 "Error: Driver 'pcspkr' is already registered") |
ZJ_key3 | 字节跳动 dmesg 黑名单 | 同 messages 黑名单逻辑 |
ZJ_key4 | 字节跳动 dmesg 白名单 | 已知 dmesg 误报 |
ZJ_key5 | 字节跳动 stress SEL 黑名单 | deassert, down, abort, fail, ECC, IERR, thermal trip... |
ZJ_key6 | 字节跳动 cycle SEL 黑名单 | 同上(循环测试场景) |
ZJ_key7 | 字节跳动 SEL 白名单 | reset, shutdown, Transition to OK... |
ZJ_key8 | 字节跳动 SDR 黑名单 | 0 degree, no reading, 0 Watts, absent... |
CM_key1~8 | 通用(Common)黑白名单 | 更广泛的服务器通用关键字覆盖 |
6.10 gen_log_folders.sh — 日志目录生成
路径: lib/gen_log_folders.sh
功能: 在 SYS_log/ 下创建嵌套的日志目录结构:
SYS_log/ ├── basic/ # 系统基础信息 ├── system_log/ # dmesg, messages ├── host/ # Host SEL/SDR ├── cpu/ / mem/ / gpu/ # 各硬件配置与状态 ├── hdd/ / nvme/ # 磁盘信息 ├── tms/ / nic/ # TMS 转码卡 / 网卡 ├── box1/ # Box1 SEL/SDR(含 sw0/sw1 fail_log) ├── box2/ # Box2 SEL/SDR ├── bf3_mini/ / bf3_dpu/ / bf3/ # BF3 各模式 RDMA 日志
6.11 stress_test.sh — 压力测试调度器
路径: lib/stress_test.sh
功能: 集中启动和停止所有压力测试。参数:$1=测试时长(分钟),$2=日志输出路径,$3=应用路径。
| 函数 | 开关 | 工具 | 说明 |
|---|---|---|---|
cpu_stress_test | cpu_stress | mprime -t 3 | 所有核心,3线程 |
mem_stress_test | mem_stress | stressapptest | 90% 可用内存 |
nvgpu_stress_test | nvgpu_stress | gpu_burn -m 100% | NVIDIA GPU 100% 显存 |
jhs_stress_test | jhs_stress | mts_system stressTest | 16卡 JHS GPU |
tianshu_stress_test | tianshu_stress | gemm_perf | 天枢 GPU 矩阵运算 |
iperf_stress_test | iperf_stress | iperf -c -P 15 | 15 并行流,600s |
hdd_stress_test | hdd_stress | fio randrw 4K | 随机读,libaio |
nvme_stress_test | nvme_stress | fio write 128K | 顺序写,libaio |
tms_stress_test | tms_stress | mts video transPerf | H.264 1080p 转码 |
bf3_mini_host_rdma_test | bf3_mini_stress | ib_write_bw | mlx5_0→mlx5_5 RDMA |
bf3_dpu_host_rdma_test | bf3_dpu_host_stress | ib_write_bw (netns) | DPU 双端口 RDMA |
bf3_dpu_os_rdma_test | bf3_dpu_soc_stress | ib_write_bw | DPU SoC 端 RDMA |
结束机制: 运行 stoptime 后依次 killall fio iperf stressapptest mprime gpu_burn 等。
6.12 PCIe Switch 检查脚本
以下4个脚本功能相同但适配不同拓扑,使用 g4Xdiagnostics.x86_64 采集 PCIe Switch 计数器并逐项校验。
通用逻辑
- 执行
g4Xdiagnostics.x86_64 -i <port_id> counters采集计数器 - 使用
awk提取各列数据检查:
| 检查项 | 列 | 期望值 |
|---|---|---|
| portrx (端口接收) | 第2列 | 全部为 0 |
| badTLP (坏 TLP) | 第3列 | 全部为 0 |
| badDLLP (坏 DLLP) | 第4列 | 全部为 0 |
| RecDiag (接收诊断) | 第5列 | 特定行有特定值 |
| Linkdown (链路断开) | 第6列 | 全部为 0 |
| Serdeserror (SerDes 错误) | 第7列 | 全部为 0 |
四类拓扑的 RecDiag 期望值
| 脚本 | 拓扑 | 上行端口期望 | 下行端口期望 |
|---|---|---|---|
pciesw_2W_1to1.sh | 2W 1:1 | 00000004 | 00000003 |
pciesw_DPU_1to1.sh | DPU 1:1 | 00000004 | 00000003 |
pciesw_DPU_1to2.sh | DPU 1:2 | 00000004 | 00000003 |
pciesw_JHS_1to2.sh | JHS 1:2 | 00000004 | 00000003 |
拓扑端口映射
| 脚本 | Box1 SW0 | Box1 SW1 | Box2 SW0 | Box2 SW1 |
|---|---|---|---|---|
pciesw_2W_1to1.sh | -i 1 | -i 3 | -i 2 | -i 4 |
pciesw_DPU_1to1.sh | -i 1 | -i 3 | -i 2 | -i 4 |
pciesw_DPU_1to2.sh | -i 1 | -i 5 | -i 2 | -i 6 |
pciesw_JHS_1to2.sh | -i 1 | -i 5 | -i 2 | -i 6 |
7. stress_app/ 压力应用详解
7.1 GPU测试
路径: stress_app/nvgpu_burn.sh
下载与安装
gpu-burn 是 NVIDIA GPU 压力测试工具(开源项目 wilicc/gpu-burn),通过矩阵运算将 GPU 满载以检测稳定性和散热问题。
下载:
# 从 GitHub 下载源码(master 分支)
wget https://codeload.github.com/wilicc/gpu-burn/zip/master
解压:
unzip gpu-burn-master.zip
编译:
cd gpu-burn-master
# 安装编译依赖(gcc 编译器)
yum install gcc*
# 编译(确保 CUDA 环境已配置,nvcc -V 能正常输出)
make
注意: 编译前必须确保 NVIDIA CUDA Toolkit 已安装且环境变量配置正确。执行
nvcc -V应能正常显示版本信息。若未安装 CUDA,请先参考 GPU_Install-Drive_操作说明.docx 安装驱动和 CUDA。
编译成功后,当前目录会生成 gpu_burn 可执行文件。
选择 GPU
通过环境变量 CUDA_VISIBLE_DEVICES 指定要测试的 GPU:
# 仅测试 GPU 0 和 GPU 1
export CUDA_VISIBLE_DEVICES=0,1
# 测试所有 GPU(不设置该变量或设为空)
unset CUDA_VISIBLE_DEVICES
使用方式
# 稳定性测试(默认运行约10分钟)
./gpu_burn
# 快速测试
./gpu_burn 500 # 运行 500 秒
# 短时间测试
./gpu_burn 100 # 运行 100 秒
# 长时间烤机(48 小时 = 48×60×60 秒)
./gpu_burn $((48*60*60))
# 指定 GPU 并将输出保存到文件
export CUDA_VISIBLE_DEVICES=0,1
./gpu_burn 100 >> file.txt
时间参数说明
gpu_burn 接受的唯一参数是运行秒数。使用 Shell 算术表达式可方便计算:
| 表达式 | 计算结果 | 说明 |
|---|---|---|
$((60*60)) | 3600 | 1 小时 |
$((12*60*60)) | 43200 | 12 小时 |
$((24*60*60)) | 86400 | 24 小时 |
$((48*60*60)) | 172800 | 48 小时 |
在 unit_stress 中的调用
nvgpu_burn.sh 脚本调用方式:
cd gpu-burn-master
./gpu_burn -m 100% -tc $testtime >> gpu_stress.log 2>&1 &
-m 100%: 使用 100% GPU 显存(VRAM),确保显存也被压力覆盖-tc $testtime: 运行时长(秒),由主脚本计算并传入- 后台运行,输出记录到
gpu_stress.log
参考来源: 以上安装方法整理自 CSDN 博主「仰望手帕」的原创文章:https://blog.csdn.net/sun7138245/article/details/108974536
7.2 CPU 压力测试
路径: stress_app/mprime.sh
mprime 是 Prime95 的 Linux 命令行版本(GIMPS 项目 mersenne.org),通过 Lucas-Lehmer 素性测试算法执行浮点密集型运算,其内置的 Torture Test 模式是业界公认的 CPU 稳定性验证标准,能有效检测 CPU 过热、内存控制器错误和超频不稳定等问题。
下载与安装
mprime 已内置于 stress_app/mprime/ 目录中,包含以下主要文件:
| 文件 | 说明 |
|---|---|
mprime | 主程序(可执行文件) |
readme.txt | 完整使用说明与命令行参数 |
stress.txt | 压力测试详细讨论文档 |
prime.txt / local.txt | 用户偏好配置文件 |
注意: 运行 mprime 前必须确保系统已安装 32 位 C 运行库(glibc.i686)。CentOS/RHEL 系统可使用
yum install glibc.i686安装。
使用方式
mprime 通过 -t 参数启动 Torture Test(压力测试)模式:
# 进入 mprime 目录
cd mprime/
# 启动压力测试(纯 CPU 模式)
./mprime -t
# 启动 Blend 模式(CPU + 内存综合压力,推荐)
./mprime -t 3
测试类型说明
| 参数 | 模式 | 压力范围 |
|---|---|---|
-t (默认) | Small FFTs | 主要压力 CPU 核心和 L1/L2 缓存 |
-t 2 | In-place large FFTs | 压力 CPU + 内存控制器 |
-t 3 | Blend | 综合压力 CPU + 内存 + 内存控制器(使用所有核心) |
建议: 若机器做过超频或用于生产环境验证,建议运行 Torture Test 至少 24-48 小时。运行时间越长,越有可能发现因过热或内存过载导致的硬件错误。
在 unit_stress 中的调用
stress_test.sh 中 CPU 压力测试的调用方式:
cd mprime/
./mprime -t 3 | tee -a cpu_stress.log &
-t 3: Blend 模式,CPU + 内存 + 内存控制器综合压力,使用所有核心- 后台运行,输出记录到
cpu_stress.log
7.3 内存压力测试
路径: stress_app/mem/
stressapptest 是 Google 开发的内存接口压力测试工具(开源项目 stressapptest/stressapptest),通过最大化处理器和I/O对内存的随机流量来创建真实的高负载场景,用于检测内存信号完整性、内存控制器和总线接口问题。
下载与安装
方式一:包管理器安装:
# Ubuntu/Debian
sudo apt-get install stressapptest
# CentOS/RHEL
sudo yum install stressapptest
方式二:源码编译:
# 克隆源码
git clone https://github.com/stressapptest/stressapptest.git
cd stressapptest
./configure
make
sudo make install
使用方式
# 基本用法(测试 256MB,8 线程,运行 20 秒)
./stressapptest -s 20 -M 256 -m 8 -W
# 完整压力测试(自动检测内存大小,使用全部 CPU 核心)
./stressapptest -s 3600 -W
# 长时间烤机(24 小时)
./stressapptest -s $((24*60*60)) -W
参数说明
| 参数 | 说明 |
|---|---|
-s seconds | 运行时长(秒) |
-M mbytes | 测试内存大小(MB),默认自动检测全部可用内存 |
-m threads | 内存拷贝线程数,默认为 CPU 核心数 |
-W | 使用更高 CPU 压力的内存拷贝模式 |
-n ipaddr | 添加网络测试线程,连接到指定 IP |
-f filename | 添加磁盘测试线程,使用指定临时文件 |
-F | 不校验结果,使用 libc memcpy(更快) |
-l logfile | 将日志输出到指定文件 |
在 unit_stress 中的调用
stress_test.sh 中内存压力测试的调用方式:
stressapptest -s $testtime -W >> mem_stress.log 2>&1 &
-s $testtime: 运行时长(秒),由主脚本计算并传入-W: 高压力模式,增加 CPU 负载以提高内存访问强度- 后台运行,输出记录到
mem_stress.log
7.4 磁盘 I/O 压力测试
路径: stress_app/fio_nvme.sh, stress_app/fio_sata.sh
NVMe 测试参数
fio --name=seq_write --filename=/dev/nvmeXn1 \
--ioengine=libaio --direct=1 --thread=1 \
--numjobs=1 --iodepth=128 --rw=write \
--bs=128k --runtime=$testtime --time_based=1 \
--size=100% --norandommap=1 --randrepeat=0
SATA 测试参数
fio --name=random_read --filename=/dev/sdX \
--ioengine=libaio --direct=1 --thread=1 \
--numjobs=1 --iodepth=32 --rw=randrw --rwmixread=100 \
--bs=4k --runtime=$testtime --time_based=1 \
--size=100% --norandommap=1 --randrepeat=0
| 参数 | NVMe | SATA | 说明 |
|---|---|---|---|
| rw | write | randrw (100%读) | NVMe=顺序写, SATA=随机读 |
| bs | 128K | 4K | 块大小 |
| iodepth | 128 | 32 | I/O 队列深度 |
| ioengine | libaio | libaio | Linux 异步 I/O |
FIO 配置文件: stress_app/12sata.conf, stress_app/24nvme.conf
针对特定盘数的批量 FIO 配置(48H 压力测试):
12sata.conf:/dev/sdb~/dev/sdm12 块 SATA 盘 4K 随机读24nvme.conf:/dev/nvme0n1~/dev/nvme23n124 块 NVMe 盘 128K 顺序写
fio 12sata.conf # 启动 12 盘 SATA 压测
fio 24nvme.conf # 启动 24 盘 NVMe 压测
7.5 BF3 压力测试
bf3_mini_stress.sh — BF3 Mini 模块 RDMA
路径: stress_app/bf3_mini_stress.sh
适用于 QDH Box 中 2 块 BF3 Mini 模块,通过 mlx5_0 和 mlx5_5 设备执行 RDMA 双向带宽测试:
# Server端 (mlx5_0)
numactl -m 0 -N 0 ib_write_bw --report_gbits -d mlx5_0 -p 10000 --run_infinitely &
# Client端 (mlx5_5 → 192.168.11.12)
numactl -m 0 -N 0 ib_write_bw --report_gbits -d mlx5_5 \
-F 192.168.11.12 -p 10000 --run_infinitely | tee mlx5_5.log &
bf3_host.sh — BF3 DPU Host RDMA
路径: stress_app/bf3_host.sh
适用于 2 端口 BF3 DPU 模块,通过 Linux network namespace (netns) 隔离双端口网络栈后执行 RDMA 自环测试:
ip netns add ns0 && ip netns add ns1
ip link set ens9f0np0 netns ns0
ip link set ens9f1np1 netns ns1
ip netns exec ns0 ib_write_bw -d mlx5_0 ... &
ip netns exec ns1 ib_write_bw -d mlx5_1 ... 192.168.20.1 &
7.6 jhs_stress/ — JHS GPU 压力测试
stress_test_jhs.sh
路径: stress_app/jhs_stress/stress_test_jhs.sh
对 16 张 JHS GPU 卡逐一启动 mts_system enable stressTest:
cpupower -c all frequency-set -g performance
for i in {0..15}; do
mts_system enable stressTest all $testtime --model_id=1 --card=$i &
done
chk_res.sh — 结果检查
路径: stress_app/jhs_stress/chk_res.sh
检查 JHS stress 日志中是否有 fail/error 等关键字,若有则写入失败报告。
7.7 tms_stress/ — TMS 转码卡压力测试
stress_test_tms.sh — TMS Stress 启动
路径: stress_app/tms_stress/stress_test_tms.sh
自动发现 TMS 转码卡(lspci | grep "Device 1e93:1004"),逐一启动 H.264 1080p 转码压力测试:
BDF=`lspci -vvv | grep -i "Device 1e93:1004" | awk '{print $1}'`
for bdf in $BDF; do
index_num=`bdaatool -l | grep $bdf | awk '{print $1}' | tr -d '[]'`
nvidia mts video enable transPerf trans_h264_1080p all all $testtime --card=$index_num &
done
功耗监控
| 脚本 | 功能 |
|---|---|
stress.sh | 启动功耗监控主循环 |
power-fen.sh | 分频采集整机功耗(IPMI 读取 PSU 功率) |
tms_power_monitor.sh | 采集 TMS 卡单独功耗 |
power-stress.sh | 功耗 + 转码联合压力 |
风扇控制
| 脚本 | 功能 |
|---|---|
fan-b.sh | 控制 Box 风扇转速(PWM 调速) |
fan-h.sh | 控制 Host 风扇转速 |
结果检查
chk_res.sh: 检查 TMS 转码结果是否有错误tms_stress/chk_res.sh: 检查 TMS 功耗压力结果
7.8 MCX 网卡测试
updown_BF3.sh — 端口 Link Up/Down
路径: stress_app/MCX623432AS-ADAB/updown_BF3.sh
对 MCX623432AS-ADAB 网卡端口执行循环 up/down 操作,验证链路稳定性:
ip link set $interface down
sleep 5
ip link set $interface up
# 检查链路是否恢复、是否有错误
iperf/ — 网络带宽测试
| 脚本 | 角色 | 功能 |
|---|---|---|
set.sh | 配置 | 设置网口 IP 地址 |
c1.sh | Client | iperf 客户端,向 Server 发送流量 |
s2.sh | Server | iperf 服务端,接收流量并统计带宽 |
iperf -c <server_ip> -P 15 -t 600 -i 5 -f g
# -P 15: 15 个并行流 -t 600: 运行 600 秒
# -i 5: 每 5 秒输出 -f g: 以 Gbits 显示
down-up_mcx.sh — MCX 端口 Down/Up
路径: stress_app/MCX623432AS-ADAB/down-up/down-up_mcx.sh
与 updown_BF3.sh 类似,针对 MCX 端口执行 link down/up 循环测试。
DDM_ethtool/ — 光模块 DDM 监控
| 脚本 | 功能 |
|---|---|
DDM_ethtool.sh | 使用 ethtool -m 读取光模块 DDM 信息(温度、电压、偏置电流、TX/RX 功率) |
check_ddm.sh | 检查 DDM 数据是否在正常范围内,异常则告警 |
7.9 yjs_stress/ — 云尖(YJS) Stress 测试
rdma_yjs/ — RDMA 带宽测试
路径: stress_app/yjs_stress/rdma_yjs/
包含云尖交换机多端口 RDMA 带宽测试脚本(ib_write_bw 自环 + 8 端口交叉):
| 脚本 | 角色 | 功能 |
|---|---|---|
set.sh | 配置 | 网口 IP(8 个网段: 192.168.2.x~192.168.5.x) |
1.sh / 2.sh | 测试 | RDMA 测试变体 |
rdma.sh / rdma_me.sh | 测试 | RDMA 主测试 / ME 版本 |
yuan.sh | 测试 | 原始 RDMA 测试脚本 |
1to1/ — 一对一 RDMA 拓扑:
| 脚本 | 角色 | 功能 |
|---|---|---|
server.sh | Server | 启动 8 个 ib_write_bw Server 进程 |
client.sh | Client | 启动 8 个 ib_write_bw Client 进程 |
run.sh | 综合 | Client+Server 完整测试流程 |
run1.sh~run8.sh | Client | 每端口独立 RDMA Client 配置 |
RDMA 关键参数:
ib_write_bw -d bfa_0 -x 0 -p 10000 -n 10000 --report_gbits \
-Q 1 -r 1 -q 8 -t 1024 -a -b -F --recv_post_list 8 --run_infinitely
| 参数 | 含义 |
|---|---|
-d bfa_X | RDMA 设备名 |
-p | 端口号(每个连接不同) |
-n | 每次迭代的消息数 |
--report_gbits | 以 Gbps 为单位报告 |
-q / -Q | QP 数量(队列对) |
-t 1024 | 消息大小 (bytes) |
-a / -b / -F | 异步 / 双向 / 前台运行 |
--recv_post_list 8 | 预发布 8 个接收请求 |
--run_infinitely | 无限循环 |
single/ — 单端口 RDMA:
| 脚本 | 功能 |
|---|---|
run.sh | Server+Client 自环测试 |
client1.sh~client4.sh | 各端口 Client |
s1.sh~s4.sh | 各端口 Server |
ddm_yjs/DDM_yjs.sh — 光模块 DDM 监控
路径: stress_app/yjs_stress/ddm_yjs/DDM_yjs.sh
对 YJS 交换机的光模块执行 DDM(Digital Diagnostics Monitoring)监控,检查光模块的温度、电压、偏置电流和收发功率是否正常。
8. tools/ 工具目录
8.1 internet_V1.1.sh — 内网代理上网
路径: tools/internet_V1.1.sh
功能: 允许内网服务器通过代理访问外网(用于安装依赖包)。
source internet_V1.1.sh -a # 允许上网(添加代理)
source internet_V1.1.sh -d # 禁止上网(移除代理)
实现: 向 /etc/bashrc 或 /etc/bash.bashrc 写入/删除 http_proxy=http://172.27.0.249:80,兼容 CentOS/RHEL/Debian/Ubuntu。
8.2 g4Xdiagnostics.x86_64
PCIe Switch 诊断工具(二进制),由 PCIe Switch 厂商提供,用于读取 Switch 端口计数器、检查端口错误。在 pciesw_*.sh 脚本中通过不同 -i <port_id> 参数调用。
8.3 scrtnycli.x86_64
安全 CLI 工具(二进制),用于与安全芯片/TPM 交互。
9. 使用示例
9.1 标准压力测试(1小时,每3分钟采集)
cd /root/GPU_操作指南/unit_stress
./unit_stress-v1.00.00.sh 1 3
9.2 仅做日志检查(不做压力测试)
cd /root/GPU_操作指南/unit_stress
./unit_stress-v1.00.00.sh 1 3在 comment_set.sh 中将所有 _stress='true' 设置为 'false',然后运行:
./unit_stress-v1.00.00.sh 1 1
9.3 启用/禁用特定测试
编辑 lib/stress_test.sh 中的 comment_set 函数:
cpu_stress='false' # 禁用 CPU 压力
nvgpu_stress='true' # 启用 GPU 压力
nvme_stress='true' # 启用 NVMe 压力
9.4 自定义黑白名单
编辑 lib/key_list.txt,按格式追加或修改关键字。例如:
ZJ_key1="原有关键字|新增关键字|另一个关键字"
9.5 解读日志输出
运行后检查 SYS_log/ 目录:
fail_log/→ 需要处理的异常basic/→ 系统配置基线cpu/mem/gpu/nvme/→ 各硬件测试日志host/box1/box2/→ BMC SEL/SDR 日志
10. 相关文档
| 文档 | 路径 | 说明 |
|---|---|---|
| GPU 驱动安装 | GPU_Install-Drive_操作说明.docx | NVIDIA 驱动 + CUDA 安装 SOP |
| 驱动安装脚本 | install_gpu_driver.sh.txt | 自动化安装脚本 |
| 日志黑白名单 | ../LOG_CHECK-BLACK&WHITE_操作指南/Log_Black & White-操作指南.docx | 黑白名单机制说明 |
| GPU Burn | ../gpu-burn-master/ | GPU 烧机工具源码 |
11. 版本历史
| 版本 | 日期 | 变更 |
|---|---|---|
| v1.00.00 | 2025/07/06 | 初始版本,支持成都 GPU 服务器 Stress Test |
维护者: Charles Qin
适用范围: Debian / CentOS / RHEL / Ubuntu
测试覆盖: NVIDIA GPU / JHS GPU / TMS 转码卡 / BF3 DPU / NVMe / SATA / RDMA / PCIe Switch