admin管理员组文章数量:1030065
【教程】检查RDMA网卡状态和测试带宽
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~
目录
检查硬件和驱动状态
测试RDMA通信
报错修复
对于交换机的配置,可以看这篇: 【教程】详解配置多台主机通过交换机实现互联通信_通过交换机链接多台设备-CSDN博客
检查硬件和驱动状态
1、查看是否识别到网卡(PCI 层)
代码语言:javascript代码运行次数:0运行复制lspci | grep -i mellanox
如果输出类似以下内容,说明系统已经识别到了硬件设备。
40:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5] 40:00.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
2. 查看驱动是否加载成功(内核模块)
代码语言:javascript代码运行次数:0运行复制lsmod | grep mlx5
mlx5_ib 466944 0 ib_uverbs 163840 2 rdma_ucm,mlx5_ib ib_core 417792 8 mlx5_core 2191360 1 mlx5_ib mlx_compat 69632 12
上述输出说明: 模块名 说明
mlx5_core
Mellanox 网卡核心驱动,控制数据面mlx5_ib
用于 RDMA(InfiniBand verbs)的支持ib_uverbs
用户态 Verbs 接口(userspace RDMA 程序会依赖)ib_core
RDMA 核心抽象层(通用 InfiniBand 子系统)mlx_compat
Mellanox 向后兼容层(用于 OFED 内核兼容性)
如果没加载,可尝试手动加载:
代码语言:javascript代码运行次数:0运行复制sudo modprobe mlx5_ib
还可以查看所有与 RDMA 相关模块:
代码语言:javascript代码运行次数:0运行复制lsmod | grep rdma
ib_uverbs rdma_ucm mlx5_ib
3. 查看网卡驱动和状态
代码语言:javascript代码运行次数:0运行复制ethtool -i ens1f1np1 # 替换为你的网卡名,ifconfig可查看
driver: mlx5_core version: 24.10-2.1.8 firmware-version: 16.35.4506 (MT_0000000012) expansion-rom-version: bus-info: 0000:1a:00.1 supports-statistics: yes supports-test: yes supports-eeprom-access: no supports-register-dump: no supports-priv-flags: yes
4. 查看 RDMA 设备信息(核心)
代码语言:javascript代码运行次数:0运行复制ibv_devinfo
hca_id: mlx5_0 transport: InfiniBand (0) fw_ver: 16.35.4506 node_guid: 043f:7203:00dc:00d4 sys_image_guid: 043f:7203:00dc:00d4 vendor_id: 0x02c9 vendor_part_id: 4119 hw_ver: 0x0 board_id: MT_0000000012 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 1024 (3) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet
这表示 RDMA 核心层已经注册并初始化成功。
5. 查看 RDMA 子系统
代码语言:javascript代码运行次数:0运行复制rdma link show
link mlx5_0/1 state ACTIVE physical_state LINK_UP netdev ens1f0np0 link mlx5_1/1 state ACTIVE physical_state LINK_UP netdev ens1f1np1
说明 RDMA 子系统已加载并绑定到对应网卡。
6. 检查 OFED 安装状态
如果你使用 Mellanox OFED(不是内核默认驱动),可以运行:
代码语言:javascript代码运行次数:0运行复制ofed_info -s
MLNX_OFED_LINUX-24.10-2.1.8.0:
确认你装的是 Mellanox 官方驱动栈。
测试RDMA通信
1、在两台服务器上新建以下脚本,命名为:rdma_test.sh 。
代码语言:javascript代码运行次数:0运行复制#!/bin/bash
# ===============================================
# Script: rdma_test.sh
# Author: 小锋学长
# Description:
# 一键运行 RDMA 带宽测试(ib_write_bw)工具,自动完成:
# - 自动检测 GID index
# - 切换 CPU governor 为 performance
# - 支持 server/client 模式
# - 支持 read / write / send 操作类型(默认 read)
# - 支持传入设备名、端口号
# - 测试后自动恢复 CPU governor
#
# Requirements:
# - ib_write_bw 工具(来自 perftest 包)
# - Mellanox 驱动已正确加载
# - RDMA 设备支持 RoCE 并已配置 IP + GID
#
# Usage:
# Server 模式:
# bash rdma_test.sh server
# bash rdma_test.sh server [device] [port] [mode_type]
#
# Client 模式:
# bash rdma_test.sh client <server_ip>
# bash rdma_test.sh client <server_ip> [device] [port] [mode_type]
#
# Examples:
# bash rdma_test.sh server mlx5_1 1 read
# bash rdma_test.sh client 192.168.5.228 mlx5_1 1 read
#
# Note:
# - 默认设备为 mlx5_1,默认物理端口为 1
# - GID index 会根据本地 IP 自动选择
# - 支持异常退出自动清理 CPU governor 设置
# ===============================================
# CONFIGURATION (默认值)
MODE="" # 第一个参数为运行模式,server 或 client
PEER_IP="" # 第二个参数作为 Server IP(仅 client 模式使用)
DEVICE="mlx5_1" # 第三个参数为设备名,默认值为 mlx5_1
PORT=1 # 第四个参数为物理端口,默认 1
MODE_TYPE="read" # 第五个参数为传输模式,read/write/send(默认 read)
GID_INDEX=-1 # 自动检测
# 解析参数
ARGS=$(getopt -o m:i:d:p:t: \
-l mode:,peer_ip:,device:,port:,mode_type: \
-n "$0" -- "$@")
if [ $? -ne 0 ]; then
echo "❌ 参数解析失败"
exit 1
fi
eval set -- "$ARGS"
while true; do
case "$1" in
-m|--mode) MODE="$2"; shift 2 ;;
-i|--peer_ip) PEER_IP="$2"; shift 2 ;;
-d|--device) DEVICE="$2"; shift 2 ;;
-p|--port) PORT="$2"; shift 2 ;;
-t|--mode_type) MODE_TYPE="$2"; shift 2 ;;
--) shift; break ;;
*) echo "❌ 未知参数: $1" >&2; exit 1 ;;
esac
done
# 确定实际运行的测试工具
case "$MODE_TYPE" in
write) TEST_TOOL="ib_write_bw" ;;
send) TEST_TOOL="ib_send_bw" ;;
*) TEST_TOOL="ib_read_bw" ;;
esac
echo "==== RDMA 快速检查和测试工具 ===="
echo "运行模式 : $MODE"
echo "操作类型 : $TEST_TOOL"
echo "网卡设备 : $DEVICE"
echo "物理端口 : $PORT"
[[ "$MODE" == "client" ]] && echo "目标Server: $PEER_IP"
# === 1. 检查 Mellanox 驱动加载状态 ===
echo "[1] 检查驱动模块加载状态"
lsmod | grep mlx5 || echo "❌ 未加载 Mellanox 驱动模块"
# === 2. 查看设备状态 ===
echo -e "\n[2] 查看设备列表与状态"
ibv_devinfo -d "$DEVICE" || { echo "❌ RDMA 设备不可用"; exit 1; }
# === 3. 自动识别 GID index ===
echo -e "\n[3] 显示端口 $PORT 的 GID 表:"
for i in {0..15}; do
GID=$(cat /sys/class/infiniband/${DEVICE}/ports/${PORT}/gids/$i)
echo "GID[$i] = $GID"
if [[ "$GID" =~ .*c0a8.* ]]; then # 检查是否含有192.168.5.x对应十六进制段
GID_INDEX=$i
fi
done
if [[ "$GID_INDEX" -eq "-1" ]]; then
echo "❌ 未能自动识别出 GID index,请手动设置 GID_INDEX"
exit 1
else
echo "✅ 使用 GID index: $GID_INDEX"
fi
# === 3.5 临时将 CPU governor 切换为 performance,并注册恢复 ===
echo -e "\n[3.5] 临时切换 CPU governor 为 performance"
declare -A ORIGINAL_GOVERNORS
for cpu in /sys/devices/system/cpu/cpu[0-9]*; do
gov_file="$cpu/cpufreq/scaling_governor"
cpu_name=$(basename "$cpu")
ORIGINAL_GOVERNORS[$cpu_name]=$(cat "$gov_file")
echo performance | sudo tee "$gov_file" > /dev/null
done
sleep 1
restore_governors() {
echo -e "\n[清理] 恢复原有 CPU governor 设置..."
for cpu in "${!ORIGINAL_GOVERNORS[@]}"; do
echo "${ORIGINAL_GOVERNORS[$cpu]}" | sudo tee /sys/devices/system/cpu/$cpu/cpufreq/scaling_governor > /dev/null
done
}
trap restore_governors EXIT
# === 4. 启动 RDMA 测试 ===
echo -e "\n[4] 启动 ib_write_bw 测试"
COMMON_ARGS="-d $DEVICE -i $PORT -x $GID_INDEX -s 65536 -q 8 -n 500000 --noPeak --report_gbits"
if [[ "$MODE" == "server" ]]; then
echo "【教程】检查RDMA网卡状态和测试带宽
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn]
如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~
目录
检查硬件和驱动状态
测试RDMA通信
报错修复
对于交换机的配置,可以看这篇:
【教程】详解配置多台主机通过交换机实现互联通信_通过交换机链接多台设备-CSDN博客
检查硬件和驱动状态
1、查看是否识别到网卡(PCI 层)
代码语言:javascript代码运行次数:0运行复制lspci | grep -i mellanox
如果输出类似以下内容,说明系统已经识别到了硬件设备。
40:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
40:00.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
2. 查看驱动是否加载成功(内核模块)
代码语言:javascript代码运行次数:0运行复制lsmod | grep mlx5
mlx5_ib 466944 0
ib_uverbs 163840 2 rdma_ucm,mlx5_ib
ib_core 417792 8
mlx5_core 2191360 1 mlx5_ib
mlx_compat 69632 12
上述输出说明:
模块名 说明 mlx5_core
Mellanox 网卡核心驱动,控制数据面 mlx5_ib
用于 RDMA(InfiniBand verbs)的支持 ib_uverbs
用户态 Verbs 接口(userspace RDMA 程序会依赖) ib_core
RDMA 核心抽象层(通用 InfiniBand 子系统) mlx_compat
Mellanox 向后兼容层(用于 OFED 内核兼容性)
如果没加载,可尝试手动加载:
代码语言:javascript代码运行次数:0运行复制sudo modprobe mlx5_ib
还可以查看所有与 RDMA 相关模块:
代码语言:javascript代码运行次数:0运行复制lsmod | grep rdma
ib_uverbs
rdma_ucm
mlx5_ib
3. 查看网卡驱动和状态
代码语言:javascript代码运行次数:0运行复制ethtool -i ens1f1np1 # 替换为你的网卡名,ifconfig可查看
driver: mlx5_core
version: 24.10-2.1.8
firmware-version: 16.35.4506 (MT_0000000012)
expansion-rom-version:
bus-info: 0000:1a:00.1
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: yes
4. 查看 RDMA 设备信息(核心)
代码语言:javascript代码运行次数:0运行复制ibv_devinfo
hca_id: mlx5_0
transport: InfiniBand (0)
fw_ver: 16.35.4506
node_guid: 043f:7203:00dc:00d4
sys_image_guid: 043f:7203:00dc:00d4
vendor_id: 0x02c9
vendor_part_id: 4119
hw_ver: 0x0
board_id: MT_0000000012
phys_port_cnt: 1
port: 1
state: PORT_ACTIVE (4)
max_mtu: 4096 (5)
active_mtu: 1024 (3)
sm_lid: 0
port_lid: 0
port_lmc: 0x00
link_layer: Ethernet
这表示 RDMA 核心层已经注册并初始化成功。
5. 查看 RDMA 子系统
代码语言:javascript代码运行次数:0运行复制rdma link show
link mlx5_0/1 state ACTIVE physical_state LINK_UP netdev ens1f0np0
link mlx5_1/1 state ACTIVE physical_state LINK_UP netdev ens1f1np1
说明 RDMA 子系统已加载并绑定到对应网卡。
6. 检查 OFED 安装状态
如果你使用 Mellanox OFED(不是内核默认驱动),可以运行:
代码语言:javascript代码运行次数:0运行复制ofed_info -s
MLNX_OFED_LINUX-24.10-2.1.8.0:
确认你装的是 Mellanox 官方驱动栈。
测试RDMA通信
1、在两台服务器上新建以下脚本,命名为:rdma_test.sh 。
代码语言:javascript代码运行次数:0运行复制#!/bin/bash
# ===============================================
# Script: rdma_test.sh
# Author: 小锋学长
# Description:
# 一键运行 RDMA 带宽测试(ib_write_bw)工具,自动完成:
# - 自动检测 GID index
# - 切换 CPU governor 为 performance
# - 支持 server/client 模式
# - 支持 read / write / send 操作类型(默认 read)
# - 支持传入设备名、端口号
# - 测试后自动恢复 CPU governor
#
# Requirements:
# - ib_write_bw 工具(来自 perftest 包)
# - Mellanox 驱动已正确加载
# - RDMA 设备支持 RoCE 并已配置 IP + GID
#
# Usage:
# Server 模式:
# bash rdma_test.sh server
# bash rdma_test.sh server [device] [port] [mode_type]
#
# Client 模式:
# bash rdma_test.sh client <server_ip>
# bash rdma_test.sh client <server_ip> [device] [port] [mode_type]
#
# Examples:
# bash rdma_test.sh server mlx5_1 1 read
# bash rdma_test.sh client 192.168.5.228 mlx5_1 1 read
#
# Note:
# - 默认设备为 mlx5_1,默认物理端口为 1
# - GID index 会根据本地 IP 自动选择
# - 支持异常退出自动清理 CPU governor 设置
# ===============================================
# CONFIGURATION (默认值)
MODE="" # 第一个参数为运行模式,server 或 client
PEER_IP="" # 第二个参数作为 Server IP(仅 client 模式使用)
DEVICE="mlx5_1" # 第三个参数为设备名,默认值为 mlx5_1
PORT=1 # 第四个参数为物理端口,默认 1
MODE_TYPE="read" # 第五个参数为传输模式,read/write/send(默认 read)
GID_INDEX=-1 # 自动检测
# 解析参数
ARGS=$(getopt -o m:i:d:p:t: \
-l mode:,peer_ip:,device:,port:,mode_type: \
-n "$0" -- "$@")
if [ $? -ne 0 ]; then
echo "❌ 参数解析失败"
exit 1
fi
eval set -- "$ARGS"
while true; do
case "$1" in
-m|--mode) MODE="$2"; shift 2 ;;
-i|--peer_ip) PEER_IP="$2"; shift 2 ;;
-d|--device) DEVICE="$2"; shift 2 ;;
-p|--port) PORT="$2"; shift 2 ;;
-t|--mode_type) MODE_TYPE="$2"; shift 2 ;;
--) shift; break ;;
*) echo "❌ 未知参数: $1" >&2; exit 1 ;;
esac
done
# 确定实际运行的测试工具
case "$MODE_TYPE" in
write) TEST_TOOL="ib_write_bw" ;;
send) TEST_TOOL="ib_send_bw" ;;
*) TEST_TOOL="ib_read_bw" ;;
esac
echo "==== RDMA 快速检查和测试工具 ===="
echo "运行模式 : $MODE"
echo "操作类型 : $TEST_TOOL"
echo "网卡设备 : $DEVICE"
echo "物理端口 : $PORT"
[[ "$MODE" == "client" ]] && echo "目标Server: $PEER_IP"
# === 1. 检查 Mellanox 驱动加载状态 ===
echo "[1] 检查驱动模块加载状态"
lsmod | grep mlx5 || echo "❌ 未加载 Mellanox 驱动模块"
# === 2. 查看设备状态 ===
echo -e "\n[2] 查看设备列表与状态"
ibv_devinfo -d "$DEVICE" || { echo "❌ RDMA 设备不可用"; exit 1; }
# === 3. 自动识别 GID index ===
echo -e "\n[3] 显示端口 $PORT 的 GID 表:"
for i in {0..15}; do
GID=$(cat /sys/class/infiniband/${DEVICE}/ports/${PORT}/gids/$i)
echo "GID[$i] = $GID"
if [[ "$GID" =~ .*c0a8.* ]]; then # 检查是否含有192.168.5.x对应十六进制段
GID_INDEX=$i
fi
done
if [[ "$GID_INDEX" -eq "-1" ]]; then
echo "❌ 未能自动识别出 GID index,请手动设置 GID_INDEX"
exit 1
else
echo "✅ 使用 GID index: $GID_INDEX"
fi
# === 3.5 临时将 CPU governor 切换为 performance,并注册恢复 ===
echo -e "\n[3.5] 临时切换 CPU governor 为 performance"
declare -A ORIGINAL_GOVERNORS
for cpu in /sys/devices/system/cpu/cpu[0-9]*; do
gov_file="$cpu/cpufreq/scaling_governor"
cpu_name=$(basename "$cpu")
ORIGINAL_GOVERNORS[$cpu_name]=$(cat "$gov_file")
echo performance | sudo tee "$gov_file" > /dev/null
done
sleep 1
restore_governors() {
echo -e "\n[清理] 恢复原有 CPU governor 设置..."
for cpu in "${!ORIGINAL_GOVERNORS[@]}"; do
echo "${ORIGINAL_GOVERNORS[$cpu]}" | sudo tee /sys/devices/system/cpu/$cpu/cpufreq/scaling_governor > /dev/null
done
}
trap restore_governors EXIT
# === 4. 启动 RDMA 测试 ===
echo -e "\n[4] 启动 ib_write_bw 测试"
COMMON_ARGS="-d $DEVICE -i $PORT -x $GID_INDEX -s 65536 -q 8 -n 500000 --noPeak --report_gbits"
if [[ "$MODE" == "server" ]]; then
echo "
本文标签:
教程检查RDMA网卡状态和测试带宽
版权声明:本文标题:【教程】检查RDMA网卡状态和测试带宽 内容由热心网友自发贡献,该文观点仅代表作者本人,
转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1747633315a2196275.html,
本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论