searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

RDMA重传机制分享与记录

2025-09-26 10:17:53
1
0

一、RDMA 重传机制的技术背景

RDMA(远程直接内存访问)凭借零拷贝、内核旁路与硬件卸载三大核心特性,在高性能计算(HPC)、AI 训练集群、分布式存储等场景中实现了微秒级延迟与百 Gbps 级带宽的传输性能。

网络传输中的数据包丢失(如拥塞丢弃)、接收端资源不足(如缓冲区溢出)、报文损坏(如 ICRC 校验错误)等问题,会直接导致 RDMA 通信中断或数据不一致。为此,RDMA 通过硬件卸载的重传机制,在不牺牲核心性能的前提下弥补可靠性短板 —— RDMA 网卡(RNIC)内置重传逻辑,避免 CPU 介入超时检测与数据包重发过程,实现 "高性能" "高可靠" 的平衡。

二、RDMA 基础传输类型与 RC 传输特点

传输类型

RDMA 通过队列对(QP)实现端到端通信,依据可靠性、连接模式、排序保障等维度,定义了四种核心传输类型,适配不同场景的性能与可靠性需求:

RCReliable Connected,可靠连接)

基于面向连接的通信模式,提供严格的数据包排序、无重复传输与错误恢复保障,是 RDMA 最常用的传输类型,适用于需强可靠性的场景(如分布式存储数据读写、数据库事务同步)。其可靠性依赖前文所述的超时重传、NAK 重传等机制实现。

UCUnreliable Connected,不可靠连接)

采用连接导向模式,但不提供错误恢复与重复检测能力,仅保障已接收数据包的排序性。因省去重传开销,延迟更低,适用于可容忍少量丢包的场景(如实时视频流传输、非关键监控数据上报)。

UDUnreliable Datagram,不可靠数据报)

基于无连接的数据报模式,既不保障数据包排序,也不提供错误恢复,支持一对多、多对多的组播通信。具备极低的通信开销与灵活的拓扑适配性,常用于高性能计算集群的节点发现、心跳检测等场景。

RAWRaw Datagram,原始数据报)

允许直接操作底层网络报文头部,不依赖 RDMA 协议栈的封装 / 解封装逻辑,适用于自定义协议开发或网络性能测试场景,需用户自行实现可靠性保障。RC 传输的核心特点及需求。

RC模式的特点

RC 传输作为 RDMA 可靠通信的基石,其设计紧密围绕 "高性能" "高可靠" 的双重目标,核心特点如下:

严格的数据包排序与去重

依赖 PSN(包序列号)实现全局有序传输,发送端按递增顺序分配 PSN,接收端通过 PSN 窗口检测序号跳变或重复报文 —— 对重复包直接丢弃,对失序包缓存等待补传(需配合 NAK 重传机制),确保上层应用接收的数据与发送顺序完全一致。

多级流量控制机制

结合两种流量控制策略避免网络拥塞:一是基于信用值(Credit)的链路层流控,接收端通过 Credit 字段告知发送端可接收的最大数据包数量;二是基于 QP 接收缓冲区的端到端流控,当缓冲区使用率达到阈值时,通过 RNR NAK 暂停数据发送,实现精细化资源调度。

错误处理及重传能力

覆盖传输全链路错误场景:对报文损坏(ICRC 校验失败)、R_Key 权限错误等立即返回错误码;对数据包丢失通过 NAK 重传快速恢复;对响应超时通过超时重传兜底保障;对接收端资源不足通过 RNR 重传动态适配。

三、RDMA 重传机制的核心类型

超时重传

超时重传是 RDMA 可靠服务(如 RC 服务)的基础保障,通过发送端的 Transport Timer 实现被动错误检测。其核心逻辑为:发送端在发送关键请求包(含 AckReq 位的请求、RDMA Read 请求、原子操作请求等)时启动定时器,若在预设超时时间内未收到响应,则触发重传。

超时重传涉及到的基础逻辑是RDMA中的确认逻辑。在RC传输下request需要response确认,在RDMA中对未确认的请求会进入计时,该计时一般通过硬件计数器实现,当请求超过限定时间未回复,则对请求超时重传。

