详细介绍:【RDMA】mlx5dev mlx5dv_devx 接口

news/2025/11/29 14:38:02/文章来源:https://www.cnblogs.com/gccbuaa/p/19286385

目录

mlx5dev和mlx5dv_devx的关系

mlx5dev

mlx5dv_devx

mlx5dv_modify_qp_lag_port 和 mlx5dv_modify_qp_udp_sport 的区别是?

mlx5dv 接口家族


mlx5dev和mlx5dv_devx的关系

mlx5dev 接口基本都是对 mlx5dv_devx 接口的封装和特化。

从代码分析可以看出:

  1. mlx5dv_devx 接口是最基础的 DEVX 接口,献出了对硬件的直接访问能力:

    • mlx5dv_devx_obj_create/modify/destroy/query - 通用对象操作接口
    • mlx5dv_devx_umem_reg - 用户内存注册
    • mlx5dv_devx_alloc_uar - UAR 分配
    • 等等
  2. mlx5dev 接口是在 mlx5dv_devx 基础上的封装和特化:

    • mlx5dv_modify_qp_udp_sport - 特化用于修改 QP 的 UDP 源端口
    • mlx5dv_devx_qp_modify - 特化用于修改 QP 对象
    • mlx5dv_devx_cq_modify - 特化用于修改 CQ 对象
    • 等等

 mlx5dv_devx_obj_modify。就是正如大家在之前的分析中看到的,mlx5dv_modify_qp_udp_sport 实际上是构建了一个 RTS2RTS_QP 命令并通过 mlx5dv_devx_qp_modify 来实现的,而 mlx5dv_devx_qp_modify 最终调用的

例如:

对 mlx5dv_devx_obj_modify 的封装和特化,它最终会调用 mlx5dv_devx_obj_modify 来搞定对 QP 的 UDP 源端口的修改。就是mlx5dv_modify_qp_udp_sport 和 mlx5dv_devx_obj_modify 都可以用于修改 RoCE 的 UDP 源端口,mlx5dv_modify_qp_udp_sport 本质上

mlx5dev

resolute (7) mlx5dv.7.gz

Provided by:libibverbs-dev_56.1-1ubuntu1_amd64

https://manpages.ubuntu.com/manpages/resolute/en/man7/mlx5dv.7.html

https://github.com/linux-rdma/rdma-core/tree/master/providers/mlx5/man

bionic (7) mlx5dv.7.gz

由:libibverbs-dev_17.1-1ubuntu0.2_amd64 提供

名称(NAME)

mlx5dv 针对 Mellanox MLX5 设备的直接操作接口(Direct Verbs)

该接口为 MLX5 系列设备提供底层访问能力,用于执行数据路径操作,避免了 ibv_post_send(3) 中常见的通用分支处理开销。

描述(DESCRIPTION)

libibverbs API 是一个抽象接口,不依赖于任何底层硬件的具体实现(意思是 RDMA 网卡不仅有 mellanox(MLX)、还有 intel 等厂商,这些厂商都遵循 OFED 的 verbs API 接口定义,针对自家网卡实现了 API 规定的功能)。这种抽象虽然提高了用户程序的可移植性,但会带来一定的性能损耗。

对于某些对性能高度敏感的应用而言,优化性能的重要性往往超过可移植性需求。

为此,MLX5 提供了“直接操作”(Direct Verbs)API。该接口暴露了 MLX5 设备特有的底层数据路径操作(send/receive/completion),允许应用程序绕过标准 libibverbs 数据路径 API,直接与硬件交互,从而获得更高的性能。(mellanox 自己实现了一套更能发挥自家产品硬件优势的 API)

该接口在特定于 MLX5 硬件的头文件中定义,包含相关的内联函数,以及从 ibverbs 结构到 MLX5 特定结构的转换逻辑。

通过直接include mlx5dv.h 头文件并链接 MLX5 相关库(如 libmlx5.so),即可使用这些新接口。

应用程序一旦使用直接操作路径,必须自行管理所有锁机制。严禁在同一应用程序的数据路径中同时使用直接与非直接的访问方式。否则可能导致未定义行为或性能下降。

