【教程】检查RDMA网卡状态和测试带宽 | 附测试脚本
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]
如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~
目录
检查硬件和驱动状态
测试RDMA通信
报错修复
对于交换机的配置,可以看这篇:
【教程】详解配置多台主机通过交换机实现互联通信_通过交换机链接多台设备-CSDN博客
检查硬件和驱动状态
1、查看是否识别到网卡(PCI 层)
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. 查看驱动是否加载成功(内核模块)
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_coreMellanox 网卡核心驱动,控制数据面 mlx5_ib用于 RDMA(InfiniBand verbs)的支持 ib_uverbs用户态 Verbs 接口(userspace RDMA 程序会依赖) ib_coreRDMA 核心抽象层(通用 InfiniBand 子系统) mlx_compatMellanox 向后兼容层(用于 OFED 内核兼容性)
如果没加载,可尝试手动加载:
sudo modprobe mlx5_ib
还可以查看所有与 RDMA 相关模块:
lsmod | grep rdma
ib_uverbs
rdma_ucm
mlx5_ib
3. 查看网卡驱动和状态
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 设备信息(核心)
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 子系统
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(不是内核默认驱动),可以运行:
ofed_info -s
MLNX_OFED_LINUX-24.10-2.1.8.0:
确认你装的是 Mellanox 官方驱动栈。
测试RDMA通信
1、在两台服务器上新建以下脚本,命名为:rdma_test.sh 。
#!/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 ]; thenecho "❌ 参数解析失败"exit 1
fi
eval set -- "$ARGS"
while true; docase "$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" inwrite) 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}; doGID=$(cat /sys/class/infiniband/${DEVICE}/ports/${PORT}/gids/$i)echo "GID[$i] = $GID"if [[ "$GID" =~ .*c0a8.* ]]; then # 检查是否含有192.168.5.x对应十六进制段GID_INDEX=$ifi
done
if [[ "$GID_INDEX" -eq "-1" ]]; thenecho "❌ 未能自动识别出 GID index,请手动设置 GID_INDEX"exit 1
elseecho "✅ 使用 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]*; dogov_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 1restore_governors() {echo -e "\n[清理] 恢复原有 CPU governor 设置..."for cpu in "${!ORIGINAL_GOVERNORS[@]}"; doecho "${ORIGINAL_GOVERNORS[$cpu]}" | sudo tee /sys/devices/system/cpu/$cpu/cpufreq/scaling_governor > /dev/nulldone
}
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" ]]; thenecho "🟢 正在启动 server(设备=$DEVICE, 端口=$PORT, GID=$GID_INDEX, 模式=$TEST_TOOL)"# send 模式提示 + 参数处理if [[ "$MODE_TYPE" == "send" ]]; thenecho -e "\n📢 注意:当前为 send 模式,client需要主动发送数据"if [[ "$MODE" == "server" ]]; thenCOMMON_ARGS="$COMMON_ARGS --run_infinitely"fifiecho "🔧 实际执行命令:sudo $TEST_TOOL $COMMON_ARGS"while true; doecho -e "\n🟢 等待 client 连接..."sudo $TEST_TOOL $COMMON_ARGSecho -e "\n✅ 当前 client 测试完成,等待下一个连接...\n"sleep 1done
elif [[ "$MODE" == "client" ]]; thenif [[ -z "$PEER_IP" ]]; thenecho "❌ 错误:client 模式需要指定 server IP"echo "用法:$0 client <server_ip> [device] [port] [mode_type]"exit 1fiecho "🚀 正在连接到 server $PEER_IP(设备=$DEVICE, 端口=$PORT, GID=$GID_INDEX, 模式=$TEST_TOOL)"echo "🔧 实际执行命令:sudo $TEST_TOOL $COMMON_ARGS $PEER_IP"sudo $TEST_TOOL $COMMON_ARGS "$PEER_IP"
elseecho "❌ 错误:必须指定模式参数 server 或 client"echo "用法:$0 server [device] [port] [mode_type] 或 $0 client <server_ip> [device] [port] [mode_type]"exit 1
fi
2、在服务端运行(根据你的情况修改):
bash rdma_test.sh -m server -t read

