【RDMA】RoCEv2 幀結構|RoCE和RRoCE|Soft-RoCE


https://www.cnblogs.com/bandaoyu/p/14861141.html

 

目錄

RoCE和RRoCE

 

一、數據組成

UC send

RoCE

RC send

RoCE

RRoCE

二、各部分組成詳細

UC send  詳細

RoCE

RC send  詳細

RoCE

RRoCE 

三、mellonx如何設置RoCEv1和RoCEv2


RoCE和RRoCE

RRoCE = Routable RoCE

Since RoCEv2 packets are routable the RoCE v2 protocol is sometimes called Routable RoCE or RRoCE

 

一、數據組成

UC send

RoCE

1911    1.704461    GID: fe80::9a03:9bff:fe92:1ae6    GID: fe80::9a03:9bff:fe9a:4296    RoCE    134    UC Send Only QP=0x00fd47 

 

RC send

RoCE

17    0.000203    GID: fe80::9a03:9bff:fe92:1ae6    GID: fe80::9a03:9bff:fe9a:2b3a    RoCE    114    RC Send Only QP=0x00f798 

RRoCE

14584    0.041138    192.169.31.53    192.169.31.54    RRoCE    1082    RC Send Middle QP=0x00d684 

二、各部分組成詳細

UC send  詳細

RoCE

 

RC send  詳細

RoCE

RRoCE 

14584    0.041138    192.169.31.53    192.169.31.54    RRoCE    1082    RC Send Middle QP=0x00d684 

 

三、mellonx如何設置RoCEv1和RoCEv2

 

https://docs.mellanox.com/pages/viewpage.action?pageId=12013422#RDMAoverConvergedEthernet(RoCE)-RoCEv2

    1. RoCEv1或RoCEv2的設置

Mellonx查看當前是RoCEv1還是RoCEv2

 

cma_roce_mode -d mlx5_0 -p 1

 

RoCE Modes Parameters

 

在RoCEv1 模式下,發送的msg 是RoCE 格式

在RoCEv2 模式下,發送的msg 是RRoCE 格式

      1. 配置文件設置RoCE模式

ConnectX®-3 僅支持 RoCEv1,而 ConnectX®-3 Pro 支持 RoCEv1 和 RoCEv2。可以使用 /etc/modprobe.d/mlx4_core.conf 文件中的“roce_mode”參數設置 RoCE 模式。

以下是可能的 RoCE 模式值:

如果設置為“0”,則驅動程序將所有 GID 索引關聯到 RoCEv1

如果設置為“2”,則驅動程序將所有 GID 索引關聯到 RoCEv2(從固件 v2.32.5100 起在 ConnectX-3 Pro 中受支持)

如果設置為“4”,則驅動程序將所有 GID 索引關聯到 RoCEv1 和 RoCEv2,每個 RoCE 版本的單個條目(從固件 v2.34.5000 起在 ConnectX-3 Pro 中受支持)

ConnectX-3 Pro 中的 RoCE 模式值示例:

options mlx4_core roce_mode=2

 

ConnectX®-4 支持 RoCEv1 和 RoCEv2。默認情況下,驅動程序將所有 GID 索引關聯到 RoCEv1 和 RoCEv2,因此,每個 RoCE 版本都有一個條目。

有關更多信息,請參閱如何配置 RoCEv2 社區帖子。

      1. 創建QP時指定RoCE模式
        1. 為隊列對 (QP) 設置 RoCE 模式

 

對於 RC/UC QP(連接的 QP 類型)和 UD QP,為支持兩種 RoCE 模式的設備設置 RoCE 模式是不同的。

要將 RC/UC QP(連接 QP)從 INIT 修改為 RTR,必須提供地址向量 (AV)。在其他屬性中,AV 應該為 QP 的源 GID 指定端口 GID 表的索引。該索引中的 GID 類型將用於設置 QP 的 RoCE 類型。

要修改 UD QP,必須使用 mlx4_core 模塊參數“ud_gid_type”的值來為設備上的所有 UD QP 設置 RoCE 模式。允許的值為:

 

RoCE Mode

Allowed Value

RoCE v1

0 (Default)

RoCE v2

2

https://docs.mellanox.com/pages/viewpage.action?pageId=12013422#RDMAoverConvergedEthernet(RoCE)-RoCEv2

        1. 設置 RDMA_CM 應用程序的 RoCE 模式

https://docs.mellanox.com/pages/viewpage.action?pageId=12013422#RDMAoverConvergedEthernet(RoCE)-RoCEv2

 

目錄

 一、RoCE幀結構

二、soft-RoCE

三、RoCE和RRoCE

UC send

RoCE

RC send

RoCE

RRoCE

四、抓包查看各部分組成詳細

UC send  詳細

RoCE

RC send  詳細

RoCE

RRoCE

五、mellonx如何設置RoCEv1和RoCEv2

@UESTC
 一、RoCE幀結構

RoCE幀結構
https://www.jianshu.com/p/85e7309c6187

RoCE v1和RoCE v2

