转自: https://my.oschina.net/SysuHuyh5LoveHqq/blog/842767
本博客仅作为分享本人学习rdma技术过程中一些经验和资料分享,若有错误之处,还请指教。如有侵犯版权问题,请立即通知本人,本人立即删除.特此声明!
RDMA(Remote Direct Memory Access)技术全称远程直接数据存取。
RDMA (Remote DMA) is the ability of accessing (i.e. reading from or writing to) memory on a remote machine withoutinterrupting the processing of the CPU(s) on that system.
RDMA的好处与优势:
1、零拷贝(zero-copy) RDMA transfers data directly from user virtual memory on one node to user virtual memory on another node, tcp copies into/out of system buffers on both nodes.
2、CPU占有率( Low CPU utilization) 鉴于zero-copy的存在,使得机器的cpu占有率下降,让cpu更多的执行其他逻辑计算指令。
3、异步事件(Asynchronous operation) rdma在io操作过程中并不阻塞相关线程,tcp/ip确是阻塞方式(此处所说的阻塞,是指tcp将数据发送到内核缓冲区是阻塞的,不同于tcp的noblocking的概念)
RDMA是asynchronous的,即no blocking during a transfer, which – starts when metadata added to “work queue” – finishes when status available in “completion queue”
tcp/ip中是synchronous的,即send(), recv() block until data copied – O_NONBLOCK, MSG_DONTWAIT are not asynchronous,they are “try” and get error
4、Message boundaties preserved. rdma是基于消息模式的,本身保留了消息边界,不同于tcp/ip流传输方式,需要做拆包解包操作。
rdma对于高性能的网络通讯来说,优势很多,但学习成本以及相关推广成本也是蛮高的,后面分享下本人摸索过程中的一些资料。
网络环境分为一下几种: InfiniBand环境,iWarp(internet Wide Area RMDA Protocol)环境, RoCE(RDMA over Converged Ethernet)环境,SoftRoCE环境。
在没有硬件设备的支持下,我们可以搭一套软环境来熟悉相关rdma编程的知识点,至于如何搭建一套SoftRoCE环境,请参见本人和小伙伴通过摸索亲测有效的博客
https://my.oschina.net/SysuHuyh5LoveHqq/blog/798275
MLNX_OFED 4.0 , 一般来说,就本人个人经验来看,rdma编程最好还是使用硬件厂商的相关库,一般IB网络我们使用Mellanox的硬件(网卡,交换机等等),因此编程所用驱动、代码库还是推荐迈络思OFED,目前为止4.0是最新版本,详情参考:
http://www.mellanox.com/page/products_dyn?product_family=26&mtag=linux_sw_drivers ,
除了安装版本,最好下载相关源码,里面有相关参考demo供大家学习理解rdma编程。
主要熟悉libibverbs和librdmacm库,其中librdmacm在libibverbs上封装了一层,个人推荐直接使用libibverbs作为初期学习之用,这样更好了解整个事件的来龙去脉。
RDMA Aware Networks Programming User Manual 1.7, 目前最新版就是1.7版本,此手册可研读多次,对基本概念性了解很有帮助
http://www.mellanox.com/related-docs/prod_software/RDMA_Aware_Programming_user_manual.pdf
www.mellanox.com/
http://www.rdmamojo.com/
samplecode: https://github.com/tarickb/the-geek-in-the-corner
代码解析https://thegeekinthecorner.wordpress.com/page/2/
迈络思网关给出了rdma网络编程培训的相关课程,可以作为相关参考http://academy.mellanox.com/en/
mellanox官网给出的参考资料
详情请见: http://www.mellanox.com/page/configuration-tools
作者:胡宇辉,某券商软件开发工程师,主要从事后台高性能服务端编程,分布式系统设计。使用语言C/C++, Erlang,Golang,了解ELK, open-falcon, RDMA等相关知识点。