zoukankan      html  css  js  c++  java
  • 【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 ", 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 ", 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 ", 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

  • 相关阅读:
    C# 获取电脑SN号
    Windows 使用ffmpeg将MP4视频转换为m3u8格式
    C# 创建或打开TXT文件并逐行写入
    Dictionary通过下标获取key和value
    Winfrom 连接考勤机设备时界面假死
    Win 10操作系统快捷键
    SQL Server 2008 在表中插入新的字段
    什么是CSR
    Sql Server中的事务隔离级别
    Web验证方式(4)--JWT
  • 原文地址:https://www.cnblogs.com/ztguang/p/15201995.html
Copyright © 2011-2022 走看看