1 前言
本节主要概述一下当前所使用的TCP/IP通信模式,在当前高吞吐量、低时延的业务需求下所存在的一些瓶颈和弊端,同时简单介绍一下RDMA技术特性以及该技术在网络数据传输过程中所具有的优势。
1.1 传统TCP/IP通信模式
传统的TCP/IP网络通信,数据需要通过用户空间发送到远程机器的用户空间。数据发送方需要将数据从用户应用空间Buffer复制到内核空间的Socket Buffer中。然后Kernel空间中添加数据包头,进行数据封装。通过一系列多层网络协议的数据包处理工作,这些协议包括传输控制协议(TCP)、用户数据报协议(UDP)、互联网协议(IP)以及互联网控制消息协议(ICMP)等。数据才被Push到NIC网卡中的Buffer进行网络传输。消息接受方接受从远程机器发送的数据包后,要将数据包从NIC buffer中复制数据到Socket Buffer。然后经过一系列的多层网络协议进行数据包的解析工作。解析后的数据被复制到相应位置的用户应用空间Buffer。这个时候再进行系统上下文切换,用户应用程序才被调用。以上就是传统的TCP/IP协议层的工作。
1.2 传统TCP/IP存在的问题
传统的TPC/IP存在的问题主要是指I/O bottleneck瓶颈问题。在高速网络条件下与网络I/O相关的主机处理的高开销限制了可以在机器之间发送的带宽。具体来讲,主要是传统的TCP/IP网络通信是通过内核发送消息。Messaging passing through kernel这种方式会导致很低的性能和很低的灵活性。性能低下的原因主要是由于网络通信通过内核传递,这种通信方式存在的很高的数据移动和数据复制的开销。并且现如今内存带宽性相较如CPU带宽和网络带宽有着很大的差异。很低的灵活性的原因主要是所有网络通信协议通过内核传递,这种方式很难去支持新的网络协议和新的消息通信协议以及发送和接收接口。
1.3 RDMA通信模式
RDMA(RemoteDirect Memory Access)技术全称远程直接内存访问,就是为了解决网络传输中服务器端数据处理的延迟而产生的。它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入。这允许高吞吐、低延迟的网络通信,尤其适合在大规模并行计算机集群中使用。RDMA通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理能力。它消除了外部存储器复制和上下文切换的开销,因而能解放内存带宽和CPU周期用于改进应用系统性能。
1.4 RDMA技术优势
传统的TCP/IP技术在数据包处理过程中,要经过操作系统及其他软件层,需要占用大量的服务器资源和内存总线带宽,数据在系统内存、处理器缓存和网络控制器缓存之间来回进行复制移动,给服务器的CPU和内存造成了沉重负担。尤其是网络带宽、处理器速度与内存带宽三者的严重"不匹配性",更加剧了网络延迟效应。
RDMA是一种新的直接内存访问技术,RDMA让计算机可以直接存取其他计算机的内存,而不需要经过处理器的处理。RDMA将数据从一个系统快速移动到远程系统的内存中,而不对操作系统造成任何影响。使用RDMA的优势如下:
1.4.1 零拷贝(Zero-copy)
应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下。数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。
1.4.2 内核旁路(Kernel bypass)
应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换。
1.4.3 不需要CPU干预(No CPU involvement)
应用程序可以访问远程主机内存而不消耗远程主机中的任何CPU。远程主机内存能够被读取而不需要远程主机上的进程(或CPU)参与。远程主机的CPU的缓存(cache)不会被访问的内存内容所填充。
1.4.4 消息基于事务(Message based transactions)
数据被处理为离散消息而不是流,消除了应用程序将流切割为不同消息/事务的需求。
1.4.5 支持分散/聚合条目(Scatter/gather entries support)
RDMA原生态支持分散/聚合。也就是说,读取多个内存缓冲区然后作为一个流发出去或者接收一个流然后写入到多个内存缓冲区里去。
1.5 RDMA硬件实现
目前RDMA有三种不同的硬件实现。分别是InfiniBand、iWarp(internet Wide Area RDMA Protocol)、RoCE(RDMA over Converged Ethernet)。
1)InfiniBand(IB): 从一开始就支持RDMA的新一代网络协议。由于这是一种新的网络技术,因此需要支持该技术的网卡和交换机。
2)RDMA过融合以太网(RoCE): 即RDMA over Ethernet, 允许通过以太网执行RDMA的网络协议。这允许在标准以太网基础架构(交换机)上使用RDMA,只不过网卡必须是支持RoCE的特殊的NIC。
3)互联网广域RDMA协议(iWARP): 即RDMA over TCP, 允许通过TCP执行RDMA的网络协议。这允许在标准以太网基础架构(交换机)上使用RDMA,只不过网卡要求是支持iWARP(如果使用CPU offload的话)的NIC。否则,所有iWARP栈都可以在软件中实现,但是失去了大部分的RDMA性能优势。
1.6 RDMA技术使用方式
采用基于融合以太网的RDMA技术-RoCE来实现对RDMA技术的支持其他非RoCE支持的普通以太网卡上无法提供RDMA技术支持,在软件层面以Mellanox提供的MLX_OFED-4.4为基础,提供RDMA核心协议栈的支持,在应用层面以Oracle开源的RDS(Reliable Datagram Socket)为基础,重新定义和实现相关接口和流程。
2 RDS功能模块划分
从协议结构的角度来看,rds所实现是传输层的一组协议,它实现了封装解封、复用分用、拥塞控制、流量控制、差错控制等传输层所要求的典型功能,并最终向操作系统的注册了一组传输层接口,用于向用户提供服务。
RDS的基本软件结构可以分为2个模块和3个层次,两个模块分别是rds模块和rds_rdma模块,3个层次从上到下依次是sock接口层,connection管理层,数据传输层,RDS软件实现的基础是由OFED中间件提供通用接口。
RDS软件结构示意图
sock层提供了对上层用户的接口,包括连接的创建、释放、复位等管理,数据发送及接收等。connection层是针对不同传输层的具体实现方式进行了抽象,主要功能包括链路的监听、建立、维护和命令发送及重发等。IWARP和INFINIBAND是两个具体的传输实现方式,一种以基于Infiniband协议网卡实现的传输层,依赖的底层协议是ROCE或者是infiniband协议。IWARP是基于普通网卡实现的RDMA传输。
rds模块主要实现的是sock这个层次的管理功能,rds_rdma模块主要实现的connection和传输层的管理功能。