3、在客户端运行(根据你的情况修改):
bash test_rdma.sh -m client -i 192.168.5.228 -d mlx5_1 -p 1 -t read

4、测试结果:

字段解释:
字段名 含义 #bytes每个 RDMA 消息的 payload 大小(本例为 64 KiB) #iterations总共发送了多少条消息(5000 次) BW peak [MiB/sec]测试过程中的瞬时最大带宽(本例为 10313.62 MiB/s) BW average [MiB/sec]平均带宽(本例为 10313.14 MiB/s) MsgRate [Mpps]平均消息发送速率(每秒多少条消息,单位:百万条)
(本例为 0.165 Mpps,也就是 165,010 条/秒)
5、结果解析:
平均带宽换算为 Gbps(千兆位每秒):
1 MiB = 2²⁰ 字节 = 8.388608 Mbit
所以实际达到了 86.5 Gbps 的有效吞吐量:
10313.14 MiB/sec × 8.388608 = ≈ 86520.2 Mbit/sec ≈ 86.5 Gbps
由于是mlx5 RoCE 网卡(ConnectX-4 或以上),active_speed = 25 Gbps × 4x,因此理论带宽为:25 × 4 = 100 Gbps(最大可用)。
-
实测:86.5 Gbps
-
达标率:≈ 86.5%
在真实环境下由于 PCIe 延迟、内存访问、系统 jitter、未调优参数等因素,能达到 80~90% 的理论带宽就已经非常理想。
6、进一步提升性能:
| 方法 | 效果 |
|---|---|
增加 -q(Queue Pairs 数) | 提高并发度 |
增加 -s 消息大小(如 128KB) | 增加吞吐上限 |
使用 -F | 跳过 CPU 频率校验 |
使用 --report_gbits | 直接用 Gbps 输出,避免换算 |
| 绑定 NUMA 节点 | 降低内存访问延迟 |
使用 --duration 模式长期运行 | 稳定性更好 |
示例命令:
sudo ib_write_bw -d mlx5_1 -i 1 -x 5 -s 65536 -q 8 -F -n 1000000 --report_gbits
报错修复
1、Unable to init the socket connection
把防火墙都关了。
sudo systemctl stop firewalld # 重启会恢复
sudo systemctl disable firewalld # 禁用后重启也不会恢复
sudo ufw disable
sudo iptables -F
相关文章:
【教程】检查RDMA网卡状态和测试带宽 | 附测试脚本
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 检查硬件和驱动状态 测试RDMA通信 报错修复 对于交换机的配置,可以看这篇: 【教程】详解配置多台主机通过交换机实现互…...
(二)Trae 配置C++ 编译
Trae配置c编译 零 CMake 编译C0.1 下载安装0.2 安装设置0.3 三种编译方式(见 下文 一 二 三)0.4 调试 (见 下文四) 一 使用MSVC方式编译1.1 安装编译环境1.2安装插件1.3 设置文件 二 使用GCC方式2.1 安装编译环境2.1.1下载:[MinGw](https://gcc-mcf.lhmouse.com/)2.1.2安装:(以…...
Doris 本地部署集群重启后报错
报错描述 Docker 版本: apache/doris:fe-2.1.9 apache/doris:be-2.1.9 连接 MySQL 报错: ERROR 2003 (HY000): Cant connect to MySQL server on 127.0.0.1:9030 (111)FE 日志: INFO (UNKNOWN fe_e7cff187_69d4_42ee_90be_147e87310549(-1…...
日本公司如何实现B2B商城订货系统的自动化和个性化?
在日本构建具备前后台日文本地化、业务员代客下单、一客一价、智能拆单发货的B2B电商系统,需结合日本商业习惯与技术实现。以下是关键模块的落地方案: 一、系统架构设计 1. 前端本地化 语言与UI适配 采用全日语界面,包含敬语体系(…...
自动化测试相关协议深度剖析及A2A、MCP协议自动化测试应用展望
一、不同协议底层逻辑关联分析 1. OPENAPI协议 OPENAPI 协议核心在于定义 API 的规范结构,它使用 YAML 或 JSON 格式来描述 API 的端点、请求参数、响应格式等信息。其底层逻辑是构建一个清晰、标准化的 API 描述文档,方便不同的客户端和服务端进行对接…...
ReAct、CoT 和 ToT:大模型提示词推理架构的对比分析
ReAct、CoT 和 ToT:大模型提示词推理架构的对比分析 在大型语言模型(LLM)的研究与应用中,如何有效提升模型在复杂任务上的推理能力是关键问题之一。目前,ReAct(Reasoning and Acting)、CoT&…...
用魔法打败魔法——获取软件安装路径
用魔法打败魔法——获取软件安装路径 🌟嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 目录 背景普通方法用魔法一句话 1.首先新建‘PC自动化应…...
2024-04-19| Java: Documented注解学习 JavaDoc
在 Java 中,Documented 是一个元注解(meta-annotation),用于标记其他注解,表明这些注解应该被包含在 JavaDoc 文档中。以下是关于 Documented 注解的作用的简要说明: 作用 记录注解信息到 JavaDoc&#x…...
Spring Boot常用注解全解析:从入门到实战
🌱 Spring Boot常用注解全解析:从入门到实战 #SpringBoot核心 #注解详解 #开发技巧 #高效编程 一、核心启动与配置注解 1. SpringBootApplication 作用:标记主启动类,整合了Configuration、EnableAutoConfiguration和Component…...
【重学Android】1.关于@Composer注解的一点知识笔记
最新因为一些原因,开始重新学习Android及kotlin编程,也觉得可以顺带记录下这个过程中的一些知识点,也可以用作日后自己查找复习。 Composable 注解在 Android 开发中的使用 Composable 是 Jetpack Compose(Android 的现代声明式…...
【排队论】Probabilistic Forecasts of Bike-Sharing Systems for Journey Planning
Probabilistic Forecasts of Bike-Sharing Systems forJourney Planning abstract 我们研究了对共享单车系统(BSS)车站未来自行车可用性进行预测的问题。这是相关的,以便提出建议,保证用户能够进行旅行的概率足够高。为此&#x…...
大数据平台简介
一、分布式系统基础架构 (一)定义与核心特征 分布式系统是由多台计算机(节点)通过网络协作组成的系统,对外表现为一个统一整体。其核心特征包括: 去中心化:节点平等或分角色协作(如…...
加一:从简单问题到复杂边界的深度思考
加一:从简单问题到复杂边界的深度思考 引言 在算法世界里,有些问题看似简单,实则暗藏玄机,其中“加一”问题就是一个典型例子。所谓“加一”,通常指的是给一个由数字组成的数组表示的整数加一,这听起来简…...
高精度算法(加、减、乘、除、阶乘和)
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 唯有主动付出,才有丰富的果…...
实战设计模式之备忘录模式
概述 与解释器模式、迭代器模式一样,备忘录模式也是一种行为设计模式。备忘录模式允许我们保存一个对象的状态,并在稍后恢复到这个状态。该模式非常适合于需要回滚、撤销或历史记录等功能的应用场景。通过使用备忘录模式,开发者可以轻松添加诸…...
keil5 µVision 升级为V5.40.0.0:增加了对STM32CubeMX作为全局生成器的支持,主要有哪些好处?
在Keil5 μVision V5.40.0.0版本中,增加了对STM32CubeMX作为全局生成器的支持,这一更新主要带来了以下三方面的提升: 开发流程整合STM32CubeMX原本就支持生成Keil项目代码,但新版本将这一集成升级为“全局生成器”级别,意味着STM32CubeMX生成的代码能直接成为Keil项目的核…...
吉尔吉斯斯坦工商会代表团赴齐河德瑞新能源汽车考察
德州齐河,2025年4月15日电 时中美贸易突变之际,乘国家一带一路之风。 展中国新能源之宏图,塑国贸体系之新方向。 今日上午,吉尔吉斯斯坦共和国工商会代表团一行三人受邀抵达济南,开启对德瑞新能源科技有限公司&…...
无人机在农业中的应用与挑战!
一、无人机在农业中的作用 1. 提升作业效率与降低成本 无人机在喷洒农药、播种、施肥、吊运等环节显著提升效率。例如,湖北秭归县使用大疆T100无人机吊运脐橙,单次85公斤的运输任务仅需2分钟,而人工需1小时,综合成本降低250元…...
放松大脑的方法
帮助一个人放松大脑,需要结合生理调节、心理技巧和环境优化。以下是一些科学有效的方法,涵盖即时缓解和长期习惯培养: 一、即时放松技巧(快速起效) 1. 深呼吸法(4-7-8呼吸) 方法:吸…...
QT网络拓扑图绘制实验
前言 在网络通讯中,我qt常用的是TCP或者UDP协议,就比方说TCP吧,一台服务器有时可能会和多台客户端相连接,我之前都是处理单链接情况,最近研究图结构的时候,突然就想到了这个问题。那么如何解决这个问题呢&…...
英语四级翻译题练习文章示例
大学正慢慢成为过去吗?Are universiities slowly becoming a thing of the past? 1.1900年前后,法国艺术家让-马克科泰接受委托绘制一组图画,描绘他认为的2000年人们可能过上的生活。Around 1900, the French artist Jean-Marc Cote was commissioned …...
支持中文对齐的命令行表格打印python库——tableprint
文章目录 快速入门 还在为表格中含有中文,命令行打印无法对齐而苦恼吗? 还在为冗长的数据添加代码而抓狂吗? tableprint来了!!!,它完美的解决了上述两个问题,快来试试吧!…...
从《周游记3》演绎歌剧版《菊花台》,周杰伦婚礼曲目意大利文版惊喜亮相
今天(4月19日)22:00,由魔胴西西里咖啡冠名的户外实境互动综艺《周游记3》第四期即将播出。本期节目中,“J式之旅”发起人周杰伦和林暐恒、杜国璋、陈冠霖、陈冠廷,将继续意大利之旅,从那不勒斯的百年老店到…...
生物化学笔记:医学免疫学原理23 免疫检查点分子与肿瘤免疫治疗(PD-1抑制剂黑色素瘤)
免疫检查点分子与肿瘤免疫治疗 免疫检查点分子与肿瘤免疫治疗-2...
CasualLanguage Model和Seq2Seq模型的区别
**问题1:**Causal Language Modeling 和 Conditional Generation 、Sequence Classification 的区别是什么? 因果语言模型(Causal Language Model): 预测给定文本序列中的下一个字符,一般用于文本生成、补全句子等,模型…...
verilog float mult
module pipe_float_mul(input wire clk ,// 时钟信号input wire en ,// 使能信号input wire rst_n ,// 复位信号input wire round_cfg ,// 决…...
微信小程序调用yolo目标检测模型
目录 后端 前端微信小程序 完整代码 后端 利用Flask,调用目标检测模型,后端代码如下。 # flask_yolo.py from flask import Flask, request, jsonify from ultralytics import YOLO from PIL import Imageapp Flask(__name__) model_path best.p…...
Flink框架十大应用场景
Flink框架适合应用的场景 1. 流式数据处理 Flink框架最常用的应用场景是流式数据处理。流式数据处理是指对实时数据进行处理,以便及时地做出决策。例如,一个电商网站需要对用户的行为进行实时分析,以便根据用户的兴趣和行为推荐商品。Flink框架可以帮助电商网站实时地处理数…...
Crawl4AI:重塑大语言模型数据供给的开源革命者
在AI技术飞速迭代的今天,大型语言模型(LLMs)的进化已从单纯参数竞赛转向数据质量与实时性的深度博弈。传统API接口的僵化、静态数据库的滞后性,正在成为制约AI系统实用价值的桎梏。而Crawl4AI的出现,以开源之力重构了数…...
Android 应用wifi direct连接通信实现
一. 打开Wi-Fi direct 1.必须启用Wi-Fi功能:在设备设置中开启Wi-Fi主开关(即使未连接路由器) 关闭冲突功能:若已开启「热点共享」或连接到其他Wi-Fi网络,需先关闭相关功能以避免硬件占. <!-- Wi-Fi Direct 核心权限…...
