RDMA是基于IB技术的内存直接传送,无需内核参与,硬件网卡搞定。IB需要HPC领域的专用硬件,ROCE则是RDMA协议在普通以太网卡的实现,RoCEv1是在MAC上的二层封装,局域网内可以,要通过路由器则需要RoCEv2, 基于UDP的版本。

那么RDMA为什么快呢?普通网卡要接收完整报文,支持RoCE网卡直接读写内存,不用去内核绕圈子。就像我们有1G内存要复制到对方,这是个大快递,一般我们用socket编程要通过kernel这个邮局,有很多限制,比如它有报文大小限制,你要自己拆分多次发送,邮局是国企,内部流程也比较复杂,发个快递又费劲又慢,而且他们还消耗很多资源. RoCE就是民营快递,不用等你去邮局,告诉他你的内存在哪,要送到对方哪个地址,再大的内存他们都老鼠搬家一样在后台默默搞定,你的CPU就可以干点别的。同样,读远程内存也是。还可以选择要不要回执签收。

和DPDK不大一样的是DPDK只是跳过了邮局,自己封装报文给网卡,而RoCE则打包的事情都不需要管,比快递公司还勤快。所以RDMA可以看做网卡上封装的消息机制,层次高一些。说了这么多好处,大家是不是迫不及待要体验一下呢?支持RoCE的网卡在淘宝上也要几百块还是拆机的,貌似还是10G的,还好有SoftRoCE,基于普通网卡用软件实现了硬件要做的事情,在虚拟机上就能体验一下到底有多神奇,重在体验,实测效率不高。。。。其实这技术出来好多年了,只是一直。。。

SoftRoCE安装步骤参见 https://github.com/SoftRoCE/rxe-dev/wiki/rxe-dev:-Home 其他readme什么的都不够新。

rxe-dev其实就是完整的内核,在里面增加了rxe驱动和一个头文件,master下面的代码不要用,不够新。用v18分支,编译出来的内核是4.7版本。注意这个克隆+编译过程都很慢。。。 
在centos7下面需要安装bc, ncurses-devel, openssl-devel. 编译安装完后grub下面会多出4.7的内核启动菜单,进入后用rxe-cfg start, 然后rxe-cfg add <eth>, 可以运行的测试命令主要在ib-utils和rdma-utils里面, rping, rdma_server/client, qperf, ibv_rc_pingpong都可以玩玩看。

RDMA主要有recv/send, 这个机制是俩边要握手的,这边send,那边要有人recv。IB的verb,也就是这些send/recv是顺序执行的,如果那边没人收,你后面就废了。。 同理,你要收的时候,对方要有人发,否则你就挂在那傻等。。 recv这个命令必须等,send命令可选不用等,也就是un-signaled,类似寄信没回执,但是有个特例,就是你send一堆不用等的消息,以为扔bomb一样没事了,网卡没发,为什么呢?因为需要有个signaled来触发批量发送(看到有人提到这个问题, 没验证),这个设计比较傻,虽然提高了效率。。。 根据我编程测试un-signaled很容易,init_attr.sq_sig_all = 0,send_attr里面不要带IBV_SEND_SIGNALED。这个signaled就一直失败...

再说说read/write, 这两个是不需要对方参与的直接存取远端内存。首先这两个send flags里面必须IBV_SEND_SIGNALED,不带server那边就不响应。测试1M内存大概0.5S读写个来回。 建议大家对每个rdma_xxx命令都打印出跟上个命令之间的耗时,这样很容易知道哪边没响应,或者响应慢。同时再抓包看看每个方向的udp大概对不对。read/write貌似比较傻,不能对远端同一地址r/w, 只能是两个不同地址。而且不能对地址加上偏移部分存取。。。不知道我的测试是不是哪里不对。。。 r/w还必须知道远程内存的address和key, 用前面的send/recv要回来,然后就可以r/w.

这里有个小小疑问send/recv机制貌似是主从方式的,比如只有客户端向服务端发送请求,服务端一直在recv, 客户端有请求就send. 如果双方是对等的,是不是只能再开一个通道来传递消息呢?这个rdma_get_recv_comp()可是阻塞方式的,那不是要两个线程?

rdma_accept之前必须有个rdma_recv, 这个逻辑不科学,一般建立连接再去收发。。没有的话服务器也能工作,只不过第一个请求会被delay 0.5Sec.

基本代码参照rdma_server.c 和rdma_client.c。 
推荐两个文档,不能google的Yahoo也能找到: 
   RDMA Read and Write with IB Verbs 
   Introduction to RDMA Programming 
   
