RDMA建鏈的3次握手和斷鏈的4次揮手流程?

文章目錄

  • 基礎信息
  • 建鏈 3次握手
  • 斷鏈4次揮手
  • 建聯狀態
    • active端
    • passive端
  • 報文結構
  • 函數關系
  • 其他
  • 后記

基礎信息

在這里插入圖片描述

  • CM: Communication Management 通信管理 連接管理
  • SIDR: Service ID Resolution Protocol. 作用: enables users of Unreliable Datagram service to locate Queue Pairs supporting their desired service.
  • MAD: Management Datagrams 管理報文
  • GSI:General Services Interface 通用服務接口
  • QP1:專用與rdma cm建鏈
  • 分為server端和client端,在RDMA中server端叫passive端(被動)、client端叫active端(主動)

建鏈 3次握手

在這里插入圖片描述

  • req包、rep包、RTU包,rdma中叫做msg
  • Request (REQ) message,
  • Response (REP) message,
  • RTU:Ready To Use。 在內核消息處理中收到該msg之后,會將qp attribute設置RTS和RTR。 read to send ;read to receive
  • Queue Pair Number (QPN): QP數字
  • EEC: End to End Context 端到端上下文
  • req中告訴對端cid、qkey、qpn、guid以及udp的sport
  • rep中同樣告訴對端cid(communication id 通信id,相當于session回話的id,每次建聯有一個id)、qkey、qpn。(相當于也是對req的一個ack,同時攜帶自己的信息)
  • rtu包含了lcid和rcid表示本地和遠端的cid,算是以此確認。
  • 同樣的后面講的dreq中也會攜帶lcid和rcid

斷鏈4次揮手

雙端都需要發送所以累計四次
在這里插入圖片描述

建聯狀態

active端

在這里插入圖片描述

passive端

在這里插入圖片描述

