You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用rdmacm通过TCP接口初始化连接,用不同接口执行RDMA传输?

用rdmacm分离控制面(TCP/IP接口)与数据面(独立RDMA接口)的实现方案

完全可以实现这种控制面和数据面分离的场景,rdmacm原生支持通过不同接口处理连接初始化和RDMA数据传输,具体操作如下:

核心配置步骤

  • 绑定控制面到TCP/IP接口
    创建rdmacm ID后,通过bind()将其绑定到本地TCP/IP接口的IP地址,确保连接建立的控制报文走TCP/IP链路:

    struct sockaddr_in ctrl_addr;
    memset(&ctrl_addr, 0, sizeof(ctrl_addr));
    ctrl_addr.sin_family = AF_INET;
    ctrl_addr.sin_addr.s_addr = inet_addr("你的TCP/IP接口IP");
    ctrl_addr.sin_port = htons(你的监听端口);
    rdma_bind_addr(cm_id, (struct sockaddr*)&ctrl_addr);
    
  • 指定数据面为独立RDMA接口
    在发起或接受连接前,需要明确指定RDMA数据传输使用的本地源地址为RDMA接口的IP。可以在调用rdma_connect()时,通过rdma_conn_param关联的地址信息设置,或者提前通过rdma_resolve_addr()解析远端RDMA接口的地址,确保数据面流量路由到RDMA网卡。

  • 配置路由隔离流量
    为避免控制面和数据面流量混淆,需要在两台主机上添加静态路由,让远端RDMA接口的IP流量仅走本地RDMA网卡:

    # 本地主机执行
    ip route add 远端RDMA接口IP/32 dev 本地RDMA网卡名
    

关键注意点

  • 远端主机需对称配置:控制面绑定自身TCP/IP接口,数据面指定自身RDMA接口地址。
  • 确认RDMA网卡驱动和硬件支持独立数据面传输,RoCE环境下可能需要配置VLAN或QoS来隔离流量。
  • 调试时可通过tcpdump分别监控两个接口,验证控制报文走TCP/IP接口,RDMA数据报文走独立RDMA接口。

内容的提问来源于stack exchange,提问作者rafoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:33:27