CN112822300A - 基于rdma的数据传输方法、装置及电子设备 - Google Patents

基于rdma的数据传输方法、装置及电子设备 Download PDF

Info

Publication number
CN112822300A
CN112822300A CN202110415703.0A CN202110415703A CN112822300A CN 112822300 A CN112822300 A CN 112822300A CN 202110415703 A CN202110415703 A CN 202110415703A CN 112822300 A CN112822300 A CN 112822300A
Authority
CN
China
Prior art keywords
request
sending
receiving
data
rdma
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110415703.0A
Other languages
English (en)
Other versions
CN112822300B (zh
Inventor
刘国辉
李铭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Easy Star Technology Development Co ltd
Original Assignee
Beijing Easy Star Technology Development Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Easy Star Technology Development Co ltd filed Critical Beijing Easy Star Technology Development Co ltd
Priority to CN202110415703.0A priority Critical patent/CN112822300B/zh
Publication of CN112822300A publication Critical patent/CN112822300A/zh
Application granted granted Critical
Publication of CN112822300B publication Critical patent/CN112822300B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/63Routing a service request depending on the request content or context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)
  • Multi Processors (AREA)

Abstract

本发明公开了一种基于RDMA的数据传输方法、装置及电子设备,其中方法包括:发送端从发送请求池中获取发送请求,将发送请求发送至接收端和等待响应队列,接收端的RDMA接收队列通过接收请求接收发送请求中的传输数据,并将传输数据复制到数据接收进程中,接收端基于唯一标识从接收端发送请求池中获取发送请求,并将发送请求初始化为响应请求,将唯一标识存入响应请求发送到发送端,发送端的RDMA接收队列接收唯一标识,根据唯一标识从等待响应队列中找到对应的发送请求,并将发送请求释放回到发送请求池中;本发明避免了数据传输过程中再进行额外的内存分配带来的开销,提高了效率,降低了延迟。

Description

