RDMA技术(解决主从数据库数据不一致问题)

优质博文:IT-BLOG-CN

一、简介

RDMA(remote direct memory access)远端直接内存访问,是一种高性能网络通信技术,具有高带宽、低延迟、无CPU消耗等优点。 主要解决网络传输中服务器端数据处理的延迟问题。

Remote:数据通过网络与远程机器间进行数据传输;
Direct:没有内核的参数,有关发送传输的所有内容都卸载到网卡上;
Memory:在用户空间虚拟内存与RNIC网卡直接进行数据传输不涉及到系统内核,没有额外的数据移动和复制;
Accesssend/recevie/read/write/atomic操作;

二、传统通信模式

使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字socket,来实现网络进程之间的通信。就目前而言,几乎所有的应用程序都是采用socket。无论编写客户端程序还是服务端程序,系统都要为每个TCP连接都要创建一个socket句柄。这样导致了每次传输通信,都要经过OS和协议栈的管理,因此不管是Socket同步通信还是异步通信,都会存在CPU占用过高的现象,并且需要额外的数据处理,已经无法满足更快,更高效和可扩展性的网络需求。

传统网络通信模式的流程:

【1】数据发送方需要讲数据从用户应用空间Buffer复制到内核空间的Socket Buffer中;
【2】然后Kernel空间中添加数据包头,进行数据封装。通过一系列多层网络协议的数据包处理工作;
【3】数据被PushNIC网卡中的Buffer进行网络传输;
【4】消息接受方接受从远程机器发送的数据包后,要将数据包从NIC buffer中复制数据到Socket Buffer
【5】然后经过一些列的多层网络协议进行数据包的解析工作;
【6】解析后的数据被复制到相应位置的用户应用空间Buffer
【7】这个时候再进行系统上下文切换,用户应用程序才被调用;

三、RDMA

RDMA就是为了解决网络传输中服务器端数据处理的延迟而产生的,无需使用CPU,就可以从一个主机或服务器的内存直接访问另一个主机或服务器内存。这样既提高了宽带又降低了延迟、抖动和CPU消耗。RDMA可以简单理解为利用相关的硬件和网络技术,服务器A的网卡可以直接读服务器B的内存。如下图应用程序不需要参与数据传输过程,只需要指定内存读写地址,开启传输并等待传输完成即可。

使用RDMA的优势如下:
【1】零拷贝Zero-copy 应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下。数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。
【2】内核旁路Kernel bypass 应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换。
【3】不需要CPU干预No CPU involvement 应用程序可以访问远程主机内存而不消耗远程主机中的任何CPU。远程主机内存能够被读取而不需要远程主机上的进程或CPU参与。远程主机的CPU的缓存cache不会被访问的内存内容所填充。
【4】消息基于事务Message based transactions 数据被处理为离散消息而不是流,消除了应用程序将流切割为不同消息/事务的需求。
【5】支持分散/聚合条目Scatter/gather entries support RDMA原生态支持分散/聚合。也就是说,读取多个内存缓冲区然后作为一个流发出去或者接收一个流然后写入到多个内存缓冲区里去。

四、RDMA网络

目前,大致有三类RDMA网络,分别是Infiniband/RoCE/iWARP。其中,Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输,而RoCEiWARP都是基于以太网的RDMA技术,支持相应的verbs接口。

InfiniBand: 采用Cut-Through转发模式,减少转发时延;基于Credit的流控机制,保证无丢包;硬件卸载;Buffer尽可能小,减少报文被缓冲的时延。

iWARP(RDMA over TCP/IP): 利用成熟的IP网络,继承RDMA的优点,TCP/IP硬件实现成本高,但如果采用传统IP网络的丢包策略对性能影响大。

RoCE: InfiniBand Trade Association(IBTA)标准中定义的网络协议,允许通过以太网络使用RDMA。可以看作是RDMA技术在数据中心、云、存储和虚拟环境中的应用。RoCE协议存在RoCEv1RoCEv2两个版本,这取决于所使用的网络适配器和网卡。RoCE v1是基于以太网链路层实现的RDMA协议(交换机需要支持PFC等流控技术,在物理层保证可靠传输),允许在同一个VLAN中的两台主机进行通信。RoCE v1协议在以太层的typeID0x8915RoCE v2克服了RoCE v1绑定到单个VLAN的限制。通过改变数据包封装,包括IPUDP标头,RoCE v2现在可以跨L2L3网络使用。

