国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RDMA Scatter Gather List詳解

這篇具有很好參考價值的文章主要介紹了RDMA Scatter Gather List詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 前言
在使用RDMA操作之前,我們需要了解一些RDMA API中的一些需要的值。其中在ibv_send_wr我們需要一個sg_list的數(shù)組,sg_list是用來存放ibv_sge元素,那么什么是SGL以及什么是sge呢?對于一個使用RDMA進行開發(fā)的程序員來說,我們需要了解這一系列細節(jié)。

2. SGE簡介
在NVMe over PCIe中,I/O命令支持SGL(Scatter Gather List 分散聚合表)和PRP(Physical Region Page 物理(內(nèi)存)區(qū)域頁), 而管理命令只支持PRP;而在NVMe over Fabrics中,無論是管理命令還是I/O命令都只支持SGL。

RDMA編程中,SGL(Scatter/Gather List)是最基本的數(shù)據(jù)組織形式。 SGL是一個數(shù)組,該數(shù)組中的元素被稱之為SGE(Scatter/Gather Element),每一個SGE就是一個Data Segment(數(shù)據(jù)段)。RDMA支持Scatter/Gather操作,具體來講就是RDMA可以支持一個連續(xù)的Buffer空間,進行Scatter分散到多個目的主機的不連續(xù)的Buffer空間。Gather指的就是多個不連續(xù)的Buffer空間,可以Gather到目的主機的一段連續(xù)的Buffer空間。

下面我們就來看一下ibv_sge的定義:

struct ibv_sge {
? ? ? ? uint64_t ? ? ? ?addr;
? ? ? ? uint32_t ? ? ? ?length;
? ? ? ? uint32_t ? ? ? ?lkey;
};

addr: 數(shù)據(jù)段所在的虛擬內(nèi)存的起始地址 (Virtual Address of the Data Segment (i.e. Buffer))
length: 數(shù)據(jù)段長度(Length of the Data Segment)
lkey: 該數(shù)據(jù)段對應(yīng)的L_Key (Key of the local Memory Region)


2. ivc_post_send接口
而在數(shù)據(jù)傳輸中,發(fā)送/接收使用的Verbs API為:

ibv_post_send() - post a list of work requests (WRs) to a send queue 將一個WR列表放置到發(fā)送隊列中
ibv_post_recv() - post a list of work requests (WRs) to a receive queue 將一個WR列表放置到接收隊列中
下面以ibv_post_send()為例,說明SGL是如何被放置到RDMA硬件的線纜(Wire)上的。

ibv_post_send()的函數(shù)原型

#include <infiniband/verbs.h>

int ibv_post_send(struct ibv_qp *qp,?
? ? ? ? ? ? ? ? ? struct ibv_send_wr *wr,
? ? ? ? ? ? ? ? ? struct ibv_send_wr **bad_wr);

ibv_post_send()將以send_wr開頭的工作請求(WR)的列表發(fā)布到Queue Pair的Send Queue。 它會在第一次失敗時停止處理此列表中的WR(可以在發(fā)布請求時立即檢測到),并通過bad_wr返回此失敗的WR。

參數(shù)wr是一個ibv_send_wr結(jié)構(gòu),如<infiniband / verbs.h>中所定義。

