`
steeven
  • 浏览: 312208 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基于SoftRoCE 了解RDMA

    博客分类:
  • RDMA
阅读更多
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。
分享到:
评论
6 楼 steeven 2016-09-23  
steeven 写道
关于为什么要post-receive先于acceept和list, 可以这样理解: 一般编程是try{...} catch{...}, 因为IB是异步的,对方可能在catch之前就发出消息,如果没有缓存会导致逻辑错误,所以就变成了一个比较难看的样子:catch{try{....}....}

Send/Recv应该都是这样,待验证。

验证结果非常正确,以前经常流量一大起来就中断,现在连续发上一个小时都没问题

在SoftRoce下测试经过1G网卡大概200Mbps的吞吐量

用Roce网卡测试20Gbps
5 楼 steeven 2016-09-15  
关于为什么要post-receive先于acceept和list, 可以这样理解: 一般编程是try{...} catch{...}, 因为IB是异步的,对方可能在catch之前就发出消息,如果没有缓存会导致逻辑错误,所以就变成了一个比较难看的样子:catch{try{....}....}

Send/Recv应该都是这样,待验证。
4 楼 steeven 2016-09-13  
这个讲的很详细:
http://www.mellanox.com/related-docs/prod_software/RDMA_Aware_Programming_user_manual.pdf

注册内存由多种小块组合成,也可以把内存划分为多个window来访问,比较灵活。
还讲了多播方式。
3 楼 steeven 2016-09-13  
RoCE网卡
NVMe支持了ROCE变成了NVMf (fabric),这也是一种网卡
SWAP支持ROCE变成SWAPf
每家数据库都变成XXDBf
这要衍生出多少专用新硬件?
2 楼 steeven 2016-09-13  
steeven 写道
这里能看到PDF更多教程,包括上面三部曲作者的三篇大作,IB world里面最容易看懂的文章

http://www.hpcadvisorycouncil.com/network_training.php
1 楼 steeven 2016-09-12  
好文章要骑墙:

很通俗的一个教程:
https://zcopy.wordpress.com/2010/10/08/quick-concepts-part-1-%E2%80%93-introduction-to-rdma/

三部曲:
https://thegeekinthecorner.wordpress.com/2010/08/13/building-an-rdma-capable-application-with-ib-verbs-part-1-basics/

https://thegeekinthecorner.wordpress.com/2010/08/14/building-an-rdma-capable-application-with-ib-verbs-part-2-the-server/

https://thegeekinthecorner.wordpress.com/2010/08/14/building-an-rdma-capable-application-with-ib-verbs-part-3-the-client/

其中提到:Receives have to be posted before sends.
Hardware won’t buffer incoming messages — if a receive request has not been posted to the work queue, the incoming message is rejected and the peer will receive a receiver-not-ready (RNR) error. 就是说连接建立之前要提前接收,硬件不缓存。实测结果就是不这么做你的第一个send请求会超时0.6Sec

这里还有两篇关于Flow Control 和 Read/Write教程:
   https://thegeekinthecorner.wordpress.com/page/2/

相关推荐

    基于RDMA和NVM的大数据系统一致性协议研究.docx

    ### 基于RDMA和NVM的大数据系统一致性协议研究 #### 一、引言 随着互联网技术的快速发展及海量数据的涌现,构建高效、可靠的大数据处理系统成为研究的热点之一。分布式存储系统与计算系统作为核心基础组件,在确保...

    基于RDMA的分布式存储系统研究综述.pdf

    在实际部署和开发基于RDMA的分布式存储系统时,需要考虑的方面包括网络硬件的兼容性和配置、RDMA协议栈的选择和优化、存储介质类型的选择、存储系统的伸缩性和维护性等。这些都要求开发者对存储、网络和计算资源有...

    RDMA编程实例源码(rdma_cm API)

    rdma_cm(RDMA Connection Manager)API是基于IBV的一种接口,用于处理连接管理、事件处理和资源管理等任务。 **二、rdma_cm API简介** rdma_cm API是Intel提供的一套用于处理RDMA连接管理的接口,包括以下关键...

    Xilinx FPGA 多通道PCIe QDMA&RDMA IP,V4L2

    ### Xilinx FPGA 多通道PCIe QDMA&RDMA IP详解 #### 一、概述 Xilinx FPGA 多通道PCIe QDMA&RDMA IP 是一种高性能的数据移动解决方案,适用于需要高速数据传输的应用场景。该IP核心利用了PCI Express Integrated ...

    基于RDMA高速网络的高性能分布式系统.docx

    ### 基于RDMA高速网络的高性能分布式系统的关键知识点 #### 一、RDMA技术概览及其在高性能计算中的作用 **远程直接内存访问(Remote Direct Memory Access, RDMA)**是一种网络通信协议,其核心特点在于允许用户...

    一种基于RDMA多播机制的分布式持久性内存文件系统.docx

    该系统旨在解决基于RDMA的分布式系统在1对多文件数据传输中的效率问题,通过RDMA多播能力提高传输速度和降低延迟。 【描述解析】: MTFS设计的目标是克服现有RDMA系统未充分利用多播能力的问题,以优化多拷贝文件...

    一种基于RDMA多播机制的分布式持久性内存文件系统.pdf

    基于RDMA多播机制的分布式持久性内存文件系统是一种新型的分布式系统设计,其主要利用了持久内存和远程直接内存访问(RDMA)技术。在传统分布式系统中,数据在多个节点间传输时会遇到高延迟问题,尤其是在一对多...

    基于RDMA的内存数据库系统

    ### 基于RDMA的内存数据库系统:深入解析与技术要点 #### 一、引言与背景 在现代互联网服务、股票交易以及电子商务等领域,快速的内存交易处理能力是支持大规模数据处理的关键所在。传统的分布式事务处理由于涉及...

    c语言利用RDMA 实现客户端和服务器端发送接收消息

    首先,我们需要了解RDMA的基本原理。RDMA通过InfiniBand或RoCE(RDMA over Converged Ethernet)等高速网络协议工作,允许数据在两个系统之间流动,而无需经过源或目标系统的中央处理器。这使得RDMA特别适合于大数据...

    rdma_sample-20180606.zip

    描述中提到的"dev_list"可能是一个用于枚举和管理RDMA设备的示例,它帮助开发者了解如何在系统中查找和识别RDMA设备。"hello_world"通常是最基础的示例,用来展示如何初始化RDMA环境并进行基本操作,是学习RDMA编程...

    RDMA原理分析技术实现解析

    iWARP是一种基于TCP的RDMA协议,它可以在标准以太网中使用,适合普遍的网络环境。 RDMA技术的优势在于它绕过了传统网络数据传输的许多软件层面处理过程,减少了CPU的负担,降低了延迟,提高了吞吐量。这使得RDMA...

    RDMA原理分析、对比和技术实现解析.zip

    1. InfiniBand RDMA:基于InfiniBand协议,提供最高性能和最低延迟,适用于高性能计算和数据中心应用。 2. RoCE:在以太网上实现RDMA,兼容现有网络基础设施,但可能受到网络拥堵和延迟的影响。 3. iWARP:基于TCP/...

    RDMA编程手册 V1.4中文前2章

    通过学习RDMA编程手册V1.4的前两章,我们可以系统地了解RDMA的核心概念、操作原理和编程接口,为高性能网络编程提供有力支持。掌握这些知识点,有助于开发者在高性能计算(HPC)、数据中心和存储网络等领域部署和...

    rdma报文抓包RoCE、RRoCE

    **RDMA技术详解与RoCE、RRoCE报文抓包指南** 远程直接内存访问(Remote Direct Memory Access,RDMA)是一种高效的...同时,掌握报文抓包技巧可以帮助你更好地监控和调试基于RDMA的应用程序,确保其高效稳定地运行。

    全网最全面的RDMA拥塞控制教程

    RDMA在以太网上通常采用RoCEv2(RDMA over Converged Ethernet version 2)协议,该协议基于无连接的UDP,与面向连接的TCP相比, UDP更快且CPU利用率更低。然而,UDP缺乏TCP的可靠性机制,如滑动窗口和确认应答,...

    c语言利用RDMA技术实现客户端和服务器端互相读取对方内存

    在IT领域,远程直接内存访问(Remote Direct Memory Access, RDMA)是一种高效的数据传输技术,它允许网络...通过这个项目,你可以学习到如何使用RDMA API进行内存操作,以及如何构建基于RDMA的客户端-服务器通信模型。

    intel E810 RDMA驱动安装

    "intel E810 RDMA驱动安装" 本文档详细记录了intel E810 RDMA驱动的安装过程,包括安装前的准备工作、安装RDMA驱动、安装LAN驱动、安装irdma驱动、安装rdma-core库、设置网卡驱动加载模式等步骤。 安装前的准备...

    介绍RDMA的文章

    - Scalable and Distributed Key-Value Store-based Data Management Using RDMA-Memcached 涉及到基于RDMA技术的可扩展和分布式键值存储数据管理,这表明RDMA技术可以被用来提升键值存储系统的性能。 - Beyond ...

    基于RDMA高速网络的高性能分布式系统1

    本文主要探讨了基于RDMA高速网络的高性能分布式系统的优化方法、应用案例以及未来研究方向。 一、RDMA技术原理与优势 RDMA技术的核心是允许数据在不同计算节点间直接在内存级别传输,而无需经过操作系统内核的干预...

    RDMA iSCSI

    SCSI和iSCSI:SCSI(Small Computer System Interface)是一种行业标准的存储接口,iSCSI则是基于TCP/IP的SCSI协议。iSCSI可以在IP网络上传输块级数据,提供高效、低成本的存储解决方案。 性能评估:RDMA iSCSI技术...

Global site tag (gtag.js) - Google Analytics