课程导入:学习目标、课程结构、RDMA概述及连接类型简介

1.1 学习目标与课程定位

欢迎进入《RDMA可靠连接与不可靠连接对比》课程。RDMA(Remote Direct Memory Access,远程直接内存访问)技术在现代高性能计算、分布式存储和AI集群中扮演着关键角色。理解其连接语义的差异,是进行网络架构设计、性能调优和故障排查的基础。

完成本章学习后,您将能够:

  • 明确RDMA的核心价值——理解为何RDMA能绕过操作系统内核与CPU,实现端到端低延迟的数据传输。
  • 建立连接类型的概念框架——区分可靠连接(RC)、不可靠连接(UC)、不可靠数据报(UD)和可靠数据报(RD)四种传输服务。
  • 掌握课程整体脉络——了解后续章节如何从原理、机制、性能、应用场景等维度展开对比分析。
学习建议:本章内容偏重概念建立。建议您在学习过程中,将RC与UC的差异点(如确认机制、丢包处理、队列对数量)先记录在笔记中,后续章节会逐一深入展开。

1.2 课程结构导航

本课程共30章,按照“基础认知 → 机制深挖 → 性能对比 → 场景实践 → 排障进阶”的逻辑递进。前5章聚焦基础概念与协议栈;第6至15章深入对比RC与UC的确认、重传、流控、内存管理机制;第16至22章通过基准测试和真实应用场景(如NVMe-oF、分布式机器学习)进行量化分析;最后8章则聚焦于常见问题诊断与调优策略。

下表展示了课程的核心模块划分:

模块 章节范围 核心主题
基础篇 第1-5章 RDMA概述、协议栈、队列对与内存注册
机制对比篇 第6-15章 可靠性机制、流控、拥塞控制、原子操作
性能与场景篇 第16-22章 延迟/带宽基准、多队列扩展、云原生场景
排障与调优篇 第23-30章 错误处理、性能瓶颈分析、参数调优实践

1.3 RDMA技术概述:为什么需要“绕过内核”?

传统TCP/IP网络通信中,数据从网卡到应用需要经过内核协议栈的多次拷贝、中断处理和上下文切换。每次数据传输涉及用户态到内核态的切换,CPU参与数据搬运,导致延迟通常在数十微秒级别,且CPU占用率高。

RDMA技术的核心思想是卸载与旁路:

  • 内核旁路(Kernel Bypass):应用可以直接与网卡上的硬件队列交互,无需经过内核网络协议栈。
  • 数据零拷贝(Zero-Copy):通过硬件DMA(直接内存访问)将数据从应用缓冲区直接传输到远端内存,避免中间缓冲区的数据复制。
  • CPU卸载:数据的可靠传输、流量控制、校验和计算等任务由网卡硬件(RNIC)完成,而非CPU。

RDMA的典型延迟可低至1-2微秒,吞吐量可达数百Gbps,这使得它成为高性能计算和存储网络的基石技术。

1.4 连接类型全景图:RC、UC、UD与RD

RDMA协议(InfiniBand、RoCEv2、iWARP)定义了四种传输服务。理解它们之间的差异,关键在于回答三个问题:是否可靠?是否面向连接?是否支持多播?

  • 可靠连接(Reliable Connection, RC):面向连接,提供端到端的可靠传输。数据包丢失会触发硬件重传,保证数据有序到达。每个QP(队列对)仅与一个远端QP相连。
  • 不可靠连接(Unreliable Connection, UC):同样面向连接,但硬件不保证数据送达。数据包丢失后,发送端不会重传,接收端也不发送ACK(确认)。适用于允许少量丢包但要求低延迟的场景。
  • 不可靠数据报(Unreliable Datagram, UD):无连接,类似UDP。一个QP可以与多个远端QP通信,支持多播,但数据报长度受限(通常为MTU大小),且不可靠。
  • 可靠数据报(Reliable Datagram, RD):无连接但可靠,硬件负责重传和去重。目前硬件支持有限,实际部署较少。

为了直观展示这四种服务在“可靠性”与“连接性”维度上的定位,以及它们与QP数量的关系,请参考下图:

RDMA四种传输服务定位图 可靠性 → 不可靠 可靠 连接性 → 面向连接 无连接 可靠 + 连接 不可靠 + 连接 可靠 + 无连接 不可靠 + 无连接 RC 可靠连接 UC 不可靠连接 UD 不可靠数据报 RD 可靠数据报 注:RC/UC每个QP仅连接一个远端QP;UD/RD一个QP可连接多个远端QP 本课程重点 对比对象

本课程将重点围绕RC与UC展开对比。这两种服务都基于面向连接的QP模型,但可靠性语义截然不同,这直接影响了它们的硬件设计复杂度、性能表现和适用场景。UD和RD作为补充内容,将在后续章节中简要介绍。

1.5 核心概念:队列对(QP)与完成队列(CQ)

在深入对比之前,必须先理解RDMA的基本执行模型。应用通过队列对(Queue Pair, QP)发起数据传输。一个QP由两部分组成:

  • 发送队列(Send Queue, SQ):存放应用下发的发送请求(WR,Work Request)。
  • 接收队列(Receive Queue, RQ):存放接收请求,用于告知网卡将收到的数据放到哪块内存。

应用通过工作请求(WR)描述一次操作(如发送、接收、读写),网卡硬件执行完成后,会生成完成队列元素(CQE)放入完成队列(Completion Queue, CQ)中,通知应用操作已完成。这个模型是理解RC与UC差异的基础——例如,在RC模式下,发送WR的完成意味着对端已确认收到;而在UC模式下,完成仅表示数据已发出,并不代表对端成功接收。

1.6 常见误区与学习路径提醒

误区警示:不要将“不可靠连接(UC)”等同于“低质量”。UC并非设计缺陷,而是为了在容忍少量丢包的应用(如某些实时通信、视频流)中,避免重传带来的额外延迟和CPU开销。选择RC还是UC,本质是在可靠性与性能/资源消耗之间做权衡。