【教程】檢查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 = 22? 字節 = 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77118.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77118.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77118.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡 - TCP協議

通過一些問題來討論 TCP 協議 什么是 TCP &#xff1f;舉幾個應用了 TCP 協議的例子TCP協議如何保證可靠性&#xff1f;tcp如何保證不會接受重復的報文&#xff1f;Tcp粘包拆包問題了解嗎&#xff1f;介紹一下&#xff0c;如何解決&#xff1f;TCP擁塞控制與流量控制區別&…

Fiddler 進行斷點測試:調試網絡請求

目錄 一、什么是斷點測試&#xff1f; 二、Fiddler 的斷點功能 三、如何在 Fiddler 中設置斷點&#xff1f; 步驟 1&#xff1a;啟動 Fiddler 步驟 2&#xff1a;啟用斷點 步驟 3&#xff1a;捕獲請求 步驟 4&#xff1a;修改請求或響應 四、案例&#xff1a;模擬登錄失…

OpenCv高階(三)——圖像的直方圖、圖像直方圖的均衡化

目錄 一、直方圖 1、計算并顯示直方圖 2、使用matplotlib方法繪制直方圖&#xff08;不劃分小的子區間&#xff09; 3、使用opencv的方法繪制直方圖 &#xff08;劃分16個小的子亮度區間&#xff09; 4、繪制彩色圖像的直方圖&#xff0c;將各個通道的直方圖值都畫出來 二、…

Flutter 與原生通信

Flutter 與原生之間的通信主要基于通道機制&#xff0c;包括 MethodChannel、EventChannel 和 BasicMessageChannel。 MethodChannel&#xff1a;用于 Flutter 與原生之間的方法調用&#xff0c;實現雙向通信&#xff0c;適合一次性的方法調用并獲取返回值&#xff0c;如 Flut…

前端面試-Vue篇

核心概念 Vue 3的響應式原理與Vue 2有何本質區別&#xff1f;Vue中虛擬DOM的diff算法優化策略有哪些&#xff1f;Vue組件間通信方式有哪些&#xff1f;適用場景分別是什么&#xff1f;Vue的生命周期鉤子在Composition API中如何替代&#xff1f;Vue的模板編譯過程是怎樣的&…

光刻機研發與市場現狀分析報告

1. 引言 光刻機&#xff08;Lithography Machine&#xff09;是半導體制造的核心設備&#xff0c;其技術水平和市場供應能力直接影響全球芯片產業的發展。隨著人工智能&#xff08;AI&#xff09;、5G、高性能計算&#xff08;HPC&#xff09;和自動駕駛等技術的興起&#xff0…

Missashe考研日記-day21

Missashe考研日記-day21 1 專業課408 學習時間&#xff1a;4h學習內容&#xff1a; 今天先把昨天學的內容的課后習題做了&#xff0c;整整75道啊&#xff0c;然后學了OS第二章關于CPU調度部分的內容&#xff0c;這第二章太重要了&#xff0c;以至于每一小節的內容都比較多&am…

【玩轉全棧】—— Django+vue3+訊飛星火API 實現前端頁面實時AI答復

技術棧&#xff1a;vue3 element-plus axios pinia router Django5 websocket 訊飛星火API 本文將實現一個 AI 聊天對話功能&#xff0c;將前端用戶輸入問題以及之前對話發送給后端&#xff0c;通過 api 訪問大模型&#xff0c;返回前端實時對話數據。 調用 訊飛星火API…

廣東廣州一家IPO資產重組疑點重重,信息披露真實性存疑

作者&#xff1a;Eric 來源&#xff1a;IPO魔女 4月18日&#xff0c;廣州瑞立科密汽車電子股份有限公司&#xff08;簡稱“瑞立科密”&#xff09;將接受深交所主板IPO上會審核。公司保薦機構為中信證券&#xff0c;擬募集資金為15.2162億元。 瑞立科密過往資產重組疑點重重&a…

銀河麒麟(Kylin) - V10 SP1桌面操作系統ARM64編譯QT-5.15.12版本

銀河麒麟(Kylin) - V10 SP1桌面操作系統ARM64編譯QT-5.15.12版本 原因 測試Kylin-Desktop-V10-SP1-General-Release-2303-arm64系統下&#xff0c;編譯QT-5.15.12版本已做測試。 測試環境 測試板配置 型號&#xff1a;LM-D2000-NONE-1w-V01-pc_A2150 CPU&#xff1a;飛騰D20…