对于SEND/WRITE请求,ack响应通常采用合并确认,每隔几个PSN才会有一个ack,但是对应LAST报文要求必须回复ack。不难看出,网络波动下丢失ack对数据传输完整性没有太大影响,因此RDAM中存在前向确认机制,对应ack响应,发包顺序后的ack可以确认前面的请求。因此,丢失中间的ack不会触发超时重传。

对于READ请求,需要保证每个响应按顺序接收,一旦丢失某个响应会影响到数据完整性,因此READ请求不能前向确认。

对于长报文,重传概率较大且占用资源较大,RMDA中重传一般不会选择整个报文重传,超时重传将从未确认的第一个报文开始重传。超时重传会被重传计数,一旦超过限定次数,将进入错误处理流程,有效防止网络波动时频繁重传。

RNR 重传

RNRReceiver Not Ready)重传是 RDMA 应对接收端资源不足的专用机制,由接收端主动反馈 RNR NAK 信号触发。当接收端 QP(队列对)的接收缓冲区已满、RQWQE未准备好,会向发送端返回携带错误码的 RNR NAK,告知暂时无法接收数据。

发送端收到 RNR NAK 后,启动独立的 RNR NAK Timer(超时间隔由 AETH 字段指定),待定时器到期后重新发送请求,并通过 RNR NAK 重试计数器限制重传次数(初始值可配置为 7,代表无限重试)。与超时重传不同,RNR 重传仅针对接收端就绪状态,不占用通用重计数器资源,避免因资源临时不足导致连接错误。

NAK 重传

NAK(否定确认)重传通过接收端主动上报错误实现快速恢复,分为显式 NAK 与隐式 NAK 两类。显式 NAK PSN(包序列号)序列错误触发:接收端检测到数据包序号跳变或重复时,发送携带丢失序号的 NAK 信号,通知发送端精准重传;隐式 NAK 则针对 RDMA Read 响应丢失场景 —— 当接收端提前回复后续请求的 ACK 时,该 ACK 会隐式否定此前未完成的 Read 请求,触发发送端重传。

NAK 重传的核心优势在于 "主动性":相比超时重传的被动等待,接收端可在检测到错误的第一时间触发恢复,减少延迟损耗。

0条评论
0 / 1000
c****c
3文章数
0粉丝数
c****c
3 文章 | 0 粉丝
c****c
3文章数
0粉丝数
c****c
3 文章 | 0 粉丝
原创

RDMA重传机制分享与记录

2025-09-26 10:17:53
1
0

一、RDMA 重传机制的技术背景

RDMA(远程直接内存访问)凭借零拷贝、内核旁路与硬件卸载三大核心特性,在高性能计算(HPC)、AI 训练集群、分布式存储等场景中实现了微秒级延迟与百 Gbps 级带宽的传输性能。

网络传输中的数据包丢失(如拥塞丢弃)、接收端资源不足(如缓冲区溢出)、报文损坏(如 ICRC 校验错误)等问题,会直接导致 RDMA 通信中断或数据不一致。为此,RDMA 通过硬件卸载的重传机制,在不牺牲核心性能的前提下弥补可靠性短板 —— RDMA 网卡(RNIC)内置重传逻辑,避免 CPU 介入超时检测与数据包重发过程,实现 "高性能" "高可靠" 的平衡。

二、RDMA 基础传输类型与 RC 传输特点

传输类型

RDMA 通过队列对(QP)实现端到端通信,依据可靠性、连接模式、排序保障等维度,定义了四种核心传输类型,适配不同场景的性能与可靠性需求:

RCReliable Connected,可靠连接)

基于面向连接的通信模式,提供严格的数据包排序、无重复传输与错误恢复保障,是 RDMA 最常用的传输类型,适用于需强可靠性的场景(如分布式存储数据读写、数据库事务同步)。其可靠性依赖前文所述的超时重传、NAK 重传等机制实现。

UCUnreliable Connected,不可靠连接)

采用连接导向模式,但不提供错误恢复与重复检测能力,仅保障已接收数据包的排序性。因省去重传开销,延迟更低,适用于可容忍少量丢包的场景(如实时视频流传输、非关键监控数据上报)。

UDUnreliable Datagram,不可靠数据报)

基于无连接的数据报模式,既不保障数据包排序,也不提供错误恢复,支持一对多、多对多的组播通信。具备极低的通信开销与灵活的拓扑适配性,常用于高性能计算集群的节点发现、心跳检测等场景。