RoCE將IB傳輸的流量封裝到下面兩種以太網幀中:

l RoCE v1 - RoCE v1協議被定義為帶有以太網頭部的IB幀。 它使用以太網類型0x8915並且可以選擇啟用或者關閉VLAN標簽。常規的以太網MTU也適用於RoCE幀。

l RoCE v2 - RoCE協議的直接擴展使得流量能在3層IP環境下運行。將RoCE中的GRH頭部替換成IP頭部,使用UDP類型和專用的目的UDP端口(4791)。UDP源端口域用來攜帶一個模糊的流標識符,使得網絡設備能夠實現包的轉發優化(例如ECMP),同時對於協議頭部的格式保持無關性。

在RoCE中,infiniband的鏈路層協議頭被去掉,用來表示地址的GUID被轉換成以太網的MAC。Infiniband依賴於無損的物理傳輸,RoCE也同樣依賴於無損的以太傳輸,這一要求會給以太網的部署帶來了成本和管理上的開銷。以太網的無損傳輸必須依靠L2的QoS支持,比如PFC(Priority Flow Control),接收端在buffer池超過閾值時會向發送方發出pause幀,發送方MAC層在收到pause幀后,自動降低發送速率。這一要求,意味着整個傳輸環節上的所有節點包括end、switch、router,都必須全部支持L2 QoS,否則鏈路上的PFC就不能在兩端發揮有效作用。

                                                           RoCEv1幀結構示意圖

RoCEv1對應的協議請規范參考InfiniBand™ Architecture Specification Release 1.2.1 Annex

RoCEv2
  由於RoCEv1的數據幀不帶IP頭部(所以不能IP路由),所以只能在L2子網內通信。為了解決此問題,IBTA於2014年提出了RoCE V2,RoCEv2擴展了RoCEv1,將GRH(Global Routing Header)換成UDP header + IP header,擴展后的幀結構如下圖所示。

對應一個具體的報文示意圖如下圖所示。


原文鏈接:https://blog.csdn.net/bandaoyu/article/details/115346857
二、soft-RoCE


  Linux內核在4.9通過軟件的實現了RoCEv2,即Soft-RoCE。不同於RoCE,softRoCE適用於任何以太環境,無需依賴NIC、switch、L2QoS等支持。(所以只是實現RDMA的0拷貝,CPU消耗並沒有減少?)
  softRoCE的目標是在所有支持以太網的設備上都可以部署RDMA傳輸,其實現可分成兩部分,對上通過librxe與RDMA stack(libibverbs)耦合,對下通過rxe.ko與linux stack layer3耦合,用戶通過某個eth NIC的UDP隧道為虛擬的RDMA設備傳輸RoCE數據。

在性能敏感的虛擬化場景,VM環境需要直接訪問底層硬件。借助於softRoCE,底層的網卡硬件也不需要暴露在VM環境就可以使用掛載的虛擬RoCE設備。
  通過在節點上安裝soft-RoCE,它就可以與支持RoCE的節點或者是同樣安裝有soft-RoCE的節點建立RDMA傳輸。盡管在傳統以太上,one-copy甚至zero-copy的方案已經出現多個,但個人認為soft-RoCE的 最大意義是使得不具備RDMA NIC的數據中心用最小的成本構建起高效的RDMA網絡,所以softRoCE作為RoCE方案的重要補充,已經逐漸成為RDMA生態(IBTA)下一步開發的標准構件。
三、RoCE和RRoCE

RRoCE = Routable RoCE

Since RoCEv2 packets are routable the RoCE v2 protocol is sometimes called Routable RoCE or RRoCE

抓包報文下載:https://download.csdn.net/download/bandaoyu/19759272
UC send
RoCE

1911    1.704461    GID: fe80::9a03:9bff:fe92:1ae6    GID: fe80::9a03:9bff:fe9a:4296    RoCE    134    UC Send Only QP=0x00fd47

RC send
RoCE

17    0.000203    GID: fe80::9a03:9bff:fe92:1ae6    GID: fe80::9a03:9bff:fe9a:2b3a    RoCE    114    RC Send Only QP=0x00f798

RRoCE

14584    0.041138    192.169.31.53    192.169.31.54    RRoCE    1082    RC Send Middle QP=0x00d684

四、抓包查看各部分組成詳細
UC send  詳細
RoCE

RC send  詳細
RoCE

RRoCE

14584    0.041138    192.169.31.53    192.169.31.54    RRoCE    1082    RC Send Middle QP=0x00d684

五、mellonx如何設置RoCEv1和RoCEv2
方法

1、ibdev2netdev -v 查看網卡是否是ConnectX®-4 以及以上,ConnectX®-4 以及以上支持 RoCEv1 和 RoCEv2。

2、Show_gids查看

ver代表RoCE的版本,INDEX代表gid_index

3.創建QP時選擇RoCEv2

從Show_gids顯示的信息可知,當使用device_name是mlx5_0,port=1,創建QP時要選擇RoCEv2 則,則INDEX應該是1、3、5

 
官方文檔

