RDMA核心概念详解:QP、CQ、MR、PD一文全掌握

发布时间:2026/11/5 11:22:26

RDMA核心概念详解:QP、CQ、MR、PD一文全掌握 摘要在AI大模型训练与高性能计算中RDMA是实现零拷贝、内核旁路的核心技术。本文将带你彻底搞懂RDMA最核心的四大抽象保护域PD、内存区域MR、完成队列CQ与队列对QP。我们将从底层硬件视角剖析它们的工作原理、状态机流转并结合Verbs API代码与GPUDirect RDMA场景揭开智能网卡高效通信的神秘面纱。大家好 欢迎来到我的技术博客。最近AI大模型训练如火如荼动辄千卡集群的背后NCCL和RDMA绝对是功不可没的“幕后英雄”。很多同学在面试或者做底层网络优化时都会被问到“RDMA到底是怎么做到微秒级延迟和零拷贝的”要回答这个问题我们就必须深入智能网卡RNIC的内部搞懂RDMA最核心的四大抽象对象PD保护域、MR内存区域、CQ完成队列和QP队列对。今天我们就用大白话底层原理把这四大金刚扒得干干净净一、 PD与MR安全沙箱与内存的“通行证” ️在RDMA的世界里硬件直接操作内存这听起来很爽但如果没有安全机制岂不是乱套了这就需要PD和MR出场了。1. PDProtection Domain硬件级安全沙箱PD保护域本质上是一个逻辑上的安全边界。你可以把它想象成公司里的“独立保密办公区”。隔离性同一个PD下的资源如QP、MR可以互相访问但跨PD的访问会被硬件直接拦截。作用确保多个应用程序共享同一张智能网卡时不会发生内存越界和互相踩踏。在DOCA或Verbs API中创建任何通信资源前都必须先创建一个PD。2. MRMemory Region内存的“快递单” RDMA的核心是“远程直接内存访问”但网卡怎么知道哪块内存是可以读的这就需要把内存注册为MR。Pin住物理内存注册MR时内核会将这块虚拟内存“钉”在物理内存上Page Pinning防止被Swap换出。生成密钥注册成功后硬件会生成LKey本地访问密钥和RKey远程访问密钥。这就好比给这块内存贴上了防伪标签和快递单号。进阶场景GPUDirect RDMA在AI训练中数据都在GPU显存里。通过GDR技术我们可以直接把GPU显存注册为MRRNIC通过PCIe P2P直接读写显存彻底 bypass 掉主机内存实现真正的“零中转”。二、 QP与CQ通信的心脏与神经中枢 ⚡如果说PD和MR是基础设施那QP和CQ就是真正干活的“打工人”。1. QPQueue Pair硬件直驱的通信端点QP队列对是RDMA通信的核心载体由SQ发送队列和RQ接收队列组成。用户态狂欢SQ和RQ都映射在用户态内存中。应用程序通过ibv_post_send等API直接把WQE工作请求元素写入队列完全不需要陷入内核态这就省去了昂贵的上下文切换开销。状态机流转QP不是创建就能用的它必须经历严格的状态机转换RESET → INIT → RTR (Ready to Receive) → RTS (Ready to Send)。在INIT阶段绑定端口和PD在RTR阶段交换远端QP号QPN和PSN包序号在RTS阶段设置超时和重传机制。2. CQCompletion Queue异步任务的通知中心RDMA操作是异步的CPU把WQE扔进SQ后就可以去干别的事了。那怎么知道数据发完没CQE完成队列元素当网卡硬件完成一次DMA读写或网络收发后会生成一个CQE扔进与该QP绑定的CQ中。轮询Polling机制用户态程序通过ibv_poll_cq疯狂轮询CQ一旦拿到CQE就知道“快递已送达”从而触发下一步业务逻辑。这种轮询模式虽然吃一点CPU但换来了极致的低延迟。三、 四大对象协同一次RDMA Write的奇妙旅程 为了让大家更直观地理解我们用表格对比一下传统TCP和RDMA在发送数据时的差异并梳理一次RDMA Write的完整流程。对比维度传统 TCP/IP 网络RDMA (RoCEv2 / IB)数据拷贝用户态 → 内核态 → 网卡 (多次拷贝)用户态 → 网卡 (零拷贝DMA直读)内核参与全程参与协议栈、上下文切换数据面完全旁路仅控制面初始化参与CPU开销极高中断、软中断、协议计算极低硬件卸载CPU仅轮询CQ延迟50~100 微秒 1 微秒 RDMA Write 核心流程控制面准备APP创建 Context - PD - MR - CQ - QP并完成QP状态机转换RTS。投递请求APP构造 Write WR填入远端虚拟地址和RKey投递到本地 QP 的SQ。硬件接管RNIC硬件扫描SQ拿到WQE通过DMA直接从本地MR读取数据。网络传输RNIC封装RoCEv2/IB报文打入网络。远端落地远端RNIC收到报文校验RKey后直接通过DMA将数据写入远端MR对应的内存中。完成通知远端RNIC生成CQE放入CQ远端APP轮询CQ发现数据已到直接计算全程远端CPU在“睡大觉”。四、 动手实战Verbs API 核心对象创建与追踪 ️光说不练假把式。我们来看看在代码中这四大对象的创建顺序和QP状态机是怎么玩的。// 1. 获取设备上下文structibv_context*ctxibv_open_device(device);// 2. 创建保护域 (PD)structibv_pd*pdibv_alloc_pd(ctx);// 3. 注册内存区域 (MR)// 将一块4MB的内存注册为MR赋予本地和远程读写权限structibv_mr*mribv_reg_mr(pd,buf,4*1024*1024,IBV_ACCESS_LOCAL_WRITE|IBV_ACCESS_REMOTE_WRITE);// 此时 mr-lkey 和 mr-rkey 就准备好了// 4. 创建完成队列 (CQ)structibv_cq*cqibv_create_cq(ctx,100,NULL,NULL,0);// 5. 创建队列对 (QP)structibv_qp_init_attrqp_init_attr{.send_cqcq,.cap{.max_send_wr100,.max_recv_wr100}};structibv_qp*qpibv_create_qp(pd,qp_init_attr);// 6. QP 状态机流转 (以客户端连接为例)// RESET - INITibv_modify_qp(qp,attr,IBV_QP_STATE|IBV_QP_PKEY_INDEX|IBV_QP_PORT);// INIT - RTR (需要填入远端QP号、GID、PSN等)ibv_modify_qp(qp,attr,IBV_QP_STATE|IBV_QP_AV|IBV_QP_PATH_MTU|...);// RTR - RTSibv_modify_qp(qp,attr,IBV_QP_STATE|IBV_QP_TIMEOUT|IBV_QP_RETRY_CNT|...);极客小技巧用 eBPF 追踪 QP 状态机在Linux下如果你用的是SoftRoCE或者真实的mlx5网卡可以通过bpftrace挂载内核的rdma_rxe或mlx5_ib模块实时追踪QP的状态转换bpftrace-efentry:rdma_rxe:rxe_modify_qp { printf(QP State Transition to: %d\n, args-attr-qp_state); }看着终端里打印出1(INIT) - 2(RTR) - 3(RTS)那种掌控底层硬件的快感真的谁用谁知道五、 总结与互动 今天我们深度拆解了RDMA的四大核心抽象PD划定安全边界MR锁定物理内存并分发密钥QP作为用户态与硬件直驱的桥梁承载WQECQ负责异步完成事件的轮询通知。正是这四者的精妙配合加上智能网卡强大的DMA引擎和硬件协议卸载能力才造就了RDMA在AI大模型训练、高频交易等极致性能场景中的统治地位。大家在平时使用RDMA或者调优NCCL时有没有遇到过什么“坑”或者对GPUDirect RDMA的底层DMA映射还有什么疑问欢迎在评论区留言我们一起探讨交流如果觉得这篇文章对你有帮助别忘了点赞、收藏、关注三连哦我们下期再见推荐标签#RDMA #InfiniBand #智能网卡 #GPUDirect #Verbs #高性能网络 #AI基础设施 #底层原理本文为RDMA智能网卡技术知识系列文章。首发于CSDN转载请注明出处。
延伸阅读