3. ibv_send_wr結(jié)構(gòu)
struct ibv_send_wr {
? ? ? ? uint64_t ? ? ? ? ? ? ? ?wr_id; ? ? ? ? ? ? ? ? ?/* User defined WR ID */
? ? ? ? struct ibv_send_wr ? ? *next; ? ? ? ? ? ? ? ? ? /* Pointer to next WR in list, NULL if last WR */
? ? ? ? struct ibv_sge ? ? ? ? *sg_list; ? ? ? ? ? ? ? ?/* Pointer to the s/g array */
? ? ? ? int ? ? ? ? ? ? ? ? ? ? num_sge; ? ? ? ? ? ? ? ?/* Size of the s/g array */
? ? ? ? enum ibv_wr_opcode ? ? ?opcode; ? ? ? ? ? ? ? ? /* Operation type */
? ? ? ? int ? ? ? ? ? ? ? ? ? ? send_flags; ? ? ? ? ? ? /* Flags of the WR properties */
? ? ? ? uint32_t ? ? ? ? ? ? ? ?imm_data; ? ? ? ? ? ? ? /* Immediate data (in network byte order) */
? ? ? ? union {
? ? ? ? ? ? ? ? struct {
? ? ? ? ? ? ? ? ? ? ? ? uint64_t ? ? ? ?remote_addr; ? ?/* Start address of remote memory buffer */
? ? ? ? ? ? ? ? ? ? ? ? uint32_t ? ? ? ?rkey; ? ? ? ? ? /* Key of the remote Memory Region */
? ? ? ? ? ? ? ? } rdma;
? ? ? ? ? ? ? ? struct {
? ? ? ? ? ? ? ? ? ? ? ? uint64_t ? ? ? ?remote_addr; ? ?/* Start address of remote memory buffer */
? ? ? ? ? ? ? ? ? ? ? ? uint64_t ? ? ? ?compare_add; ? ?/* Compare operand */
? ? ? ? ? ? ? ? ? ? ? ? uint64_t ? ? ? ?swap; ? ? ? ? ? /* Swap operand */
? ? ? ? ? ? ? ? ? ? ? ? uint32_t ? ? ? ?rkey; ? ? ? ? ? /* Key of the remote Memory Region */
? ? ? ? ? ? ? ? } atomic;
? ? ? ? ? ? ? ? struct {
? ? ? ? ? ? ? ? ? ? ? ? struct ibv_ah ?*ah; ? ? ? ? ? ? /* Address handle (AH) for the remote node address */
? ? ? ? ? ? ? ? ? ? ? ? uint32_t ? ? ? ?remote_qpn; ? ? /* QP number of the destination QP */
? ? ? ? ? ? ? ? ? ? ? ? uint32_t ? ? ? ?remote_qkey; ? ?/* Q_Key number of the destination QP */
? ? ? ? ? ? ? ? } ud;
? ? ? ? } wr;
};

在調(diào)用ibv_post_send()之前,必須填充好數(shù)據(jù)結(jié)構(gòu)wr。 wr是一個鏈表,每一個結(jié)點包含了一個sg_list(i.e. SGL: 由一個或多個SGE構(gòu)成的數(shù)組), sg_list的長度為num_sge。

4. RDMA 提交WR流程
下面圖解一下SGL和WR鏈表的對應(yīng)關(guān)系,并說明一個SGL (struct ibv_sge *sg_list)里包含的多個數(shù)據(jù)段是如何被RDMA硬件聚合成一個連續(xù)的數(shù)據(jù)段的。

4.1 第一步:創(chuàng)建SGL

RDMA Scatter Gather List詳解,# 網(wǎng)絡(luò)專欄,rdma,sgl
從上圖中,我們可以看到wr鏈表中的每一個結(jié)點都包含了一個SGL,SGL是一個數(shù)組,包含一個或多個SGE。通過ibv_post_send提交一個RDMA SEND 請求。這個WR請求中,包括一個sg_list的元素。它是一個SGE鏈表,SGE指向具體需要發(fā)送數(shù)據(jù)的Buffer。

list<ibv_send_wr> + vector<ibv_sge> + send_flags + 保序 = M : N的Scatter&Gather

4.2 第二步:使用PD進行內(nèi)存保護

RDMA Scatter Gather List詳解,# 網(wǎng)絡(luò)專欄,rdma,sgl
我們在發(fā)送一段內(nèi)存地址的時候,我們需要將這段內(nèi)存地址通過Memory Registration注冊到RDMA中。也就是說注冊到PD內(nèi)存保護域當(dāng)中。一個SGL至少被一個MR保護, 多個MR存在同一個PD中。如圖所示一段內(nèi)存MR可以保護多個SGE元素。

4.3 調(diào)用ibv_post_send()將SGL發(fā)送到wire上去

