RDMA通信---对比传统socket通信的优势
Socket通信过程

传统的Socket在将数据由一端发送至另一端会经历以下流程:
(1)用户空间中产生数据,CPU把数据从用户空间转移至内核空间;此过程发生一次拷贝、一次用户态/内核态转换,且都由CPU主导完成。
(2)当数据到达内核空间后,CPU负责对数据进行封装,添加TCP、IP头,添加校验信息。
(3)接着以太网卡通过DMA将内核空间中数据拷贝到发送端网卡内存缓存区。
(4)发送端网卡将数据通过物理链路发送到接收端网卡。
(5)接收端网卡收到数据后通过DMA将数据从接收端网卡内存缓存区拷贝到内核缓冲区。
(6)CPU在内核态中对数据进行解析和校验。
(7)CPU将数据由内核空间拷贝到用户空间。
由以上过程可以看出,完成一次数据发送,需要完成两次用户态\内核态切换,两次数据拷贝且都需要CPU参与,对CPU造成负担,增加传输时延。
那么为何要完成数据由用户空间拷贝至内存空间这个操作呢?
因为传统的网卡DMA操作时,要求数据在物理空间必须是连续的,而用户空间中的地址是虚拟地址是由物理地址映射得来的,虚拟地址是连续的但是物理地址可能是碎片化的,这会影响内核操作的安全性和可靠性,因此转发数据时必须将数据拷贝到内核可控的内存区域。
RDMA通信过程

利用RDMA网卡通信时则经历一下流程:
(1)RDMA网卡将数据由用户空间拷贝到网卡发送缓存区,对数据进行封装,添加头部信息、校验信息。
(2)发送端网卡将数据通过物理链路发送至接收端网卡。
(3)接收端网卡收到信息后对数据进行报文解析、校验,通过DMA将数据拷贝到用户空间。
RDMA通信方式优缺点
1、数据传输时没有系统调用,不需要用户态内核态切换,降低通信延迟。
2、省去数据在户空间拷贝到内核空间之间的拷贝,降低通信延迟。(零拷贝)
3、数据包的封装和解析,由网卡完成,降低CPU负载。
4、要求RDMA网卡能够访问物理地址不连续的用户空间。
5、RDMA网卡需要负责数据的封装和解析。