RDMA API(Verbs)主要有两种: 一个名为OpenFabric Alliance的组织提供了RDMA传输的一系列Verbs API,开发了OFED(Open Fabric Enterprise Distribution)协议栈,支持多种RDMA传输层协议。RDMA应用和RNIC(RDMA-aware Network Interface Controller)之间的传输接口层Software Transport Interface被称为VerbsRDMA API
【1】内存Verbs也叫One-SidedRDMA。包括RDMA Reads/RDMA Atomic这种模式下的RDMA访问完全不需要远端机的任何确认。
【2】消息Verbs也叫Two-SidedRDMA。包括RDMA Send/RDMA Receive这种模式下的RDMA访问需要远端机CPU的参与。

在实际中,SEND/RECEIVE多用于连接控制类报文,而数据报文多是通过READ/WRITE来完成的。

RDMA是基于消息的数据传输协议(而不是基于字节流的传输协议),所有数据包的组装都在RDMA硬件上完成的,也就是说OSI模型中的下面4层(传输层,网络层,数据链路层,物理层)都在RDMA硬件上完成。

五、RDMA 工作流程

Memory Registration(MR)内存注册:创建两个key (localremote)指向需要操作的内存区域,注册的keys是数据传输请求的一部分。同时,RDMA硬件对用来做数据传输的内存是有特殊要求的。
【1】在数据传输过程中,应用程序不能修改数据所在的内存。
【2】操作系统不能对数据所在的内存进行page out操作,物理地址和虚拟地址的映射必须是固定不变的。

Queues队列:RDMA一共支持三种队列,发送队列SQ和接收队列RQ,完成队列CQ。其中,SQRQ通常成对创建,被称为Queue Pairs(QP)RDMA是基于消息的传输协议,数据传输都是异步操作。RDMA操作其实很简单,可以理解为:
【1】Host提交工作请求WR到工作队列WQ: 工作队列包括发送队列SQ和接收队列CQ。工作队列的每一个元素叫做WQE, 也就是WR
【2】Host从完成队列CQ中获取工作完成WC: 完成队列里的每一个叫做CQE,也就是WC
【3】具有RDMA引擎的硬件hardware就是一个队列元素处理器。RDMA硬件不断地从工作队列WQ中去取工作请求WR来执行,执行完了就给完成队列CQ中放置工作完成WC

从生产者-消费者的角度理解:
【1】Host生产WR, 把WR放到WQ中;
【2】RDMA硬件消费WR
【3】RDMA硬件生产WC, 把WC放到CQ中去;
【4】Host消费WC

Send/Recv操作: SEND/RECEIVE是双边操作,即需要通信双方的参与,并且RECEIVE要先于SEND执行,这样对方才能发送数据,当然如果对方不需要发送数据,可以不执行RECEIVE操作,因此该过程和传统通信相似,区别在于RDMA的零拷贝网络技术和内核旁路,延迟低,多用于传输短的控制消息。

read/write操作:
【1】RDMA读操作本质上就是Pull操作, 把远程系统内存里的数据拉回到本地系统的内存里。接收方必须提供虚拟地址和目标存储内存的remote_key。接收方需要初始和接受提醒通知,发送方是完全被动的,并且不会接受任何通知。
【2】RDMA写操作本质上就是Push操作,把本地系统内存里的数据推送到远程系统的内存里。发送方必须提供虚拟地址和目标读取内存的remote_key。发送方需要初始和接受提醒通知,接受方是完全被动的,并且不会接受任何通知。

RDMA工作流程: 要使用RDMA首先要建立从RDMA到应用程序内存的数据路径 ,可以通过RDMA专有的verbs interface接口来建立这些数据路径,一旦数据路径建立后,就可以直接访问用户空间buffer
【1】初始化context注册内存域;
【2】建立RDMA连接;
【3】通过SEND/RECEIVE操作,C/S交换包含RDMA memory region keyMSG_MR消息(一般是客户端先发送);
【4】通过WRITE/READ操作,进行数据传输(单边操作);
【5】发送MSG_DONE消息,关闭连接;

消息服务建立在通信双方本端和远端应用之间创建的Channel-IO连接之上。当应用需要通信时,就会创建一条Channel连接,每条Channel的首尾端点是两对Queue Pairs(QP)
每对QPSend Queue(SQ)Receive Queue(RQ)构成,这些队列中管理着各种类型的消息。QP会被映射到应用的虚拟地址空间,使得应用直接通过它访问RNIC网卡。
除了QP描述的两种基本队列之外,RDMA还提供一种队列Complete Queue(CQ)CQ用来知会用户WQ上的消息已经被处理完。
RDMA提供了一套软件传输接口,方便用户创建传输请求Work Request(WR),WR中描述了应用希望传输到Channel对端的消息内容,WR通知QP中的某个队列Work Queue(WQ)
WQ中,用户的WR被转化为Work Queue Element(WQE)的格式,等待RNIC的异步调度解析,并从WQE指向的Buffer中拿到真正的消息发送到Channel对端。