注意事项(NOTES)

所有从 Connect-IB 开始的 Mellanox 网卡设备(包括 Connect-IB、ConnectX-4、ConnectX-4Lx、ConnectX-5 及后续型号)均实现了 MLX5 编程接口。因此,使用 MLX5 直接操作 API 并不会将应用程序限制于单一硬件型号,在一定程度上仍保持了跨代设备的可移植性。

参见(SEE ALSO)

ibv_post_send(3)verbs(7)

作者(AUTHORS)

Leon Romanovsky <leonro@mellanox.com>

mlx5dv_devx

mlx5dv_devx_qp_modify —— 通过 DEVX 接口修改 Verbs QP(队列对)
mlx5dv_devx_qp_query —— 通过 DEVX 接口查询 Verbs QP(队列对)

mlx5dv_devx_cq_modify —— 通过 DEVX 接口修改 Verbs CQ(完成队列)
mlx5dv_devx_cq_query —— 通过 DEVX 接口查询 Verbs CQ(完成队列)

mlx5dv_devx_srq_modify —— 通过 DEVX 接口修改 Verbs SRQ(共享接收队列)
mlx5dv_devx_srq_query —— 通过 DEVX 接口查询 Verbs SRQ(共享接收队列)

mlx5dv_devx_wq_modify —— 通过 DEVX 接口修改 Verbs WQ(工作队列)
mlx5dv_devx_wq_query —— 通过 DEVX 接口查询 Verbs WQ(工作队列)

mlx5dv_devx_ind_tbl_modify —— 通过 DEVX 接口修改 Verbs 重定向表(indirection table)
mlx5dv_devx_ind_tbl_query —— 通过 DEVX 接口查询 Verbs 重定向表(indirection table)

描述

通过 DEVX 接口对 Verbs 对象执行修改或查询操作。

DEVX API 利用 KABI(内核 ABI)机制,允许用户空间直接访问 mlx5 设备驱动,其重要目标是使用户态驱动尽可能独立于内核,从而在无需或仅需极少内核改动的情况下,启用未来设备的新功能和新命令。

上述 API 允许通过 DEVX 接口对 Verbs 对象进行修改或查询,从而实现 Verbs 与 DEVX 之间的互操作性。应用程序可以使用 Verbs 提供的创建接口(例如 ibv_create_qp)创建对象,然后通过 DEVX 接口对其进行修改或查询(例如 mlx5dv_devx_qp_modify)。


参数

  • qp / cq / wq / srq / ind_tbl:要执行操作的 ibv_xxx 对象(分别为队列对、完成队列、工作队列、共享接收队列或重定向表)。
  • in:输入缓冲区,包含以设备规范格式提供的命令输入数据。
  • inlen:输入缓冲区 in 的字节大小。
  • out:输出缓冲区,用于存放按设备规范格式返回的命令输出数据。
  • outlen:输出缓冲区 out 的字节大小。

返回值

成功时返回 0;失败时返回对应的 errno 错误码。

如果错误码为 EREMOTEIO,则可通过 outbox.statusoutbox.syndrome 获取命令失败的详细信息。


另请参阅

mlx5dv_open_device, mlx5dv_devx_obj_create


作者

Yishai Hadas yishaih@mellanox.com

mlx5dv_modify_qp_lag_port 和 mlx5dv_modify_qp_udp_sport 的区别是?

主要功能区别

修改对象不同:

mlx5dv_modify_qp_lag_port 用于修改 QP(Queue Pair)所使用的 LAG(Link Aggregation Group)端口,主要用于多端口网卡的负载均衡或冗余场景。
mlx5dv_modify_qp_udp_sport 用于修改 RoCE v2 QP 的 UDP 源端口,首要用于 RoCE v2 流量的端口定制,便于网络设备识别和流量分流。

应用场景不同:

mlx5dv_modify_qp_lag_port 适用于需要动态切换 QP 绑定的物理端口(如 LAG/多端口网卡)时。
mlx5dv_modify_qp_udp_sport 适用于需要修改 RoCE v2 的 UDP 源端口以构建更灵活的流量管理时。