RDMA Scatter Gather List詳解,# 網(wǎng)絡(luò)專欄,rdma,sgl
在上圖中,一個SGL數(shù)組包含了3個SGE, 長度分別為N1, N2, N3字節(jié)。我們可以看到,這3個buffer并不連續(xù),它們Scatter(分散)在內(nèi)存中的各個地方。RDMA硬件讀取到SGL后,進行Gather(聚合)操作,于是在RDMA硬件的Wire上看到的就是N3+N2+N1個連續(xù)的字節(jié)。換句話說,通過使用SGL, 我們可以把分散(Scatter)在內(nèi)存中的多個數(shù)據(jù)段(不連續(xù))交給RDMA硬件去聚合(Gather)成連續(xù)的數(shù)據(jù)段。

附錄一: OFED Verbs

RDMA Scatter Gather List詳解,# 網(wǎng)絡(luò)專欄,rdma,sgl文章來源地址http://www.zghlxwxcb.cn/news/detail-807623.html

到了這里,關(guān)于RDMA Scatter Gather List詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • RDMA性能優(yōu)化經(jīng)驗淺談

    RDMA性能優(yōu)化經(jīng)驗淺談

    首先我們介紹一下RDMA的一些核心概念,當(dāng)然了,我并不打算寫他的API以及調(diào)用方式,我們更多關(guān)注這些基礎(chǔ)概念背后的硬件執(zhí)行方式和原理,對于這些原理的理解是能夠?qū)懗龈咝阅躌DMA程序的關(guān)鍵。 Memory Region RDMA的網(wǎng)卡(下文以RNIC指代)通過DMA來讀寫系統(tǒng)內(nèi)存,由于DMA只能根

    2024年02月10日
    瀏覽(26)
  • RDMA在KVM實現(xiàn)條件

    CPU必須支持 Intel VT-d 或 AMD-Vi(IOMMU)技術(shù) demsg要包含下述兩部分 DMAR: Intel(R) Virtualization Technology for Directed I/O DMAR: IOMMU enabled 檢查CPU是否支持VT-d或AMD-Vi # dmesg |grep -e? \\\"DMAR\\\" ? -e? \\\"IOMMU\\\" |grep -e? \\\"Virtualization\\\" ? -e enabled [???? 0.000000 ] DMAR: IOMMU enabled [???? 0.001068 ] DMAR-IR: Queued

    2024年01月25日
    瀏覽(41)
  • pytorch里torch.gather()和torch.Tensor.scatter()解析

    pytorch里torch.gather()和torch.Tensor.scatter()解析

    torch.Tensor.scatter() 類似 gather 的反向操作(gather是讀出數(shù)據(jù),scatter是寫入數(shù)據(jù)),所以這里只解析torch.gather()。 gather()這個操作在功能上較為反人類,即使某段時間理解透徹了,過了幾個月不碰可能又會變得生疏。官方文檔對其描述也是較為簡單,有些小伙伴看完可能還是不完

    2024年02月16日
    瀏覽(21)
  • RDMA 、RoCE 、IB 、TCP、Ethernet

    RDMA 、RoCE 、IB 、TCP、Ethernet

    ROCE(Remote Direct Memory Access over Converged Ethernet)是一種網(wǎng)絡(luò)技術(shù),它結(jié)合了RDMA(遠程直接內(nèi)存訪問)和以太網(wǎng)交換機的特性。ROCE允許主機之間通過以太網(wǎng)進行高效的直接內(nèi)存訪問,從而提供低延遲、高吞吐量的數(shù)據(jù)傳輸。 在使用ROCE時,需要在網(wǎng)絡(luò)中部署支持ROCE的以太網(wǎng)交換

    2024年02月12日
    瀏覽(48)
  • 基于RDMA的云服務(wù)能力實踐與探索

    基于RDMA的云服務(wù)能力實踐與探索

    01? ?背景? ? ? ????隨著基于大數(shù)據(jù)大模型構(gòu)建的數(shù)據(jù)系統(tǒng)越來越有商業(yè)價值,機器學(xué)習(xí)的玩家也越來越多,數(shù)據(jù)量越來越大。為解決海量數(shù)據(jù)在服務(wù)器之間的同步效率問題,RDMA(Remote Direct Memory Access) 技術(shù)逐漸走進了網(wǎng)絡(luò)技術(shù)人員的視野。RDMA為什么能夠成為機器學(xué)習(xí)中網(wǎng)

    2024年04月09日
    瀏覽(31)
  • RDMA vs InfiniBand 網(wǎng)卡接口如何區(qū)分?

    RDMA vs InfiniBand 網(wǎng)卡接口如何區(qū)分?

    ?(該架構(gòu)圖來源于參考文獻)? 高性能計算網(wǎng)絡(luò),RoCE vs. InfiniBand該怎么選? 新 RoCEv2 標(biāo)準(zhǔn)可實現(xiàn) RDMA 路由在第三層以太網(wǎng)網(wǎng)絡(luò)中的傳輸。RoCEv2 規(guī)范將用以太網(wǎng)鏈路層上的 IP 報頭和 UDP 報頭替代 InfiniBand 網(wǎng)絡(luò)層。這樣,就可以在基于 IP 的傳統(tǒng)路由器之間路由 RoCE。? RoCE v1協(xié)議:

    2024年01月25日
    瀏覽(28)
  • RDMA編程實踐-SEND-RECEICVE原語應(yīng)用

    RDMA編程實踐-SEND-RECEICVE原語應(yīng)用

    本文描述了RDMA編程過程中的SEND-RECEIVE雙邊原語的代碼實現(xiàn)。包含多個版本,1、client向server發(fā)送消息,server回復(fù)client收到消息(ACK),然后兩邊斷開連接。2、server端循環(huán)等待客戶端建立連接,client發(fā)送一次消息后,雙方斷開連接。3、server端循環(huán)等待客戶端建立連接,一旦建立,

    2024年01月19日
    瀏覽(13)
  • RDMA性能測試工具集preftest_README

    測試工具 : https://github.com/linux-rdma/perftest preftest(Performance Test)是一組基于uverbs編寫的測試工具集,旨在用作性能微基準(zhǔn)。這些測試可以用作硬件或軟件調(diào)優(yōu)以及功能測試。 uverbs是RDMA(Remote Direct Memory Access)的一種編程接口,它提供了底層、高效的編程接口,可以控制RD

    2024年02月07日
    瀏覽(17)
  • [RDMA] 高性能異步的消息傳遞和RPC :Accelio

    [RDMA] 高性能異步的消息傳遞和RPC :Accelio

    1. Introduce Accelio是一個高性能異步的可靠消息傳遞和RPC庫,能優(yōu)化硬件加速。 RDMA和TCP / IP傳輸被實現(xiàn),并且其他的傳輸也能被實現(xiàn),如共享存儲器可以利用這個高效和方便的API的優(yōu)點。Accelio 是 Mellanox 公司的RDMA中間件,用于高性能異步的可靠消息傳遞和RPC庫。 Accelio提供了一

    2024年02月12日
    瀏覽(27)
  • 博通BCM575系列 RDMA 網(wǎng)卡驅(qū)動 bnxt_re 分析(一)

    博通BCM575系列 RDMA 網(wǎng)卡驅(qū)動 bnxt_re 分析(一)

    整個BCM系列驅(qū)動分成以太網(wǎng)部分(bnxt_en.ko)和RDMA部分(bnxt_re.ko), 兩個模塊之間通過內(nèi)核的auxiliary_bus進行管理.我們主要分析下bnxt_re驅(qū)動. 這個驅(qū)動的核心是 qplib_fp.c, 這個文件主要包含了驅(qū)動的數(shù)據(jù)路徑, 包括Post Send, Post Recv, Poll CQ流程的實現(xiàn). ib_verbs.c主要是實現(xiàn)了上層的Verbs接口

    2024年02月08日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包