零基础学PCIe实战指南
文章平均质量分 86
本专栏专为嵌入式软件工程师设计,聚焦PCIe协议栈的软件实现与系统级集成,覆盖“驱动开发→设备控制→性能调优→故障排查”全链路,助你掌握从裸机到Linux系统的PCIe开发核心能力。
amy_mhd
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
零基础学AI GPU SoC软件开发——探索软硬协同之道专栏定位
本专栏专为希望深入理解AI计算芯片软件生态的开发者设计。无论你是软件工程师想要了解硬件底层,还是硬件工程师希望掌握软件栈原理,这里都将为你打开一扇全新的大门。我们将以当前主流AI加速芯片(如NVIDIA GPU、华为昇腾、寒武纪等)为技术背景,系统讲解从应用程序到硅片底层的完整软件栈。原创 2026-01-07 15:21:30 · 2 阅读 · 0 评论 -
零基础学AI GPU SoC软件开发--第1讲:AI时代的计算革命(续篇)-GPU vs. NPU vs. TPU:不同AI芯片架构对比
GPU、NPU、TPU的竞争不是零和游戏,而是推动整个AI计算前进的三驾马车。就像CPU、GPU、FPGA各有其位一样,未来的AI计算世界也将是多架构共存的生态。核心洞见GPU不会消失:通用计算能力+强大生态是长期护城河NPU持续崛起:专用化趋势不可逆转,尤其在边缘端TPU生态深耕:Google全栈优势在特定场景无可替代赢家是开发者:更多选择,更激烈的竞争,更好的工具本专栏的价值我们不培养"NVIDIA工程师"或"华为工程师",而是培养理解AI计算本质的工程师。原创 2026-01-04 10:47:19 · 18 阅读 · 0 评论 -
零基础学AI GPU SoC软件开发——第1讲:AI时代的计算革命——为什么要学GPU SoC软件?
传统流程:硬件设计 → 流片 → 编写驱动未来流程:软件定义需求 → 硬件生成 → 协同优化Chiplet、FPGA、可重构计算等技术让硬件更加灵活,而软件成为定义硬件的起点。“在计算领域,每十年就会出现一次范式转移。能够跨越范式转移的开发者,将成为新时代的引领者。”——David Patterson(图灵奖得主,RISC先驱)我们正站在这样一个范式转移的起点。CPU为中心的通用计算时代正在让位于以GPU/NPU为中心的AI计算时代。这不是简单的硬件替换,而是计算哲学的根本变革。本专栏的目标。原创 2026-01-02 18:48:41 · 14 阅读 · 0 评论 -
零基础学AI GPU SoC软件开发--第1讲:AI时代的计算革命(续篇二)软件栈在AI芯片中的核心价值
本文系统阐述了AI芯片软件栈的核心价值与架构体系。文章指出,软件栈是连接硬件与应用的关键桥梁,具有四大核心价值:释放硬件潜力(性能倍增器)、降低开发门槛(生态构建器)、实现硬件抽象(未来保障)和创造差异化优势(竞争壁垒)。通过分层解析框架层、运行时层、编译器层、驱动层和固件层的功能特点,揭示了软件栈如何实现从"能用"到"好用"的跨越。文章还分析了软件定义硬件、编译器成为核心、全栈协同优化三大技术趋势,并提供了从入门到精通的系统学习路径,包括7个阶段28讲的课程体系,帮原创 2026-01-02 01:54:15 · 422 阅读 · 0 评论 -
SDMA(System Direct Memory Access)访问主机内存时,既可能通过Outbound ATU实现,也可能依赖IOMMU路径
Outbound ATU是设备侧的地址转换单元,负责将设备生成的本地地址(如AXI地址)转换为PCIe总线域地址或系统总线地址(如主机物理地址HPA)。在SDMA场景中,设备通过Outbound ATU直接将DMA请求中的本地地址转换为主机内存地址,无需IOMMU介入。IOMMU(Input/Output Memory Management Unit)是连接I/O总线与物理内存的桥梁,负责将设备发出的I/O虚拟地址(IOVA)转换为物理地址(HPA)。,具体取决于硬件架构、IOMMU是否启用以及系统配置。原创 2025-12-20 14:25:50 · 257 阅读 · 0 评论 -
Outbound ATU和IOMMU地址转换
摘要:OutboundATU和IOMMU在地址转换方面存在显著差异。OutboundATU主要用于设备发起的地址转换,实现设备对外部资源的访问,缺乏安全隔离能力,适用于嵌入式系统等可信环境。IOMMU则专注于安全隔离与虚拟化支持,提供硬件级防护,适用于虚拟机隔离、RDMA等安全敏感场景。性能方面,OutboundATU延迟更低,而IOMMU虽开销较大但可通过优化缓解。二者通常互补使用:OutboundATU处理本地地址到IOVA的转换,IOMMU负责IOVA到HPA的安全转换。在安全要求高的场景中,IOMM原创 2025-12-14 12:08:01 · 19 阅读 · 0 评论 -
芯片的算力(如 TOPS/TFLOPS)和计算强度 = FLOPs / Bytes
计算强度是衡量算法特性的指标,表示每字节数据能执行的计算量(FLOPs/Byte),由模型结构决定而与硬件无关。芯片算力(TOPS)通过Roofline模型与计算强度共同决定实际性能:当计算强度低时,性能受限于内存带宽;计算强度高时,受限于芯片算力。优化方向需根据计算强度选择,低强度侧重提升带宽和算子融合,高强度则需要更强算力芯片。计算强度描述任务特性,芯片算力反映硬件能力,二者共同影响最终性能表现。原创 2025-12-14 01:25:49 · 33 阅读 · 0 评论 -
AI芯片“算力精度” = “在某种数据精度下,芯片能跑多快”
摘要 "AI芯片算力精度"指芯片在特定数值精度(如FP16、INT8)下的计算性能(TOPS/TFLOPS)。精度越低,算力越高(如INT8算力通常为FP16的2-4倍),但需权衡模型精度损失。例如,NVIDIA A100的INT8算力(624TOPS)是FP32(19.5TFLOPS)的32倍。注意:高TOPS≠高性能,需结合内存带宽、软件支持及模型实际需求评估。主流芯片(如H100、昇腾910B)会标注不同精度下的算力,选型时应匹配场景需求。原创 2025-12-08 10:25:32 · 41 阅读 · 0 评论 -
AI 芯片的算力能否被有效发挥,高度依赖内存带宽
AI芯片的实际性能高度依赖内存带宽而非单纯算力。由于AI计算(卷积、矩阵乘、注意力等)都是数据密集型操作,需要频繁从内存读取大量权重和输入数据。典型情况是:99%时间用于数据搬运,仅1%用于计算,形成"内存墙"。Roofline模型显示,当内存带宽不足时,即使算力再高也会闲置(如4TFLOPS实际性能 vs 200TFLOPS峰值算力)。Transformer等现代模型因计算强度更低(<2FLOPs/Byte)对带宽需求更高。建议选型时重点关注HBM带宽,并优化模型减少访存。原创 2025-12-12 08:15:00 · 31 阅读 · 0 评论 -
FP32 和 FP16 是两种浮点数(Floating-Point)数据格式
FP32与FP16是AI领域常用的两种浮点格式。FP32为32位单精度浮点,提供约7位有效数字精度,适合高精度计算;FP16为16位半精度浮点,精度约3-4位,但内存占用减半且计算更快。在AI应用中,现代框架采用混合精度训练技术(FP16计算+FP32主权重)兼顾速度与稳定性,使训练速度提升1.5-3倍。新型BF16格式因动态范围接近FP32而更适合大模型训练。实际应用中需根据场景选择:训练推荐FP16/BF16,高精度推理可用FP16,普通推理则可使用更低精度的INT8/INT4。FP32在AI领域已逐渐原创 2025-12-11 08:30:00 · 34 阅读 · 0 评论 -
FP32 和 FP16 是两种浮点数(Floating-Point)数据格式
FP32(单精度浮点数,Single-Precision)32-bit IEEE 754 单精度浮点结构(按 IEEE 754 标准):1 位符号(Sign)8 位指数(Exponent)23 位尾数(Mantissa / Fraction)精度:约7 位十进制有效数字数值范围:约±1.2 × 10⁻³⁸ 到 ±3.4 × 10³⁸FP32 是“高精度标准格式”,FP16 是“为速度和效率牺牲部分精度的压缩格式”。在 AI 中,FP16(或 BF16)已成为训练和推理的主流。原创 2025-12-07 14:02:53 · 34 阅读 · 0 评论 -
AI 常见计算精度类型详解
主流AI芯片计算精度支持对比(2025) AI芯片的计算精度直接影响模型训练和推理效果。FP64/32适用于科学计算,FP16/BF16是训练主流,INT8/4则用于高效推理。NVIDIA H100支持FP8新标准,华为昇腾和Google TPU专注BF16优化,寒武纪等国产芯片侧重INT8/4推理。选型需结合任务需求:大模型训练优选BF16(H100/昇腾910C),推理推荐INT4(H100)或INT8(瀚博SV103),边缘设备适合INT4/8方案。注意"支持"不等同"高原创 2025-12-10 00:00:00 · 27 阅读 · 0 评论 -
AI 芯片是精度越高越好吗
【摘要】研究表明,AI芯片并非精度越高越好,低精度(如INT8/INT4)在大多数场景下更具优势。现代深度学习模型对低精度表现出强鲁棒性,量化后性能损失通常小于1%,却能显著降低50%-87.5%的内存占用、提升8倍计算吞吐并减少功耗。以Llama-3-70B为例,INT4量化使其可在单卡运行,推理速度提升2.5-3倍。仅训练、科学计算等少数场景需要高精度。核心原则是"用满足要求的最低精度",当前工业界最佳实践是训练用BF16,推理用INT4/INT8。低精度技术正推动大模型从实验室走向原创 2025-12-09 06:45:00 · 32 阅读 · 0 评论 -
AI芯片的算力决定上限,带宽决定下限
【摘要】计算性能受限于内存带宽,而非单纯算力。现代AI芯片面临"访存墙"问题:99%时间用于数据搬运,仅1%用于实际计算。以100TFLOPS芯片运行典型CNN为例,所需25TB/s带宽远超当前HBM3e的1.2TB/s,导致算力利用率不足5%。解决方案包括大容量SRAM缓存、HBM高带宽内存及存内计算技术,但各有技术挑战。核心矛盾在于:算力决定理论上限,带宽决定实际性能,AI计算尤其受限于数据搬运效率。目前最优解是组合高速缓存、HBM和软件优化来缓解瓶颈。(149字)原创 2025-12-07 14:00:49 · 181 阅读 · 0 评论 -
安全算法的签名长度
数字签名算法的签名长度因算法类型和参数配置而异。RSA签名长度等于密钥长度(如2048位密钥对应256字节签名)。ECDSA和SM2签名长度为2倍曲线坐标位数(如P-256曲线产生64字节签名)。EdDSA采用固定长度设计(Ed25519为64字节)。HMAC签名长度等于哈希输出(如SHA-256对应32字节)。选择时需权衡安全性(更长签名更安全)、性能(短签名效率高)和兼容性(遵循行业标准),不同场景可选用RSA-4096、Ed25519或SM2等方案。原创 2025-12-06 19:50:22 · 45 阅读 · 0 评论 -
GPA与HPA的定义及区别
摘要:GPA(虚拟机物理地址)与HPA(宿主机物理地址)的核心区别在于虚拟化层级,GPA由虚拟机管理,HPA对应实际硬件。IOMMU通过硬件转换实现GPA到HPA的安全映射,支持设备透传并防止DMA攻击,其开启时能高效完成地址转换与隔离,关闭时则依赖低效的软件模拟且存在安全隐患。IOMMU对虚拟化环境中的设备访问安全与性能至关重要,仅在非虚拟化场景可考虑关闭。原创 2025-12-06 19:49:57 · 36 阅读 · 0 评论 -
密码学算法长度
数字签名算法的签名长度因算法类型和参数配置而异。RSA签名长度等于密钥长度(如2048位对应256字节),ECDSA为2倍曲线坐标位数(如P-256曲线产生64字节签名)。EdDSA采用固定长度(Ed25519为64字节),SM2国密算法与ECDSA类似(64字节)。HMAC的签名长度等于哈希输出(如SHA-256为32字节)。选择时需平衡安全性(长签名更安全)、性能(短签名效率高)和兼容性(遵循行业标准)。典型场景中,Ed25519和P-256因高效安全成为主流选择。原创 2025-12-06 19:48:03 · 34 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第9篇:RDMA连接管理:CM(Connection Manager)与地址解析
本文介绍了RDMA连接管理中的CM(ConnectionManager)与地址解析机制。通过rdma_cm API可以自动完成RDMA连接建立过程,包括地址解析、QP创建和状态迁移等复杂操作。文章详细讲解了rdma_cm的核心概念、服务端监听连接和客户端发起连接的实现流程,并展示了如何基于rdma_cm重写RDMA WRITE示例程序。rdma_cm极大简化了RDMA编程,自动处理GID映射和GRH构造等底层细节,是生产级RDMA应用的标准建连方式。建议所有新项目优先使用rdma_cm来管理RDMA连接。原创 2025-12-06 18:38:34 · 25 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第16篇:动手写一个最简 RDMA 伪设备驱动(基于 ib_uverbs 框架)
本文介绍了一个基于ib_uverbs框架的最小化RDMA伪设备驱动开发过程。该驱动(dummy_rdma)实现了PD、MR、CQ、QP等核心资源的创建和管理,虽不依赖真实硬件但完全兼容标准RDMA工具链。文章详细展示了驱动代码结构、关键API实现(如alloc_pd、reg_user_mr等)、Makefile配置以及测试验证方法。通过200行左右的精简代码,开发者可以掌握RDMA设备注册流程、verbs操作契约等核心概念,为后续开发真实硬件驱动奠定基础。该伪设备驱动支持资源创建但不会实际传输数据,可作为学原创 2025-12-06 18:37:11 · 20 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第25篇:参与 Linux 内核 RDMA 社区 —— 如何提交你的第一个 Patch?
本文详细介绍了如何向Linux内核RDMA社区提交第一个Patch。主要内容包括:准备工作(获取源码、安装工具)、寻找适合新手的任务类型(文档修正、调试日志等)、实战步骤(修改代码、生成Patch、合规性检查、发送Patch)、Review流程及应对策略、社区礼仪和最佳实践。文章还提供了进阶路径,帮助开发者从提交Patch逐步成长为长期贡献者。附录包含官方指南、邮件列表等实用资源,为开发者提供一站式参与指南。原创 2025-12-05 21:56:35 · 21 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第23篇:性能瓶颈分析 —— 如何优化 QP 调度与内存注册开销?
本文深入分析了RDMA性能优化的两大瓶颈:QP调度开销和内存注册开销。针对QP调度,提出了WR批处理和Doorbell合并策略,通过减少系统调用和锁竞争提升吞吐量3-10倍。针对内存注册,建议采用MR缓存池和NUMA亲和性优化,避免重复注册带来的页表锁定和IOMMU映射开销。文章还提供了综合优化案例和调试验证方法,实测显示优化后吞吐从0.8Mpps提升至10.2Mpps,延迟从12.5μs降至1.8μs。核心优化原则是"注册一次,复用千次;提交一批,胜过千次"。原创 2025-12-05 11:56:03 · 28 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第17篇:实现自定义 QP 创建与状态机管理
本文介绍了在RDMA驱动中实现QP状态机管理的关键技术。QP状态机是RDMA通信的核心,必须严格遵循IBA规范中的状态迁移规则。文章详细讲解了如何扩展dummy_qp结构体、实现modify_qp函数进行状态校验与转换,并提供了状态跳转校验函数的具体实现。同时说明了QP初始化和销毁时的状态处理,以及如何通过用户态测试验证状态机功能。这些技术使伪设备驱动具备了符合RDMA语义的QP行为,为后续实现真正的数据传输奠定了基础。原创 2025-12-04 23:38:15 · 24 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第10篇:Linux内核中的 RDMA 子系统全景图
本文全景解析Linux内核中的RDMA子系统架构,揭示其五层模型:用户态接口层(libibverbs/librdmacm)、uverbs内核代理层、核心抽象层(ib_core)、连接管理层(CM&Netlink)和硬件驱动层。重点阐述了各层功能及交互机制,包括用户态如何通过ioctl/mmap与内核通信、硬件驱动如何向core层注册能力、数据通路实现零拷贝的原理等。同时提供了实用的调试工具和方法,为深入理解RDMA内核机制、开发驱动或定制功能奠定基础。文章最后预告将通过编写内核RDMA模块进行实践验原创 2025-12-04 17:04:52 · 28 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第22篇:RDMA 驱动调试利器 —— tracepoint、ftrace、perf 与 ibdump
本文系统介绍了RDMA驱动调试的四大专业工具:内核Tracepoint、ftrace、perf和ibdump。首先分析了RDMA调试的特殊性,包括异步性、零拷贝等难点。重点讲解了各工具的使用方法:Tracepoint可低开销监控QP生命周期等核心事件;ftrace用于函数级调用追踪;perf分析性能瓶颈;ibdump专门解析RDMA网络报文。文章还提供了综合调试案例和高级自定义Tracepoint技巧,并给出工具速查表,推荐优先使用内置Tracepoint进行高效调试。这些工具的组合使用能有效解决RDMA驱原创 2025-12-04 10:12:47 · 22 阅读 · 0 评论 -
第三阶段:走进Linux内核——RDMA子系统架构drivers/infiniband 目录结构、核心组件关系
本文概述了Linux内核中RDMA子系统的目录结构和核心组件关系。主要目录包括core/(核心模块)、hw/(硬件驱动)、sw/(软件实现)和tools/(工具库)。核心层提供uverbs接口、地址管理和设备抽象等基础设施,硬件驱动实现具体厂商设备的支持,软件层提供Soft-RoCE等模拟实现。这种分层设计使RDMA子系统具有良好扩展性,能在不同硬件环境中有效运行。原创 2025-12-03 19:55:48 · 34 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第21篇:支持 RoCEv2 —— 添加 IP 路由与 UDP 封装支持(可选进阶)
RoCEv2、UDP 封装、GRH、IP 路由查询、,需了解 Linux 网络子系统(路由、邻居表)。若要让 RDMA 在标准以太网运行,必须支持。)会在硬件中完成 UDP/IP 封装,但。前几篇我们实现了一个符合。,但它仅支持“抽象”通信,,但路由和封装逻辑已模拟。,为你理解真实驱动(如。(如 Mellanox。原创 2025-12-03 15:44:38 · 25 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第14篇:从 rdma-core 到内核:一条 SEND 操作的完整调用链分析
摘要:本文深入剖析了RDMA中SEND操作的完整调用链路,揭示了其实现微秒级性能的关键机制。分析表明,从用户态调用ibv_post_send()开始,到网卡执行SEND操作,整个过程完全绕过内核:1)用户态直接操作mmap映射的SQ环形缓冲区构造WQE;2)通过写Doorbell寄存器通知网卡;3)网卡DMA执行发送操作;4)用户态轮询CQ获取完成状态。整个过程无系统调用、无数据拷贝,实现了真正的内核旁路和零拷贝通路。文章还提供了性能优化建议和调试手段,为理解RDMA高性能机制提供了完整的技术视角。原创 2025-12-03 10:15:11 · 19 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第17篇:第18篇:处理内存注册(reg_mr)与 DMA 映射
本文深入解析了RDMA内存注册(reg_mr)与DMA映射的实现机制。主要内容包括:1)用户态ibv_reg_mr()如何通过ioctl触发内核驱动回调;2)内核驱动通过ib_umem_get锁定用户内存并构建物理页链;3)lkey/rkey生成及权限控制机制;4)DMA映射与IOMMU的关系;5)资源释放流程。文章以dummy_rdma驱动为例,详细展示了reg_user_mr和dereg_mr的实现过程,并解释了关键数据结构struct ib_umem的作用。最后通过测试程序验证了功能实现,为开发真实R原创 2025-12-03 08:30:00 · 32 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第12篇:ib_device、ib_port、ib_qp 等核心数据结构解析
摘要:本文深入解析Linux内核RDMA子系统的核心数据结构,包括ib_device(RDMA设备根对象)、ib_port_attr(端口能力描述)、ib_qp(通信队列对)、ib_cq(完成队列)、ib_mr(内存注册凭证)和ib_pd(保护域)。重点分析了各结构体的关键字段、生命周期及相互关系,并提供了调试技巧(如sysfs查看、内核日志打印)。这些数据结构构成了RDMA功能的骨架,是理解内核RDMA代码、开发驱动或调试问题的基础。文章最后预告下一篇将探讨用户态与内核的交互机制。原创 2025-12-02 22:44:50 · 30 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第17篇:第19篇:完成队列(CQ)中断与轮询机制实现
本文介绍了RDMA中完成队列(CQ)的实现机制。CQ作为RDMA数据面的"回执中心",通过WorkCompletion(WC)记录异步操作完成状态。文章详细阐述了CQ的核心数据结构设计,包括环形缓冲区和生产者/消费者索引。重点讲解了创建CQ资源、WC入队函数、poll_cq轮询接口和req_notify_cq事件通知机制的具体实现。通过模拟"立即完成"行为,展示了从post_send到生成WC的完整流程。文章还提供了用户态测试方法,并简要提及了支持用户态mmap的高性原创 2025-12-02 22:43:28 · 32 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第6篇:编写你的第一个RDMA程序:客户端-服务端通信示例
本文介绍了如何编写第一个RDMA程序实现客户端-服务端通信。通过约300行C代码,展示了完整的RC模式RDMA通信流程:服务端创建QP/CQ/MR并监听连接,客户端获取元数据后建立QP连接,使用RDMA WRITE直接写入服务端内存。文章详细解析了代码实现,包括资源创建、QP状态迁移、元数据交换等关键步骤,并提供了编译运行方法。最后总结了核心知识点,并指出后续优化方向,为初学者提供了清晰的RDMA编程入门指导。原创 2025-12-02 19:36:42 · 34 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第14篇:从 rdma-core 到内核:一条 SEND 操作的完整调用链分析
本文详细分析了RDMA中SEND操作的完整调用链路,揭示了其实现微秒级性能的关键机制。通过自上而下的剖析,展示了从用户态构造WorkRequest、填充WQE到SQ环形缓冲区、Doorbell寄存器通知网卡,到最终网卡执行SEND的完整过程。重点指出该过程全程无需内核介入,完全通过用户态内存操作和MMIO实现零拷贝、零系统调用的高性能数据传输。文章还分析了性能关键点,提供了调试观测手段,并强调内核仅参与控制面资源创建,不介入数据面传输。这种用户态直接驱动网卡的机制正是RDMA极致性能的核心所在。原创 2025-12-02 09:49:49 · 39 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第22篇:RDMA 驱动调试利器 —— tracepoint、ftrace、perf 与 ibdump
本文介绍了RDMA驱动调试的四大核心工具:tracepoint、ftrace、perf和ibdump。由于RDMA的零拷贝、内核旁路等特性,传统调试方法难以奏效。文章详细讲解了每种工具的使用场景和实战方法:tracepoint用于低开销结构化日志记录,ftrace用于函数级调用栈追踪,perf用于性能剖析,ibdump用于协议级抓包分析。通过综合案例展示了如何诊断SEND操作无完成事件的问题,并提供了添加自定义tracepoint的高级技巧。最后总结了不同问题的工具选择策略,形成调试速查表。这些工具组合能有原创 2025-12-02 09:30:00 · 181 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第13篇:用户态如何与内核 RDMA 驱动交互?ioctl vs sysfs vs netlink
摘要:Linux中用户态与内核RDMA驱动交互通过三种机制:1) ioctl+mmap:高性能数据通路,用于资源创建(QP/CQ/MR)及零拷贝数据传输(通过mmap映射SQ/CQ缓冲区);2) sysfs:提供只读设备信息(端口状态、GID表等),路径如/sys/class/infiniband/mlx5_0;3) netlink:支持动态配置(GID管理、多播组)和事件监听,协议为NETLINK_RDMA。三者分工明确:ioctl/mmap实现控制面与数据面,sysfs暴露静态信息,netlink处理动原创 2025-12-01 19:05:14 · 34 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第26篇(终篇):未来展望 —— eRDMA、XRC、DC 等高级特性简介
本文是RDMA技术系列终篇,重点探讨了RDMA的未来发展方向和高级特性。首先介绍了eRDMA如何实现云原生弹性扩展,突破传统RDMA的规模限制;其次解析了XRC和DC技术解决连接爆炸问题的创新方案。文章还前瞻性地探讨了RDMA多播、CXL内存池集成、内核旁路优化2.0以及安全增强等前沿方向。最后为开发者总结了云原生时代RDMA驱动开发的新要求,并回顾了整个系列的知识体系。全文展现了RDMA从高性能网络向云基础设施核心组件演进的技术趋势,为开发者提供了未来技术选型的重要参考。原创 2025-12-01 12:01:25 · 146 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第5篇:深入理解 verbs API:RDMA编程的“标准语言”
摘要:本文深入解析RDMA编程的核心API——verbsAPI,介绍其作为统一不同RDMA硬件标准接口的关键作用。文章详细讲解verbsAPI的6个核心对象模型:ibv_device(设备发现)、ibv_context(设备会话)、ibv_pd(保护域)、ibv_mr(内存注册)、ibv_cq(完成队列)和ibv_qp(队列对),重点说明QP状态机的创建和切换流程。通过一个完整的SEND操作示例,展示verbsAPI在实际通信中的使用方式,并阐明其用户态-内核交互机制。最后强调掌握这些核心对象及其生命周期是原创 2025-12-02 00:00:00 · 33 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第8篇:队列对(QP)、完成队列(CQ)与工作请求(WR)机制剖析
本文深入剖析了RDMA(远程直接内存访问)中的核心机制:队列对(QP)、完成队列(CQ)和工作请求(WR)。QP作为通信端点包含发送队列(SQ)和接收队列(RQ);WR是用户提交的操作指令,转换为工作队列元素(WQE)后由网卡异步执行;CQ则提供完成通知机制。文章详细介绍了三者的协作原理,包括QP状态机、WR提交方式、CQ轮询机制,以及关键的信号控制技术(Signaled Mode)来优化性能。同时对比了SEND/RECV和RDMA WRITE两种模式的差异,提供了调试技巧和最佳实践。这些机制共同构成了RD原创 2025-12-03 00:00:00 · 37 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第18篇:处理内存注册(reg_mr)与 DMA 映射
本文深入探讨了RDMA中的内存注册(reg_mr)与DMA映射机制。主要内容包括:1)用户态ibv_reg_mr()的工作原理及其在内核驱动的实现流程;2)关键数据结构ib_umem的作用;3)详细解析了dummy_reg_user_mr的实现,包括参数检查、内存锁定、密钥生成等步骤;4)DMA映射与IOMMU的交互机制;5)权限控制标志的含义;6)测试验证方法。文章为理解RDMA内存管理机制提供了完整的技术框架,并指出了与真实硬件驱动的差异,为后续开发奠定基础。原创 2025-11-30 21:07:08 · 402 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第4篇:动手实验:用 ib_send_bw 测试RDMA带宽与延迟
本文摘要: 《动手实验:用ib_send_bw测试RDMA带宽与延迟》详细介绍了使用perftest工具集进行RDMA性能测试的方法。文章从基础的单QP带宽测试入手,逐步扩展到不同消息大小、延迟测试、多QP并发及内联发送等进阶场景,并解析测试结果的关键指标(如带宽、延迟、消息速率)。通过实验揭示了RDMA性能特征:小消息带宽低但延迟敏感,大消息趋近链路极限;RoCE对丢包高度敏感。文末提供实用技巧(如CSV输出、持续测试)及性能优化建议,为后续RDMA编程奠定基准测试基础。实验数据可帮助开发者识别网络瓶颈,原创 2025-11-28 14:16:54 · 194 阅读 · 0 评论 -
零基础教你学RDMA驱动开发--第3篇:搭建你的第一个RDMA实验环境
摘要:本文详细介绍了搭建RDMA实验环境的两种方法:1)使用softRoCE(rxe)在普通机器上模拟RDMA功能,包括安装rdma-core、加载rxe模块和创建虚拟设备;2)配置物理Mellanox网卡,涵盖驱动安装和模式切换。文章提供了常用工具速查表和常见问题解决方案,帮助初学者无需专用硬件即可学习RDMA,也为有物理设备的用户提供配置指南。通过单机测试验证环境搭建成功后,即可开始RDMA编程实践。原创 2025-11-28 10:27:00 · 64 阅读 · 0 评论
分享