修改内容不同:

mlx5dv_modify_qp_lag_port 修改的是 QP 的物理端口号(LAG port)。
mlx5dv_modify_qp_udp_sport 修改的是 QP 的 UDP 源端口号。

技术构建区别

static int modify_qp_lag_port(struct ibv_qp *qp, uint8_t port_num)
{// ...DEVX_SET(rts2rts_qp_in, in, opcode, MLX5_CMD_OP_RTS2RTS_QP);DEVX_SET(rts2rts_qp_in, in, qpn, qp->qp_num);DEVX_SET(rts2rts_qp_in, in, opt_param_mask,MLX5_QPC_OPT_MASK_RTS2RTS_LAG_TX_PORT_AFFINITY);DEVX_SET(rts2rts_qp_in, in, qpc.lag_tx_port_affinity, port_num);ret = mlx5dv_devx_qp_modify(qp, in, sizeof(in), out, sizeof(out));// ...
}
static int _mlx5dv_modify_qp_udp_sport(struct ibv_qp *qp, uint16_t udp_sport)
{// ...DEVX_SET(rts2rts_qp_in, in, opcode, MLX5_CMD_OP_RTS2RTS_QP);DEVX_SET(rts2rts_qp_in, in, qpn, qp->qp_num);DEVX_SET64(rts2rts_qp_in, in, opt_param_mask_95_32,MLX5_QPC_OPT_MASK_32_UDP_SPORT);DEVX_SET(rts2rts_qp_in, in, qpc.primary_address_path.udp_sport,udp_sport);ret = mlx5dv_devx_qp_modify(qp, in, sizeof(in), out, sizeof(out));// ...
}

适用的QP类型

  • LAG端口修改:帮助RAW_PACKET、RC、UC、UD、XRC_SEND和DCI类型的QP
  • UDP源端口修改:仅支持RC和UC类型的QP,并且QP必须处于RTS状态

总结来说,这两个函数虽然都使用底层的QP修改机制,但服务于完全不同的网络机制需求:LAG端口修改关注物理端口的选择和高可用性,而UDP源端口修改关注网络层的负载均衡。

mlx5dv 接口家族

https://github.com/linux-rdma/rdma-core/tree/master/providers/mlx5/man

CMakeLists.txt

mlx5: Introduce mlx5dv_get_data_direct_sysfs_path() API

last year

mlx5dv.7

mlx5: Add mlx5dv_is_supported()

7 years ago

mlx5dv_alloc_dm.3.md

mlx5: Add new DM type, encap-sw

2 years ago

mlx5dv_alloc_var.3.md

mlx5: Expose VAR direct verbs

6 years ago

mlx5dv_create_cq.3.md

mlx5: CQE size control

7 years ago

mlx5dv_create_flow.3.md

mlx5: Add support for bulk flow counters in mlx5dv_create_flow

2 months ago

mlx5dv_create_flow_action_modify_header.3.md

mlx5: Fix man page of mlx5dv_create_flow_action_modify_header()

6 years ago

mlx5dv_create_flow_action_packet_reformat.3.md

Fix typos found by lintian

7 years ago

mlx5dv_create_flow_matcher.3.md

mlx5: Extend mlx5dv_create_flow_matcher() to support new flow table t…

7 months ago

mlx5dv_create_mkey.3.md

mlx5: Extend mkey creation to add remote invalidate option

3 years ago

mlx5dv_create_qp.3.md

mlx5: Support OOO RX WQE consumption

11 months ago

mlx5dv_create_steering_anchor.3.md

Fix grammar mistake of "allow doing"

3 years ago

mlx5dv_crypto_login.3.md

mlx5: Add crypto login DV API

4 years ago

mlx5dv_crypto_login_create.3.md

mlx5: Add new crypto login APIs

3 years ago

mlx5dv_dci_stream_id_reset.3.md

mlx5: Add DCS modify QP support

4 years ago

mlx5dv_dek_create.3.md

