unit_stress — GPU 服务器单元压力测试框架 ← 返回

unit_stress — GPU 服务器单元压力测试框架

1. 概述

unit_stress 是一套面向 GPU 服务器(成都研发中心)的自动化单元压力测试与日志检查框架(版本 v1.00.00,2025/07/06)。

支持的测试类型

测试类别测试工具覆盖硬件
CPU 压力mprime (Prime95)所有 CPU 核心
内存压力stressapptest90% 可用内存
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 transcodeTMS 转码卡
BF3 压力ib_write_bw RDMABlueField-3 DPU / mini 模块
日志检查黑白名单关键字过滤dmesg / messages / SEL / SDR
PCIe Switch 检查g4XdiagnosticsPCIe Switch 端口错误
功耗监控ipmitool / bdaatoolTMS 功耗 / 整机功耗

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.9GPU 驱动参考 GPU_Install-Drive_操作说明.docx
gpu-burn-masterNVIDIA GPU 压力下载编译安装,详见 7.1 节
mprime (Prime95)CPU 压力已内置在 stress_app/
stressapptest内存压力编译安装到 stressapptest-master/src/
fio磁盘 I/O 压力apt-get install fio
iperf网络带宽测试apt-get install iperf
ipmitoolBMC/IPMI 通信apt-get install ipmitool
mts_system / bdaatoolJHS/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 输出

运行后在当前目录生成 SYS_log/ 目录,包含所有采集的系统信息和压力测试日志。


5. 主入口脚本: unit_stress-v1.00.00.sh

路径: unit_stress/unit_stress-v1.00.00.sh

功能说明

主控脚本,负责:

  1. 加载所有 lib/ 库函数
  2. 解析命令行参数(运行时长、采集间隔)
  3. 根据硬件配置(SKU)启用对应测试项
  4. 循环采集系统日志并执行黑白名单检查
  5. 可选启动压力测试后台进程

代码流程

启动
 ├── 加载 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 连通性测试,确保网络通信正常。

逻辑:

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

功能: 每个监控周期收集系统日志:

日志源命令存储文件
dmesgdmesg (ring buffer)dmesg.log
messages/var/log/messagesjournalctlmessages.log
SELipmitool sel listhost_sel.log
SDRipmitool sdr elisthost_sdr.log
Box1 SELipmitool -H <box1_ip> sel listbox1_sel.log
Box1 SDRipmitool -H <box1_ip> sdr elistbox1_sdr.log
Box2 SEL/SDR同上(若 box2 存在)box2_sel/sdr.log

6.7 chk_fun_def.sh — 检查函数定义

路径: lib/chk_fun_def.sh

功能: 定义各类硬件和日志的检查函数:

6.8 key_list_set.sh — 日志黑白名单检查

路径: lib/key_list_set.sh

功能: 核心日志检查逻辑,实现黑白名单过滤机制。

流程:

  1. 读取 key_list.txt 中的关键字列表
  2. messages.log / dmesg.log / SEL / SDR 日志逐一扫描
  3. 黑名单匹配: 日志行包含黑名单关键字 → 标记为可疑
  4. 白名单过滤: 若同时匹配白名单关键字 → 视为已知误报,忽略
  5. 结果分类:
    • Critical(严重): 黑名单命中且不在白名单 → 写入 fail_log/
    • Informational(信息性): 黑名单命中但在白名单 → 仅记录
  6. 输出检查摘要到终端

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_testcpu_stressmprime -t 3所有核心,3线程
mem_stress_testmem_stressstressapptest90% 可用内存
nvgpu_stress_testnvgpu_stressgpu_burn -m 100%NVIDIA GPU 100% 显存
jhs_stress_testjhs_stressmts_system stressTest16卡 JHS GPU
tianshu_stress_testtianshu_stressgemm_perf天枢 GPU 矩阵运算
iperf_stress_testiperf_stressiperf -c -P 1515 并行流,600s
hdd_stress_testhdd_stressfio randrw 4K随机读,libaio
nvme_stress_testnvme_stressfio write 128K顺序写,libaio
tms_stress_testtms_stressmts video transPerfH.264 1080p 转码
bf3_mini_host_rdma_testbf3_mini_stressib_write_bwmlx5_0→mlx5_5 RDMA
bf3_dpu_host_rdma_testbf3_dpu_host_stressib_write_bw (netns)DPU 双端口 RDMA
bf3_dpu_os_rdma_testbf3_dpu_soc_stressib_write_bwDPU SoC 端 RDMA