RDMA双边操作(send/receive): 对于双边操作为例,A向B发送数据的流程如下:
【1】首先,A和B都要创建并初始化好各自的QPCQ
【2】A和B分别向自己的WQ中注册WQE,对于A,WQ=SQWQE描述指向一个等到被发送的数据;对于B,WQ=RQWQE描述指向一块用于存储数据的buffer
【3】A的RNIC异步调度轮到A的WQE,解析到这是一个SEND消息,从buffer中直接向B发出数据。数据流到达B的RNIC后,B的WQE被消耗,并把数据直接存储到WQE指向的存储位置;
【4】AB通信完成后,A的CQ中会产生一个完成消息CQE表示发送完成。与此同时,B的CQ中也会产生一个完成消息表示接收完成。每个WQWQE的处理完成都会产生一个CQE
【5】双边操作与传统网络的底层buffer pool类似,收发双方的参与过程并无差别,区别在零拷贝、kernel bypass,实际上传统网络中一些高级的网络SOC已经实现类似功能。对于RDMA,这是一种复杂的消息传输模式,多用于传输短的控制消息;

RDAM单边操作(read): READWRITE是单边操作,只需要本端明确信息的源和目的地址,远端应用不必感知此次通信。对于操作发起端,数据的读或写都通过在RNIC与应用Buffer之间完成,再由远端RNIC封装成消息返回到本端。对于单边操作,以B对A的read操作为例,数据的流程如下:
【1】首先A、B建立连接,QP已经创建并且初始化。
【2】数据被存档在A的buffer地址VA,注意VA应该提前注册到A的RNIC,并拿到返回的local key,相当于RDMA操作这块buffer的权限。
【3】A把数据地址VAkey封装到专用的报文传送到B,这相当于A把数据buffer的操作权交给了B。同时A在它的WQ中注册进一个WR,以用于接收数据传输的B返回的状态。
【4】B在收到A的送过来的数据VAR_key后,RNIC会把它们连同存储地址VB到封装RDMA READ,这个过程A、B两端不需要任何软件参与,就可以将A的数据存储到B的VB虚拟地址。
【5】B在存储完成后,会向A返回整个数据传输的状态信息。

单边操作传输方式是RDMA与传统网络传输的最大不同,只需提供直接访问远程的虚拟地址,无须远程应用的参与其中,这种方式适用于批量数据传输。

六、如何实现RoCE

通常,为了实现RoCE,可以安装支持RoCE的网卡或卡驱动程序。所有以太网NIC都需要RoCE网络适配器卡。RoCE驱动程序在Red HatLinuxMicrosoft Windows和其他常见操作系统中使用。RoCE有两种可用方式:对于网络交换机,可以选择使用支持PFC(优先流控制)操作系统的交换机;对于机架服务器或主机,需要使用网卡。

RoCE 的好处:
【1】CPU占用率: 访问远程交换机或服务器的内存,无需消耗远程服务器上的CPU周期,从而可以充分利用可用带宽和更高的可伸缩性。
【2】零复制: 向远程缓冲区发送数据和接收数据。
【3】高效: 由于RoCE改善了延迟和吞吐量,网络性能得到了很大提高。
【4】节省成本: 借助RoCE,无需购买新设备或更换以太网基础设施即可处理大量数据,从而大大节省了公司的资本支出。

七、RoCE与iWARP/InfiniBand的区别

RDMA最早在Infiniband传输网络上实现,技术先进,但是价格高昂,后来业界厂家把RDMA移植到传统Ethernet以太网上,降低了RDMA的使用成本,推动了RDMA技术普及。在Ethernet以太网上,根据协议栈融合度的差异,分为iWARPRoCE两种技术,而RoCE又包括RoCEv1RoCEv2两个版本(RoCEv2的最大改进是支持IP路由),各RDMA网络协议栈的对比如下图所示。

Infiniband支持RDMA的新一代网络协议。由于这是一种新的网络技术,因此需要支持该技术的NIC和交换机。

RoCE一个允许在以太网上执行RDMA的网络协议。其较低的网络标头是以太网标头,其较高的网络标头(包括数据)是InfiniBand标头。这支持在标准以太网基础设施(交换机)上使用RDMA。只有网卡应该是特殊的,支持RoCE