mlx5: Add support for plaintext DEKs

3 years ago

mlx5dv_devx_alloc_msi_vector.3.md

mlx5: Introduce devx APIs to allocate and free msi vectors

3 years ago

mlx5dv_devx_alloc_uar.3.md

mlx5: Add support for allocating a dedicated NC UAR

2 years ago

mlx5dv_devx_create_cmd_comp.3.md

mlx5: Introduce DEVX API to get async command completion

7 years ago

mlx5dv_devx_create_eq.3.md

mlx5: Update DEVX man pages to describe the EREMOTEIO return code

3 years ago

mlx5dv_devx_create_event_channel.3.md

mlx5: Introduce DEVX APIs to create and destroy asynchronous event ch…

6 years ago

mlx5dv_devx_get_event.3.md

mlx5: Expose DEVX API to read asynchronous event

6 years ago

mlx5dv_devx_obj_modify/mlx5dv_devx_obj_create.3.md

mlx5: Update DEVX man pages to describe the EREMOTEIO return code

3 years ago

mlx5dv_devx_qp_modify.3.md

mlx5: Update DEVX man pages to describe the EREMOTEIO return code

3 years ago

mlx5dv_devx_query_eqn.3.md

mlx5: Add DEVX API to query EQN

7 years ago

mlx5dv_devx_subscribe_devx_event.3.md

mlx5: Introduce DEX APIs to subscribe for asynchronous events

6 years ago

mlx5dv_devx_umem_reg.3.md

mlx5: Support MLX5_IB_ATTR_DEVX_UMEM_REG_DMABUF_FD

3 years ago

mlx5dv_dm_map_op_addr.3.md

mlx5: Add support for operations in memic

4 years ago

mlx5dv_dr_flow.3.md

mlx5: DR, add jump to root dest table

3 years ago

mlx5dv_dump.3.md

mlx5: Add support for dr_domain to the steering dump API

5 years ago

mlx5dv_flow_action_esp.3.md

Fix bad whatis entries in man pages

7 years ago

mlx5dv_get_clock_info.3

mlx5: Add direct verbs support for query clock info

8 years ago

mlx5dv_get_data_direct_sysfs_path.3.md

mlx5: Introduce mlx5dv_get_data_direct_sysfs_path() API

last year

mlx5dv_get_vfio_device_list.3.md

mlx5: Introduce mlx5dv_get_vfio_device_list()

4 years ago

mlx5dv_init_obj.3

mlx5: Extend mlx5dv_init_obj() API for devx object

last year

mlx5dv_is_supported.3.md

mlx5: Add mlx5dv_is_supported()

7 years ago

mlx5dv_map_ah_to_qp.3.md

mlx5: Add a DV API to map between AH to QP

4 years ago

mlx5dv_mkey_check.3.md

mlx5: Enhance the mlx5dv_mkey_check man page

3 years ago

mlx5dv_modify_qp_lag_port.3.md

mlx5: Enable modifying QP's lag tx_affinity port

5 years ago

mlx5dv_modify_qp_sched_elem.3.md

mlx5: Support connect an IB QP to a scheduling element

5 years ago

mlx5dv_modify_qp_udp_sport.3.md

mlx5: Add support for modify UDP source port

5 years ago

mlx5dv_open_device.3.md

mlx5: Add file descriptor array attribute support in mlx5dv_open_device

7 months ago

mlx5dv_pp_alloc.3.md

mlx5: Expose packet pacing DV APIs

5 years ago

mlx5dv_qp_cancel_posted_send_wrs.3.md

mlx5: Allow to cancel posted send work requests

4 years ago

mlx5dv_query_device.3

mlx5: Expose BlueFlame capability

4 months ago

mlx5dv_query_port.3.md

mlx5: Add a DV query port

4 years ago

mlx5dv_query_qp_lag_port.3.md

mlx5: Enable querying QP's configured and active lag port

5 years ago

mlx5dv_reg_dmabuf_mr.3.md

mlx5: Introduce mlx5dv_reg_dmabuf_mr() API

