037、RDMA通信中的MTU与流控机制

发布时间:2026/9/27 9:27:23
037、RDMA通信中的MTU与流控机制 RDMA通信中的MTU与流控机制一次诡异的丢包排查去年做NVMe over Fabrics存储集群时,遇到一个让我熬夜到凌晨三点的bug。集群跑在RoCEv2上,某台机器只要连续写入128KB以上的数据块,QP就会莫名其妙进入error状态。抓包一看,IB层重传计数器飙得离谱,但物理链路光模块一切正常。折腾两天后,发现是MTU设置不一致——交换机侧MTU是4096,但HCA卡强制设成了1024。大包被交换机直接丢弃,RDMA的传输层又不会像TCP那样自动分片重传,结果就是QP直接崩了。从那以后,我对MTU和流控的敬畏心直接拉满。今天就把这些血泪经验拆开揉碎讲清楚。MTU:RDMA的“车道宽度”RDMA的MTU和传统以太网MTU是两码事。以太网MTU通常指L3层最大载荷(1500字节),而RDMA的MTU指的是InfiniBand架构中“数据包”的最大长度——在RoCEv2场景下,这个值直接映射到以太网帧的payload大小。关键区别:TCP/IP协议栈遇到大包会自动分片重组,但RDMA的传输层(RC/UC/UD)不会帮你做这件事。如果应用层提交的WR(Work Request)大小超过MTU,HCA硬件会将其拆成多个数据包发送,但接收端必须收到完整的所有分片才能组装成一条消息。任何一个分片丢了,整个消息都得重传。实际配置中的坑HCA卡支持的MTU值通常是256、512、1024、2048、4096这几个档位。我