基于RDMA的数据传输方法、装置及电子设备
技术领域
本发明涉及数据传输领域,具体涉及一种基于RDMA的数据传输方法、装置及电子设备。
背景技术
RDMA(Remote Direct Memory Access)技术全称远程直接内存访问,是为解决网络传输中服务器端数据处理的延迟而产生的,其与TCP/IP的模式本质上的不同在于RDMA在CPU上是零拷贝的,支持RDMA的网卡会通过DMA将需要传输的内存数据拷贝到网卡上发送出去,这个过程不需要CPU的参与,而TCP/IP模式下,需要CPU主动将数据拷贝到TCP的缓冲区中,然后TCP再将缓冲区中的数据发送给网卡,网卡才能将这些数据传输出去。
与TCP/IP模式不同的是,RDMA有一套自己的应用程序编程接口(API),这就导致传统的socket编程无法适用于RDMA编程,在数据传输过程中,需要调用系统API再进行额外的数据结构内存分配释放操作,延迟较高,效率较低,并且花费CPU初始化新分配的请求,整个流程消耗时间较长。
发明内容
本发明的主要目的在于提供一种基于RDMA 的数据传输方法及装置,以解决现有的数据传输过程中,需要调用系统API进行额外的数据结构内存分配释放操作导致的延迟较高、效率较低、整个流程消耗时间较长的问题。
为了实现上述目的,本发明的第一方面提供了一种基于RDMA的数据传输方法,包括:
发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含预先对应的传输数据以及发送请求的唯一标识;
接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的传输数据,并将所述传输数据复制到数据接收进程中,将所述接收请求释放回到接收请求池中;
接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
可选地,所述将所述发送请求发送至接收端和等待响应队列包括:
将所述发送请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述发送请求的RDMA工作请求对应的数据发送到接收端,其中,所述发送请求的RDMA工作请求对应的数据包括传输数据以及发送请求的唯一标识;
将所述发送请求发送至等待响应队列。
可选地,所述发送请求包含的传输数据是按照如下方法对应的:
发送端获取传输数据;
发送端将所述传输数据复制到所述发送请求的数据缓冲区。
可选地,所述接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的传输数据,并将所述传输数据复制到数据接收进程中,将所述接收请求释放回到接收请求池中,包括:
接收端的RDMA接收队列通过预先从接收端接收请求池中获取的接收请求,接收所述发送端发送请求中RDMA工作请求对应的数据;
接收完成后,将所述接收请求发送到已完成队列中;
接收端的数据接收进程将所述已完成队列的接收请求中的传输数据复制到数据接收进程的数据缓冲区;
复制完成后,将所述接收请求释放回到接收请求池中;
接收端的RDMA接收队列从所述接收请求池中获取接收请求,以接收所述发送端下一发送请求中RDMA工作请求对应的数据。
可选地,所述接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端,包括:
接收端获取发送端发送请求的唯一标识后,基于所述唯一标识从接收端的发送请求池中获取发送请求;
将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求的数据缓冲区;
将所述响应请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述响应请求的RDMA工作请求对应的数据发送到发送端,其中,所述响应请求的RDMA工作请求对应的数据包括发送端发送请求的唯一标识。
可选地,所述发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中,包括:
发送端的RDMA接收队列通过预先从发送端接收请求池中获取的接收请求,接收响应请求的RDMA工作请求对应的发送端发送请求的唯一标识;
根据所述发送端发送请求的唯一标识,从所述等待响应队列中找到所述唯一标识对应的发送请求;
将所述接收请求通过发送端接收请求池重新放入发送端RDMA接收队列中,以便发送端RDMA接收队列接收发送端下一发送请求的唯一标识;
将所述发送请求释放回到发送请求池中;
发送端通过发送端的数据发送进程从发送请求池中获取发送请求,其中,所述发送请求包含下一传输数据以及发送请求的唯一标识。
可选地,如果数据传输方式为异步传输,则在将所述发送请求发送至接收端和等待响应队列之后,所述方法还包括:
通过RDMA传输协议将所述发送请求的RDMA 工作请求发送到RDMA发送队列后,返回到发送端的数据发送进程,完成所述异步传输的发送过程;
如果数据传输方式为同步传输,则在将所述发送请求释放回到发送请求池中之后,所述方法还包括:
通过发送端的等待响应队列通知发送端的数据发送进程,完成所述同步传输的发送过程。
本发明的第二方面提供了一种基于RDMA的数据传输装置,包括:
第一发送单元,用于发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含预先对应的传输数据以及发送请求的唯一标识;
第一接收单元,用于接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的传输数据,并将所述传输数据复制到数据接收进程中,将所述接收请求释放回到接收请求池中;
第二发送单元,用于接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
第二接收单元,用于发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
本发明的第三方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行第一方面任意一项提供的基于RDMA的数据传输方法。
本发明的第四方面提供了一种电子设备,所述电子设备包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器执行第一方面任意一项提供的基于RDMA的数据传输方法。
在本发明实施例中,使用发送请求和接收请求这两种请求来管理所有在数据传输过程中需要使用到的内存和数据结构,所有必须的数据结构和内存都包含在请求中,不需要额外进行数据结构内存的分配,避免了数据传输过程中软件再进行额外的内存分配释放操作带来的开销,提高了数据传输过程的效率,降低了数据传输过程的延迟;并且,使用请求池来管理请求,即在发送端和接收端分别使用发送请求池来管理发送请求,使用接收请求池来管理接收请求,不需要调用系统API去分配请求使用的内存,也不需要花费CPU去初始化这个新分配的请求,减少整个流程花费的时间,也降低了整体数据传输过程的延迟。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的数据传输方法发送端的数据传输过程图;
图2为本发明实施例提供的数据传输方法接收端的数据传输过程图;
图3为本发明实施例提供的基于RDMA的数据传输方法流程示意图;
图4为本发明实施例提供的基于RDMA的数据传输装置框图;
图5为本发明实施例提供的电子设备框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
与TCP/IP模式不同的是,RDMA有一套自己的应用程序编程接口(API),这就导致传统的socket编程无法适用于RDMA编程,在数据传输过程中,需要调用系统API再进行额外的数据结构内存分配释放操作,延迟较高,效率较低,并且花费CPU初始化新分配的请求,整个流程消耗时间较长。
为了解决上述问题,本发明实施例提供了一种基于RDMA的数据传输方法方法,该方法发送端的数据传输过程如图1所示,接收端的数据传输过程如图2所示,结合图1和图2,sending data process表示数据发送进程,send request pool表示发送请求池,copydata to data buffer表示复制传输数据到数据缓冲区,RDMA send queue表示RDMA发送队列,wait response queue表示等待响应队列,RDMA receive queue表示RDMA接收队列,receive request pool表示接收请求池,completed queue表示已完成队列,receivingdata process表示数据接收进程。
具体的,本发明实施例的发送端和接收端包括下述数据结构:
(1)send request:发送请求,用于描述一次发送数据,其包括一次发送需要用到的所有数据结构,通过RDMA来发送数据的进程必须要获取一个send request来发送数据,其主要包括如下几个数据结构:
send request id:发送请求的唯一标识,每个send request有自己独一无二的id标识;
RDMA work request:RDMA 工作请求,RDMA发送数据API(应用程序编程接口)需要使用的数据结构,通过将初始化好的RDMA work request放入到RDMA send queue中,来达到传输数据的目的;
header:标头,用于定义所传输数据的数据类型;
data buffer:数据缓冲区,用于存储传输数据。
(2)response request:响应请求,包含的数据结构的形式与send request相同,只是data buffer中保存的是发送完成的send request id,用于通知发送端目标sendrequest已经完成,当发送端接收到response request后,会根据response request中的send request id,从wait response queue中找到对应的send request,并将此sendrequest释放到send request pool中,作为空闲的send request,等待下一数据发送时使用。
(3)send request pool:发送请求池,用于存储空闲send request的池,所有空闲的send request都处于池之中,而sending data process(数据发送进程)必须通过sendrequest pool来获取一个send request进行数据的发送。
(4)receive request:接收请求,用于描述一次接收数据,其包括一次接收需要用到的所有数据结构,其主要包括如下几个数据结构:
RDMA work request:RDMA工作请求,RDMA接收数据API需要使用的数据结构,通过将初始化好的RDMA work request放入RDMA receive queue中,来达到接收数据的目的;
header:标头,用于识别所接收数据的数据类型;
data buffer:数据缓冲区,用于存储接收到的数据。
(5)receive request pool:接收请求池,形式与send request pool相同,其为空闲receive request的池,当需要接收数据时,从receive request pool中获取空闲receive request并将其放入到RDMA receive queue中。当RDMA使用此receive request接收数据时,会自动将接收到的数据类型和数据分别放入到receive request的header和data buffer中。
另外,在RDMA发送端与接收端建立连接进行初始化时,将所有处于receiverequest pool中的receive request取出来,放入到RDMA receive queue中,保证RDMAreceive queue里面有receive request,才可以接收数据,当RDMA receive queue中没有receive request时,容易导致丢失数据。在接收当前数据完成后,将receive request释放回到receive request pool里,这时receive request pool里面至少有一个空闲的receive request,当接收下一数据时,RDMA receive queue优先使用receive requestpool里空闲的receive request接收下一数据。
(6)wait response queue:等待响应队列,已经发送出去的send request的链表,维护已经发送出去并且还未被远端处理的send request。
(7)completed queue:已完成队列,已经接收到传输数据的receive request的链表,所有已经完成接收的receive request都会按顺序在此链表中。
在图1和图2中,每个数字表示数据传输的步骤,其中:
1.通过发送端的sending data process从发送端的send request pool中获取一个send request。
2.将传输数据复制到send request中的data buffer。
3.将send request的RDMA work request放入到RDMA send queue。
4.将send request放入到wait response queue等待响应信号。
5.如果数据传输方式为异步传输,此时,数据发送后不需要等待接收端接收就可以继续发送下一数据,因此在上述第3步将RDMA work request放入到RDMA send queue之后,返回到sending data process,完成异步传输的发送过程。
6.通过RDMA传输协议将RDMA work request中的传输数据发送到接收端的RDMAreceive queue;
通过RDMA receive queue中预先存储的receive request接收传输数据,其中,预先存储的receive request是按照下述方法得到的:
在数据传输前,发送端和接收端建立连接时,将接收端receive request pool中的所有receive request放入到RDMA receive queue中。
7.接收完成后,触发一个receive request完成,将所述receive request放入到completed queue中。
8.通过接收端的receiving data process将completed queue中的传输数据复制到该接收端receiving data process的数据缓冲区中。
9.复制完成后,将receive request释放回到receive request pool中。
10.通过RDMA receive queue从receive request pool中获取空闲的receiverequest,放入RDMA receive queue中,等待接收下一数据。
11.从接收端的send request pool中获取一个send request,将该send request初始化为response request,将发送端的send request id存入response request的databuffer中,并将response request的RDMA work request放入到RDMA send queue。
12.通过RDMA传输协议将接收端RDMA send queue中存储的发送端send requestid发送到发送端的RDMA receive queue。
13.发送端的RDMA receive queue接收完成后,触发一个receive request完成,根据response request的data buffer中存储的发送端send request id,从waitresponse queue中找到对应的send request。
14.将发送端的receive request通过receive request pool重新放入RDMAreceive queue中,等待接收下一send request id。
15.将发送端send request释放回到发送端的send request pool中,成为空闲send request,等待发送下一数据时使用。
16.如果数据传输方式为同步传输,此时,数据发送后需要等待接收端接收才可以发送下一数据,因此,在上述第15步之后,通知发送端的sending data process,完成同步传输的发送过程。
本发明实施例提供的一种基于RDMA的数据传输方法,如图3所示,包括下述步骤S101至步骤S104:
步骤S101:发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含预先对应的传输数据以及发送请求的唯一标识;使用发送请求来维护在发送流程中涉及的所有数据结构和内存,并且使用发送请求池管理发送请求,发送请求可以从发送请求池中获取,在发送流程中不需要额外进行数据结构内存的分配,所有必须的数据结构和内存都包含在发送请求中,避免了发送流程中进行数据结构内存分配带来的开销,降低整个发送流程的延迟。
具体的,步骤S101中,所述将所述发送请求发送至接收端和等待响应队列包括:
将所述发送请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述发送请求的RDMA工作请求对应的数据发送到接收端,其中,所述发送请求的RDMA工作请求对应的数据包括传输数据以及发送请求的唯一标识;通过将RDMA工作请求发送到RDMA发送队列,然后再将RDMA工作请求对应的数据发送到接收端,而不是直接将传输数据和发送请求的唯一标识本身发送到RDMA发送队列,由于RDMA工作请求占用内存小于传输数据和发送请求的唯一标识,因此,减少了发送流程中进行数据结构内存分配带来的开销,降低了整个发送流程的延迟。
将所述发送请求发送至等待响应队列。在接收端将发送请求唯一标识发送到发送端时,通过对比发送端接收的发送请求唯一标识和存储在等待响应队列的发送请求,可以确保接收端已正常接收传输数据。
具体的,如果数据传输方式为异步传输,则在将所述发送请求发送至接收端和等待响应队列之后,所述方法还包括:
通过RDMA传输协议将所述发送请求的RDMA 工作请求发送到RDMA发送队列后,返回到发送端的数据发送进程,完成所述异步传输的发送过程;异步传输方式下,数据发送后不需要等待接收端接收就可以继续发送下一数据,节省了传输多个数据的时间。
并且,所述发送请求包含的传输数据是按照如下方法对应的:
发送端获取传输数据;
发送端将所述传输数据复制到所述发送请求的数据缓冲区。即,在发送请求的数据缓冲区中存储传输数据。
本发明实施例使用发送请求来维护在发送流程中涉及的所有数据结构和内存,所以在发送流程中不需要额外进行数据结构内存的分配,所有必须的数据结构和内存都包含在发送请求中,避免了发送流程中进行数据结构内存分配带来的开销,降低整个发送流程的延迟。并且,针对发送请求引入发送请求池,发送端在建立连接后,直接初始化好足够多的发送请求并将它们放入发送请求池中,这样在发送数据过程中,可以直接从发送请求池中获取空闲的、已经初始化好的发送请求,将该发送请求用来发送数据;不需要再调用系统API去分配请求使用的内存,也不用花费CPU去初始化这个新分配的请求,减少整个数据传输流程花费的时间,降低了整体的延迟。
步骤S102:接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的传输数据,并将所述传输数据复制到数据接收进程中,将所述接收请求释放回到接收请求池中;
具体的,所述步骤S102包括:
接收端的RDMA接收队列通过预先从接收端接收请求池中获取的接收请求,接收所述发送端发送请求中RDMA工作请求对应的数据;其中,发送端与接收端建立连接进行初始化时,将接收端接收请求池中所有的接收请求放入到接收端的RDMA接收队列中,保证RDMA接收队列里面有足够的接收请求来接收数据,以免造成数据丢失。
接收完成后,将所述接收请求发送到已完成队列中;
接收端的数据接收进程将所述已完成队列的接收请求中的传输数据复制到数据接收进程的数据缓冲区;
复制完成后,将所述接收请求释放回到接收请求池中;
接收端的RDMA接收队列从所述接收请求池中获取接收请求,以接收所述发送端下一发送请求中RDMA工作请求对应的数据。接收端的RDMA接收队列通过从接收请求池中获取空闲的接收请求,达到接收下一数据的目的,而不需要再调用系统API去分配接收请求使用的内存,降低了接收流程的延迟。
本发明实施例使用接收请求来维护在接收流程中涉及的所有数据结构和内存,所以在接收流程中不需要额外进行数据结构内存的分配,所有必须的数据结构和内存都包含在接收请求中,避免了接收流程中进行数据结构内存分配带来的开销,降低整个接收流程的延迟。并且,针对接收请求引入接收请求池,接收端在建立连接后,初始化好足够多的接收请求并将它们放入接收请求池中,这样在接收数据过程中,可以直接从接收请求池中获取空闲的、已经初始化好的接收请求,将该接收请求用来接收数据;不需要再调用系统API去分配接收请求使用的内存,也不用花费CPU去初始化这个新分配的接收请求,减少整个数据传输流程花费的时间,降低了整体的延迟。
步骤S103:接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
具体的,所述步骤S103包括:
接收端获取发送端发送请求的唯一标识后,基于所述唯一标识从接收端的发送请求池中获取发送请求;
将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求的数据缓冲区;
将所述响应请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述响应请求的RDMA工作请求对应的数据发送到发送端,其中,所述响应请求的RDMA工作请求对应的数据包括发送端发送请求的唯一标识。
步骤S104:发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
具体的,所述步骤S104包括:
发送端的RDMA接收队列通过预先从发送端接收请求池中获取的接收请求,接收响应请求的RDMA工作请求对应的发送端发送请求的唯一标识;其中,发送端接收请求池中空闲的接收请求预先放入到发送端的RDMA接收队列,以保证发送端的RDMA接收队列接收数据时有接收请求可用。
根据所述发送端发送请求的唯一标识,从所述等待响应队列中找到所述唯一标识对应的发送请求;
将所述接收请求通过发送端接收请求池重新放入发送端RDMA接收队列中,以便发送端RDMA接收队列接收发送端下一发送请求的唯一标识;
将所述发送请求释放回到发送请求池中;通过发送请求的唯一标识确定发送请求中传输数据已被接收端正常接收后,将该发送请求释放回到发送请求池中,作为空闲的发送请求,等待下次发送数据时使用。
发送端通过发送端的数据发送进程从发送请求池中获取发送请求,其中,所述发送请求包含下一传输数据以及发送请求的唯一标识。
具体的,如果数据传输方式为同步传输,则在将所述发送请求释放回到发送请求池中之后,所述方法还包括:
通过发送端的等待响应队列通知发送端的数据发送进程,完成所述同步传输的发送过程。同步传输方式下,数据发送后需要等待接收端接收才可以发送下一数据,因此,通过对比响应请求中发送端发送请求的唯一标识和等待响应队列中的发送请求,可以确保接收端已正常接收传输数据,提高传输的准确性,然后等待响应队列通知数据发送进程,完成当前数据同步传输的发送过程,等待传输下一数据。
本发明实施例使用发送请求来维护在发送流程中涉及的所有数据结构和内存,所以在发送流程中不需要额外进行数据结构内存的分配,所有必须的数据结构和内存都包含在发送请求中,避免了发送流程中进行数据结构内存分配带来的开销,降低整个发送流程的延迟。
并且,本发明实施例使用接收请求来维护在接收流程中涉及的所有数据结构和内存,所以在接收流程中不需要额外进行数据结构内存的分配,所有必须的数据结构和内存都包含在接收请求中,避免了接收流程中进行数据结构内存分配带来的开销,降低整个接收流程的延迟。
由于在数据传输过程中,本发明实施例分别使用发送请求和接受请求来管理发送流程和接收流程,所以在一次数据传输过程中,发送端需要申请一个发送请求的内存并初始化其来进行发送数据,同理,接收端也需要申请一个接收请求的内存并初始化其来进行接收数据,这种情况下,两端都需要分别做一次内存分配操作和初始化请求操作。因此,本发明实施例引入了请求池,针对发送请求引入发送请求池,针对接收请求引入接收请求池,则能够避免这两次内存分配操作和初始化请求操作,具体实现原理为:
发送端在建立连接后,直接初始化好足够多的发送请求并将它们放入发送请求池中,这样在发送数据过程中,可以直接从发送请求池中获取空闲的、已经初始化好的发送请求,将该发送请求用来发送数据;
接收端在建立连接后,初始化好足够多的接收请求并将它们放入接收请求池中,这样在接收数据过程中,可以直接从接收请求池中获取空闲的、已经初始化好的接收请求,将该接收请求用来接收数据。
引入上述请求池之后的优势就是不需要再调用系统API去分配请求使用的内存,也不用花费CPU去初始化这个新分配的请求,减少整个数据传输流程花费的时间,降低了整体的延迟。
从以上的描述中,可以看出,本发明实现了如下技术效果:
在本发明实施例中,使用发送请求和接收请求这两种请求来管理所有在数据传输过程中需要使用到的内存和数据结构,所有必须的数据结构和内存都包含在请求中,不需要额外进行数据结构内存的分配,避免了数据传输过程中软件再进行额外的内存分配释放操作带来的开销,提高了数据传输过程的效率,降低了数据传输过程的延迟;并且,使用请求池来管理请求,即在发送端和接收端分别使用发送请求池来管理发送请求,使用接收请求池来管理接收请求,不需要调用系统API去分配请求使用的内存,也不需要花费CPU去初始化这个新分配的请求,减少整个流程花费的时间,也降低了整体数据传输过程的延迟。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本发明实施例还提供了一种用于实施上述基于RDMA的数据传输方法的基于RDMA的数据传输装置,如图4所示,该装置包括:
第一发送单元41,用于发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含预先对应的传输数据以及发送请求的唯一标识;
第一接收单元42,用于接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的传输数据,并将所述传输数据复制到数据接收进程中,将所述接收请求释放回到接收请求池中;
第二发送单元43,用于接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
第二接收单元44,用于发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
本发明实施例还提供了一种电子设备,如图5所示,该电子设备包括一个或多个处理器51以及存储器52,图5中以一个处理器51为例。
该控制器还可以包括:输入装置53和输出装置54。
处理器51、存储器52、输入装置53和输出装置54可以通过总线或者其他方式连接,图5中以通过总线连接为例。
处理器51可以为中央处理器(Central Processing Unit,简称为CPU),处理器51还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,简称为DSP)、专用集成电路(Application Specific Integrated Circuit,简称为ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称为FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合,通用处理器可以是微处理器或者任何常规的处理器。
存储器52作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的控制方法对应的程序指令/模块。处理器51通过运行存储在存储器52中的非暂态软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例的基于RDMA的数据传输方法。
存储器52可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据服务器操作的处理装置的使用所创建的数据等。此外,存储器52可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器52可选包括相对于处理器51远程设置的存储器,这些远程存储器可以通过网络连接至网络连接装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置53可接收输入的数字或字符信息,以及产生与服务器的处理装置的用户设置以及功能控制有关的键信号输入。输出装置54可包括显示屏等显示设备。
一个或者多个模块存储在存储器52中,当被一个或者多个处理器51执行时,执行如图3所示的方法。
本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成的,程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各电机控制方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,简称为ROM)、随机存储记忆体(Random AccessMemory,简称为RAM)、快闪存储器(Flash Memory,简称为FM)、硬盘(Hard Disk Drive,简称为HDD)或固态硬盘(Solid-State Drive,简称为SSD)等;存储介质还可以包括上述种类的存储器的组合。
虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。