https://docs.mellanox.com/pages/viewpage.action?pageId=37849138#RDMAoverConvergedEthernet(RoCE)-RoCEModesParameters

    查看網卡信息

ibdev2netdev -v

    [root@rdma64 test]# ibdev2netdev -v
    0000:18:00.0 mlx5_0 (MT4119 - MCX555A-ECAT) CX555A - ConnectX-5 QSFP28 fw 16.23.1020 port 1 (ACTIVE) ==> eth18-0 (Up)
    0000:3b:00.0 mlx5_1 (MT4119 - MCX555A-ECAT) CX555A - ConnectX-5 QSFP28 fw 16.24.1000 port 1 (ACTIVE) ==> ib3b-0 (Up)

確認是ConnectX-5

ConnectX®-4 支持 RoCEv1 和 RoCEv2。默認情況下,驅動程序將所有 GID 索引關聯到 RoCEv1 和 RoCEv2,因此,每個 RoCE 版本都有一個條目。

為隊列對 (QP) 設置 RoCE 模式

給RC/UC QP設置RoCE模式的方法是在將 RC/UC QP(連接 QP)從 INIT 修改為 RTR時,在地址向量 (AV)的屬性中,為 QP 的源 GID 指定端口 GID 表的索引。該索引中的 GID 類型將用於設置 QP 的 RoCE 類型。

也就是ibv_modify_qp 之前,給參數attr的attr.ah_attr.grh.sgid_index屬性配置GID 表的索引。

當前RDMA網卡支持的GID索引和索引對應的RoCE模式見GID 表總體:

MLNX_OFED 提供了一個名為 show_gids 的腳本來方便地查看 GID 表。

[root@rdma64 test]# show_gids

DEV     PORT    INDEX   GID                                     IPv4            VER     DEV

---     ----    -----   ---                                     ------------    ---     ---

mlx5_0  1       0       fe80:0000:0000:0000:9a03:9bff:fe92:1ae6               v1      eth18-0

mlx5_0  1       1       fe80:0000:0000:0000:9a03:9bff:fe92:1ae6               v2      eth18-0

mlx5_0  1       2       0000:0000:0000:0000:0000:ffff:c0a9:1f36 192.169.31.54   v1      eth18-0

mlx5_0  1       3       0000:0000:0000:0000:0000:ffff:c0a9:1f36 192.169.31.54   v2      eth18-0

mlx5_1  1       0       fe80:0000:0000:0000:9a03:9bff:fe9a:2992               v1      ib3b-0

mlx5_1  1       1       fe80:0000:0000:0000:9a03:9bff:fe9a:2992               v2      ib3b-0

mlx5_1  1       2       0000:0000:0000:0000:0000:ffff:ac11:1f36 172.17.31.54    v1      ib3b-0

mlx5_1  1       3       0000:0000:0000:0000:0000:ffff:ac11:1f36 172.17.31.54    v2      ib3b-0

n_gids_found=8

我們要設置IB port 1的RoCE模式為RoCEv2,所以我們可以選擇索引1和3,例如:

    

……

config.gid_idx        = 1;  //1 或3均可。

config.traffic_class = 6;  //對應RocE

if(config.gid_idx >= 0)
{
    fprintf(stderr, "##gid_idx:%d\n", config.gid_idx);

    attr.ah_attr.is_global         = 1;
    attr.ah_attr.port_num          = 1;
    memcpy(&attr.ah_attr.grh.dgid, dgid, 16);
    attr.ah_attr.grh.flow_label    = 0;
    attr.ah_attr.grh.hop_limit     = 1;
    attr.ah_attr.grh.sgid_index    = config.gid_idx; // config.gid_idx  = 1;  //1 或3。

attr.ah_attr.grh.traffic_class = config.traffic_class;
}

fprintf(stderr, "##traffic_class:%d\n", config.traffic_class);

flags = IBV_QP_STATE | IBV_QP_AV | IBV_QP_PATH_MTU | IBV_QP_DEST_QPN |
        IBV_QP_RQ_PSN ;
rc = ibv_modify_qp(qp, &attr, flags);
if(rc)
{
    fprintf(stderr, "failed to modify QP state to RTR,rc = %d,%s\n", rc, __FUNCTION__);
}

配置RoCEv1和RoCEv2 前后發送數據對比:

RoCEv1:

RoCEv2:

(改為RoCEv2后,)

            注意事項
    給UD QP設置RoCE模式的方法與RC/UC不同。

給rdma_cm接口配置RoCE的方法與vbers不同。

詳情見:https://docs.mellanox.com/pages/viewpage.action?pageId=37849138#RDMAoverConvergedEthernet(RoCE)-RoCEModesParameters

    注意不同的網卡GID索引表不同

用[root@rdma64 test]# show_gids 列出當前網卡的GID索引表,以顯示的結果為准。官網的下面的這個表只針對connect X4:


————————————————
版權聲明:本文為CSDN博主「bandaoyu」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/bandaoyu/article/details/117560876


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM