1 概述
1.1 重传方式
如果用户使用的是可靠服务类型,且数据包没有按照预期从发送端到达目的端,可能就需要发送端重新发送丢失的数据包,也就是重传。
iWARP是基于TCP的,支持选择性重传,丢哪个包就重传哪个包,因此重传开销极小;
RoCE v2是基于无连接协议的UDP协议,相比面向连接的TCP协议,UDP协议更加快速、占用CPU资源更少,但其不像TCP协议那样有滑动窗口、确认应答等机制来实现可靠传输,一旦出现丢包,只能依靠上层应用检查到了再做重传,会大大降低RDMA的传输效率。
RoCE v2采用的是go-back-N的重传方式,即从丢了的包开始重传之后每一个数据包。采用这种方案是因为RoCE v2不支持乱序接收,所有的数据包必须按序处理。
1.2 PSNs For Retried Requesters
在PSN方面,这意味着请求者可以用逻辑上小于迄今为止传输的最大PSN的PSN重新发送数据包。在下面的图中,这被标识为重试请求。
① 请求方前进的最大进度点;
② 由于超时,请求备份并重新尝试请求;
③ 响应方可能继续取得进展的区域,返回的响应在逻辑上可能具有比重试请求PSN大的PSN。
图c. Retry PSN
Retry的过程中,响应方应返回标记其最远前进点的PSN①,否则可能会超过Retry请求的PSN。请求方也应考虑响应方可能会用逻辑上比Retry请求PSN更大的PSN返回对重试请求的响应(RDMA READ)。
1.3 不同操作类型的重传行为
1.3.1 Retry RDMA READ Request
如果Request没有收到正确的响应,RDMA READ Request将被Retry。
Retry范围:其RDMA READ Request不需要从相同的地址开始,也不需要与原始RDMA READ Request的长度相同,只重新读取第一次没有成功响应的部分。
Responder行为:验证R_Key与RDMA READ虚拟地址。
PSN:Retry Request的PSN需在duplicate PSN region,Retry Request的PSN≠original PSN,任何Retry Request都需与original Request的PSN子集精确对应,所有潜在的重复响应数据包必须具有相同的Payload和PSN,无论是对original request还是retry request。
对齐要求:对于HCA,RDMA READ的源缓冲区与目的缓冲区没有对齐要求,而TCA,对齐要求都是特定实现的。
【注】响应方将有效区域细分为ePSN与duplicate PSN region,duplicate PSN region被定义为除了单个ePSN之外的整个有效区域。
1.3.2 Retry ATOMIC Operation
响应方利用特定于供应商的资源和设施实现Request,并促使Retry ATOMIC Request。请求方有责任确保所有未确认ATOMIC操作和RDMA READ组合不会占用接收方资源,这些资源的数量在建立时以QP为基础进行协商。
响应方行为:Responding node保存应答数据、PSN并指示储存的数据来自ATOMIC Operation,储存的数据被用于产生Retry的响应。注意RDMA READ的执行会消耗资源,该资源可能与用于保存ATOMIC Operation PSN与reply data的资源相同。信息存储在目的QP的“connection context”或EEC中。
响应方存储规则:
① 有效的、新的ATOMIC Operation Request被保存(报文头有效、PSN与ePSN匹配、R_Key有效且地址与64b边界对齐);
② 响应方QP支持多个未完成的ATOMIC Operation与RDMA READ,每个有效请求按FIFO顺序保存,FIFO深度与连接建立时确定的未完成的ATOMIC操作和RDMA READ请求的最大数量相同。
③ 重复的ATOMIC或RDMA READ Operation不会再次保存。
ATOMIC操作保证最多执行一次,若原始“ATOMIC Command”,或“ATOMIC Acknowledge”丢失,发送方会以正常的Retry过程进行Retry,若Retry失败,则无法确定是否发生ATOMIC Operation,连接将处于Error State。
响应方CA若执行了请求,它只会再次确认请求而不会重新运行ATOMIC Operation。响应方识别一个重试的ATOMIC Operation,并返回先前存储在QP“隐藏状态”中原始确认的响应数据,响应以下条件将返回一个存储结果:
- Request有效(报文头和OpCode有效);
- 请求是ATOMIC Operation(检查OpCode);
- Request PSN位于重复区域;
- PSN匹配保存的ATOMIC Operation。
条件不满足的Retry Request将被响应方丢弃,重试一个Atomic Operation时,响应方不验证R_key,也不转换Retry Request的虚拟地址。
- For RC Service, the state bits for tracking the most recent ATOMIC and RDMA READ Operations are kept in the per QP State.
- For RD Service these state bits are kept in the EE Context instead of the Per QP State
图d. ATOMIC Retry
梯形图显示了多个ATOMIC和RDMA READ请求。在本例中,响应方QP在连接建立时已经确定可以接受最多2个未完成的ATOMIC或RDMA READ操作的任意组合。这个例子显示了丢失的ATOMIC确认(在Time2),Retry会返回原始结果值,即使来自相同或不同QP的后续操作修改了ATOMIC Operation的目标,也会返回原始值。
重试失败,意味着连接丢失,请求CA的驱动程序中的错误恢复例程将通知本地应用程序。
1.4 重传流程图
图e. 流程图