更多相关文章

2026/11/4 3:07:03

WebRTC M80:VP9 多层(SVC:联播)崩溃问题定位与修复建议

WebRTC M80:VP9 多层(SVC/联播)崩溃问题定位与分析 1. 问题背景 现象:在 VP9 编码场景下,开启 FlexFEC 时会触发 WebRTC 内部断言,导致崩溃。具体表现如下: numSimulcastLayers = 1 时正常 numSimulcastLayers = 2 时崩溃(在 pc.setRemoteDescription() 后触发编码线…

2026/11/1 4:42:12

深入理解Kube Eagle工作原理:从代码实现到数据采集流程

深入理解Kube Eagle工作原理:从代码实现到数据采集流程 【免费下载链接】kube-eagle A prometheus exporter created to provide a better overview of your resource allocation and utilization in a Kubernetes cluster. 项目地址: https://gitcode.com/gh_mir…

2026/11/5 11:19:06

H5游戏图集拆解实战:plist/atlas解析与Python还原脚本

简介:面向Cocos、白鹭(Egret)与Laya等2D游戏引擎开发者的图集/合图分解实用工具,用于将精灵表按plist元数据还原为单张图片,便于资源编辑、版本更新与多设备适配。压缩包共6个文件、约227KB,以可执行程序为…

2026/11/5 11:19:05

VC++6.0 MFC入门:从零跑通第一个计算器项目

简介:这份资源面向学习 C 与 MFC 的初学者及课程设计需求者,提供一套基于对话框的 VC6.0 计算器完整工程,用于解决 Windows 桌面编程入门时缺少可运行范例的问题。功能覆盖加、减、乘、除四则运算,支持带括号的表达式求值&#xf…

2026/11/5 11:19:05

数字人文技术:从多模态处理到知识图谱构建

1. 数字人文技术全景解析 数字人文(Digital Humanities)作为跨学科研究领域,正在经历从传统文献数字化向智能知识发现的范式转变。我们观察到近三年该领域的技术架构呈现三个显著特征: 多模态数据处理能力成为基础要求 知识图谱…

2026/11/5 11:14:04

Java机器学习图书推荐系统源码:ItemCF与TF-IDF工程实践

简介:这份源码包围绕基于机器学习的图书推荐系统展开,面向Java Web课程设计、毕业设计以及希望实践协同过滤推荐算法的开发者,重点解决图书个性化推荐与后台管理问题。项目包含图书管理、读书会管理及科技、人文、历史、中小学等图书分类推荐…

2026/11/5 11:14:04

课堂行为ST自动分析软件:毕业设计可运行资源与调优指南

简介:这份资源是面向教育技术方向学生与毕业设计学习者的课堂行为智能分析软件项目,通过AI与计算机视觉技术对课堂视频或智能设备采集的数据进行学生行为检测与参与度量化,为教学效果评估提供参考。压缩包共760个文件,以631个Pyth…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