什么是RDMA
在计算机运算领域,远程直接内存访问(英语:remote direct memory access,RDMA)是一种直接存储器访问技术,它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入。这允许高通量、低延迟的网络通信,尤其适合在大规模并行计算机集群中使用。
RDMA实现
常见网络环境
介绍RDMA网络实现之前,先介绍一下常见的几种网络环境:以太网(ethernet)、IB网(Infiniband)、光纤通道(Fibre Channel)。
Infiniband
InfiniBand(直译为“无限带宽”技术,缩写为IB)是一个用于高性能计算的计算机网络通信标准,它具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系统之间的直接或交换互连,以及存储系统之间的互连。[1]
Ethernet
以太网(英语:Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是当前应用最普遍的局域网技术,取代了其他局域网标准如令牌环、FDDI和ARCNET。
Fibre Channel
网状通道(Fibre Channel,简称FC)是一种高速网络互联技术(通常的运行速率有2Gbps、4Gbps、8Gbps和16Gbps),主要用于连接计算机存储设备。
以太网设计的初衷是为了实现不同系统的互联,是一种network,优先考虑交融性与分布式;IB主要解决的问题是在一个系统内部把多个设备整合起来,像一台设备一样工作,优先考虑的是高速与低延迟。
RDMA的三种实现
目前,大致有三类RDMA网络,分别是Infiniband、RoCE、iWARP。其中,Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输 , 而RoCE 和 iWARP都是基于以太网的RDMA技术,支持相应的verbs接口。
文章图片
【roce和iwarp_Kubernetes与HPC((1)RDMA网络)】RDMA
从图中不难发现,RoCE协议存在RoCEv1和RoCEv2两个版本,主要区别RoCEv1是基于以太网链路层实现的RDMA协议(交换机需要支持PFC等流控技术,在物理层保证可靠传输),而RoCEv2是以太网TCP/IP协议中UDP层实现。从性能上,很明显Infiniband网络最好,但网卡和交换机是价格也很高,然而RoCEv2和iWARP仅需使用特殊的网卡就可以了,价格也相对便宜很多。
RDMA这种技术以前只能运行在IB网络下,为了将这种技术用在以太网环境下,就逐步发展出了RoCE/iWarp两种协议。
RoCE目前主要是由Mellonax主导,和TCP协议无关,性能更好。
iWarp主要由Chelsio主导,下层会依赖TCP协议,性能和可扩性行都差一些,优点是考虑了对广域网的支持。
目前来看RoCE比iWarp前景更好,实际使用也更广泛。
RDMA vs DPDK
DPDK是Intel主导,提供了基于用户态的数据链路层的功能,可以在上面构建出基于用户态的网络栈。
核心共同点:二者均为kernel bypass技术,消除内核态到用户态的内存拷贝。
核心差异点:DPDK将协议栈上移到用户态,RDMA将协议栈下沉到网卡硬件。
更多细致的差异对比,可以参考此文
发展出DPDK/RDMA以及多种实现,根本原因在于网络硬件发展很快,而占据主导的TCP协议当初是为了低速网络环境设计的。
Kubernetes with RDMA Network
三种主要容器网络模式
Virtual bridge
Multiplexing
Hardware switching
文章图片
img
RDMA设备与k8s集成
要在Kubernetes中使用rdma设备,首先是通过device plugin插件机制,让k8s能够识别和使用rdma设备。其次,rdma网卡基本上都支持SR-IOV技术,利用基于该技术的Kubernetes CNI插件,可以构建出完整的容器网络。
当前支持RDMA的网卡主要是intel与mellanox两个厂家,各自均提供有对应k8s device plugin与SR-IOV网络cni插件。
intel
mellanox
pod多网络
在HPC场景下,pod之间除了高性能网络之外,也可以有额外的网络,由此引入pod多网卡诉求,intel提供了一种解决方案multus(https://github.com/intel/multus-cni),该插件主要通过代理其它cni插件以实现,遵循k8s多网卡规范(https://github.com/K8sNetworkPlumbingWG/multi-net-spec)。
利用multus插件,结合常规cni插件与SR-IOV cni插件,即可实现下图所示的pod网络
文章图片
在这里插入图片描述
参考资料