文章目录
1.RDMA概念
RDMA(Remote Direct Memory Access)在概念上是相对于DMA而言的。在DMA技术中,外部设备(PCIe设备)能够绕过CPU直接访问主机的系统主存;而RDMA则指外部设备能够绕过CPU,不仅可以访问本地主机的主存,它还可以访问另一台远端主机上用户态的系统主存。RDMA
2.RMDA与Socket
RDMA通信示意图:
Socket通信示意图:
在传统的套接字网络中,应用程序向操作系统申请网络资源时,要通过特定的API来管理程序的行为。但是RDMA仅仅使用操作系统建立一个通道,然后就可以再不需要操作系统干预的情况下,应用程序之间既要能进行直接的消息传递。
2.1传统的TCP/IP通信
TCP/IP/Ethernet 是一种面向字节流的传输方式,信息以字节的形式在套接字应用程序之间传递。数据发送方要将数据从用户空间Buffer复制到内核空间的Socket Buffer中。然后在内核空间中添加数据报头,进行数据封装。通过一系列多层网络协议的数据包处理工作,这些协议包括传输控制协议(TCP)、用户数据报协议(UDP)、互联网协议(IP)、以及互联网控制消息协议(ICMP)等。经历如此多个步骤,数据才能被Push到NIC网卡中的Buffer进行网络传输。在消息接收方,从远程主机发送来的数据包,要先将其从NIC Buffer拷贝至Socket Buffer,然后经过一系列的多层网络协议对数据包进行解析,解析后的数据被复制到相应的用户空间应用程序的Buffer中。此时,再进行系统上下文切换,用户应用程序才被调用。以上就是传统TCP/IP通信的工作流程。
2.2TCP/IP存在的问题
传统TCP/IP通信存在的主要问题就是I/O瓶颈问题。在高速网络环境下与网络I/O相关的主机处理的高开销(数据移动操作和复制操作)限制了机器之间的传输带宽。具体来说,传统的TCP/IP网络通信是通过内核发送消息。通过内核来传输消息这种机制会导致很低的性能和很低的灵活性。性能低下的主要原因是由于网络通信通过内核传递,需要在内核中频繁进行协议封装和解封操作,造成很大的数据移动和数据复制开销。很低的灵活性是因为网络通信协议在内核中进行处理,这种方式很难支持新的网络协议和新的消息通信协议以及发送和接收接口。
3.RDMA的特点
为了消除传统网络通信带给计算任务的瓶颈,我们希望更快和更轻量级的网络通信,由此提出了RDMA技术。RDMA利用栈旁路和零拷贝技术提供了低延迟的特性,同时减少了CPU占用,减少了内存带宽瓶颈,提供了很高的带宽利用率。RDMA提供了给基于IO的通道,这种通道允许一个应用程序通过RDMA设备对远程的虚拟内存进行直接的读写。
RDMA技术的设计主要有以下几个特点:
3.1CPU offload
无需CPU干预,应用程序可以访问远程主机内存而不消耗远程主机中的任何CPU。远程主机内存能够被读取而不需要远程主机上的进程(或CPU)参与。远程主机的CPU的缓存(cache)不会被访问的内存内容所填充。
3.2kernel bypass
内核旁路指的是,应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换。
3.3zero copy
零拷贝主要的任务就是避免CPU将数据从一块存储拷贝到另外一块存储,在TCP/IP通信中,数据在主机之间的传输需要频繁进行拷贝操作(UserSpace Buffer、Socket Buffer、NIC Buffer),这些操作无疑增加了传输延迟。而RDMA具有零拷贝的特点。RDMA技术非常重要的一点是,每个应用程序都能直接访问集群中的设备的虚拟内存,这意味着应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下,数据能够被直接