Claims (10)

1.一种基于RDMA的数据传输方法,其特征在于,包括:
发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含预先对应的传输数据以及发送请求的唯一标识;
接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的传输数据,并将所述传输数据复制到数据接收进程中,将所述接收请求释放回到接收请求池中;
接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
2.根据权利要求1所述的方法,其特征在于,所述将所述发送请求发送至接收端和等待响应队列包括:
将所述发送请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述发送请求的RDMA工作请求对应的数据发送到接收端,其中,所述发送请求的RDMA工作请求对应的数据包括传输数据以及发送请求的唯一标识;
将所述发送请求发送至等待响应队列。
3.根据权利要求1所述的方法,其特征在于,所述发送请求包含的传输数据是按照如下方法对应的:
发送端获取传输数据;
发送端将所述传输数据复制到所述发送请求的数据缓冲区。
4.根据权利要求1所述的方法,其特征在于,所述接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的传输数据,并将所述传输数据复制到数据接收进程中,将所述接收请求释放回到接收请求池中,包括:
接收端的RDMA接收队列通过预先从接收端接收请求池中获取的接收请求,接收所述发送端发送请求中RDMA工作请求对应的数据;
接收完成后,将所述接收请求发送到已完成队列中;
接收端的数据接收进程将所述已完成队列的接收请求中的传输数据复制到数据接收进程的数据缓冲区;
复制完成后,将所述接收请求释放回到接收请求池中;
接收端的RDMA接收队列从所述接收请求池中获取接收请求,以接收所述发送端下一发送请求中RDMA工作请求对应的数据。
5.根据权利要求1所述的方法,其特征在于,所述接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端,包括:
接收端获取发送端发送请求的唯一标识后,基于所述唯一标识从接收端的发送请求池中获取发送请求;
将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求的数据缓冲区;
将所述响应请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述响应请求的RDMA工作请求对应的数据发送到发送端,其中,所述响应请求的RDMA工作请求对应的数据包括发送端发送请求的唯一标识。
6.根据权利要求1所述的方法,其特征在于,所述发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中,包括:
发送端的RDMA接收队列通过预先从发送端接收请求池中获取的接收请求,接收响应请求的RDMA工作请求对应的发送端发送请求的唯一标识;
根据所述发送端发送请求的唯一标识,从所述等待响应队列中找到所述唯一标识对应的发送请求;
将所述接收请求通过发送端接收请求池重新放入发送端RDMA接收队列中,以便发送端RDMA接收队列接收发送端下一发送请求的唯一标识;
将所述发送请求释放回到发送请求池中;
发送端通过发送端的数据发送进程从发送请求池中获取发送请求,其中,所述发送请求包含下一传输数据以及发送请求的唯一标识。
7.根据权利要求1所述的方法,其特征在于,如果数据传输方式为异步传输,则在将所述发送请求发送至接收端和等待响应队列之后,所述方法还包括:
通过RDMA传输协议将所述发送请求的RDMA 工作请求发送到RDMA发送队列后,返回到发送端的数据发送进程,完成所述异步传输的发送过程;
如果数据传输方式为同步传输,则在将所述发送请求释放回到发送请求池中之后,所述方法还包括:
通过发送端的等待响应队列通知发送端的数据发送进程,完成所述同步传输的发送过程。
8.一种基于RDMA的数据传输装置,其特征在于,包括:
第一发送单元,用于发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含预先对应的传输数据以及发送请求的唯一标识;
第一接收单元,用于接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的传输数据,并将所述传输数据复制到数据接收进程中,将所述接收请求释放回到接收请求池中;
第二发送单元,用于接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
第二接收单元,用于发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行权利要求1-7任意一项所述的基于RDMA的数据传输方法。
10.一种电子设备,其特征在于,所述电子设备包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器执行权利要求1-7任意一项所述的基于RDMA的数据传输方法。
CN202110415703.0A 2021-04-19 2021-04-19 基于rdma的数据传输方法、装置及电子设备 Active CN112822300B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110415703.0A CN112822300B (zh) 2021-04-19 2021-04-19 基于rdma的数据传输方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110415703.0A CN112822300B (zh) 2021-04-19 2021-04-19 基于rdma的数据传输方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN112822300A true CN112822300A (zh) 2021-05-18
CN112822300B CN112822300B (zh) 2021-07-13