iWARP一个允许在TCP上执行RDMA的网络协议。IBRoCE中存在的功能在iWARP中不受支持。这支持在标准以太网基础设施(交换机)上使用RDMA。只有网卡应该是特殊的,并且支持iWARP(如果使用CPU卸载),否则所有iWARP堆栈都可以在软件中实现,并且丧失了大部分RDMA性能优势。

InfiniBandiWARPRoCE
标准组织IBTAIETFIBTA
性能最好稍差(受TCP影响)与IB相当
成本
网卡厂商Mellanox 40GbpsChelsio 10GbpsMellanox-40Gbps Emulex-10/40Gbps

RoCEiWARP,一个是基于无连接协议UDP,一个是基于面向连接的协议(如TCP)。RoCEv1只能局限在一个二层广播域内,而RoCEv2iWARP都能够支持三层路由。相比RoCE,在大型组网的情况下,iWARP的大量TCP连接会占用大量的额内存资源,对系统规格要求更高。另外,RoCE支持组播,而iWARP还没有相关的标准定义。

RoCE适配器只能与其他RoCE适配器通信,如果混合适配器类型配置的话,例如RoCE适配器与iWARP适配器组合,都可能会恢复为传统的TCP/IP连接。

在数据中心中运行RDMA,可以减轻数据移动的负担,并为应用程序提供更高的CPU资源可用性。RoCE协议可以从RDMA的功能中受益,而无需更改其网络基础架构。通过减少以太网延迟和CPU开销,RoCE可以提高搜索、存储、数据库和高事务处理率应用程序的性能。通过提高CPU效率和应用程序性能,RoCE可以减少所需的服务器数量,从而节省能源,并减少基于以太网的数据中心的占用空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145753.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Arduino PLC IDE

Arduino PLC IDE MCU单片机进入全新的PLC领域概述需要的硬件和软件下一步操作1. Arduino PLC IDE Tool Setup2. Arduino PLC IDE Setup3. Project Setup4. Download the Runtime5. Connect to the Device6. License Activation with Product Key (Portenta Machine Control) 结…

MySQL 索引介绍和最佳实践

目录 一、前言二、索引类型1.1 主键索引(PRIMARY KEY)1.2 唯一索引(UNIQUE)1.3 普通索引(NORMAL)1.3.1 单列普通索引1.3.2 单列前缀普通索引1.3.3 多列普通索引1.3.4 多列前缀普通索引 1.4 空间索引&#x…

