CN117278549A - 基于rdma的数据发送方法、装置、电子设备及存储介质 - Google Patents

基于rdma的数据发送方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN117278549A
CN117278549A CN202311231547.8A CN202311231547A CN117278549A CN 117278549 A CN117278549 A CN 117278549A CN 202311231547 A CN202311231547 A CN 202311231547A CN 117278549 A CN117278549 A CN 117278549A
Authority
CN
China
Prior art keywords
rdma
data
api
user application
file descriptor
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.)
Pending
Application number
CN202311231547.8A
Other languages
English (en)
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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network 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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202311231547.8A priority Critical patent/CN117278549A/zh
Publication of CN117278549A publication Critical patent/CN117278549A/zh
Pending legal-status Critical Current

Links

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/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/141Setup of application sessions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/34Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters 

Abstract

本公开的实施方式提供了一种基于RDMA的数据发送方法、装置、电子设备及存储介质。该方法应用于运行有用户应用程序的发送方节点,所述方法可以包括:劫持所述用户应用程序发起的向其他节点发送数据的数据发送请求,所述数据发送请求携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API,所述其他节点区别于所述发送方节点;基于所述数据发送请求,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API;基于所述真实文件描述符调用所述基于RDMA的API向所述其他节点发送所述数据。本公开的实施方式在无需对用户应用程序进行侵入修改的情况下,实现了基于RDMA技术传输数据。

Description

