Skip to content

Repository files navigation

RDMA101

RDMA101 是一套面向工程实践与系统研究的 RDMA 教程。项目源于 Mooncake Transfer Engine 的开发与推广实践,但并不局限于 Mooncake TE 本身。它试图为希望理解、使用、运维或开发 RDMA 系统的读者提供一条相对完整的学习路径。

Mooncake TE 面向 AI 推理、KVCache 迁移、分布式缓存和异构存储等场景,RDMA 是其中重要的高性能传输方式之一。在实际使用和开发过程中,RDMA 的门槛往往并不只体现为 API 数量多、关系复杂,而是体现为编程模型、软硬配置、错误语义和性能调优之间的相互关联。一个程序能够运行,并不意味着读者已经理解了 RDMA 编程模型;一个程序在示例环境中正确,也不意味着它在真实集群中一定容易部署、排错和优化。

因此,RDMA101 的目标不是替代 Verbs API 手册,也不是编写一份 Mooncake TE 操作说明。它关注的是二者之间的空白:从第一个可运行的 RDMA 程序出发,逐步建立 RDMA 的编程模型,理解一次传输在系统内部的执行过程,掌握常见优化方法,并最终回到真实系统中分析设计取舍。

Documentation GitHub License

内容结构

当前课程分为五篇。每篇内部继续细分章节、实验和案例。

在线文档发布在 https://renfeng.org/rdma101/,项目源码和示例程序托管在 https://github.com/alogfans/RDMA101

  • 第一篇:快速入门 建立实验环境,识别 RDMA 设备,运行基础工具,并完成一个最小 RDMA Hello World。
  • 第二篇:编程模型 解释 RDMA 程序的基本结构,重点讨论 MR、QP、CQ、WR、远端地址、访问权限和 completion 等概念之间的关系。
  • 第三篇:机制探秘 从应用代码出发,追踪一次 RDMA 请求经过用户态库、驱动、网卡、PCIe、NUMA 和 RoCE 网络的过程。
  • 第四篇:优化技巧 讨论 RDMA 性能优化中常见的机制和边界,包括 batching、inline data、queue depth、MR cache 和 polling 等主题。
  • 第五篇:实例研究 回到真实系统,分析 Mooncake TE 以及其他 RDMA 系统在数据路径、控制路径、内存管理、故障处理和性能优化方面的设计。

如果目标是尽快使用 Mooncake TE,建议优先阅读第一篇和第二篇。若需要排查性能和稳定性问题,第三篇和第四篇会提供更直接的背景。若希望参与 Mooncake TE 或其他 RDMA 系统的底层开发,建议按顺序阅读全部五篇。

读者对象

本教程主要面向以下读者:

  • 希望使用 Mooncake TE,但需要先理解 RDMA 基础概念的工程人员;
  • 希望参与 Mooncake TE 或其他 RDMA 系统开发的开发者;
  • 需要处理 RDMA、RoCE 或高性能网络问题的运维和系统工程人员;
  • 研究分布式系统、分布式存储、远程内存和 AI 基础设施的学生与研究人员。

读者最好具备基本的 C/C++ 编程能力和 Linux 使用经验。本教程不要求读者事先具备网络开发经验。

预期价值

对于 Mooncake TE 的使用者和运维人员,本教程希望帮助他们判断运行环境是否满足 RDMA transport 的基本要求,并在面对连接失败、带宽异常、延迟抖动或 QP 状态异常时,能够更快地确定排查方向。

对于系统开发人员,本教程希望帮助他们理解 RDMA transport 的基本代码结构,建立概念与代码实现之间的联系,从而更有效地参与故障修复、性能优化和新功能开发。

对于科研人员,本教程希望提供进入 RDMA 系统研究的必要背景,使其能够阅读相关论文、复现实验,并基于 Mooncake TE 或其他 RDMA 系统开展进一步研究。

此外,RDMA101 也希望沉淀为一份面向 AI 编程助手的 RDMA 领域语料库。通过将术语、对象关系、数据路径和常见错误组织在同一套文档中,可以为代码理解、排错建议、实验步骤生成和性能现象解释提供更可靠的上下文。

当前状态

项目仍处于早期阶段。当前采用“篇/章”两级结构。每一篇都有 index.md 作为篇首页,具体正文按章节放在对应目录下;第三到第五篇先保留篇首页,后续逐章补充。

docs/
  index.md
  01-introduction/
    index.md
    01-hello-world.md
  02-programming-model/
    index.md
    01-one-sided-write.md
  03-internals/
    index.md
  04-optimization/
    index.md
  05-case-studies/
    index.md

后续将优先补充可运行示例、实验环境说明、常见错误排查路径,以及 Mooncake TE 中 RDMA transport 与底层 RDMA 概念之间的对应关系。

贡献

欢迎提交文档修正、概念解释、实验代码、排障记录、系统案例和论文解读。尤其欢迎真实环境中的 RDMA 或 Mooncake TE 排障记录,包括问题现象、软硬件环境、排查过程和最终原因。

提交文档贡献前,请注意本项目的出版权安排:贡献者保留自己贡献内容的版权;同时,贡献者一旦向本项目提交文档、示例解释、图示、实验记录或案例分析,即表示同意项目发起人可以在 RDMA101 以及基于 RDMA101 的后续文章、讲义、书籍、课程或其他独立出版物中使用、整理、改写、重组和发布这些贡献内容,包括以独立作者身份出版的作品。除非另有书面约定,此类使用不需要再次取得贡献者许可,也不产生稿酬、版税或其他报酬义务。

RDMA101 的公开文档版本会持续保留。上述出版权安排并不意味着项目作者可以撤回已经公开发布的 RDMA101 文档,也不影响读者和贡献者在 CC BY-NC-SA 4.0 条款下继续访问、分享和改编公开版本。

请通过 issue 或 pull request 参与。

License

本仓库中的公开文档材料采用 Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License(CC BY-NC-SA 4.0)发布。

这个许可主要适用于教程、文章、图示、解释性示例等文档内容,尤其是 docs/ 目录下的材料。仓库中的源码、可执行示例或软件组件如有单独许可,应以对应文件中的说明为准。

你可以在遵守许可要求的前提下分享和改编这些文档材料:

  • 署名:需要注明 RDMA101 和原始贡献者;
  • 非商业使用:未经相关版权持有人许可,不得用于商业用途;
  • 相同方式共享:如果改编这些材料,需要以相同许可发布改编内容。

每位贡献者保留自己贡献内容的版权。与此同时,项目发起人保留基于 RDMA101 全部材料,包括社区贡献内容,创作、改写、整理并以独立作者身份出版文章、讲义、书籍、课程或其他作品的权利。

RDMA101 的公开文档版本会持续保留,并继续按照 CC BY-NC-SA 4.0 条款提供给公众访问、分享和改编。第三方商业使用 RDMA101 文档材料仍需提前获得相关版权持有人的书面许可。

About

RDMA Tutorial for Engineers and Researchers

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors