首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RoCE与MLNX_OFED的连接问题(RDMA在汇聚以太网上)

RoCE与MLNX_OFED的连接问题(RDMA在汇聚以太网上)
EN

Stack Overflow用户
提问于 2020-07-29 09:58:36
回答 1查看 784关注 0票数 0

我正试图让RoCe (RDMA over converged以太网)在两个工作站上工作。我已经在这两台计算机上安装了MLNX_OFED,这两台计算机都配备了MellanoxConnectX-5en100GbE适配器,并通过相应的电缆直接连接到彼此。根据我所读到的,我需要子网管理器在其中一个工作站上运行,以便它能够在它们之间使用RoCe。

当试图运行命令opensm时,它表示没有找到本地端口。我可以平两台电脑,而且它能工作。我也可以使用命令udaddy来测试RDMA,而且它也能工作。但是,尝试运行本指南中提供的RDMA_RC_EXAMPLE时,它在尝试创建队列对时失败,更具体地说,当它试图将状态更改为RTR时(准备接收)。

还有一些消息来源说,您需要一个RDMA服务,它不存在于我的计算机上。MLNX_OFED的安装排除了ibutils* in /etc/yum.conf,我不知道它是否相关,但我注意到了。

我在其中一台机器上运行CentOS 7.7,在另一台机器上运行CentOS 7.8。

我对什么是错误感到有点困惑。

更新这里是运行代码时中断的函数。

代码语言:javascript
复制
/******************************************************************************

 * Function: modify_qp_to_rtr

 *

 * Input

 * qp QP to transition

 * remote_qpn remote QP number

 * dlid destination LID

 * dgid destination GID (mandatory for RoCEE)

 *

 * Output

 * none

 *

 * Returns

 * 0 on success, ibv_modify_qp failure code on failure

 *

 * Description

 * Transition a QP from the INIT to RTR state, using the specified QP number

 ******************************************************************************/
static int modify_qp_to_rtr (struct ibv_qp *qp, uint32_t remote_qpn, uint16_t dlid, uint8_t * dgid)

{

    struct ibv_qp_attr attr;

    int flags;

    int rc;

    memset (&attr, 0, sizeof (attr));

    attr.qp_state = IBV_QPS_RTR;

    attr.path_mtu = IBV_MTU_256;

    attr.dest_qp_num = remote_qpn;

    attr.rq_psn = 0;

    attr.max_dest_rd_atomic = 1;

    attr.min_rnr_timer = 0x12;

    attr.ah_attr.is_global = 0;

    attr.ah_attr.dlid = dlid;

    attr.ah_attr.sl = 0;

    attr.ah_attr.src_path_bits = 0;

    attr.ah_attr.port_num = config.ib_port;

    if (config.gid_idx >= 0)

    {

        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;

        attr.ah_attr.grh.traffic_class = 0;

    }

    flags = IBV_QP_STATE | IBV_QP_AV | IBV_QP_PATH_MTU | IBV_QP_DEST_QPN |

        IBV_QP_RQ_PSN | IBV_QP_MAX_DEST_RD_ATOMIC | IBV_QP_MIN_RNR_TIMER;

    rc = ibv_modify_qp (qp, &attr, flags);

    if (rc)

        fprintf (stderr, "failed to modify QP state to RTR\n");

    return rc;

}

这个消息来源RoCE调试流Linux

RoCE需要至少1024字节的MTU才能实现净有效负载。

我猜这会影响代码中的这一行:

attr.path_mtu = IBV_MTU_256;

当更改为IBV_MTU_1024时,它会编译,但会给出相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-30 07:50:12

解决了

在使用RoCE时,您需要指定@haggai_e解释的GID索引,我认为使用Infiniband而不是RoCE时不需要它。

在运行qperf测试时,我们还需要设置连接管理器标志以使其运行。我假设它具有与使用Infiniband而不是RoCE时需要使用的子网管理器相同的功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63151043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档