声明

引用[1]:InfiniBand, RDMA, iWARP, RoCE,2014年的博文。
引用[2]:RDMA Vs DPDK,2017年的简书。
引用[3]:有哪些比较好的基于dpdk实现的tcp/ip stack?,2017年的知乎。

InfiniBand RDMA iWARP RoCE

这两天了解了一些 parallel file system 比如 PVFS2/OrangeFS, Lustre,它们都声称支持 InfiniBand 网络连接技术,好奇之下查了下,发现这个技术规范很牛逼,另外也因此知道了 RDMA 技术,指不通过 OS 内核以及 TCP/IP 协议栈在网络上传输数据,因此延迟非常低,CPU 消耗非常少。

两篇讲述 InfiniBand 的趣文:
关于Infiniband的一些介绍 http://aze12.blog.163.com/blog/static/8620441220086411596665/
InfiniBand:还会有多少人想起我?http://www.360doc.com/content/07/0904/16/494_718778.shtml
看起来 InfiniBand, FibreChannel, 10Gbps Ethernet 竞争的硝烟还有一阵日子可看。

RDMA 技术有好几种规范来达到:

InfiniBand: 这是正统,InfiniBand 设计之初就考虑了 RDMA,InfiniBand 从硬件级别保证可靠传输;
iWARP: 基于 TCP or SCTP 做 RDMA,利用 TCP or SCTP 达到可靠传输,对网络设备的要求比较少;
RoCE: 基于 Ethernet 做 RDMA,消耗的资源比 iWARP 少,支持的特性比 iWARP 多,需要FCoE做可靠传输。从wikipedia的评价看 RoCE 还是比正统的 InfiniBand 差点。
上面三种实现都是需要硬件支持的,IB 需要支持 IB 规范的网卡和交换机,iWARP 和 RoCE 都可以使用普通的以太网交换机,但是需要支持 iWARP 或者 RoCE 的网卡。软件上 Solaris、Linux、Windows 都有支持,在 API 层面这篇文章有个入门的介绍:Introduction to Remote Direct Memory Access (RDMA) ,可以使用 http://www.openfabrics.org/ 提供的 libibverbs 库(Debian Linux 有提供),这个库似乎也支持 Windows 上的原声 RDMA API “Network Direct”。另外也有一些其它 API 规范,比如 DAT 组织制定的 kDAPL(让 kernel driver 可以访问 RDMA 功能) 和 uDAPL(让 user space 进程可以访问 RDMA 功能), OpenGroup 制定的 IT-API 和 RNICPI:

https://software.intel.com/en-us/articles/access-to-infiniband-from-linux
http://www.zurich.ibm.com/sys/rdma/interfaces.html
http://rdma.sourceforge.net/
另外 IETF 制定了 iSCSI Extensions for RDMA(iSER) 和 SDP(Sockets Direct Protocol, 基于 RDMA 替换 TCP 的流式传输层协议, RDMA 本身提供了可靠传输机制) 两个协议。Java 7 引入了对 SDP 的支持: https://docs.oracle.com/javase/tutorial/sdp/sockets/index.html,Apache Qpid 消息队列也支持 RDMA:https://packages.debian.org/sid/librdmawrap2 .

学习RDMA的网站:http://www.rdmamojo.com/2013/06/08/tips-and-tricks-to-optimize-your-rdma-code/

背板互联总线

看来以太网可以取代SRIO,毕竟有RDMA,而RDMA不是很新的技术,我突然记得在学校的时候听说过六院的超算天河用的Infiniband作为背板互联,教研室以前一个车载的存储阵列也是用的InfiniBand。RDMA不是新的技术,只是以前在InfiniBand上,导致比较小众,现在IB移植到RoCE(v2)上,扩展了应用场景。
DPDK需要造的轮子太多,并且支持的厂家主要是intel, 主要是intel自己的标准和协议,需要程序员做的事情太多,开发量太大,相当于程序员要把整个IP协议底层实现一遍。作为同样的类似技术,我推荐已经标准化的,兼容性好很多,不仅仅是intel,也不仅仅是以太网,还有InfiniBand等其他网络,都支持这个协议,一次写完,多种硬件,多种平台,多种厂家,国际标准,价格便宜,现在很多杂牌三四百元的万兆以太网卡都已经支持的RDMA/ROCE技术,不需要自己实现底层, 底层代码全部都已经国际标准化了,直接拿来用就可以了,不需要自己造轮子,性能与DPDK基本不相上下,也是在用户层实现了整个TCP/IP协议,国家超算中心已经有很多应用都是RDMA/ROCE技术开发的网络层,还有最近2届高校大学生超算全国性竞赛,都是指定必须使用RDMA技术作为网络层接口, 也说明了国家层面上的倾向(作者:郭忠明 链接:https://www.zhihu.com/question/47396779/answer/139271653)。

FPGA RDMA IP(RNIC)

Xilinx
RDMA pg294
InfiniBand RDMA iWARP RoCE
NVMEoF
InfiniBand RDMA iWARP RoCE

相关文章: