什么是RDMA?

1. 概述

RDMA是Remote Direct Memory Access的缩写,通俗的说可以看成是远程的DMA技术,为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA允许用户态的应用程序直接读取或写入远程内存,而无内核干预和内存拷贝发生。起初,只应用在高性能计算领域,最近,由于在大规模分布式系统和数据中心中网络瓶颈越来越突出,逐渐走进越来越多人的视野。

2. 分类

目前,大致有三类RDMA网络,分别是InfinibandRoCEiWARP。其中,Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输 , 而RoCEiWARP都是基于以太网的RDMA技术,支持相应的verbs接口,如图1所示。从图中不难发现,RoCE协议存在RoCEv1和RoCEv2两个版本,主要区别RoCEv1是基于以太网链路层实现的RDMA协议(交换机需要支持PFC等流控技术,在物理层保证可靠传输),而RoCEv2是以太网TCP/IP协议中UDP层实现。从性能上,很明显Infiniband网络最好,但网卡和交换机是价格也很高,然而RoCEv2和iWARP仅需使用特殊的网卡就可以了,价格也相对便宜很多。

  • Infiniband,支持RDMA的新一代网络协议。 由于这是一种新的网络技术,因此需要支持该技术的NIC和交换机
  • RoCE,一个允许在以太网上执行RDMA的网络协议。 其较低的网络标头是以太网标头,其较高的网络标头(包括数据)是InfiniBand标头。 这支持在标准以太网基础设施(交换机)上使用RDMA。 只有网卡应该是特殊的,支持RoCE。
  • iWARP,一个允许在TCP上执行RDMA的网络协议。 IB和RoCE中存在的功能在iWARP中不受支持。 这支持在标准以太网基础设施(交换机)上使用RDMA。 只有网卡应该是特殊的,并且支持iWARP(如果使用CPU卸载),否则所有iWARP堆栈都可以在SW中实现,并且丧失了大部分RDMA性能优势。

这里写图片描述
图 1 RDMA网络栈

3. APIs

庆幸的是,所有上述RDMA的网络协议都可以使用相同的API(即verbs),使用标准库libverbs。
这里就不展开叙述了,感兴趣的同学可以看参考文献[4][5]。

4. 总结

从上面的叙述,RDMA那么好,但是为什么没有普及呢?个人认为,有两方面原因。首先,是因为价格太贵。其次,是其缺乏像TCP/IP协议的灵活性和更高层的抽象,可进一步参考SOSP’17的论文LITE Kernel RDMA Support for Datacenter Applications

参考文献

[1] http://www.rdmamojo.com/2014/03/31/remote-direct-memory-access-rdma/.
[2] http://docplayer.net/38877094-How-ethernet-rdma-protocols-iwarp-and-roce-support-nvme-over-fabrics.html.
[3] http://blog.163.com/guaiguai_family/blog/static/20078414520141023103953705/.
[4] https://thegeekinthecorner.wordpress.com/2010/09/28/rdma-read-and-write-with-ib-verbs/.
[5] http://www.cnblogs.com/D-Tec/p/3157582.html.

由于作者水平有限,欢迎指正。

猜你喜欢

转载自blog.csdn.net/u011459120/article/details/78469098
今日推荐