查看前端項目依賴樹型結構關系圖的詳細方法,涵蓋 命令行工具 和 可視化工

以下是查看前端項目依賴樹型結構關系圖的詳細方法&#xff0c;涵蓋 命令行工具 和 可視化工具&#xff1a; 一、命令行工具生成依賴樹 1. npm # 查看項目依賴樹&#xff08;文本形式&#xff09; npm ls# 查看指定包的依賴樹 npm ls <package-name># 生成JSON格式的依…

Ollama高并發測試

本文主要來測試一下ollama的高并發能力。 具體配置如下&#xff1a; 一、Ollama默認參數執行 我們打開4個窗口&#xff0c;然后分別讓DeepSeek “給我講一個笑話” &#xff0c;看下不同窗口的答題順序。 通過答題順序可以看到&#xff0c;在不進行參數設置時&#xff0c;模…

資源管理與HPA:讓Kubernetes應用自動伸縮

引言&#xff1a;從“手動擋”到“自動駕駛” 想象我們駕駛一輛汽車&#xff0c;手動調節油門和換擋不僅費力&#xff0c;還難以應對突發狀況。我們的應用服務也一樣&#xff0c;在面對突然的流量增長&#xff0c;內存使用暴漲該如何應對。HPA&#xff08;Horizontal Pod Auto…

Windows 下 MongoDB ZIP 版本安裝指南

在開發和生產環境中&#xff0c;MongoDB 是一種非常流行的 NoSQL 數據庫&#xff0c;以其靈活性和高性能而受到開發者的青睞。對于 Windows 用戶來說&#xff0c;MongoDB 提供了多種安裝方式&#xff0c;其中 ZIP 版本因其靈活性和輕量級的特點&#xff0c;成為很多開發者的首選…

【Linux網絡與網絡編程】11.數據鏈路層mac幀協議ARP協議

前面在介紹網絡層時我們提出來過一個問題&#xff1a;主機是怎么把數據交給路由器的&#xff1f;那里我們說這是由數據鏈路層來做的。 網絡上的報文在物理結構上是以mac幀的形式流動的&#xff0c;但在邏輯上是以IP流動的&#xff0c;IP的流動是需要mac幀支持的。 數據鏈路層解…

多模態思維鏈AI醫療編程:從計算可持續性到開放域推理的系統性解決方案

多模態思維鏈AI醫療編程:從計算可持續性到開放域推理的系統性解決方案 醫療AI領域的多模態思維鏈技術正在重塑臨床決策支持、醫學影像分析和醫療流程優化的范式。本指南從計算可持續性、錯誤傳播控制、倫理安全防護和通用性擴展四大維度,系統解析醫療大模型落地落地的關鍵要…

代理模式深度解析

目錄 一 靜態代理 1.1 優點 1.2 缺點 1.3 適用場景 二 JDK動態代理 1 JDK動態代理的工作原理 1.1 創建代理類 1.2 加載代理類 1.3 實現方法調用 2. Proxy.newProxyInstance() 的核心工作流程 方法簽名 工作步驟 3. 代理類的生成與加載 3.1 代理類生成的關鍵方法 …

Spring Cache與Redis集成原理

一、核心架構圖解 #mermaid-svg-aiWGQLhmWx7kOfLz {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-aiWGQLhmWx7kOfLz .error-icon{fill:#552222;}#mermaid-svg-aiWGQLhmWx7kOfLz .error-text{fill:#552222;stroke:#5…

編程技能:調試02,設置斷點與刪除斷點

專欄導航 本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄&#xff0c;故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。 &#xff08;一&#xff09;WIn32 專欄導航 上一篇&#xff1a;編程技能&#xff1a;調試01&#xff0c;調試介紹 回到目錄 下…

flink寫doris時的優化

1.概念 doris并不擅長高頻、小量數據的導入&#xff1b; 因為doris每一次數據導入都會在be節點上生成數據文件&#xff1b;如果高頻導入小量數據&#xff0c;就會在存儲層產生大量的小文件&#xff08;必然會影響到后續的查詢效率&#xff0c;也會對系統產生更多的compaction…