last year

mlx5dv_reserved_qpn_alloc.3.md

mlx5: Add reserved_qpn allocation/deallocation support

5 years ago

mlx5dv_sched_node_create.3.md

mlx5: Add QoS scheduling element support

5 years ago

mlx5dv_ts_to_ns.3

mlx5: Add direct verb to translate device timestamp to nanoseconds

8 years ago

mlx5dv_vfio_get_events_fd.3.md

mlx5: Introduce vfio APIs to process events

4 years ago

mlx5dv_vfio_process_events.3.md

mlx5: Introduce vfio APIs to process events

4 years ago

mlx5dv_wr_mkey_configure.3.md

mlx5: update mkey configuration doc for readability

11 months ago

mlx5dv_wr_post.3.md

mlx5: Introduce mlx5dv_wr_memcpy builder

4 years ago

mlx5dv_wr_set_mkey_crypto.3.md

mlx5: Add new crypto login APIs

3 years ago

mlx5dv_wr_set_mkey_sig_block.3.md

mlx5: update set_mkey_sig_block doc for readability

9 months ago

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/980829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年工业热处理设备企业满意度排名:瑞邦机电详细介绍及创

本榜单基于全国制造业用户调研数据与真实合作口碑,聚焦工业热处理与温控设备领域,深度筛选五家技术实力突出、用户满意度高的标杆企业,为制造企业选型提供客观依据,助力精准匹配降本增效的设备伙伴。 TOP1 推荐:江…

2025年TPE汽车脚垫十大品牌排行榜,全包围脚垫新测评精选