報文結構

  • 報文結構:BTH | DETH | MAD header| MAD payload | CRC
  • 其中MAD payload,根據消息不同,是不同的消息內容:req、rep、mra、rtu等
  • BTH:Base Transport Header:基礎傳輸頭,主要是opcode(比如write 0x10、send 0x4、ack 0x17)、Partition key和目標QP(cm的目標QP都是1),以及報序號
  • DETH:Datagram Extended Transport Header:數據報文擴展傳輸頭。主要是query key和source QP。(BTH中是dst qp,deth中是src qp,有點類似以太的smac和dmac。
  • MAD:Management Datagrams 管理報文。主要包含Method(是send recv等)、Attribute ID(屬性ID,比如req 0x10、rep 0x13、mra 0x11、rtu 0x14、dreq 0x15、drep 0x16)
  • 管理路線:BEM結構 E表示extend,E可以是DETH(數據)、AETH(ack)、RETH(rdma)
  • 數據路線:BD結構:BTH頭部和Data的數據比如rdma send數據
  • BTH找QP與optype、DETH找sq和key、MAD找attid(比如cm req)、MAD payload找具體的cm msg信息(比如cmd id 等)

函數關系

  • 內核中處理msg的發包函數都是ib_send_cm_xxx開頭,比如ib_send_cm_req、ib_send_cm_rep、ib_send_cm_mra、ib_send_cm_rtu…
  • 收包函數都是cm_xxx_handler,比如cm_req_handler、cm_rep_handler、cm_rtu_handler、cm_mar_handler、cm_dreq_handler…
  • 內核收包處理流程,是ib_cm.ko中調用ib_register_mad_agent注冊cm_recv_handler到mad層進行收包,cm_recv_handler中收到后會啟動一個work,然后通過work event發給內核work上下文進行處理,也就是cm_req_xxx這些函數會在work上下文處理,work的入口函數是cm_work_handler。然后cm_work_handler根據event是req、rep等調用到對應的cm_xxx_handler.
  • rdma對應的API調用底層關系是 rdma api -> rdma cm文件(infiniband/rdma_cm) -> 發送write dev函數 -> 內核態ucma處理 -> 內核態rdma接口處理 -> 內核態cma(代理)處理 -> 內核態cm處理 -> 內核態mlnx處理 -> 網卡硬件處理
  • 比如rdma_acccpt接口實現就是 打開infiniband/rdma_cm文件,封裝wirte數據命令 CM_CMD_ACCEPT,通過write發送給內核,內核根據cmd的值在ucma_cmd_table中進行match,匹配后調用對應函數ucma_accept函數,然后調用[k] rdma層的rdma_accept、然后調用cm代理cma層的cma_accept,然后繼續往后調用
  • rdma_connect會發送req 報文
  • rdma_listen會監聽,進入rdma_accept后會發送rep報文或者mra,其他報文類似
  • ib_send_cm_xxx最后都會調用ib_post_send_mad發送給mad層,然后mad層調用ib_send_mad調用ib_post_send,然后調用到mlx5_ib_post_send異步發送

其他

  • 所有的RoCE v2的報文都會經過UDP,可以通過tcp抓包,但是tcp抓包需要指定端口是mlx5的端口,而不是eth口。

后記

更多細節以后逐漸補充。

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

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

相關文章

實驗4 圖像空間濾波

1. 實驗目的 ①掌握圖像空間濾波的主要原理與方法; ②掌握圖像邊緣提取的主要原理和方法; ③了解空間濾波在圖像處理和機器學習中的應用。 2. 實驗內容 ①調用 Matlab / Python OpenCV中的函數,實現均值濾波、高斯濾波、中值濾波等。 ②調…

【操作系統期末速成】 EP02 | 學習筆記(基于五道口一只鴨)

文章目錄 一、前言🚀🚀🚀二、正文:??????2.1 考點二:操作系統的功能及接口2.2 考點三:操作系統的發展及分類2.3 考點四:操作系統的運行環境(重要) 一、前言&#x…

從零開始三天學會微信小程序開發(三)

看到不少入門的小程序開發者不斷的問重復性的問題,我們從實戰角度開發了這個課程,希望能夠幫助大家了解小程序開發。 課程分三天: 第一天:微信小程序開發入門第二天:給小程序接入云端數據第三天:完善我的…

MySQL高級-MVCC- readview介紹

文章目錄 1、介紹2、ReadView中包含了四個核心字段:3、版本鏈數據的訪問規則:4、不同的隔離級別,生成ReadView的時機不同: 1、介紹 ReadView(讀視圖)是 快照讀 SQL執行時MVCC提取數據的依據,記錄…

【計算機組成原理實驗】——運算器組成實驗

計組TEC4實驗——運算器組成實驗 1. 實驗目的 (1)掌握算術邏輯運算加、減、乘、與的工作原理。 (2) 熟悉簡單運算器的數據傳送通路。 (3) 驗證實驗臺運算器的8位加、減、與、直通功能。 (4) 驗證實驗臺的4位乘4位功能。 (5) 按給定數據,完成幾種指…

SerDes介紹以及原語使用介紹(4)ISERDESE2原語仿真

文章目錄 前言一、iserdese2_module模塊二、oserdese2_module模塊三、頂層模塊四、仿真結果分析 前言 上文詳細介紹了ISERDESE2原語的使用,本文根據仿真對ISERDESE2原語的使用進一步加深印象。在仿真時,與OSERDESE進行回環。 一、iserdese2_module模塊…

昇思MindSpore學習筆記4--數據集 Dataset

昇思MindSpore學習筆記4--數據集 Dataset 摘要: 昇思MindSpore數據集Dataset的加載、數據集常見操作和自定義數據集方法。 一、數據集 Dataset概念 MindSpore數據引擎基于Pipeline 數據預處理相關模塊: 數據集Dataset加載原始數據,支持文本…

移動端H5應用,使用了postcss-px-to-viewport插件,750設計稿兼容Vant框架

目前在搞一個移動端的H5項目,使用的是Vue3Vant框架。設計稿是750的,而且使用了postcss-px-to-viewport。所以發現使用Vant框架的時候,發現有點問題,好像縮小了,后來百度了一下,是需要設置portcss.config.js…

vue components

vue components intro 組件是帶有名稱的可復用實例。 因為組件是可復用的組件實例,所以它們與根實例接收相同的選項,例如 data、computed、watch、methods 以及生命周期鉤子等。 組成 props: 組件的attributes,可以傳任意類型…

大創項目推薦 題目:基于機器視覺的圖像矯正 (以車牌識別為例) - 圖像畸變校正

文章目錄 0 簡介1 思路簡介1.1 車牌定位1.2 畸變校正 2 代碼實現2.1 車牌定位2.1.1 通過顏色特征選定可疑區域2.1.2 尋找車牌外圍輪廓2.1.3 車牌區域定位 2.2 畸變校正2.2.1 畸變后車牌頂點定位2.2.2 校正 7 最后 0 簡介 🔥 優質競賽項目系列,今天要分享…

題目的起名

整個經濟社會描繪為無數個交織的方程組。機場航班的起降時間、物流的路徑規劃、金屬冶煉的原料配比、工廠店鋪的選址……”而這些方程組的價值在于,“為了實現經濟學最簡單而又最權威的目標——對稀缺資源進行最佳利用,必須快速求出這些方程組的最優解。…

Leetcode3192. 使二進制數組全部等于 1 的最少操作次數 II

Every day a Leetcode 題目來源:3192. 使二進制數組全部等于 1 的最少操作次數 II 解法1:遍歷 由于 nums[i] 會被其左側元素的操作影響,所以我們先從最左邊的 nums[0] 開始思考。 分類討論: 如果 nums[0]1,無需反…

debian 安裝mongodb

安裝所需工具 apt install gnupg curl 添加公鑰 wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add - 添加源 echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt…

amis-editor 注冊自定義組件

建議先將amis文檔從頭到尾,仔細看一遍。 參考:amis - 低代碼前端框架 amis 的渲染過程是將 json 轉成對應的 React 組件。先通過 json 的 type 找到對應的 Component,然后把其他屬性作為 props 傳遞過去完成渲染。 import * as React from …

Linux開發講課17--- 在shell腳本中,如何將一個命令存儲在一個變量中

問: 將一個命令保存到一個變量中,以便稍后再使用(不是命令的輸出,而是命令本身)。 有一個簡單的腳本如下: command"ls"; echo "Command: $command"; #Output is: Command: ls b$com…

c++ 給定一個非常巨大的數組,如何找到它的中值

快速選擇算法&#xff08;最優解&#xff09; #include <iostream> #include <vector> #include <algorithm>using namespace std;class Solution { private:// 快速選擇算法中的分區函數int partition(vector<int>& nums, int left, int right)…

逆向學習匯編篇:參數傳遞與返回地址的使用

本節課在線學習視頻&#xff08;網盤地址&#xff0c;保存后即可免費觀看&#xff09;&#xff1a; ??https://pan.quark.cn/s/b5b046015da2?? 在匯編語言中&#xff0c;函數調用和參數傳遞是編程的基礎組成部分。了解如何在匯編中傳遞參數以及如何處理返回地址對于逆向工…

LeetCode 78. 子集

更多題解盡在 https://sugar.matrixlab.dev/algorithm 每日更新。 組隊打卡&#xff0c;更多解法等你一起來參與哦&#xff01; LeetCode 78. 子集&#xff0c;難度中等。 迭代 解題思路&#xff1a; 初始化結果集 result&#xff0c;其中包含一個空集 []&#xff1b;遍歷數…

flex講解

隨著前端技術的不斷發展和更新&#xff0c;flex布局成為前端布局的主流。但是仍然有很多前端新手搞不懂flex到底怎么用&#xff01;&#xff01;&#xff01;今天我們就來好好講講flex布局 老規矩先上定義 什么是flex布局 布局的傳統解決方案&#xff0c;基于盒狀模型&#x…

鄭州高校大學智能制造實驗室數字孿生可視化系統平臺建設項目驗收

隨著制造業的轉型升級&#xff0c;智能化、信息化已成為制造業發展的必然趨勢。數字孿生技術作為智能制造領域的關鍵技術之一&#xff0c;它通過構建與實體系統相對應的虛擬模型&#xff0c;實現對實體系統的實時監測、預測和優化&#xff0c;為制造業的智能化、信息化提供了強…