RAWRaw Datagram,原始数据报)

允许直接操作底层网络报文头部,不依赖 RDMA 协议栈的封装 / 解封装逻辑,适用于自定义协议开发或网络性能测试场景,需用户自行实现可靠性保障。RC 传输的核心特点及需求。

RC模式的特点

RC 传输作为 RDMA 可靠通信的基石,其设计紧密围绕 "高性能" "高可靠" 的双重目标,核心特点如下:

严格的数据包排序与去重

依赖 PSN(包序列号)实现全局有序传输,发送端按递增顺序分配 PSN,接收端通过 PSN 窗口检测序号跳变或重复报文 —— 对重复包直接丢弃,对失序包缓存等待补传(需配合 NAK 重传机制),确保上层应用接收的数据与发送顺序完全一致。

多级流量控制机制

结合两种流量控制策略避免网络拥塞:一是基于信用值(Credit)的链路层流控,接收端通过 Credit 字段告知发送端可接收的最大数据包数量;二是基于 QP 接收缓冲区的端到端流控,当缓冲区使用率达到阈值时,通过 RNR NAK 暂停数据发送,实现精细化资源调度。

错误处理及重传能力

覆盖传输全链路错误场景:对报文损坏(ICRC 校验失败)、R_Key 权限错误等立即返回错误码;对数据包丢失通过 NAK 重传快速恢复;对响应超时通过超时重传兜底保障;对接收端资源不足通过 RNR 重传动态适配。

三、RDMA 重传机制的核心类型

超时重传

超时重传是 RDMA 可靠服务(如 RC 服务)的基础保障,通过发送端的 Transport Timer 实现被动错误检测。其核心逻辑为:发送端在发送关键请求包(含 AckReq 位的请求、RDMA Read 请求、原子操作请求等)时启动定时器,若在预设超时时间内未收到响应,则触发重传。

超时重传涉及到的基础逻辑是RDMA中的确认逻辑。在RC传输下request需要response确认,在RDMA中对未确认的请求会进入计时,该计时一般通过硬件计数器实现,当请求超过限定时间未回复,则对请求超时重传。

对于SEND/WRITE请求,ack响应通常采用合并确认,每隔几个PSN才会有一个ack,但是对应LAST报文要求必须回复ack。不难看出,网络波动下丢失ack对数据传输完整性没有太大影响,因此RDAM中存在前向确认机制,对应ack响应,发包顺序后的ack可以确认前面的请求。因此,丢失中间的ack不会触发超时重传。

对于READ请求,需要保证每个响应按顺序接收,一旦丢失某个响应会影响到数据完整性,因此READ请求不能前向确认。

对于长报文,重传概率较大且占用资源较大,RMDA中重传一般不会选择整个报文重传,超时重传将从未确认的第一个报文开始重传。超时重传会被重传计数,一旦超过限定次数,将进入错误处理流程,有效防止网络波动时频繁重传。

RNR 重传

RNRReceiver Not Ready)重传是 RDMA 应对接收端资源不足的专用机制,由接收端主动反馈 RNR NAK 信号触发。当接收端 QP(队列对)的接收缓冲区已满、RQWQE未准备好,会向发送端返回携带错误码的 RNR NAK,告知暂时无法接收数据。

发送端收到 RNR NAK 后,启动独立的 RNR NAK Timer(超时间隔由 AETH 字段指定),待定时器到期后重新发送请求,并通过 RNR NAK 重试计数器限制重传次数(初始值可配置为 7,代表无限重试)。与超时重传不同,RNR 重传仅针对接收端就绪状态,不占用通用重计数器资源,避免因资源临时不足导致连接错误。

NAK 重传

NAK(否定确认)重传通过接收端主动上报错误实现快速恢复,分为显式 NAK 与隐式 NAK 两类。显式 NAK PSN(包序列号)序列错误触发:接收端检测到数据包序号跳变或重复时,发送携带丢失序号的 NAK 信号,通知发送端精准重传;隐式 NAK 则针对 RDMA Read 响应丢失场景 —— 当接收端提前回复后续请求的 ACK 时,该 ACK 会隐式否定此前未完成的 Read 请求,触发发送端重传。

NAK 重传的核心优势在于 "主动性":相比超时重传的被动等待,接收端可在检测到错误的第一时间触发恢复,减少延迟损耗。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0