理论上RDMA封装层次高一些,而且硬件加送,节省CPU, 延时小。但是编程模型上跟以前不同,还要跟各种诡异的现象做斗争。。 从性能看,如果有网卡成本不高,几乎以前所有的socket通信都可以porting到这种高效率的传输方式上。

RDMA还支持组播,不稳定传输方式(音频,视频)。。。

从管理上看,ROCE用在VM上要有对应的监管方式,调试上也会比较挑战,比如怎么去抓包。

Anyway如果你的系统需要提高网络传输效率,解放CPU, 应该看看ROCE。

基于SoftRoCE 了解RDMA的更多相关文章

  1. 两种以太网 RDMA 协议: iWARP 和 RoCE

    本文是讲演 How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics[1]的摘要. 如果 NVMe 存储系统与主机是分离 ...

  2. DPDK(mtcp)vs RDMA/ROCE

    0. 缠论: http://52investing.com/ 1. 简书.DPDK: http://www.jianshu.com/p/dcb6ccc83ea52. mTCP 和 DPDK 构造百万千 ...

  3. CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍 转载

    CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍 2016年09月01日 13:56:30 疯子19911109 阅读数:4823 标签:  ...

  4. RDMA

    什么是RDMA? 来源 https://blog.csdn.net/u011459120/article/details/78469098 1. 概述 RDMA是Remote Direct Memor ...

  5. RDMA 相关 简要摘录

    RDMA (Remote Direct Memory Access) 全称为 远程直接内存访问 其出现的目的:为了解决网络传输中服务端数据处理的延迟而产生的.其将数据直接从一台计算机的内存传输到另一台 ...

  6. [转帖]InfiniBand, RDMA, iWARP, RoCE , CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念

    InfiniBand, RDMA, iWARP, RoCE , CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念 2017-12-15 15:37:00 jhzh951753 ...

  7. [转帖]两种以太网 RDMA 协议: iWARP 和 RoCE

    两种以太网 RDMA 协议: iWARP 和 RoCE https://weibo.com/p/1001603936363903889917?mod=zwenzhang 写的挺好的呢. 本文是讲演 H ...

  8. [转帖]深入浅出全面解析RDMA

    深入浅出全面解析RDMA 置顶 2018年06月04日 11:36:54 MasterT-J 阅读数 17193更多 所属专栏: RDMA   RDMA(RemoteDirect Memory Acc ...

  9. Tensorflow源码解析1 -- 内核架构和源码结构

    1 主流深度学习框架对比 当今的软件开发基本都是分层化和模块化的,应用层开发会基于框架层.比如开发Linux Driver会基于Linux kernel,开发Android app会基于Android ...

随机推荐

  1. vue登录注册及token验证

    // router.jsimport Vue from 'vue'import VueRouter from 'vue-router' Vue.use(VueRouter) const routes ...

  2. AET PN结

    电场方向 电场方向和正电荷受力方向相同 飘移运动和扩散运动 多子和电场方向互相抵制,而多子是扩散运动,而对少子则是促进作用,当扩散和漂移达到动态平衡时,我们称PN结形成 PN结特性 单项导电性

  3. 《python编程快速上手》

    第一部分 编程基础 @表达式 ** % // @ >>> int(3.4) 3 >>>round(3.555,2)3.56 @判断条件时:0和0.0和‘’都是Fal ...

  4. JDBC数据库连接参数备忘

    database driver url remark MySql com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/xxx mysql-connect ...

  5. P4136 谁能赢呢?

    题目描述 小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的格子之前不能被访问 ...

  6. vs2015 工具栏添加控件

    就是“添加”——“组件(N)”,然后把需要的代码写进去,但是工具栏里面却显示不出来. 结果是得重启系统才行,重启之后的确显示在工具栏显示出来了,但是拖到设计界面的时候还会出现“未能加载工具箱项xxx, ...

  7. nginx 的安装、启动、停止与重启

    一.nginx 基本介绍 1.Nginx 是单进程单线程模型,也就是启动的工作进程只有一个线程响应客户端请求,而 apache 可以在一个进程内启动多个线程响应客户端请求.所以 nginx 的内存占用 ...

  8. 基于Ubuntu的ESP32平台搭建

    提要:针对于Ubuntu下的ESP32搭建,网上有很多博文,乐鑫官网也有指导手册,对于到家都知道的部分我就一带而过,我主要描述搭建过程中遇到的问题和细节. 1.创建一个ESP的目录 I)在家目录下创建 ...

  9. 导弹拦截问题(DP+贪心)

    1. 拦截导弹(Noip1999) 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度. ...

  10. cuts

    1.cuts .replacename.fasta..replacename.fasta..replacename.fasta.cut.list awk 'system("mv Dme49. ...