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.rhkb.cn/news/144265.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人过程自动化(RPA)入门 3. 顺序、流程图和控制流程

到目前为止,我们已经了解了RPA是什么,并且我们已经看到了通过记录任务的活动并运行它来训练UiPath机器人是多么简单。使用记录器的UiPath可以很容易地自动化日常任务。在我们开始自动化复杂的任务之前,让我们学习如何控制从一个到另一个的活动…

传统遗产与技术相遇,古彝文的数字化与保护

古彝文是中国彝族的传统文字,具有悠久的历史和文化价值。然而,由于古彝文的形状复杂且没有标准化的字符集,对其进行文字识别一直是一项具有挑战性的任务。本文介绍了古彝文合合信息的文字识别技术,旨在提高古彝文的自动识别准确性…

分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测

分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测 目录 分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结…

Pikachu靶场——XXE 漏洞

文章目录 1. XXE1.1 查看系统文件内容1.2 查看PHP源代码1.3 查看开放端口1.4 探测内网主机 1. XXE 漏洞描述 XXE(XML External Entity)攻击是一种利用XML解析器漏洞的攻击。在这种攻击中,攻击者通过在XML文件中插入恶意实体来触发解析器加载…

直播软件开发技巧:7个实时视频传输和弹幕功能的关键步骤

近年来,随着直播行业的快速崛起,直播软件的开发变得越来越重要。直播软件的成功不仅依赖于稳定的实时视频传输,还需要强大的弹幕功能来提升用户体验。作为直播软件开发领域的专家,我将与您分享七个关键步骤,帮助您掌握…

用友移动管理系统任意文件上传漏洞

一、漏洞描述 用友移动管理系统 uploadApk.do 文件存在任意文件上传 二、fofa查询 body"../js/jslib/jquery.blockUI.js" 三、漏洞利用 poc POST /maportal/appmanager/uploadApk.dopk_obj HTTP/1.1 Host: ip:port Cache-Control: max-age0 Upgrade-Insecure-Req…

Android 使用kotlin+注解+反射+泛型实现MVP架构

一,MVP模式的定义 ①Model:用于存储数据。它负责处理领域逻辑以及与数据库或网络层的通信。 ②View:UI层,提供数据可视化界面,并跟踪用户的操作,以便通知presenter。 ③Presenter:从Model层获…

HTML - input type=file 允许用户选择多个文件

效果 示例 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><!-- When the multiple Boolean attribute is specified, the file input allows the user to select more than o…

No150.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

【项目】在线音乐播放器测试报告

目录 项目背景 项目功能 测试计划 功能测试 登录页面的测试 测试用例 测试结果 注册页面的测试 测试用例 测试结果 音乐列表页面的测试 测试用例 测试结果 出现的bug 搜索功能的bug 问题解决 删除功能的bug 问题解决 喜欢列表页面的测试 测试用例 测试结果…

电脑开机慢问题的简单处理

电脑用久了&#xff0c;开机时间要10-20分钟特别慢&#xff0c;一下介绍两种简单有效处理方式&#xff0c;这两种方式经测试不会影响原系统软件的使用&#xff1a; 方式一&#xff1a;禁用非必要启动项【效果不是很明显】 利用360里面的优化加速禁用启动项【禁用启动项还有其…

大数据分布式处理框架Hadoop

大数据是什么 大数据容量常以TB、PB、甚至EB为单位&#xff0c;远超传统数据库的承载能力&#xff0c;无论入库还是查询都出现性能瓶颈。 Hadoop是什么 Hadoop是开源的分布式计算技术框架&#xff0c;用于处理大规模数据和实现分布式存储。 Hadoop核心组件 HDFS&#xff08;…

【5G PHY】物理层逻辑和物理天线的映射

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

估计、偏差和方差

一、介绍 统计领域为我们提供了很多工具来实现机器学习目标&#xff0c;不仅可以解决训练集上的任务&#xff0c;还可以泛化。基本的概念&#xff0c;例如参数估计、偏差和方差&#xff0c;对于正式地刻画泛化、欠拟合和过拟合都非常有帮助。 二、参数估计 参数估计 是统计学…

公司新产品上线如何打出知名度?

任何一个新产品上线时都需要进行推广打出知名度&#xff0c;软文作为一种成本低效果留存时间长的营销方式能够让公司的新产品打出知名度&#xff0c;向潜在用户展示新产品的独特优势以及特性&#xff0c;下面就让媒介盒子告诉大家&#xff0c;新产品上线时&#xff0c;公司应该…

电脑技巧:笔记本电脑升级固态硬盘的注意事项,看完你就懂了

目录 1、接口类型 2、接口速率 3、固态硬盘的尺寸 4、发热情况 5、总结 如今的固态硬盘价格越来越便宜了&#xff0c;甚至某品牌4TB的PCIe4.0 M.2还爆出过不到900元的“报恩价”&#xff0c;让不少小伙伴都动了扩容甚至囤货的心思。但对于笔记本电脑用户来说&#xff0c;升…

小波变换学习笔记【1】

【声明】本博客为学习B站视频小波分解与重构所做笔记&#xff0c;供自己和大家查阅学习&#xff0c;想查看 up 原视频请移步 B 站&#xff0c;侵删。 1.1 小波变换的由来 傅里叶变换基本思想&#xff1a;将信号分解成一系列不同频率的连续正弦波的叠加。 其缺点是&#xff0c;…

华为鸿蒙4,3,2禁用Google谷歌服务框架,使用最新谷歌Google play服务

华为鸿蒙4,鸿蒙3,鸿蒙2有一些应用或者游戏尤其是游戏需要最新版的谷歌play服务支持才可以使用。但是华为的鸿蒙系统解决完”设备未经 play 保护机制认证”之后,最稳定的谷歌play服务是20这个版本&#xff0c;一旦升级到最新的Google谷歌play服务&#xff0c;目前是最新版本23这…

MySQL到TiDB:Hive Metastore横向扩展之路

作者&#xff1a;vivo 互联网大数据团队 - Wang Zhiwen 本文介绍了vivo在大数据元数据服务横向扩展道路上的探索历程&#xff0c;由实际面临的问题出发&#xff0c;对当前主流的横向扩展方案进行了调研及对比测试&#xff0c;通过多方面对比数据择优选择TiDB方案。其次分享了整…

c语言常用语法,长时间不用容易忘。

关键字 auto 声明自动变量const 定义常量&#xff0c;如果一个变量被 const 修饰&#xff0c;那么它的值就不能再被改变extern 声明变量或函数是在其它文件或本文件的其他位置定义register 声明寄存器变量signed 声明有符号类型变量或函数static 声明静态变量&#xff0c;修饰…