基于RDMA的数据发送方法、装置、电子设备及存储介质
技术领域
本公开的实施方式涉及通信技术领域,更具体地,本公开的实施方式涉及一种基于RDMA的数据发送方法、装置、电子设备及存储介质。
背景技术
本部分旨在为权利要求书中陈述的本公开的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
RDMA(Remote Direct Memory Access,远程直接内存访问)是一种计算机网络技术,允许两台计算机之间直接访问彼此内存中的数据,而无需通过操作系统的参与。这种直接内存访问技术可以大大提高数据传输的效率和吞吐量。
相关技术中,运用RDMA技术传输数据的方案主要有三种:verbs API、UCX API、SMC-R。其中,verbs API和UCX API这两种方案都需要对应用程序进行侵入修改。因为当前的应用程序或库均使用socket API进行数据传输,而socket API与verbs API不存在包含或被包含关系,也就是说,原本使用socket API进行数据传输的应用程序或库需要进行大量的代码重写,才可能实现使用verbs API进行数据传输。UCX API同理。可见,verbs API和UCX API对应用程序的侵入性过强,此缺点也严重阻碍了verbs API和UCX API的推广使用。而SMC-R是一种兼容socket API的网络协议,其使用内核态的verbs API实现RDMA网络传输,所以,SMC-R方案无需对应用程序进行侵入修改。但是,由于SMC-R的协议层均在内核态空间实现,有可能发生由于操作系统版本过低而无法使用SMC-R的情况。并且,后续如若想更新SMC-R只能通过升级内核来实现,而升级内核容易使得升级后的内核与某些硬件或软件不兼容,导致操作系统功能失效或操作系统不稳定甚至崩溃的问题。
综上,上述方案均存在一定的限制,难以推广使用。
发明内容
在本公开实施方式的第一方面中,提供了一种基于RDMA的数据发送方法,所述方法应用于运行有用户应用程序的发送方节点,所述方法包括:
劫持所述用户应用程序发起的向其他节点发送数据的数据发送请求,所述数据发送请求携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API,所述其他节点区别于所述发送方节点;
基于所述数据发送请求,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API;
基于所述真实文件描述符调用所述基于RDMA的API向所述其他节点发送所述数据。
可选的,所述方法还包括:劫持所述用户应用程序针对所述第一API的调用请求,并基于所述调用请求向所述用户应用程序返回所述虚拟文件描述符;基于所述调用请求创建所述真实文件描述符,并将所述真实文件描述符存储在本地。
可选的,所述方法还包括:劫持所述用户应用程序发起的与所述其他节点的目标用户应用程序建立通信连接的原始连接请求;基于所述原始连接请求生成目标连接请求,并将所述目标连接请求发送至所述其他节点,以与所述目标用户应用程序建立第一连接通道;基于所述第一连接通道与所述目标用户应用程序交换用于建立RDMA连接通道的目标信息,并基于所述目标信息建立所述RDMA连接通道。
可选的,所述方法还包括:基于所述真实文件描述符,确定所述用户应用程序与所述目标用户应用程序之间的目标RDMA连接通道;基于连接通道与存储区域的对应关系,将所述数据存储至对应于所述目标RDMA连接通道的目标存储区域;
所述基于所述真实文件描述符调用所述基于RDMA的API向所述其他节点发送所述数据,包括:从所述目标存储区域获取所述数据,并调用所述基于RDMA的API将所述数据通过所述目标RDMA连接通道发送至所述其他节点。
在本公开实施方式的第二方面中,提供了一种基于RDMA的数据接收方法,所述方法应用于运行有用户应用程序的接收方节点,所述方法包括:
劫持所述用户应用程序发起的数据接收操作,所述数据接收操作携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API;
基于所述数据接收操作,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API;
基于所述真实文件描述符调用所述基于RDMA的API接收数据。
可选的,所述方法还包括:劫持所述用户应用程序发起的用于轮询所述用户应用程序是否存在待接收数据的轮询请求,所述轮询请求携带有用于指示所述用户应用程序中用于接收数据的各线程的目标虚拟文件描述符;基于所述轮询请求确定与所述目标虚拟文件描述符相匹配的目标真实文件描述符,所述目标真实文件描述符用于指示调用所述基于RDMA的API进行轮询;基于所述目标真实文件描述符调用所述基于RDMA的API进行轮询,并在轮询结果表明存在所述待接收数据的情况下,向所述用户应用程序返回存在所述待接收数据的响应消息,以使所述用户应用程序基于所述响应消息发起所述数据接收操作。
可选的,所述方法还包括:记录所述用户应用程序所连接的各个RDMA连接通道的数据传输情况,以及所述各个RDMA连接通道与所述各线程的对应关系;所述基于所述目标真实文件描述符调用所述基于RDMA的API进行轮询,包括:基于所述目标真实文件描述符确定与所述各线程相对应的目标RDMA连接通道;获取所述目标RDMA连接通道的数据传输情况,并根据该数据传输情况确定是否存在所述待接收数据。
在本公开实施方式的第三方面中,提供了一种基于RDMA的数据发送装置,所述装置应用于运行有用户应用程序的发送方节点,所述装置包括:
第一劫持模块,用于劫持所述用户应用程序发起的向其他节点发送数据的数据发送请求,所述数据发送请求携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API,所述其他节点区别于所述发送方节点;
第一确定模块,用于基于所述数据发送请求,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API;
第一调用模块,用于基于所述真实文件描述符调用所述基于RDMA的API向所述其他节点发送所述数据。
在本公开实施方式的第四方面中,提供了一种基于RDMA的数据接收装置,所述装置应用于运行有用户应用程序的接收方节点,所述装置包括:
第二劫持模块,用于劫持所述用户应用程序发起的数据接收操作,所述数据接收操作携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API;
第二确定模块,用于基于所述数据接收操作,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API;
第二调用模块,用于基于所述真实文件描述符调用所述基于RDMA的API接收数据。
在本公开实施方式的第五方面中,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一/二方面的实施例中所述的方法。
在本公开实施方式的第六方面中,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一/二方面的实施例中所述方法的步骤。
本公开以上的实施方式,至少具有如下的有益效果:
在发送方节点的某一用户应用程序想要向其他节点发送数据时,该发送方节点通过劫持该用户应用程序发起的数据发送请求,并通过该数据发送请求携带的虚拟文件描述符确定相匹配的真实文件描述符,从而通过真实文件描述符调用基于RDMA的API向其他节点发送数据。此种数据发送方法,无需对用户应用程序进行侵入修改,只需劫持用户应用程序发起的数据发送请求,即可实现将原先针对第一API的调用替换为针对基于RDMA的API的调用,然后通过调用基于RDMA的API进行数据发送,实现基于RDMA技术提高数据发送的效率。并且,此种数据发送方法在用户态空间实现,与内核态空间无关,因此,后续更新或修复基于RDMA的API比较方便,且不会对操作系统造成影响。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:
图1是一示例性实施例提供的一种verbs API的架构示意图;
图2是一示例性实施例提供的一种UCX API的架构示意图;
图3是一示例性实施例提供的一种SMC-R的架构示意图;
图4是一示例性实施例提供的一种基于RDMA的数据传输系统的架构图;
图5是一示例性实施例提供的一种基于RDMA的数据发送方法的流程图;
图6是一示例性实施例提供的一种基于RDMA的数据接收方法的流程图;
图7是一示例性实施例提供的一种数据传输优化模块的部署架构示意图;
图8是一示例性实施例提供的一种握手装置的工作流程示意图;
图9是一示例性实施例提供的一种会话管理装置的工作流程示意图;
图10是一示例性实施例提供的一种发送方节点上数据传输优化模块中各装置的工作流程示意图;
图11是一示例性实施例提供的一种接收方节点上数据传输优化模块中各装置的工作流程示意图;
图12是一示例性实施例提供的一种基于RDMA的数据发送装置的框图;
图13是一示例性实施例提供的一种基于RDMA的数据接收装置的框图;
图14是一示例性实施例提供的一种方法对应的可读存储介质的示意图;
图15是一示例性实施例提供的一种能够实现上述方法的电子设备的示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本公开的实施方式可以实现为一种系统、装置、设备、方法或计算机可读存储介质。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本公开的实施方式,提出了一种基于RDMA的数据发送方法、装置、电子设备及存储介质。
在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。并且,本公开所涉及的数据可以为经用户授权或者经过各方充分授权的数据。
下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。
应用场景总览
数据传输通常在两个设备之间进行,每个设备都可以看作一个节点,所述设备可以包括计算机、服务器、传感器、移动设备或其他网络连接设备。其中,发送数据的一方为发送方节点,接收数据的一方为接收方节点。任一节点既可以作为发送方节点,也可以作为接收方节点。RDMA(Remote Direct Memory Access,远程直接内存访问)是一种计算机网络技术,允许两个节点之间直接访问彼此内存中的数据,而无需通过操作系统的参与。这种直接内存访问技术可以大大提高数据传输的效率和吞吐量。
相关技术中,运用RDMA技术传输数据的方案主要有三种:verbs API、UCX API、SMC-R。图1为一示例性实施例示出的一种verbs API的架构示意图。参考图1,用户态空间包括应用层(运行有用户应用程序),应用程序接口层(提供一组API接口);内核态空间包括中间层、硬件特性驱动层(提供与硬件设备通信的驱动程序)、硬件层(提供InfiniBand HCA等硬件设备)。其中,应用程序接口层部署有rdma-core库,中间层部署有RDMA子系统。所以,verbs API由用户态空间的rdma-core库和内核态空间的RDMA子系统共同提供。具体的,用户应用程序使用rdma-core库提供的用户态verbs API进行数据传输,内核态应用程序使用RDMA子系统提供的内核态verbs API进行数据传输。由于当前的用户应用程序或库均使用socket API进行数据传输,而socket API与verbs API不存在包含或被包含关系,也就是说,原本使用socket API进行数据传输的用户应用程序或库需要进行大量的代码重写,才可能实现使用用户态verbs API进行数据传输。因此,使用verbs API对用户应用程序的侵入性较强。
UCX是一种高性能、可扩展的开源通信框架,其包括RDMA在内的多种通信接口,并以统一的UCX API的形式暴露给用户应用程序使用。仅就RDMA通信接口而言,UCX API实际上是对用户态verbs API进行了一层封装,具体的结构如图2所示。由图2可知,本质上用户应用程序需要隔着UCX API去调用用户态verbs API,因此,使用UCX API也需对应用程序进行侵入修改。
图3为一示例性实施例示出的一种SMC-R的架构示意图。参考图3,SMC-R方案中,用户应用程序可以通过SMA-R协议使用内核态verbs API接口来实现RDMA网络传输,所以SMC-R无需对用户应用程序进行侵入修改。然而,由于SMC-R的协议层均在内核态空间实现,有可能发生由于操作系统版本过低而无法使用SMC-R的情况。并且,后续如若想更新SMC-R只能通过升级内核来实现,而升级内核容易使得升级后的内核与某些硬件或软件不兼容,导致操作系统功能失效或操作系统不稳定甚至崩溃的问题。
由此可见,在基于RDMA的数据传输场景中,可能出现对用户应用程序侵入过强或过分影响操作系统的问题。
需要注意的是,上述应用场景仅是为了便于理解本公开的精神和原理而示出,本公开的实施方式在此方面不受任何限制。相反,本公开的实施方式可以应用于适用的任何场景。
发明概述
有鉴于此,本说明书提供一种基于RDMA发送数据的技术方案。
本说明书的核心构思在于:在发送方节点的某一用户应用程序想要向其他节点发送数据时,该发送方节点通过劫持该用户应用程序发起的数据发送请求,并通过该数据发送请求携带的虚拟文件描述符确定相匹配的真实文件描述符,从而通过真实文件描述符调用基于RDMA的API向其他节点发送数据。此种数据发送方法,无需对用户应用程序进行侵入修改,只需劫持用户应用程序发起的数据发送请求,即可实现将原先针对第一API的调用替换为针对基于RDMA的API的调用,然后通过调用基于RDMA的API进行数据发送,实现基于RDMA技术提高数据发送的效率。并且,此种数据发送方法在用户态空间实现,与内核态空间无关,因此,后续更新或修复基于RDMA的API比较方便,且不会对操作系统造成影响。
示例性方法
下面将通过具体的实施例对本说明书的技术构思进行详细描述。
【系统架构】
图4是一示例性实施例提供的一种基于RDMA的数据传输系统的架构图,如图4所示,该数据传输系统可以包括电子设备40-42。其中,每一电子设备上运行有用户应用程序。任一电子设备既可以作为发送方节点,也可以作为接收方节点。
在本公开的实施方式中,所述电子设备具体可以包括但不限于智能手机、台式计算机、平板电脑、笔记本电脑、电子书阅读器、智能手表、智能手环等具有一定计算能力的电子设备,并且该电子设备可以运行有即时通讯类、社交类、游戏类、教育类等类别的软件或网站,可以应用于多人音视频通话的场景。
所述电子设备40-42之间可以通过有线通信或无线通信的方式,进行直接或间接的连接,本公开不做特殊限制。
请参见图5,图5是一示例性实施例提供的一种基于RDMA的数据发送方法的流程图。所述方法可以应用于如图1所示的任一电子设备。所述方法可以包括以下步骤:
S501:劫持所述用户应用程序发起的向其他节点发送数据的数据发送请求,所述数据发送请求携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API,所述其他节点区别于所述发送方节点。
发送方节点上运行有用户应用程序,用户应用程序所占用的内存空间称为用户态空间(User Space)。相对于用户态空间,内核态空间(Kernel Space)是操作系统内核运行的空间。通常,用户应用程序在运行时只能访问自身的虚拟地址空间,无法访问操作系统内核空间或其他用户应用程序的地址空间。因此,当用户应用程序需要执行特权操作或访问受限资源时,需要向操作系统发起请求。操作系统响应于用户应用程序发起的请求,在内核态空间完成相应的操作,然后返回结果给用户应用程序。
相关技术中,当用户应用程序想要向其他节点发送数据时,用户应用程序会向操作系统发起一个调用第一API的数据发送请求。所述第一API区别于基于RDMA的API,即第一API为未使用RDMA技术进行数据发送的API,比如socket API。当然,第一API还可以是其他未使用RDMA技术进行数据发送的API。
本实施例中,发送方节点会劫持用户应用程序发起的数据发送请求,具体的劫持方式可以参考相关技术中劫持数据的相关内容,本公开对此不作限制。用户应用程序发起的数据发送请求中携带有虚拟文件描述符,该虚拟文件描述符用于指示调用第一API。虚拟文件描述符是在操作系统中用于表示打开的文件、套接字和其他I/O资源的抽象概念。虚拟文件描述符提供了一个统一的接口,使得用户应用程序无需关注底层实际资源的细节,即可通过相同的方式进行读取、写入或关闭等操作。
在一些可能的实施方式中,在用户应用程序发送数据前,需要先获取虚拟文件描述符,然后才能根据获得的虚拟文件描述符发起数据发送请求。具体的,用户应用程序可以先发起针对第一API的调用请求,所述调用请求中携带有第一API的标识。然后发送方节点劫持该调用请求,并根据劫持到的调用请求创建一个虚拟文件描述符(可以用fd表示)和一个真实文件描述符(可以用rfd表示)。其中,真实文件描述符和虚拟文件描述符相匹配。然后,发送方节点将虚拟文件描述符返回给用户应用程序,并将真实文件描述符存储在发送方节点的本地。
相关技术中,当用户应用程序获取到虚拟文件描述符之后,用户应用程序可以基于该虚拟文件描述符向操作系统发起操作请求(所述操作可以包括数据发送、数据接收、监听、握手等操作),操作系统根据操作请求中携带的虚拟文件描述符在本地查找与虚拟文件描述符相匹配的真实文件描述符,然后基于真实文件描述符进行实际操作,并将操作结果反馈给用户应用程序。而用户应用程序对操作系统的实际操作无感知,对用户应用程序而言,是根据虚拟文件描述符得到了操作结果。
本实施例中,发送方节点根据劫持到的调用请求创建相匹配的真实文件描述符和虚拟文件描述符,并将虚拟文件描述符返回给用户应用程序,将真实文件描述符存储至本地。由于虚拟文件描述符是用户应用程序使用的文件标识符,在不同的用户应用程序之间虚拟文件描述符可能具有不同的含义,而真实文件描述符是操作系统内部对打开文件的唯一标识符,因此,通过在虚拟文件描述符和真实文件描述符之间建立匹配关系,可以使得用户应用程序能够基于虚拟文件描述符更方便地使用和操作内存中的资源。
S502:基于所述数据发送请求,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API。
当用户应用程序使用虚拟文件描述符发起数据发送请求时,发送方节点可以通过劫持并解析数据发送请求,来获得虚拟文件描述符,进而在本地查找与该虚拟文件描述符相匹配的真实文件描述符。在本实施例中,真实文件描述符用于指示调用基于RDMA的API完成数据发送操作。
S503:基于所述真实文件描述符调用所述基于RDMA的API向所述其他节点发送所述数据。
发送方节点调用基于RDMA的API向其他节点发送数据,有助于基于RDMA技术提高数据发送的效率。
在一些可能的实施方式中,在发送方节点的用户应用程序(下称“发送方用户应用程序”)向其他节点发送数据前,需要先在发送方用户应用程序和其他节点的目标用户应用程序之间建立RDMA连接通道,进而通过该RDMA连接通道完成基于RDMA技术的数据传输。所述目标用户应用程序为运行于其他节点上的、接收数据的用户应用程序。通常,一个RDMA连接通道对应一个会话(即两个用户应用程序之间的一次数据传输)。
具体的建立RDMA连接通道的方式可以包括:发送方用户应用程序先向其他节点的目标用户应用程序发起原始连接请求,该原始连接请求用于请求目标用户应用程序建立通信连接,比如TCP连接。
发送方节点劫持原始连接请求,并解析该原始连接请求以获取目标用户应用程序的相关信息。然后发送方节点基于目标用户应用程序的相关信息生成目标连接请求,并将目标连接请求发送给目标用户应用程序,该目标连接请求用于请求目标用户应用程序建立第一连接通道,该第一连接通道为非RDMA的连接通道,比如,可以是TCP连接、UDP连接等。目标用户应用程序响应于该目标连接请求,与发送方节点的用户应用程序之间建立非RDMA的连接通道。非RDMA的连接通道的具体建立过程可以参考相关技术(比如建立TCP连接的三次握手过程可以参考相关技术),此处不再赘述。
第一连接通道建立之后,发送方节点和接收方节点通过第一连接通道交换用于建立RDMA连接通道的目标消息,该目标消息可以包括目标用户应用程序的内存地址、发送方用户应用程序的内存地址、发送方节点标识和接收方节点标识等信息。即发送方节点将发送方用户应用程序的内存地址和发送方节点标识等用于表征发送方用户应用程序的信息,发送给接收方节点;同时,接收方节点将目标用户应用程序的内存地址和接收方节点标识等用于表征目标用户应用程序的信息发送给发送方节点。然后根据交换的目标信息在发送方用户应用程序和目标用户应用程序之间建立RDMA连接通道。可以理解的是,针对每个发送方用户应用程序而言,该发送方用户应用程序可以分别与多个目标用户应用程序建立RDMA连接通道。其中,每一RDMA连接通道可以对应一个单独的线程,而一个线程可以对应多个RDMA连接通道。同理,针对每个目标用户应用程序而言,其也可以分别与多个发送方用户应用程序建立RDMA连接通道,每一RDMA连接通道可以对应一个单独的线程,而一个线程可以对应多个RDMA连接通道。并且,RDMA连接通道对应的线程独立于用户应用程序的主线程,即用户应用程序并不会感知到RDMA连接通道对应的线程。
本实施例中,通过先建立非RDMA的第一连接通道,再建立RDMA连接通道,可以在用户应用程序无感知的情况下,通过RDMA连接通道传输数据,即用户应用程序会以为是通过非RDMA连接通道进行数据传输。
在一些可能的实施方式中,用户应用程序的每个RDMA连接通道会对应该用户应用程序的一个存储区域。在RDMA连接通道的建立过程中,发送方节点和接收方节点会互相交换发送方用户应用程序和目标用户应用程序的存储区域信息。所述存储区域信息包括存储区域的位置以及存储
区域的大小。
由于一个发送方用户应用程序可以分别与接收方节点上的多个用户应用程序建立RDMA连接通道,所以在根据数据发送请求中携带的虚拟文件描述符确定出相匹配的真实文件描述符后,还可以根据该真实文件描述符,确定出本次数据传输中发送方用户应用程序与目标用户应用程序之间的目标RDMA连接通道。然后根据发送方用户应用程序的RDMA连接通道与存储区域的对应关系,确定出目标RDMA连接通道的目标存储区域。发送方节点在劫持发送方用户应用程序发起的数据发送请求后,可以将需要发送的数据先存储至目标存储区域。当判断出真实文件描述符指示调用基于RDMA的API发送数据时,发送方节点先从目标存储区域获取需要发送的数据,然后调用基于RDMA的API将获取到的数据通过目标RDMA连接通道发送至其他节点上的目标用户应用程序。
本实施例中,通过设置用户应用程序上RDMA连接通道与存储区域的对应关系,将需要发送的数据先存储至对应于目标RDMA连接通道的目标存储区域,然后在发送数据时,先从目标存储区域获取数据,从而可以有效避免发送的数据出错的情况,提高所传输数据的准确性。
上述实施例中,发送方节点通过劫持用户应用程序发起的数据发送请求,并根据数据发送请求中携带的虚拟文件描述符确定出相匹配的真实文件描述符,从而根据真实文件描述符调用基于RDMA的API发送数据,实现了在用户应用程序无感知的情况下,通过RDMA技术进行数据传输。显然,此种数据发送的方式,无需对用户应用程序进行侵入修改,只需在用户态空间额外部署基于RDMA的API,即可实现使用RDMA技术提高数据发送的效率。并且,该数据发送方式在用户态空间实现,与内核态空间无关,因此,后续更新或修复基于RDMA的API比较方便,且不会对操作系统造成影响。
图6是一示例性实施例提供的一种基于RDMA的数据接收方法的流程图。所述方法可以应用于如图1所示的任一电子设备。所述方法可以包括以下步骤:
S601:劫持所述用户应用程序发起的数据接收操作,所述数据接收操作携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API。
相关技术中,当图1中的任一节点作为接收数据的接收方节点时,若该接收方节点上的用户应用程序想要接收数据,通常会向操作系统发起一个数据接收操作,以使操作系统响应于该数据接收操作调用第一API(区别于基于RDMA的API)去接收数据。本实施例中,接收方节点劫持用户应用程序发起的数据接收操作,具体的劫持方式可以参考相关技术中劫持数据的相关内容,本公开对此不作限制。所述数据接收操作携带有用于指示调用第一API的虚拟文件描述符。
在一些可能的实施方式中,接收方节点上的用户应用程序(下称“接收方用户应用程序”)在发起数据接收操作之前,可以先发起轮询请求,该轮询请求携带有目标虚拟文件描述符。所述目标虚拟文件描述符用于指示接收方用户应用程序中用于接收数据的各线程。相关技术中,操作系统响应于轮询请求调用第一API,轮询目标虚拟文件描述符所指示的各线程中是否存在待接收数据。若轮询结果为存在待接收数据,则接收方用户应用程序发起数据接收操作,从而可以避免发起的数据接收操作为无效操作,所述无效操作为在不存在待接收数据的情况下发起的数据接收操作。
本实施例中,接收方节点会劫持轮询请求,并解析轮询请求得到目标虚拟文件描述符,进而确定与目标虚拟文件描述符相匹配的目标真实文件描述符。其中,目标虚拟文件描述符可以用ep_fd表示,目标真实文件描述符可以用ep_rfd表示。在接收数据之前,接收方节点可以劫持用户应用程序针对epoll_create()的调用请求,并基于该调用请求创建存在匹配关系的目标虚拟文件描述符和目标真实文件描述符,然后将目标虚拟文件描述符返回给接收方用户应用程序,将目标真实文件描述符存储至本地。由此,用户应用程序可以基于目标虚拟文件描述符发起轮询请求和数据接收操作。
接收方节点劫持轮询请求后,对轮询请求进行解析可以得到目标虚拟文件描述符,然后确定与目标虚拟文件描述符相匹配的目标真实文件描述符。该目标真实文件描述符用于指示调用基于RDMA的API进行轮询。接收方节点根据目标真实文件描述符调用基于RDMA的API,去轮询接收方用户应用程序中用于接收数据的各线程中是否存在待接收数据。如果轮询结果表明存在待接收数据,则接收方节点将存在待接收数据的响应消息返回至接收方用户应用程序。接收方用户应用程序在接收到存在待接收数据的响应消息后,可以发起数据接收操作以接收数据。
本实施例中,接收方节点通过劫持用户应用程序发起的轮询请求,根据轮询请求中携带的目标虚拟文件描述符确定相匹配的目标真实文件描述符,并根据目标真实文件描述符调用基于RDMA的API对用户应用程序的线程进行轮询,可以在用户应用程序无感知的情况下,实现了使用RDMA技术轮询用户应用程序的各线程的待接收数据情况,有效提高了轮询效率。并且上述方式可以支持busy polling(忙碌轮询),即在一个循环中不断检查是否有数据待接收,从而有助于在轮询结果表明存在待接收数据的情况下,及时通知用户应用程序接收数据。
在一些可能的实施方式中,接收方节点还可以记录接收方用户应用程序所连接的各个RDMA连接通道的数据传输情况。所述数据传输情况可以用CQ(Completion Queue)队列来记录。CQ队列是RDMA通信中一种用于接收完成事件的队列。当一个基于RDMA的数据传输操作(即一个会话)完成时,网卡会将对应于该数据传输操作的完成事件报告给用户应用程序。CQ队列可以存储这些完成事件。
接收方节点还可以记录接收方用户应用程序中用于接收数据的各个线程与各个RDMA连接通道的对应关系。因为一个线程可以对应多个RDMA连接通道,而一个RDMA连接通道只能对应一个线程。通常,同一个线程所对应的RDMA连接通道的数据传输情况可以存储在同一个CQ队列中。
当接收方节点根据轮询请求携带的目标虚拟文件描述符确定出目标真实文件描述符之后,接收方节点可以根据目标真实文件描述符确定出与各线程相对应的目标RDMA连接通道,然后从各线程对应的CQ队列中获取目标RDMA连接通道的数据传输情况,并根据获取的数据传输情况确定接收方用户应用程序是否存在待接收数据。具体的,如果CQ队列中不存在某一目标RDMA连接通道的完成事件,说明该目标RDMA连接通道上的数据传输操作尚未完成,即该目标RDMA连接通道对应的线程上存在待接收数据。
本实施例中,接收方节点通过记录用户应用程序所连接的各个RDMA连接通道的数据传输情况,以及各个RDMA连接通道与各线程的对应关系,从而在用户应用程序发起针对是否存在待接收数据的轮询请求时,根据记录的对应关系确定出各个线程对应的目标RDMA通道,进而根据目标RDMA通道的数据传输情况判断是否存在待接收数据。此种方式有助于提高轮询的准确性和效率,避免轮询过程中遗漏某一线程导致轮询结果出错。
S602:基于所述数据接收操作,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API。
与发送方节点类似,接收方节点在接收数据之前,已经创建了虚拟文件描述符和真实文件描述符,并将真实文件描述符存储在本地,将虚拟文件描述符返回给用户应用程序,具体过程可以参见S501的内容,此处不再赘述。所以,当接收方节点在劫持、解析数据接收操作获得虚拟文件描述符之后,可以在本地查找与该虚拟文件描述符相匹配的真实文件描述符。该真实文件描述符用于指示调用基于RDMA的API来接收数据。需要注意的是,同一节点既可以为接收方节点,也可以为发送方节点,因此,每个节点只需创建一次虚拟文件描述符和真实文件描述符,即可利用虚拟文件描述符和真实文件描述符进行数据的发送操作和接收操作,无需重复创建虚拟文件描述符和真实文件描述符。
S603:基于所述真实文件描述符调用所述基于RDMA的API接收数据。
接收方节点调用基于RDMA的API接收其他节点发送的数据,有助于基于RDMA技术提高数据接收的效率。
上述基于RDMA的数据发送及数据接收方法可以采用一个数据传输优化模块实现,该数据传输优化模块可以部署在节点的用户态空间。图7为一示例性实施例提供的一种数据传输优化模块的部署架构示意图。如图7所示,该数据传输优化模块可以包括劫持装置、握手装置、数据收发装置、数据缓存管理装置、会话管理装置。其中,劫持装置分别与握手装置、数据收发装置、数据缓存管理装置、会话管理装置、用户应用程序以及rdma-core库通信连接。此外,数据收发装置还与内核态空间的硬件设备通信连接。
劫持装置用于劫持用户应用程序发起的数据发送请求、数据接收操作等各类操作请求。劫持装置在首次劫持用户应用程序发起的针对第一API的调用请求时,会根据该劫持到的调用请求创建存在匹配关系的虚拟文件描述符和真实文件描述符,并将虚拟文件描述符返回至用户应用程序,将真实文件描述符存储在劫持装置本地。类似的,劫持装置还可以劫持用户应用程序针对epoll_create()的调用请求,并基于该调用请求创建存在匹配关系的目标虚拟文件描述符和目标真实文件描述符。劫持装置将目标虚拟文件描述符返回给用户应用程序,将目标真实文件描述符存储在劫持装置本地。
当发送方节点上的用户应用程序发起数据发送请求时,发送方节点上的劫持装置劫持并解析该数据发送请求,得到数据发送请求中携带的虚拟文件描述符,进而确定出与虚拟文件描述符相匹配的真实文件描述符。
当接收方节点上的用户应用程序发起数据接收操作时,接收方节点上的劫持装置劫持并解析该数据接收操作,得到数据接收操作中携带的虚拟文件描述符,进而确定出与虚拟文件描述符相匹配的真实文件描述符。
握手装置用于建立RDMA连接通道。图8是一示例性实施例示出的一种握手装置的工作流程示意图。如图8所示,握手装置建立RDMA连接通道共包括五个过程,具体的:
过程①:当发送方节点的用户应用程序对其他节点发起原始连接请求时,发送方节点上的劫持装置会劫持并解析该原始连接请求,得到目标用户应用程序的相关信息(比如目标用户应用程序的标识、目标用户应用程序所处节点的信息等)。然后,发送方节点上的劫持装置会根据目标用户应用程序的相关信息创建目标连接请求
过程②:发送方节点上的劫持装置将目标连接请求发送给发送方节点上的握手装置。
过程③:发送方节点上的握手装置将此目标连接请求发送至接收方节点(即目标用户应用程序所处节点)上的握手装置。然后两个握手装置之间建立第一连接通道,并在建立好的第一连接通道上交换用于建立RDMA连接通道的目标消息。
过程④:接收方节点上的握手装置会通过接收方节点的劫持装置,向目标用户应用程序发送所述目标信息,以使目标用户应用程序知晓与发送方用户应用程序之间存在通信连接。
过程⑤:发送方用户应用程序和目标用户应用程序基于交换的目标消息建立RDMA连接通道。
会话管理装置用于管理每个用户应用程序的各个线程所对应的RDMA连接通道。具体的,会话管理装置可以记录每一用户应用程序所连接的各个RDMA连接通道的数据传输情况,以及记录每一用户应用程序中用于接收数据的各个线程与各个RDMA连接通道的对应关系。
图9是一示例性实施例示出的一种会话管理装置的工作流程示意图。如图9所示,会话管理装置管理了6个RDMA连接通道的数据传输情况,其中,RDMA连接通道1~2对应于线程1,RDMA连接通道3~6对应于线程2。线程1的数据传输情况记录在队列CQ1中,线程2的数据传输情况记录在队列CQ2中。那么,当用户应用程序发起针对线程1的轮询请求时,会话管理装置可以从队列CQ1中获取RDMA连接通道1和2的数据传输情况,并根据该数据传输情况确定线程1中是否存在待接收数据。
数据缓存管理装置用于管理每个RDMA连接通道对应的存储区域。数据收发装置用于管理数据的发送和接收。当节点作为发送方节点时,该节点上的数据收发装置用于管理数据的发送;当节点作为接收方节点时,该节点上的数据收发装置用于管理数据的接收。
图10为一示例性实施例示出的发送方节点上数据传输优化模块中各装置的工作流程示意图。如图10所示,在过程①中,发送方节点上的劫持装置劫持用户应用程序发起的数据发送请求,得到真实文件描述符。然后,劫持装置基于真实文件描述符确定出本次数据传输的目标RDMA连接通道。在过程②中,劫持装置将需要发送的数据和目标RDMA连接通道的通道信息发送给发送方节点上的数据缓存管理装置。数据缓存管理装置根据目标RDMA连接通道的通道信息,确定出该目标RDMA连接通道对应的存储区域(图10所示的斜线区域),并将需要发送的数据存储在该对应的存储区域(下称“原始存储区域”)。
在过程③中,劫持装置激活发送方节点上的数据收发装置。在过程④中,激活后的数据收发装置基于劫持装置发送的真实文件描述符,调用基于RDMA的API,将需要发送的数据通过目标RDMA连接通道从原始存储区域发送至接收方节点的目标存储区域。所述目标存储区域与目标RDMA连接通道存在对应关系,该对应关系由接收方节点的数据缓存管理装置负责管理。
图11为一示例性实施例示出的接收方节点上数据传输优化模块中各装置的工作流程示意图。如图11所示,该工作流程共包括9个过程:
过程①:当用户应用程序发起轮询请求时,劫持装置劫持并解析该轮询请求,得到轮询请求中携带的目标虚拟文件描述符,进而确定出与目标虚拟文件描述符相匹配的目标真实文件描述符。
过程②:劫持装置基于劫持的轮询请求激活数据收发装置,并将目标真实文件描述符发送给数据收发装置。
过程③:激活后的数据收发装置基于目标真实文件描述符,调用基于RDMA的API向会话管理装置轮询是否存在待接收数据。
过程④:会话管理装置向数据收发装置返回轮询结果。
过程⑤:在轮询结果为存在待接收数据的情况下,数据收发装置将存在待接收数据的响应消息发送至劫持装置。
过程⑥:劫持装置将存在待接收数据的响应消息返回至用户应用程序。
过程⑦:用户应用程序在接收到存在待接收数据的响应消息后,发起数据接收操作。劫持装置劫持并解析该数据接收操作,得到数据接收操作中携带的虚拟文件描述符,进而确定出与虚拟文件描述符相匹配的真实文件描述符。
过程⑧:劫持装置将真实文件描述符发送给数据收发装置。
过程⑨:数据收发装置先基于真实文件描述符确定出目标RDMA通道,然后调用基于RDMA的API,从与目标RDMA通道相对应的目标存储区域中读取待接收数据。
显然,上述数据传输方式,无需对用户应用程序进行侵入修改,只需在用户态空间提前部署基于RDMA的API,即可实现使用RDMA技术提高数据发送的效率。并且,数据传输优化模块部署在用户态空间,与内核态空间无关,因此,后续更新或修复基于RDMA的API比较方便,且不会对操作系统造成影响。
示例性装置
在本公开的示例性实施例中,还提供了一种基于RDMA的数据发送装置。
请参见图12,图12是一示例性实施例提供的一种基于RDMA的数据发送装置的框图。所述数据发送装置可以应用于运行有用户应用程序的发送方节点。
如图12所示,基于RDMA的数据发送装置1200可以包括:第一劫持模块1201,第一确定模块1202,第一调用模块1203。其中:
所述第一劫持模块1201,用于劫持所述用户应用程序发起的向其他节点发送数据的数据发送请求,所述数据发送请求携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API,所述其他节点区别于所述发送方节点。
所述第一确定模块1202,用于基于所述数据发送请求,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API。
所述第一调用模块1203,用于基于所述真实文件描述符调用所述基于RDMA的API向所述其他节点发送所述数据。
可选的,所述装置还包括:
创建模块1204,用于劫持所述用户应用程序针对所述第一API的调用请求,并基于所述调用请求向所述用户应用程序返回所述虚拟文件描述符;基于所述调用请求创建所述真实文件描述符,并将所述真实文件描述符存储在本地。
可选的,所述装置还包括:
通道建立模块1205,用于劫持所述用户应用程序发起的与所述其他节点的目标用户应用程序建立通信连接的原始连接请求;基于所述原始连接请求生成目标连接请求,并将所述目标连接请求发送至所述其他节点,以与所述目标用户应用程序建立第一连接通道;基于所述第一连接通道与所述目标用户应用程序交换用于建立RDMA连接通道的目标信息,并基于所述目标信息建立所述RDMA连接通道。
可选的,所述装置还包括:
存储模块1206,用于基于所述真实文件描述符,确定所述用户应用程序与所述目标用户应用程序之间的目标RDMA连接通道;基于连接通道与存储区域的对应关系,将所述数据存储至对应于所述目标RDMA连接通道的目标存储区域。
所述第一调用模块1203具体用于:从所述目标存储区域获取所述数据,并调用所述基于RDMA的API将所述数据通过所述目标RDMA连接通道发送至所述其他节点。
图13是一示例性实施例提供的一种基于RDMA的数据接收装置的框图。所述数据接收装置可以应用于运行有用户应用程序的接收方节点。
如图13所示,基于RDMA的数据接收装置1300可以包括:第二劫持模块1301,第二确定模块1302,第二调用模块1303。其中:
所述第二劫持模块1301,用于劫持所述用户应用程序发起的数据接收操作,所述数据接收操作携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API。
所述第二确定模块1302,用于基于所述数据接收操作,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API。
所述第二调用模块1303,用于基于所述真实文件描述符调用所述基于RDMA的API接收数据。
可选的,所述装置还包括:
轮询模块1304,用于劫持所述用户应用程序发起的用于轮询所述用户应用程序是否存在待接收数据的轮询请求,所述轮询请求携带有用于指示所述用户应用程序中用于接收数据的各线程的目标虚拟文件描述符;基于所述轮询请求确定与所述目标虚拟文件描述符相匹配的目标真实文件描述符,所述目标真实文件描述符用于指示调用所述基于RDMA的API进行轮询;基于所述目标真实文件描述符调用所述基于RDMA的API进行轮询,并在轮询结果表明存在所述待接收数据的情况下,向所述用户应用程序返回存在所述待接收数据的响应消息,以使所述用户应用程序基于所述响应消息发起所述数据接收操作。
可选的,所述装置还包括:
记录模块1305,用于记录所述用户应用程序所连接的各个RDMA连接通道的数据传输情况,以及所述各个RDMA连接通道与所述各线程的对应关系;所述基于所述目标真实文件描述符调用所述基于RDMA的API进行轮询,包括:基于所述目标真实文件描述符确定与所述各线程相对应的目标RDMA连接通道;获取所述目标RDMA连接通道的数据传输情况,并根据该数据传输情况确定是否存在所述待接收数据。
上述基于RDMA的数据发送装置1200和基于RDMA的数据接收装置1300的各个模块的具体细节,已经分别在之前描述基于RDMA的数据发送方法以及基于RDMA的数据接收方法流程中进行了详细的描述,因此,此处不再赘述。
应当注意,尽管在上文详细描述中提及基于RDMA的数据发送装置1200、基于RDMA的数据接收装置1300的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
示例性介质
在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施例中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施例的步骤。
请参见图14,图14是一示例性实施例提供的一种可读存储介质的示意图。该可读存储介质对应于上述方法。
参考图14所示,描述了根据本公开的实施例的用于实现上述方法的可读存储介质1400,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的可读存储介质不限于此,在本公开中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
示例性电子设备
在本公开的示例性实施例中,还提供了一种能够实现上述基于RDMA的数据发送方法的电子设备。
请参见图15,图15是一示例性实施例提供的一种能够实现上述方法的电子设备的示意图。
下面参照图15来描述根据本公开的这种实施例的电子设备1500。图15显示的电子设备1500仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图15所示,电子设备1500以通用计算设备的形式表现。电子设备1500的组件可以包括但不限于:上述至少一个处理单元1501、上述至少一个存储单元1502、连接不同系统组件(包括存储单元1502和处理单元1501)的总线1503。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元1501执行,使得所述处理单元1501执行本说明书上述各种实施例的步骤。
存储单元1502可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)15021和/或高速缓存存储单元15022,还可以进一步包括只读存储单元(ROM)15023。
存储单元1502还可以包括具有一组(至少一个)程序模块15025的程序/使用工具15024,这样的程序模块15025包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包含网络环境的现实。
总线1503可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备1500也可以与一个或多个外部设备1504(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1500交互的设备通信,和/或与使得该电子设备1500能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1505进行。并且,电子设备1500还可以通过网络适配器1506与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1506通过总线1503与电子设备1500的其它模块通信。应当明白,尽管图15中未示出,可以结合电子设备1500使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施例的描述,本领域的技术人员易于理解,这里描述的示例实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施例的方法。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当注意,尽管在上文详细描述中提及了装置的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

Claims (10)

1.一种基于RDMA的数据发送方法,其特征在于,所述方法应用于运行有用户应用程序的发送方节点,所述方法包括:
劫持所述用户应用程序发起的向其他节点发送数据的数据发送请求,所述数据发送请求携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API,所述其他节点区别于所述发送方节点;
基于所述数据发送请求,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API;
基于所述真实文件描述符调用所述基于RDMA的API向所述其他节点发送所述数据。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
劫持所述用户应用程序针对所述第一API的调用请求,并基于所述调用请求向所述用户应用程序返回所述虚拟文件描述符;
基于所述调用请求创建所述真实文件描述符,并将所述真实文件描述符存储在本地。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
劫持所述用户应用程序发起的与所述其他节点的目标用户应用程序建立通信连接的原始连接请求;
基于所述原始连接请求生成目标连接请求,并将所述目标连接请求发送至所述其他节点,以与所述目标用户应用程序建立第一连接通道;
基于所述第一连接通道与所述目标用户应用程序交换用于建立RDMA连接通道的目标信息,并基于所述目标信息建立所述RDMA连接通道。
4.根据权利要求3所述的方法,其特征在于,
所述方法还包括:基于所述真实文件描述符,确定所述用户应用程序与所述目标用户应用程序之间的目标RDMA连接通道;
基于连接通道与存储区域的对应关系,将所述数据存储至对应于所述目标RDMA连接通道的目标存储区域;
所述基于所述真实文件描述符调用所述基于RDMA的API向所述其他节点发送所述数据,包括:
从所述目标存储区域获取所述数据,并调用所述基于RDMA的API将所述数据通过所述目标RDMA连接通道发送至所述其他节点。
5.一种基于RDMA的数据接收方法,其特征在于,所述方法应用于运行有用户应用程序的接收方节点,所述方法包括:
劫持所述用户应用程序发起的数据接收操作,所述数据接收操作携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API;
基于所述数据接收操作,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API;
基于所述真实文件描述符调用所述基于RDMA的API接收数据。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
劫持所述用户应用程序发起的用于轮询所述用户应用程序是否存在待接收数据的轮询请求,所述轮询请求携带有用于指示所述用户应用程序中用于接收数据的各线程的目标虚拟文件描述符;
基于所述轮询请求确定与所述目标虚拟文件描述符相匹配的目标真实文件描述符,所述目标真实文件描述符用于指示调用所述基于RDMA的API进行轮询;
基于所述目标真实文件描述符调用所述基于RDMA的API进行轮询,并在轮询结果表明存在所述待接收数据的情况下,向所述用户应用程序返回存在所述待接收数据的响应消息,以使所述用户应用程序基于所述响应消息发起所述数据接收操作。
7.一种基于RDMA的数据发送装置,其特征在于,所述装置应用于运行有用户应用程序的发送方节点,所述装置包括:
第一劫持模块,用于劫持所述用户应用程序发起的向其他节点发送数据的数据发送请求,所述数据发送请求携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API,所述其他节点区别于所述发送方节点;
第一确定模块,用于基于所述数据发送请求,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API;
第一调用模块,用于基于所述真实文件描述符调用所述基于RDMA的API向所述其他节点发送所述数据。
8.一种基于RDMA的数据接收装置,其特征在于,所述装置应用于运行有用户应用程序的接收方节点,所述装置包括:
第二劫持模块,用于劫持所述用户应用程序发起的数据接收操作,所述数据接收操作携带有用于指示调用第一API的虚拟文件描述符,所述第一API区别于基于RDMA的API;
第二确定模块,用于基于所述数据接收操作,确定与所述虚拟文件描述符相匹配的真实文件描述符,所述真实文件描述符用于指示调用所述基于RDMA的API;
第二调用模块,用于基于所述真实文件描述符调用所述基于RDMA的API接收数据。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1-6中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-6中任一项所述方法的步骤。
CN202311231547.8A 2023-09-21 2023-09-21 基于rdma的数据发送方法、装置、电子设备及存储介质 Pending CN117278549A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311231547.8A CN117278549A (zh) 2023-09-21 2023-09-21 基于rdma的数据发送方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311231547.8A CN117278549A (zh) 2023-09-21 2023-09-21 基于rdma的数据发送方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN117278549A true CN117278549A (zh) 2023-12-22

Family

ID=89205685

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311231547.8A Pending CN117278549A (zh) 2023-09-21 2023-09-21 基于rdma的数据发送方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN117278549A (zh)

Similar Documents

Publication Publication Date Title
US20180217948A1 (en) USB Device Access Method, Apparatus and System, a Terminal, and a Server
CN102394872B (zh) 数据通信协议
US20050278418A1 (en) System and method for use of multiple applications
US20220214932A1 (en) Methods, devices and computer storage media for inter-mini program platform communication
WO2022127118A1 (zh) 文件传输方法、装置、电子设备及存储介质
WO2021189257A1 (zh) 恶意进程的检测方法、装置、电子设备及存储介质
US20180234517A1 (en) Redirecting scanners and printers over a wan
US20220245005A1 (en) Methods, devices and computer storage media for inter-mini program platform discovery
CN114124929A (zh) 跨网络的数据处理方法和装置
WO2021088671A1 (zh) 一种端能力的调用方法、设备和计算机存储介质
WO2021179156A1 (zh) 消息处理方法、装置、系统以及服务器
US9128886B2 (en) Computer implemented method, computer system, electronic interface, mobile computing device and computer readable medium
US10402364B1 (en) Read-ahead mechanism for a redirected bulk endpoint of a USB device
EP2015190B1 (en) Technique of controlling communication of installed apparatus with outside by means of proxy server
CN113422669B (zh) 数据传输方法、装置和系统、电子设备以及存储介质
CN111327680B (zh) 认证数据同步方法、装置、系统、计算机设备和存储介质
WO2023246486A1 (zh) 一种创建连接器的方法及装置
US10402307B2 (en) System and method for providing runtime tracing for a web-based client accessing a transactional middleware platform using an extension interface
CN114912103A (zh) 一种访问控制方法及相关装置
US10742776B1 (en) Accelerating isochronous endpoints of redirected USB devices
CN108279855B (zh) 一种读写存储设备的方法
CN117278549A (zh) 基于rdma的数据发送方法、装置、电子设备及存储介质
US20110191405A1 (en) Automatic Client-Server Code Generator
CN113452948B (zh) 会议终端的控制方法、装置、设备及存储介质
CN115022074A (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