rdma-core 快速入门:5 步跑通你的第一个 RDMA 示例
rdma-core 快速入门5 步跑通你的第一个 RDMA 示例【免费下载链接】rdma-coreRDMA core userspace libraries and daemons项目地址: https://gitcode.com/GitHub_Trending/rd/rdma-core用 TCP 发送大文件时数据要在内核协议栈里来回拷贝高并发下延迟明显抬升。而 InfiniBand 或 RoCE 网卡支持 RDMA 模式数据可以从应用内存直接发到网络上再落到对端内存内核只在建连和建资源时介入不跟着每个字节走。rdma-core 是 Linux 内核 RDMA 子系统的用户态配套工程包含 libibverbs 核心库、各厂商驱动代码和守护进程还带了可直接运行的示例。按下面的步骤走你可以从编译开始一步步把第一个 RDMA 程序跑起来。第一步看懂 rdma-core 提供什么调用链长什么样仓库的组织很直观libibverbs 是最核心的 API 库providers/ 目录下是各厂商网卡的用户态驱动mlx5、efa、irdma、rxe 都有librdmacm/ 负责连接管理srp_daemon、iwpmd、ibacm 是配套守护进程。verbs API 有一个固定的最小调用链先记住对象顺序后面的示例都是按它展开的设备上下文先列设备再打开设备。保护域做逻辑隔离资源都挂在它下面。内存区域把应用内存注册给网卡网卡才认这个地址。队列对和完成队列数据提交走队列对完成情况从完成队列取。每一步都要用上一步返回的对象顺序错了会直接失败。第二步从源码编译 rdma-core 并确认设备可见项目用 cmake 构建。Debian 和 Ubuntu 用户先装好 README 列的依赖cmake、libnl-3-dev 等然后执行bash build.sh产物在 build/bin 和 build/lib 里示例程序就放在 build/bin 下。构建完先做一件事确认系统里有没有 RDMA 设备。ibv_devices列出设备名和 GUIDibv_devinfo打印端口、GID 等更细的属性。这两个命令是所有后续操作的前置检查设备都看不见就先别写代码。第三步没有 RDMA 网卡时用 rxe 软件 RDMA 起步手上没有专用网卡也没关系。内核自带 rxe 和 siw 两种软 RDMA 驱动能在普通以太网卡上模拟出一个 RDMA 设备用来学习和调通应用逻辑完全够用# modprobe rdma_rxe # rdma link add rxe0 type rxe netdev eth0 # ibv_devices执行完用rdma link或ibv_devices验证设备名会出现在输出里后面的示例就可以用它跑。第四步跑通 rc_pingpong观察一轮 RDMA 消息交换rc_pingpong 是最值得精读的入门示例两台机器一端当服务端一端当客户端通过 TCP 交换 QP 和地址信息建好连接之后用 RDMA SEND/RECV 来回发消息./rc_pingpong # 服务端 ./rc_pingpong 服务端IP # 客户端默认交换 1000 轮 4096 字节的消息结束时打印带宽和延迟统计。常用选项-d指定设备-n改轮数-e改用 CQ 事件等待代替轮询。这个示例把建连、QP 状态迁移、地址交换这些最容易写错的部分都处理好了跑通之后改它比从零写一个快得多。第五步三个高频坑位与调试入口RDMA 程序的报错经常不在代码里而在权限和资源限制上。设备列表为空内核驱动或 uverbs 模块没加载或 /dev/infiniband/ 下的设备节点不可读先查这两个地方。注册内存失败执行ulimit -l如果锁定内存上限很小比如 32 KB注册稍大的内存区域就会失败按 libibverbs 文档 的方法在 limits.conf 里调大。提交后一直不返回完成完成队列没被轮询、或者忘了处理完成通道先对照示例里的等待逻辑检查。另外两个入口值得收藏设VERBS_LOG_LEVEL环境变量可以打开库的调试日志输出写到VERBS_LOG_FILE指向的文件设备行为排查则用 infiniband-diags/ 里的ibstat、perfquery查看端口状态和性能计数器。下一步三个方向继续深入想观察设备侧发生了什么读 asyncwatch 示例它轮询异步事件能看到端口状态变化这类通知想查端口细节就看 devinfo。不想写 C 的话pyverbs/ 提供了同名对象的 Python 接口适合先快速试验。仓库的 tests/ 目录还有按硬件分类的功能测试挑一份适合你设备的跑一遍是最贴近实战的练习。建议你现在就做一件事按 README 的构建说明编译 rdma-core用ibv_devices确认设备再在两台机器上把 rc_pingpong 跑通。跑通之后你手里就有一个可以持续修改的基线了。【免费下载链接】rdma-coreRDMA core userspace libraries and daemons项目地址: https://gitcode.com/GitHub_Trending/rd/rdma-core创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考