结束机制: 运行 stoptime 后依次 killall fio iperf stressapptest mprime gpu_burn 等。

6.12 PCIe Switch 检查脚本

以下4个脚本功能相同但适配不同拓扑,使用 g4Xdiagnostics.x86_64 采集 PCIe Switch 计数器并逐项校验。

通用逻辑

  1. 执行 g4Xdiagnostics.x86_64 -i <port_id> counters 采集计数器
  2. 使用 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.sh2W 1:10000000400000003
pciesw_DPU_1to1.shDPU 1:10000000400000003
pciesw_DPU_1to2.shDPU 1:20000000400000003
pciesw_JHS_1to2.shJHS 1:20000000400000003

拓扑端口映射

脚本Box1 SW0Box1 SW1Box2 SW0Box2 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))36001 小时
$((12*60*60))4320012 小时
$((24*60*60))8640024 小时
$((48*60*60))17280048 小时

在 unit_stress 中的调用

nvgpu_burn.sh 脚本调用方式:

cd gpu-burn-master
./gpu_burn -m 100% -tc $testtime >> gpu_stress.log 2>&1 &

参考来源: 以上安装方法整理自 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 2In-place large FFTs压力 CPU + 内存控制器
-t 3Blend综合压力 CPU + 内存 + 内存控制器(使用所有核心)

建议: 若机器做过超频或用于生产环境验证,建议运行 Torture Test 至少 24-48 小时。运行时间越长,越有可能发现因过热或内存过载导致的硬件错误。

在 unit_stress 中的调用

stress_test.sh 中 CPU 压力测试的调用方式:

cd mprime/
./mprime -t 3 | tee -a 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 &

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
参数NVMeSATA说明
rwwriterandrw (100%读)NVMe=顺序写, SATA=随机读
bs128K4K块大小
iodepth12832I/O 队列深度
ioenginelibaiolibaioLinux 异步 I/O

FIO 配置文件: stress_app/12sata.conf, stress_app/24nvme.conf

针对特定盘数的批量 FIO 配置(48H 压力测试):

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 风扇转速

结果检查

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.shClientiperf 客户端,向 Server 发送流量
s2.shServeriperf 服务端,接收流量并统计带宽
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.shServer启动 8 个 ib_write_bw Server 进程
client.shClient启动 8 个 ib_write_bw Client 进程
run.sh综合Client+Server 完整测试流程
run1.sh~run8.shClient每端口独立 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_XRDMA 设备名
-p端口号(每个连接不同)
-n每次迭代的消息数
--report_gbits以 Gbps 为单位报告
-q / -QQP 数量(队列对)
-t 1024消息大小 (bytes)
-a / -b / -F异步 / 双向 / 前台运行
--recv_post_list 8预发布 8 个接收请求
--run_infinitely无限循环

single/ — 单端口 RDMA:

脚本功能
run.shServer+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 仅做日志检查(不做压力测试)

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/ 目录:


10. 相关文档

文档路径说明
GPU 驱动安装GPU_Install-Drive_操作说明.docxNVIDIA 驱动 + CUDA 安装 SOP
驱动安装脚本install_gpu_driver.sh.txt自动化安装脚本
日志黑白名单../LOG_CHECK-BLACK&WHITE_操作指南/Log_Black & White-操作指南.docx黑白名单机制说明
GPU Burn../gpu-burn-master/GPU 烧机工具源码

11. 版本历史

版本日期变更
v1.00.002025/07/06初始版本,支持成都 GPU 服务器 Stress Test

维护者: Charles Qin
适用范围: Debian / CentOS / RHEL / Ubuntu
测试覆盖: NVIDIA GPU / JHS GPU / TMS 转码卡 / BF3 DPU / NVMe / SATA / RDMA / PCIe Switch