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

如何在ConnectX-6 InfiniBand/VPI适配器中动态修改QP速率限制

问题原因与解决方法

1. ah_attr.static_rate 无法动态修改的原因

ah_attr.static_rate 是QP进入RTR(Ready to Receive)阶段时加载的静态AH属性,硬件只会在QP初始化状态机流转到RTR阶段读取一次该配置,QP进入RTS(Ready to Send)运行态后,再修改该字段调用ibv_modify_qp不会触发硬件重配置,自然不生效。

2. ibv_modify_qp_rate_limit() 返回EINVAL的核心原因

你当前的调用方式缺少必填配置,以下是触发EINVAL的常见场景:

  • 未填写必填字段rate_limit_type:该字段不能为0,ConnectX-6支持两种限速类型,硬限速场景需显式赋值IBV_QP_RATE_LIMIT_UNCONTENDED,字段留0会直接被驱动校验拦截。
  • 速率值不符合要求:该API的rate_limit单位为Mbps,不是Gbps,取值不能超过端口当前协商的物理链路最大速率(比如100G链路最大值为100000),超出范围会返回错误。ConnectX-6硬件限速粒度为1Mbps,支持任意整数Mbps的速率配置,无需对齐固定档位。
  • 环境不支持该特性:调用前需确认满足以下前置条件:
    • ConnectX-6固件版本 >= 20.30.0000,老版本固件未开放动态QP限速控制接口
    • 设备能力flag包含IBV_DEVICE_QP_RATE_LIMIT,可通过ibv_query_device查询,无该flag说明驱动/固件不支持该特性
    • 仅RC、UC、UD类型QP支持该接口,Raw QP、XRC QP在ConnectX-6上不支持独立动态限速
    • 使用的rdma-core版本 >= v35,或MLNX_OFED版本 >= 5.4,低版本用户态库存在接口封装bug,会导致调用失败

正确调用示例

struct ibv_qp_rate_limit_attr rl_attr;
memset(&rl_attr, 0, sizeof(rl_attr));
// 配置为无竞争场景硬限速
rl_attr.rate_limit_type = IBV_QP_RATE_LIMIT_UNCONTENDED;
// 示例:设置为40Gbps,对应值为40000Mbps
rl_attr.rate_limit = 40000;

int ret = ibv_modify_qp_rate_limit(qp, &rl_attr);
if (ret) {
    fprintf(stderr, "Set QP rate limit failed, errno=%d, errstr=%s\n", errno, strerror(errno));
}

该接口可以在QP运行态(RTS阶段)动态调用,修改后立即生效,不需要重置QP状态机。

3. 全局端口级硬件限速配置方法

如果需要对整个端口的所有流量配置全局限速,不需要逐QP修改,直接调用ibv_modify_port接口,设置port_attr.max_rate字段即可,该配置为端口级硬限速,所有经过该端口的发送流量都会受速率限制。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:51:05