Family

ID=75863646

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110415703.0A Active CN112822300B (zh) 2021-04-19 2021-04-19 基于rdma的数据传输方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN112822300B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114553956A (zh) * 2022-01-04 2022-05-27 北京国电通网络技术有限公司 基于uep中间件的数据传输方法和系统
CN114584492A (zh) * 2022-02-15 2022-06-03 珠海星云智联科技有限公司 一种延时测量方法、系统以及相关设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101841471A (zh) * 2009-03-18 2010-09-22 富士通株式会社 具有连接成多维矩阵的节点的系统及其控制方法以及设备
CN103645994A (zh) * 2013-11-05 2014-03-19 华为技术有限公司 一种数据处理方法及设备
WO2017028399A1 (zh) * 2015-08-18 2017-02-23 北京百度网讯科技有限公司 通信数据传输方法及系统
CN106953797A (zh) * 2017-04-05 2017-07-14 广东浪潮大数据研究有限公司 一种基于动态连接的rdma数据传输的方法与装置
CN111404986A (zh) * 2019-12-11 2020-07-10 杭州海康威视系统技术有限公司 数据传输处理方法、设备和存储介质
CN112291293A (zh) * 2019-07-27 2021-01-29 华为技术有限公司 任务处理方法、相关设备及计算机存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101841471A (zh) * 2009-03-18 2010-09-22 富士通株式会社 具有连接成多维矩阵的节点的系统及其控制方法以及设备
CN103645994A (zh) * 2013-11-05 2014-03-19 华为技术有限公司 一种数据处理方法及设备
WO2017028399A1 (zh) * 2015-08-18 2017-02-23 北京百度网讯科技有限公司 通信数据传输方法及系统
CN106953797A (zh) * 2017-04-05 2017-07-14 广东浪潮大数据研究有限公司 一种基于动态连接的rdma数据传输的方法与装置
CN112291293A (zh) * 2019-07-27 2021-01-29 华为技术有限公司 任务处理方法、相关设备及计算机存储介质
CN111404986A (zh) * 2019-12-11 2020-07-10 杭州海康威视系统技术有限公司 数据传输处理方法、设备和存储介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114553956A (zh) * 2022-01-04 2022-05-27 北京国电通网络技术有限公司 基于uep中间件的数据传输方法和系统
CN114553956B (zh) * 2022-01-04 2024-01-09 北京国电通网络技术有限公司 基于uep中间件的数据传输方法和系统
CN114584492A (zh) * 2022-02-15 2022-06-03 珠海星云智联科技有限公司 一种延时测量方法、系统以及相关设备