力扣 -- 10. 正则表达式匹配

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:bool isMatch(string s, string p) {int ms.size();int np.size();//处理后续映射关系s s;//处理后续映射关系p p;vector<vector<bool>> dp(m1,vector<bool>(n1));//初始化dp[0][0]true…

WPF 03

staticResource和dynamicResource的区别 首先看一个案例 MainWindow.xaml <Window x:Class"WpfDay03.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&quo…

led灯什么牌子的质量好?Led护眼台灯排行榜

现在我们很多家长对自己孩子的视力十分关心&#xff0c;生怕自己的孩子是近视、远视、弱视等等。对于父母而言&#xff0c;在孩子读书压力大课业重的关键时期&#xff0c;为孩子选择合适的桌椅&#xff0c;保护灯具从而保护孩子的眼睛是非常重要的事情!那么买给孩子读书做功课的…

驱动插入中断门示例代码

驱动插入中断描述符示例代码 最近做实验&#xff0c;每次在应用层代码写测试代码的时候都要手动挂一个中断描述符&#xff0c;很不方便所以就想着写个驱动挂一个中断门比较省事 驱动测试效果如下&#xff1a; 下面的代码是个架子&#xff0c;用的时候找个驱动历程传递你要插…

聊聊并发编程——并发容器和阻塞队列

目录 一.ConcurrentHashMap 1.为什么要使用ConcurrentHashMap&#xff1f; 2.ConcurrentHashMap的类图 3.ConcurrentHashMap的结构图 二.阻塞队列 Java中的7个阻塞队列 ArrayBlockingQueue&#xff1a;一个由数组结构组成的有界阻塞队列。 LinkedBlockingQueue&#xf…

如何快速搭建app自动化环境编写用例?

使用Airtest 作为测试开发工程师&#xff0c;快速搭建app自动化环境并编写用例可以使用Airtest解决方案来实现。Airtest是一款基于Python的全平台UI自动化测试框架&#xff0c;支持多种移动设备和模拟器&#xff0c;同时集成了丰富的图像识别和手势操作功能。 以下是使用Airt…

【0223】源码剖析smgr底层设计机制(3)

1. smgr设计机制 PG内核中smgr完整磁盘存储介质的管理是通过下面三部分实现的。 1.1 函数指针结构体 f_smgr 函数指针结构体 f_smgr。 通过该函数指针类型,可完成类似于UNIX系统中的VFD功能,上层只需要调用open()、read()、write()等系统函数,用户不必去关系底层的文件系统…

【我的创作纪念日】使用pix2pixgan实现barts2020数据集的处理(完整版本)

使用pix2pixgan &#xff08;pytorch)实现T1 -> T2的基本代码 使用 https://github.com/eriklindernoren/PyTorch-GAN/ 这里面的pix2pixgan代码进行实现。 进去之后我们需要重新处理数据集&#xff0c;并且源代码里面先训练的生成器&#xff0c;后训练鉴别器。 一般情况下…

数据结构之单链表

首先我们要分析为什么要链表 那么我们就要先分析顺序表的优缺点 首先我们要确定链表的结构是一个数据存放的空间&#xff0c;指向下个结点的指针域 然后我们实现打印和创建新的节点 然后我们实现头插和尾插 这个地方有一个易错点 首先对尾插来说&#xff0c;如果我们插入的是…

国庆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书行将售罄

国庆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书行将售罄 国庆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书行将售罄

Vue之transition组件

Vue提供了transition组件&#xff0c;使用户可以更便捷地添加过渡动画效果。 transition组件 transition组件也是一个抽象组件&#xff0c;并不会渲染出真实dom。Vue会在其第一个真实子元素上添加过渡效果。 props render 这里将render分为两部分&#xff0c;第一部分界定真…

【模板语法+数据绑定+el与data的两种写法+MVVM模型】

模板语法数据绑定el与data的两种写法MVVM模型 1 模板语法1.1 插值语法1.2 指令语法 2 数据绑定2.1 单向数据绑定2.2 双向数据绑定 3 el与data的两种写法4 MVVM模型 1 模板语法 1.1 插值语法 双大括号表达式功能&#xff1a;用于解析标签体内容语法&#xff1a;{{xxx}}&#x…

Firecamp2.7.1exe安装与工具调试向后端发送SocketIO请求

背景&#xff1a; 笔者在python使用socket-io包时需要一个测试工具&#xff0c;选择了firecamp这个测试工具来发送请求。 参考视频与exe资源包&#xff1a; Firecamp2.7.1exe安装包以及基本使用说明文档&#xff08;以SocketIO为例&#xff09;.zip资源-CSDN文库 15_send方法…

论文笔记(整理):轨迹相似度顶会论文中使用的数据集

0 汇总 数据类型数据名称数据处理出租车数据波尔图 原始数据&#xff1a;2013年7月到2014年6月&#xff0c;170万条数据 ICDE 2023 Contrastive Trajectory Similarity Learning with Dual-Feature Attention 过滤位于城市&#xff08;或国家&#xff09;区域之外的轨迹 过…

html、css学习记录【uniapp前奏】

Html 声明&#xff1a;该学习笔记源于菜鸟自学网站&#xff0c;特此记录笔记。很多示例源于此官网&#xff0c;若有侵权请联系删除。 文章目录 Html声明&#xff1a; CSS 全称 Cascading Style Sheets&#xff0c;层叠样式表。是一种用来为结构化文档&#xff08;如 HTML 文档…

NLP 04(GRU)

一、GRU GRU (Gated Recurrent Unit)也称门控循环单元结构,它也是传统RNN的变体,同LSTM一样能够有效捕捉长序列之间的语义关联&#xff0c; 缓解梯度消失或爆炸现象&#xff0c;同时它的结构和计算要比LSTM更简单,它的核心结构可以分为两个部分去解析: 更新门、重置门 GRU的内…

宝塔 php修改了php.ini配置不生效

最近在使用hypref&#xff0c;php的版本是7.4 服务器linux&#xff0c;用宝塔安装完php,并装完swoole插件后 安装了swoole后&#xff0c;需要在php.ini中修改一下配置文件 添加 swoole.use_shortnameOff 但是添加了&#xff0c;重启php,依然不生效 解决方法是&#xff1a; 同时…

AI项目十三:PaddleOCR训练自定义数据集

若该文为原创文章&#xff0c;转载请注明原文出处。 续上一篇&#xff0c;PaddleOCR环境搭建好了&#xff0c;并测试通过&#xff0c;接下来训练自己的检测模型和识别模型。 paddleocr检测模型训练 1、准备数据集 在PaddleOCR目录下新建文件夹&#xff1a;train_data, 这个…