目录
5.1.2 ECMP(ECMP构建多条等价负载链路,HASH选择到已拥塞链路发送加剧拥塞)
1.rdma介绍
在网络融合的大趋势下出现的RoCE,使高速、超低延时、极低cpu使用率的RDMA得以部署在目前使用最广泛的以太网上。
对比传统DMA的内部总线IO,RDMA通过网络在两个端点的应用软件之间实现buffer的直接传递;
而对比传统的网络传输,RDMA又无需操作系统和协议栈的介入。
RDMA可以轻易实现端点间的超低延时、超高吞吐量传输,而且基本不需要CPU、OS的资源参与,在高速网络环境下,不必再为网络数据的处理和搬移耗费过多资源。
一言概之,RDMA三大特性:CPU offload 、kernel bypass、zero-copy。
传统方式
rdma方式
如上图,在传统模式下,两台服务器上的应用之间传输数据,过程是这样的:
首先要把数据从应用缓存拷贝到Kernel中的TCP协议栈缓存;
然后再拷贝到驱动层;
最后拷贝到网卡缓存。
多次内存拷贝需要CPU多次介入,导致处理延时大,达到数十微秒。同时整个过程中CPU过多参与,大量消耗CPU性能,影响正常的数据计算。
在RDMA 模式下,应用数据可以绕过Kernel协议栈直接向网卡写数据,带来的显著好处有:
处理延时由数十微秒降低到1微秒内;
整个过程几乎不需要CPU参与,节省性能;
传输带宽更高。
2. rdma原理
传统的网络架构以“网络为中心”,网络公用的软件部分被实现到OS的协议栈,所以OS在所有应用的网络请求时都必须参与其中,并且socket、skbuff、ring buffer的转换都伴随着数据报文的拷贝,容易产生性能瓶颈。
网络环境下的CPU负载消耗
RDMA提供了基于消息队列的点对点通信,每个应用都可以直接获取自己的消息,无需OS和协议栈的介入。
消息服务建立在通信双方本端和远端应用之间创建的channel-IO连接之上。
当应用需要通信时,就会创建一条Channel连接,每条Channel的首尾端点是两对Queue Pairs(QP),每对QP由Send Queue(SQ)和Receive Queue(RQ)构成,这些队列中管理着各种类型的消息。
QP会被映射到应用的虚拟地址空间,使得应用直接通过它访问RNIC。除了QP描述的两种基本队列之外,RDMA还提供一种队列-Complete Queue(CQ),CQ用来知会用户WQ上的消息已经被处理完。
RDMA提供了一套software transport interface,方便用户创建传输请求-Work Request(WR),WR中描述了应用希望传输到Channel对端的消息内容。
WR通知给QP中的某个队列-Work Queue(WQ)。
在WQ中,用户的WR被转化为Work Queue Ellement(WQE)的格式,等待RNIC的异步调度解析,并从WQE指向的buffer中拿到真正的消息发送到Channel对端。
3. rdma传输
RDMA 的send/receive和read/write传输
RDMA共有三种底层数据传输模式。
SEND/RECEIVE是双边操作,即必须要远端的应用感知参与才能完成收发。
READ和WRITE是单边操作,只需要本端明确信息的源和目的地址,远端应用不必感知此次通信,数据的读或存都通过远端的DMA在RNIC与应用buffer之间完成,再由远端RNIC封装成消息返回到本端。
在实际中,SEND/RECEIVE多用于连接控制类报文,而数据报文多是通过READ/WRITE来完成的。
3.1双边操作
对于双边操作为例,A向B发送数据的流程如下:
首先,A和B都要创建并初始化好各自的QP,CQ
A和B分别向自己的WQ中注册WQE,对于A,WQ=SQ,WQE描述指向一个等到被发送的数据;对于B,WQ=RQ,WQE描述指向一块用于存储数据的buffer。
A的RNIC异步调度轮到A的WQE,解析到这是一个SEND消息,从buffer中直接向B发出数据。数据流到达B的RNIC后,B的WQE被消耗,并把数据直接存储到WQE指向的存储位置。
AB通信完成后,A的CQ中会产生一个完成消息CQE表示发送完成。与此同时,B的CQ中也会产生一个完成消息表示接收完成。每个WQ中WQE的处理完成都会产生一个CQE。
双边操作与传统网络的底层buffer pool类似,收发双方的参与过程并无差别,区别在零拷贝、kernel bypass,实际上传统网络中一些高级的网络SOC已经实现类似功能。
对于RDMA,这是一种复杂的消息传输模式,多用于传输短的控制消息。
3.2 单边操作
对于单边操作,以存储网络环境下的存储为例(A作为文件系统,B作为存储介质):
首先A、B建立连接,QP已经创建并且初始化。
数据被存档在A的buffer地址VA,注意VA应该提前注册到A的RNIC,并拿到返回的local key,相当于RDMA操作这块buffer的权限。
A把数据地址VA,key封装到专用的报文传送到B,这相当于A把数据buffer的操作权交给了B。同时A在它的WQ中注册进一个WR,以用于接收数据传输的B返回的状态。
B在收到A的送过来的数据VA和R_key后,RNIC会把它们连同存储地址VB到封装RDMA READ,这个过程A、B两端不需要任何软件参与,就可以将A的数据存储到B的VB虚拟地址。
B在存储完成后,会向A返回整个数据传输的状态信息。
单边操作传输方式是RDMA与传统网络传输的最大不同,提供直接访问远程的虚拟地址,无须远程应用的参与,这种方式适用于批量数据传输。
4 RoCEv2的封包格式
RoCEv2的协议栈包括IB传输层、UDP、IP和Ethernet,其中,后面三层都使用了TCP/IP中相应层次的封包格式。
4.1 RoCEv2的封包格式
RoCEv2的封包格式如下图所示
其中,UDP包头中,目的端口号为4791即代表是RoCEv2帧。
IB BTH即InfiniBand Base Transport Header,定义了IB传输层的相应头部字段。
IB Payload即为消息负载。ICRC和FCS分别对应冗余检测和帧校验。