为帮助车主避开劣质脚垫的安全隐患与健康陷阱,精准锁定适配爱车的高品质TPE脚垫,我们从材质安全性(如环保认证、原料纯度)、工艺精准度(含模具技术、贴合度)、防护完整性(全包围设计细节)、售后保障力(物流、…

2025年宜昌十大短视频拍摄公司排行榜,信誉好、比较好的短视

短视频已成为中小企业品牌曝光、获客转化的核心阵地,但多数企业面临内容质量差、流量不精准、转化链路断的痛点。为帮助企业锁定适配的短视频服务伙伴,我们从内容创意能力(含行业适配性、视觉质感)、流量运营效率(…

2025年广东机器人服务商研发生产厂家推荐:广东知名机器人研

本榜单依托珠三角智能制造产业调研与企业真实合作口碑,深度筛选出五家标杆企业,聚焦工业机器人核心技术与场景适配能力,为制造企业选型提供客观依据,助力精准匹配专业的机器人服务伙伴。 TOP1 推荐:毅晟机械设备(…

2025年钢筋自动滚笼机制造企业权威推荐榜单:钢筋笼滚焊机全自动/笼滚焊机的钢筋笼‌/钢筋笼滚焊机机械‌源头厂家精选

随着国家基建步伐加快,钢筋自动滚笼机正以每年15%以上的增长率,成为建筑工业化进程中不可或缺的核心装备。 据行业报告显示,2024年全球钢筋笼滚焊机市场规模已达3.94亿美元,预计到2031年将增长至5.45亿美元,期间年…

完整教程:座舱出行Agent实战(三):专能化架构如何实现效率与稳定性的双重飞跃

完整教程:座舱出行Agent实战(三):专能化架构如何实现效率与稳定性的双重飞跃pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

2025年重型纸箱生产厂家权威推荐榜单:化妆品包装/食品包装箱‌/快递纸箱‌源头厂家精选

在制造业升级与跨境电商蓬勃发展的双重驱动下,重型纸箱以其卓越的承重性能和结构优势,成为保障大型、重型产品运输安全的核心要素。 据行业数据显示,2024年我国重型纸箱市场规模已达到780亿元,同比增长12.3%,并且…

设备上的轴承总是不耐用?给大家推荐几个靠谱的哈尔滨精密轴承厂家

首先是技术硬实力,这是轴承耐用的根本。我优先选了通过多重权威认证的企业,比如哈超轴承有 ISO9001、AS9100 等 5 项国际认证,建龙哈轴有省级数字化车间认证,这些认证不是随便拿的,得经过严格的质量体系审核。技术…

uv的安装以及配置

用管理员权限打开powershell Set-ExecutionPolicy Bypass -Scope Process -Force # 权限提升 $env:UV_INSTALL_DIR="D:\deploy\python\uv" # 设置uv安装路径 irm https://astral.sh/uv/install.ps1 | iex…

uv环境解决Activate.ps1文件无法加载

PS D:\workspace\ai_base_sz\LLM\agent> & D:/workspace/ai_base_sz/LLM/agent/.venv/Scripts/Activate.ps1 & : 无法加载文件 D:\workspace\ai_base_sz\LLM\agent\.venv\Scripts\Activate.ps1,因为在此系…

WGLOG日志审计系统的日志数据保留多久

默认保存30天,不过可以设置保留时间,没有限制时长 在server配置文件config/application.yml修改如下的配置项#采集日志内容保留天数,默认30天 historyDataOut: 30 修改后重启下server程序即可

【AI翻译】什么是第三方API?优势、应用场景与最佳实践

标题:什么是第三方API?优势、应用场景与最佳实践 来源链接:https://www.ramotion.com/blog/what-is-third-party-api/ 发布时间:2025-08-27 Markdown内容:应用程序很少是孤立孤岛。相反地,它们会不断与其他软件系…

2025年十大国产化服务器优质厂商排行榜,精选服务不错的国产

为帮助政企客户精准锁定适配信创需求的国产化服务器合作伙伴,避免选型过程中遭遇兼容性差、服务断层等问题,我们从国产化适配深度(处理器/系统兼容覆盖度、互认认证数量)、技术性能表现(运算/存储效率、稳定性)、…

广东知名机器人研发生产厂家TOP5权威推荐:智能装备者助力工

在中国制造向中国智造转型的关键阶段,智能装备作为核心引擎,市场需求持续爆发。2024年数据显示,广东工业机器人市场规模突破300亿元,年增速达38%,但行业中存在技术垄断、同质化竞争、定制化不足等痛点,约28%的企…

2025年度太原成人电气自动化培训班口碑推荐,专业介绍与初级

为帮助成人快速锁定适配自身需求的电气自动化技能提升平台,避免选型走弯路,我们从课程实用性(如工业项目匹配度)、实训资源质量(含设备与企业同步性)、教学模式适配性(覆盖零基础入门到技能进阶)、就业服务能力…

2025年电动阀正规厂商排行榜,电动阀品牌厂家与推荐制造商新

为帮助工业企业高效锁定适配自身需求的电动阀合作伙伴,避免选型走弯路,我们从技术创新能力(如精密制造工艺、智能控制算法)、产品性能稳定性(含极端工况适配、使用寿命)、全周期服务质量(覆盖选型咨询到售后运维…

2025 哈尔滨哈超精密轴承十大代理商权威排名

结合行业口碑与实际案例,重点考察在高端领域的应用情况。中国航发哈轴服务过航空航天项目,中航科工的轴承出口 20 多个国家,这些真实案例比空洞的宣传更有说服力。值得一提的是,我们全程采用盲审评分,去掉最高分和…

Java的jstat命令使用详解

jstat -gc 60051 10000 30 线程号,多久查一次,查的次数参考: https://blog.csdn.net/2401_87389672/article/details/142606056

在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名AI开发工具需求洞察

本文基于某知名AI开发辅助工具的文档和用户反馈,深入分析其核心功能、应用场景及用户使用方式,重点挖掘用户提出的新功能需求,为产品迭代提供参考方向。内容描述 核心功能定位 该项目是一个全面的AI命令行界面管理平…

2025年太原十大电气自动化培训班推荐:男孩学电气自动化怎么

本榜单依托太原及周边地区产业需求调研、真实学员口碑反馈与就业数据验证,深度筛选出十家优质电气自动化培训机构,为有志投身智能制造领域的人群提供客观选型依据,助力精准匹配适配的技能提升平台。 TOP1 推荐:太原…