0

0

c++ rdma编程入门 c++如何使用libverbs进行远程内存访问

煙雲

煙雲

发布时间:2026-03-18 16:25:03

|

515人浏览过

|

来源于php中文网

原创

libverbs 初始化失败主因是RDMA驱动未加载或权限不足,需检查ib_uverbs等模块、/dev/infiniband/设备权限及用户组;RoCEv2连接必须正确获取GID索引并启用PFC/ECN无损网络;内存注册须用posix_memalign对齐且锁定。

c++ rdma编程入门 c++如何使用libverbs进行远程内存访问

libverbs 初始化失败:找不到设备或 no devices found

调用 ibv_get_device_list() 返回 nullptr 或空列表,最常见原因是内核没加载 RDMA 驱动,或者用户态没权限访问设备文件。

  • 先确认硬件和驱动:运行 lsmod | grep ib_,至少要有 ib_uverbsib_core、对应网卡的驱动(如 mlx5_core);若无,需安装厂商 OFED 或内核配套 RDMA 模块
  • 检查设备节点:ls -l /dev/infiniband/uverbs*,权限应为 crw-rw---- 且所属组通常是 rdma;普通用户需加入该组:sudo usermod -aG rdma $USER,然后重新登录
  • 容器环境要额外暴露设备:Docker 启动时加 --device=/dev/infiniband/ --cap-add=SYS_RAWIO,否则 ibv_get_device_list() 一定为空

创建 QP 前必须搞清 port_attr 和 gid_index

RDMA 连接不是靠 IP 地址,而是靠 GID(Global Identifier),它绑定在物理端口上。跳过查询端口属性直接硬编码 gid_index=0 是多数初学者连接失败的根源。

  • 必须先调用 ibv_query_port() 获取 port_attr,确认端口是否处于 IB_PORT_ACTIVE 状态;再用 ibv_query_gid() 查指定 gid_index 是否有效(返回 0 表示成功)
  • gid_index 不等于网卡编号,也不等于 IPv6 地址序号;它对应 RoCEv2 下的 GID 表索引,通常从 0 开始找第一个非全零 GID:ibv_query_gid(ctx, port, 0, &gid),然后逐个试到 port_attr.gid_tbl_len
  • RoCEv2 要求 GID 类型为 IB_GID_TYPE_ROCE_V2;如果用错类型(比如默认的 IB_GID_TYPE_IB),ibv_create_qp() 可能成功但后续连接超时

post_send 失败:WR status 为 IB_WC_RETRY_EXC_ERR 或 IB_WC_TIMEOUT

这不是代码写错了,而是底层链路没通——QP 已创建,但没完成地址解析(ARP for RoCE)或没建立连接上下文。

Riffo
Riffo

Riffo是一个免费的文件智能命名和管理工具

下载
  • 确保两端已交换并设置对方的 qpnlid(InfiniBand)、port_numgid;漏掉任意一项,ibv_post_send() 就会返回 0(提交成功),但 WC 中状态是失败
  • RoCEv2 必须启用无损网络:交换机需开 PFC(Priority Flow Control)和 ECN;服务器侧需配置 DCB:用 dcbtool 检查 etspfc 是否启用,否则重传压垮队列,直接触发 RETRY_EXC_ERR
  • 别忽略 ibv_poll_cq() 的返回值:即使 post_send() 成功,也必须轮询 CQ 拿到完成事件(WC),才能确认数据真正发出;不 poll 就等同于“发了但不知道发没发出去”

内存注册(mr)后不能直接用 std::vector 或 new 分配的地址

ibv_reg_mr() 要求内存页必须是“锁定且连续”的物理页,而标准堆分配几乎不可能满足——哪怕只注册 1KB,也会因缺页中断或 TLB miss 导致 WR 失败。

立即学习C++免费学习笔记(深入)”;

  • 必须用 posix_memalign()ibv_alloc_pd() 配套的 ibv_mem_alloc()(部分厂商扩展);对齐要求通常是 2MB 或 4KB,例如:posix_memalign(&buf, 4096, size)
  • 注册后记得检查返回值:若 ibv_reg_mr() 返回 nullptr,常见原因是内存未锁住(mlock() 失败)或超出 ulimit -l 限制;用 ulimit -l unlimited 临时放开
  • MR 生命周期必须长于所有依赖它的 WR;释放 MR 后还往里 post_send,会触发段错误或静默丢包——这种 bug 很难复现,但必崩
事情说清了就结束。真正卡住人的从来不是 API 调用顺序,而是设备可见性、GID 绑定、无损网络这三关;没过这三关,后面所有 send/receive 都是空中楼阁。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
bootstrap安装教程
bootstrap安装教程

本专题整合了bootstrap安装相关教程,阅读专题下面的文章了解更多详细操作教程。

0

2026.03.18

bootstrap框架介绍
bootstrap框架介绍

本专题整合了bootstrap框架相关介绍,阅读专题下面的文章了解更多详细内容。

2

2026.03.18

vscode 格式化
vscode 格式化

本专题整合了vscode格式化相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.18

vscode设置中文教程
vscode设置中文教程

本专题整合了vscode设置中文相关内容,阅读专题下面的文章了解更多详细教程。

0

2026.03.18

vscode更新教程合集
vscode更新教程合集

本专题整合了vscode更新相关内容,阅读专题下面的文章了解更多详细教程。

2

2026.03.18

Gemini网页版零基础入门:5分钟上手Gemini聊天指南
Gemini网页版零基础入门:5分钟上手Gemini聊天指南

本专题专为零基础用户打造,5分钟快速掌握Gemini网页版核心用法。从账号登录到界面布局,详解如何发起对话、优化提示词及利用多模态功能。通过实战案例,教你高效获取信息、创作内容与分析数据。无论学习还是工作,轻松开启AI辅助新时代,让Gemini成为你的得力智能助手。

9

2026.03.18

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

8

2026.03.18

Java Spring Security权限控制与认证机制实战
Java Spring Security权限控制与认证机制实战

本专题围绕 Java 后端安全体系建设展开,重点讲解 Spring Security 在权限控制与认证机制中的应用实践。内容涵盖用户认证流程、权限模型设计、JWT 鉴权方案、OAuth2 集成以及接口安全防护策略。通过实际项目案例,帮助开发者构建安全可靠的后端认证体系,提升系统安全性与可扩展能力。

22

2026.03.18

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

170

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.6万人学习

C 教程
C 教程

共75课时 | 5.6万人学习

C++教程
C++教程

共115课时 | 22.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号