Also Published As

Publication number Publication date
CN112822300B (zh) 2021-07-13

Similar Documents

Publication Publication Date Title
CN106850402B (zh) 消息的传输方法和装置
CN112822300B (zh) 基于rdma的数据传输方法、装置及电子设备
CN113485822A (zh) 内存管理方法、系统、客户端、服务器及存储介质
US11201836B2 (en) Method and device for managing stateful application on server
CN110381042B (zh) 一种平滑重启服务的方法、装置、介质和电子设备
CN105516086A (zh) 业务处理方法及装置
CN107579929B (zh) 一种可靠连接通信队列对的设置方法、系统及相关装置
WO2017032152A1 (zh) 将数据写入存储设备的方法及存储设备
CN109818977B (zh) 一种接入服务器通信优化方法、接入服务器以及通信系统
CN112822299B (zh) 基于rdma的数据传输方法、装置及电子设备
CN111506443A (zh) 服务调用方法、装置、设备和存储介质
CN115237589A (zh) 一种基于sr-iov的虚拟化方法、装置和设备
CN113076281B (zh) 一种Ceph内核客户端进行通信的方法、系统、设备及介质
KR20120072134A (ko) 가상 데스크톱 가속 장치 및 방법
US20170034267A1 (en) Methods for transferring data in a storage cluster and devices thereof
CN110113176B (zh) 用于配置服务器的信息同步方法及装置
CN109698845B (zh) 数据传输的方法、服务器、卸载卡及存储介质
CN111404986B (zh) 数据传输处理方法、设备和存储介质
CN115189977B (zh) 一种基于axi协议的广播传输方法、系统及介质
CN115176453A (zh) 报文缓存方法、内存分配器及报文转发系统
CN111131470A (zh) 终端设备及其数据处理方法以及数据处理系统
CN106790632B (zh) 一种流数据的并发传输方法和装置
CN107689979B (zh) 一种下载请求处理方法和处理设备
CN109088907B (zh) 文件传递方法及其设备
CN110336856B (zh) 接口调用方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant