0. 《RDMA杂谈》专栏索引
https://zhuanlan.zhihu.com/p/164908617
为了方便读者索引和查阅,也方便自己缕清思路,在此为本专栏做一个目录,并对每一篇文章的主要内容做一个简要的说明。
一、基本概念篇
1 RDMA概述(有更新)
主要内容:RDMA技术是什么,它是如何产生的?我们在什么场景下需要使用RDMA技术代替传统的以太网?这项技术的主要贡献者和使用者是谁?
2021/4/11:更新了文章最开始关于RDMA是什么的讲解,增加了DMA的介绍并增加了更多RDMA的细节描述。
2 比较基于Socket与RDMA的通信
主要内容:传统以太网通过对上层应用提供了Socket接口作为API,而RDMA协议栈则向上层提供了verbs接口。以上两种通信方式在数据从本端用户的内存空间到达对端用户的内存空间这一过程中存在显著的差异。本文想通过对比这些差异告诉读者,为何我们要使用RDMA技术。
3~5 为通识知识介绍,是阅读后面文章需要掌握的重要基础知识,希望读者先从宏观视角对整个RDMA技术有一个了解。
3 RDMA基本元素
主要内容:讲到RDMA协议,就绕不开各种各样的缩写。区别于IB协议原文,本文对RDMA中最重要的各种队列的概念作了简单和通俗的介绍,方便读者理解。
4 RDMA操作类型
主要内容:RDMA中有多种通信模型/模式,根据数据收发时CPU的参与情况,它们可以分为需要收发两端参与的双端操作和只需要发起方参与的单端操作。本文介绍了不同操作类型时数据在软硬件中的传递过程。
5 RDMA基本服务类型
主要内容:就像TCP/IP协议栈传输层的UDP和TCP一样,RDMA技术也规定了在不同场景下的服务类型,不同的服务类型在可靠性和速率上各有侧重。本文介绍了4种主要服务类型的特点和应用场景。
基础知识篇第6篇文章之后,主要是对协议中的重要概念做更详细的讲解。
6 RDMA之Memory Region
主要内容:网络通信的本质是数据在存储介质中的迁移,RDMA通过MR来对内存进行管理。MR就是一片特殊的内存区域,本文对其概念和作用做了介绍。
7 RDMA之Protection Domain
主要内容:为了隔离各种RDMA资源,协议提出了PD的概念。PD意为保护域,将相关的软件资源“圈”到一起,各个保护域之间的资源无法相互访问。
8 RDMA之Address Handle
主要内容:AH意为地址句柄,在UD等服务类型中,本端通过使用AH来指定对端节点。
9 RDMA之Queue Pair
主要内容:重点来了,QP是RDMA技术中最关键的概念,是软件向硬件“发号施令”的媒介,本文对协议中大部分跟QP相关的内容作了分析和讲解。
10 RDMA之Completion Queue
主要内容:也是重点,CQ和QP是相伴相生的,是硬件向软件“报告任务情况”的媒介,本文对协议中大部分跟CQ相关的内容作了分析和讲解。
11 RDMA之Shared Receive Queue
主要内容:IB协议通过SRQ的机制大大减小了接收端对内存容量的需求,本文主要介绍SRQ的原理以及跟RQ的异同。
12 RDMA之Memory Window
主要内容:为了更灵活方便的控制内存访问权限,IB协议设计了MW。本文主要介绍MW的作用、和MR的关系、接口以及分类。另外相比MR一文,对L_Key和R_Key进行了更深入的介绍。
二、RDMA软件栈篇
1 RDMA之Verbs
主要内容:介绍Verbs的广义和狭义概念,以及如何查看Verbs API的定义和使用,简单讲解了几个常用Verbs API的功能。另外介绍了OFED、rdma-core和RDMA Subsystem的关系。
2 RDMA之用户态与内核态交互
主要内容:讲解为什么有的Verbs API需要陷入内核态,如何陷入内核态,以及用户态和内核态是如何交互的。本文举了一个例子,可以帮助大家把整个流程串起来。另外本文也简单介绍了整个RDMA软件栈的架构。
3 如何部署软件栈
4 手上没有硬件怎么学习和做实验?
主要内容:RoCE是一种重要的RDMA协议,基于以太网的IP层及其以下实现。商用的RoCE技术依赖于专用网卡,但是IBTA实现的Soft-RoCE技术为我们提供了一种“纯软件”实现的RoCE,从而节省购买网卡的高昂费用,降低了学习和实验的门槛。本文偏向实践,讲解何为RoCE,以及如何快速部署一套支持Soft-RoCE的虚拟机环境,并配合Wireshark抓包来学习RoCE协议。
5 通过示例程序讲解RDMA通信全流程
6 verbs接口详解 * n
三、协议详解篇
1 地址管理
2 报文结构
3 Socket建链
4 CM建链
5 重传机制
...
四、 上层应用
1 UCX
2 MPI
五、番外篇
本专栏既是RDMA杂谈,除了RDMA之外,也会谈谈相关的其他内容。大部分“杂”的部分都会收录于本篇中。番外篇中的内容并非与RDMA技术强相关,但可能又有那么一丁点儿联系。
本篇内容可能会囊括RDMA生态、技术社区、内核中一些技术的实现分析、一些开发工具的使用技巧、甚至于记录本人的各种突发的灵感等等。
目前有以下想法:
- Linux社区如何运作
- 如何参与Linux内核开发
- git操作
- ...
本专栏根据业余时间和心情不定时不定量更新,如果读者希望先了解哪部分内容,欢迎提出。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通