CN115623057A - 基于rdma的建连方法、装置、设备及存储介质 - Google Patents
基于rdma的建连方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115623057A CN115623057A CN202211211865.3A CN202211211865A CN115623057A CN 115623057 A CN115623057 A CN 115623057A CN 202211211865 A CN202211211865 A CN 202211211865A CN 115623057 A CN115623057 A CN 115623057A
- Authority
- CN
- China
- Prior art keywords
- link
- rdma
- virtual
- application
- server
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/26—Special purpose or proprietary protocols or architectures
Abstract
本申请实施例提供一种基于RDMA的建连方法、装置、设备及存储介质。在本申请实施例中,针对客户端与服务端两侧上层应用之间需要建立多条通信链接的场景,在RDMA链接之上抽象出虚拟链接,允许在一条RDMA链接上创建多条虚拟连接,多条虚拟链接共享一条RDMA链接的资源,使得两侧上层应用通过承载于同一RDMA链接的多条虚拟链接实现多路数据传输,这样既能解决两侧上层应用之间需要多条通信链接的问题,又能因为同一RDMA链接会承载多条虚拟链接而减少RDMA链接的数量,一定程度上规避了RDMA建连慢的问题,尤其是在所需链接数量较多的情况下能够显著提高整体的建连速度。
Description
技术领域
本申请涉及RDMA技术领域,尤其涉及一种基于RDMA的建连方法、装置、设备及存储介质。
背景技术
远程内存访问(Remote Direct Memory Access,RDMA)协议,凭借其旁路内核的特性,允许应用与网卡之间的直接数据读写,可以将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入,规避了传输控制协议/网际协议(TransmissionControl Protocol/Internet Protocol,TCP/IP)协议的限制,能有效降低通讯的时延以及CPU的占用率,被广泛应用于内存数据库、分布式存储、高性能计算等领域。
但是,相比于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链接是所述客户端与所述服务端之间存在可被所述客户端侧第一应用复用的RDMA链接;发送模块,用于基于所述第一RDMA链接向所述客户端返回应答消息,所述应答消息至少包括表示收到所述第一通道标识的消息,以供在在所述第一RDMA链接上创建与所述第一通道标识对应的第一虚拟链接,所述第一虚拟链接用于所述第一应用通过所述第一RDMA链接向所述服务端侧第二应用进行数据传输。
本申请实施例还提供一种电子设备,包括存储器和处理器,所述存储器用于存储计算机程序,所述处理器与所述存储器耦合,用于执行所述计算机程序,以用于实现本申请实施例提供的任一基于RDMA的建连方法中的步骤。
本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,当所述计算机程序被处理器执行时,致使所述处理器能够实现本申请实施例提供的任一基于RDMA的建连方式中的步骤。
在本申请实施例中,在RDMA链接之上抽象出虚拟链接,允许在客户端与服务端之间的一条RDMA链接上创建多条虚拟连接,多条虚拟链接共享一条RDMA链接的资源,使得两侧上层应用通过承载于同一RDMA链接的多条虚拟链接实现多路数据传输,这样既能解决两侧上层应用之间需要多条通信链接的问题,又能因为同一RDMA链接会承载多条虚拟链接而减少RDMA链接的数量,一定程度上规避了RDMA建连慢的问题,尤其是在所需链接数量较多的情况下能够显著提高整体的建连速度。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1a为本申请实施例提供的第一应用与第二应用通过RDMA链接通信的示意图;
图1b为本申请实施例提供的一种客户端或服务端用于实现建连的内部架构图;
图1c为本申请实施例提供的另一种客户端或服务端用于实现建连的内部架构图;
图2a为本申请实施例提供的一种基于RDMA的建连交互流程示意图;
图2b为本申请实施例提供的另一种基于RDMA的建连交互流程示意图;
图2c为本申请实施例提供的一种虚拟连接和RDMA连接关闭流程示意图;
图3a为本申请实施例提供的一种基于RDMA的建连方法的流程示意图;
图3b为本申请实施例提供的一种获取可复用的RDMA链接的流程示意图;
图4为本申请实施例提供的另一种基于RDMA的建连方法的流程示意图;
图5为本申请实施例提供的一种基于RDMA的建连装置的结构示意图;
图6为本申请实施例提供的另一种基于RDMA的建连装置的结构示意图;
图7为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
针对现有RDMA建连慢的技术问题,在本申请一些实施例中,在RDMA链接之上抽象出虚拟链接,允许在客户端与服务端之间的一条RDMA链接上创建多条虚拟连接,多条虚拟链接共享一条RDMA链接的资源,两侧上层应用可以通过承载于同一RDMA链接上的多条虚拟连接进行多路数据传输,这样既能解决两侧上层应用之间需要多条通信链接的问题,又能因为同一RDMA链接会承载多条虚拟链接而减少RDMA链接的数量,一定程度上规避了RDMA建连慢的问题,尤其是在所需链接数量较多的情况下能够显著提高整体的建连速度。
在本申请实施例中,客户端与服务端是相对而言的,是指需要建立通信链接并基于所建立的通信链接进行数据传输的两端。在本实施例中,对客户端与服务端之间的角色不做限定,当一方需要向另一方发起建连请求时,发起建连请求的一方可作为客户端,另一方可作为服务端。因此,客户端和服务端也可以称为第一通信端和第二通信端,或者也可以称为第一主机端或第二主机端。
无论是客户端还是服务端,可运行在各种电子设备上,例如智能手机、平板电脑、个人电脑、穿戴设备等,也可以是传统服务器、云服务器或服务器集群等。在本实施例中,电子设备通常包括至少一个处理单元和至少一个存储器。处理单元和存储器的数量取决于电子设备的配置和类型。存储器可以包括易失性的,例如RAM,也可以包括非易失性的,例如只读存储器(Read-Only Memory,ROM)、闪存等,或者也可以同时包括两种类型。存储器内通常存储有操作系统(Operating System,OS)、一个或多个应用程序(也可称为上层应用)的程序代码,也可以存储有程序数据等。除了处理单元和存储器之外,电子设备还包括RDMA设备,RDMA设备是指支持RDMA传输协议的网络接口卡,可简称为RNIC。
在本实施例中,客户端和服务端侧的电子设备上均运行有上层应用,当客户端侧的上层应用需要与服务端侧的上层应用进行通信时,可以发起建连请求;客户端根据上层应用的建连请求与服务端建立通信链接,基于该通信链接为客户端侧的上层应用与服务端侧的上层应用提供数据传输服务。在本实施例中,客户端与服务端之间的通信链接是一种广泛意义上的通信链接,既包括物理链接,也包括承载于物理链接上的虚拟链接,所述物理链接可以是TCP链接、用户数据报协议(User Datagram Protocol,UDP)链接或RDMA链接。在本申请各实施例中,物理链接主要是指RDMA链接。
在本申请实施例中,客户端和服务端具有通过其所在电子设备上的RDMA设备收发数据的能力。因此,如图1a所示,客户端与服务端之间可以建立RDMA链接,两侧上层应用可以基于该RDMA链接进行数据传输。其中,以客户端侧的上层应用通过RDMA设备收发数据的过程为例,上层应用通过向RDMA设备的发送队列(SQ)和接收队列(RQ)写入WQE(Work QueueElement),通知网卡进行数据发送和数据接收,RDMA设备在任务完成后向其完成队列(CQ)写入CQE(Completion Queue Element),通知上层应用IO读写任务完成。其中,若收到发送操作的CQE,则表示写事件;若收到接收操作的CQE,则表示读事件。需要说明的是,RDMA设备和网卡可以集成在同一网络接口设备上实现,也可以作为两个独立的设备实现但相互之间通信连接。
在本实施例中,客户端和服务端所在电子设备上具有RDMA设备,且客户端和服务端也具有通过其RDMA设备收发数据的能力,但本申请实施例并不限定开发上层应用所依赖的用于数据传输的网络协议,凡是能够支持客户端和服务端通过其RDMA设备为其上层应用进行数据收发的网络协议均适用于本申请实施例。例如,开发上层应用所依赖的网络协议包括但不限于:RDMA协议、TCP/IP协议、UDP/IP协议等。
进一步说明,无论开发上层应用所依赖的网络协议是哪种,在通过RDMA设备进行数据收发时就需要创建RDMA链接,就会面临RDMA建连慢的问题,尤其是在需要创建多条RDMA链接的情况下,RDMA建连慢的问题会更为突出。为此,在本申请实施例中,在RDMA链接之上抽象出虚拟链接,允许在客户端与服务端之间的一条RDMA链接创建多条虚拟连接,多条虚拟链接共享一条RDMA链接的资源,两侧的上层应用通过承载于同一RDMA链接上的多条虚拟链接进行多路数据传输,既能解决两端应用之间需要多条通信链接的问题,又能因为同一RDMA链接能够同时承载多条虚拟链接而减少RDMA链接的数量,一定程度上规避了RDMA建连慢的问题,尤其是在两端应用所需链接数量较多的情况下能够显著提高整体建连速度。
在本申请实施例中,虚拟链接是在RDMA链接之上抽象的通信链接,是对物理链接的模拟,虽然多条虚拟链接可以共享同一条RDMA链接的资源,但不同虚拟链接中的数据是可以区分且是相互隔离的。针对开发上层应用所依赖的网络协议的不同,虚拟链接会略有不同,主要在于虚拟连接所模拟的物理链接是不一样的,下面针对两种应用场景进行示例性说明。
在一些应用场景中,上层应用是基于RDMA协议开发的,在该应用场景中,按照传统的方案,客户端与服务端侧的上层应用之间进行数据传输时,客户端与服务端之间需要创建RDMA链接,面临着RDMA链接建连慢的问题,尤其是在两侧上层应用之间需要进行多进程通信时,意味着客户端与服务端之间需要创建多条RDMA链接,在该情况下,RDMA建连慢的问题会更为突出。在本申请实施例中,如图1b所示的客户端或服务端的内部软件架构,包括面向上层应用提供的建连接口(如RDMA建连接口)、虚拟链接层和RDMA链接层。建连接口(如RDMA建连接口)用于供基于RDMA协议开发的上层应用调用以发起建连请求,RDMA链接层用于创建RDMA链接,虚拟链接层用于在RDMA链接上创建虚拟链接。基于图1b所示软件架构,在RDMA链接之上抽象出虚拟链接,通过虚拟链接模拟RDMA链接,允许一条RDMA链接绑定多条虚拟连接,多条虚拟链接共享一条RDMA链接的资源,两侧上层应用之间通过承载于同一RDMA链接上的多条虚拟链接进行多路数据传输,既能满足两侧上层应用之间的多进程通信需求,又能减少实际创建的RDMA链接的数量,一定程度上规避了RDMA建连慢的问题。在该应用场景中,虚拟链接是对RDMA链接的模拟,用于替代RDMA链接来发挥RDMA链接的作用。
在另一些应用场景中,上层应用是基于TCP/IP协议开发的,在该应用场景中,两侧上层应用之间需要建立TCP链接,但是,为了让上层应用能够享受到RDMA传输数据速度快的福利,通常会将RDMA链接和TCP链接进行1:1的替换,既把RDMA链接当作TCP链接使用,这同样面临着RDMA链接建连慢的问题,尤其是在两侧上层应用之间需要进行多进程通信时,意味着客户端与服务端之间需要创建多条RDMA链接替换多条TCP链接,在该情况下,RDMA建连慢的问题会更为突出。在本申请实施例中,如图1c所示的客户端或服务端的内部软件架构,包括面向上层应用提供的建连接口(如套接字接口)、虚拟链接层和RDMA链接层。建连接口(如套接字接口)用于供基于TCP/IP协议开发的上层应用调用以发起建连请求,RDMA链接层用于创建RDMA链接,虚拟链接层用于在RDMA链接上创建虚拟链接。基于图1c所示软件架构,在RDMA链接之上抽象出虚拟链接,通过虚拟链接模拟TCP链接,允许一条RDMA链接绑定多条虚拟连接,多条虚拟链接共享一条RDMA链接的资源,两侧上层应用之间通过承载于同一RDMA链接上的多条虚拟链接进行多路数据传输,既能满足两侧上层应用之间的多进程通信需求,又能减少所创建的RDMA链接的数量,一定程度上规避了RDMA建连慢的问题。在该应用场景中,虚拟链接是对TCP链接的模拟,用于替代TCP链接来发挥TCP链接的作用。
如图1b和图1c所示,客户端或服务端侧运行有多个上层应用,以应用1-应用N为例进行图示,N是≥2的正整数,客户端或服务端可以为每个上层应用创建RDMA链接,并在所创建的RDMA链接上创建该上层应用所需的多条虚拟链接;不同上层应用使用的RDMA链接是独立的。在本实施例中,当客户端侧任一上层应用需要与服务端侧任一上层应用进行通信时,可由客户端和服务端相互配合,为两侧的上层应用创建虚拟链接,以使两侧的上层应用基于所创建的虚拟链接通过RDMA链接进行数据传输。需要说明的是,针对两端具有通信需求的任一对上层应用,客户端和服务端为其创建通信链接的过程相同或相似,故在下述实施例中,以客户端侧的第一应用需要与服务端侧的第二应用进行通信为例,描述客户端和服务端为第一应用和第二应用创建虚拟链接的过程。第一应用可以是客户端上的任一上层应用,第二应用可以是服务端上的任一上层应用。
以下结合附图,从客户端与服务端交互建连或断连的过程对本申请实施例技术方案进行详细说明。
图2a为本申请实施例提供的一种基于RDMA的建连方法的交互过程示意图。如图2a所示,该方法包括:
21a、客户端向服务端请求创建RDMA链接;
22a、服务端与客户端交互完成RDMA链接的创建;
23a、客户端向服务端请求在已创建的RDMA链接上创建一条虚拟链接;
24a、服务端与客户端交互在已创建的RDMA链接上完成虚拟链接的创建;
25a、客户端再次向服务端请求在已创建的RDMA链接上创建另一条虚拟链接;
26a、服务端与客户端再次交互在已创建的RDMA链接上完成另一条虚拟链接的创建。
在本实施例中,当第一应用需要与第二应用通信时,第一应用可以向第二应用发起建连请求。客户端根据第一应用发起的第一建连请求,确定需要与服务端上的第二应用创建虚拟链接。于是,客户端与服务端之间首先建立RDMA链接,该RDMA链接建立过程相对较慢。在此说明,RDMA链接的建立过程并不限于图2a示出的两个步骤,这两个步骤仅仅表示客户端与服务端之间通过交互可以完成RDMA链接的建立。关于RDMA链接的创建过程,本申请实施例不做限定,本申请各实施例通过在已创建完成的RDMA链接上创建虚拟连接,对RDMA链接实现复用。
无论采用何种流程创建RDMA链接,在客户端与服务端之间存在RDMA链接的基础上,可以根据第一应用和第二应用之间的通信需求,在RDMA链接上创建虚拟链接,而且可以在RDMA链接上创建多条虚拟链接。其中,在RDMA链接上创建的虚拟链接与该RDMA链接之间形成绑定关系,每条虚拟链接的数据会通过与其绑定的RDMA链接进行传输,并会与其它与该RDMA链接绑定的虚拟链接的数据进行区分。在图2a所示实施例中,以在同一条RDMA链接上创建两条虚拟链接为例进行图示,但并不限于此。另外说明,虚拟链接的建立过程并不限于图2a示出的两个步骤,这两个步骤仅仅表示客户端与服务端之间通过交互可以完成虚拟链接的建立。
在图2a所示实施例中,从客户端的角度来看,以为第一应用创建一条RDMA链接为例进行图示,但并不限于此。可以为第一应用创建多条RDMA链接,当存在多条RDMA链接时,可以通过RDMA链接池的方式对第一应用使用的多条RDMA链接进行管理。对于不同上层应用的RDMA连接池可以通过上层应用的IP地址和/或端口号进行区分和标记,对此不做限定。其中,每条RDMA链接都可以承载多条虚拟链接,被多条虚拟链接复用。
在本申请各实施例中,并不限定每条RDMA链接最多可承载的虚拟链接的数量,每条RDMA链接所能支持的最大虚拟链接数受客户端、服务端上各种资源(SQ、RQ)以及已经存在的RDMA链接数量、最多允许建立的RDMA链接数等限制。每条RDMA链接所能支持的最大虚拟连接数可由客户端和服务端进行协商确定,可选地,两者可以在创建RDMA链接的过程中协商该条RDMA链接所能支持的最大虚拟链接数。具体地,在创建RDMA链接的过程中,客户端和服务端可以在相关交互消息的自定义字段中携带各自支持的虚拟连接数,完成最大虚拟链接数的协商,详细过程可参见后续实施例,在此不做详述。不同RDMA链接所支持的最大虚拟链接数可以相同,也可以不相同。例如,创建时间较早的RDMA链接所支持的最大虚拟链接数,可以大于创建时间较晚的RDMA链接所支持的最大虚拟链接数。当然,创建时间较早的RDMA链接所支持的最大虚拟链接数,也可以小于创建时间较晚的RDMA链接所支持的最大虚拟链接数。
相比于RDMA链接的创建,虚拟链接的创建速度要快很多,借助于多条虚拟链接对RDMA链接的复用,在第一应用和第二应用之间需要多条通信链接的情况下,采用本实施例的方法可以快速在少量RDMA链接上创建多条虚拟链接,既能满足两端应用之间的多路通信需求,又能减少RDMA链接的数量,一定程度上克服了RDMA建连速度较慢的问题。
在此说明,由于虚拟链接的创建依赖于RDMA链接,在需要创建一条虚拟链接,且客户端与服务端之间不存在任何可复用的RDMA链接的情况下,需要创建一条RDMA链接,然后在该RDMA链接的基础上创建一条虚拟链接,该建连过程的耗时要大于直接创建一条RDMA链接的耗时。为了进一步减少建连耗时,本申请实施例提供的另一种基于RDMA的建连方法,如图2b所示,该建连方法的交互过程包括以下步骤:
21b、客户端向服务端请求创建RDMA链接,与此同时携带创建首条虚拟链接所需的信息;
22b、服务端与客户端交互完成RDMA链接的创建,与此同时携带创建首条虚拟链接所需的信息,同时完成首条虚拟链接的创建;
23b、客户端向服务端请求在已创建的RDMA链接上创建另一条虚拟链接;
24b、服务端与客户端交互在已创建的RDMA链接上完成另一条虚拟链接的创建。
在本实施例中,当第一应用需要与第二应用通信时,第一应用可以向第二应用发起建连请求。客户端根据第一应用发起的第一建连请求,确定需要与服务端上的第二应用创建虚拟链接。在需要新建一条虚拟链接,但客户端与服务端之间却不存在任何可复用的RDMA链接的情况下,可以在创建RDMA链接的过程中同时附带创建首条虚拟链接所需的信息,即在完成创建RDMA链接的同时,也完成与该RDMA链接绑定的首条虚拟链接的创建,相对于图2a所示的实施例,本实施例可以省去了额外创建首条虚拟链接的开销。
进一步,如步骤23b和步骤24b所示,在RDMA链接和首条虚拟链接创建完成的情况下,当需要在该RDMA链接上创建其它虚拟链接时,客户端可以与服务端交互在已创建的RDMA链接上完成其它虚拟链接的创建,该过程与图2a所示实施例相同。需要说明的是,步骤23b和步骤24b为可选步骤,在实际应用中,第一应用和第二应用之间有可能只需要一条虚拟链接。
随着第一应用和第二应用之间通信需求的消失,会涉及虚拟链接和RDMA链接的关闭问题(简称为断连问题)。在本申请实施例中,在关闭虚拟链接时,并不会立即关闭与该虚拟链接绑定的RDMA链接,而是在满足一定条件时才会将RDMA链接关闭,相比于虚拟链接的关闭,RDMA链接的关闭会存在一定延迟。这样,在RDMA链接被关闭之前,若第一应用和第二应用再次出现新的通信需求时,可以直接在这条RDMA链接上创建新的虚拟链接,而不用先创建RDMA链接,可以进一步解决RDMA建连慢的问题。其中,图2c所示为一种虚拟连接和RDMA连接关闭的流程示意图,包括以下步骤:
21c、客户端与服务端交互完成RDMA链接的创建;
22c、客户端与服务端交互在已创建的RDMA链接上完成虚拟链接A1的创建;
23c、一段时间后,客户端与服务端交互完成虚拟链接A1的关闭,此时并不关闭RDMA链接;
24c、一段时间后,客户端与服务端交互在已创建的RDMA链接上完成虚拟链接A2的创建;
25c、一段时间后,客户端与服务端交互完成虚拟链接A2的关闭,此时并不关闭RDMA链接;
26c、在满足关闭RDMA链接的条件时,客户端与服务端交互完成RDMA链接的关闭。
在步骤23c关闭了虚拟链接,但并未关闭RDMA链接,一段时间后,需要创建新的虚拟链接A2时,可以直接在尚未关闭的RDMA链接上创建新的虚拟链接A2,有利于提高虚拟链接A2的创建速度。
关于关闭一条RDMA链接需要满足的条件不做限定,可以分为必要条件和可选条件,可选条件可根据应用需求灵活设定。关闭一条RDMA链接需要满足的必要条件包括但不限于:该RDMA链接上不再承载任何虚拟链接。关闭一条RDMA链接需要满足的可选条件包括但不限于:对第一应用或第二应用而言,需要客户端与服务端之间存在指定数量的RDMA链接;或者,需要客户端与服务端之间存在可复用的RDMA链接。可复用的RDMA链接是指当前承载的虚拟链接数小于该RDMA链接所支持的最大虚拟链接数的RDMA链接。
在上述实施例中,通过客户端与服务端之间的交互过程对本申请实施例提供的建连方案进行了简单说明。下面仍以第一应用和第二应用通信为例,从客户端和服务端的角度分别对本申请实施例提供的基于RDMA的建连过程以及链接关闭过程做进一步详细说明。
图3a为本申请实施例提供的一种基于RDMA的建连方法的流程示意图。该方法是从客户端的角度进行描述的,客户端侧运行有第一应用,如图3a所示,该方法包括:
31、接收第一应用向服务端侧的第二应用发起的第一建连请求,该第一建连请求是第一应用向第二应用发起的多个建连请求中的任一建连请求。
32、根据第一建连请求,获取客户端与服务端之间存在可被第一应用复用的第一RDMA链接。
33、在第一RDMA链接上创建与第一建连请求对应的第一虚拟链接,以使第一应用和第二应用通过承载于第一RDMA链接上的第一虚拟链接进行一路数据传输;
其中,在第一RDMA链接上创建多条虚拟链接的情况下,多条虚拟链接共享第一RDMA链接的资源,以使第一应用和第二应用通过承载于第一RDMA链接上的多条虚拟链接进行多路数据传输。
本实施例提供的方法可由客户端执行。可选地,客户端可以是在第一应用所在电子设备中植入用于执行本实施例提供的基于RDMA的建连方法的动态库,该动态库可面向上上层应用(例如第一应用)提供建连接口,上层应用(例如第一应用)通过调用动态库提供的建连接口发起建连请求。需要说明的是,动态库提供的建连接口与上层应用(例如第一应用)所使用的网络协议适配。举例说明,若第一应用是采用TCP/IP协议或UDP/IP协议开发的,则如图1c所示,该建连接口可以是套接字(socket)接口,相应地,第一建连请求为套接字建连请求;若第一应用是采用RDMA协议开发的,则如图1b所示,该建连接口可以是RDMA建连接口,相应地,第一建连请求为RDMA建连请求。动态库中的库函数用于响应建连接口的调用,获取第一应用向第二应用发起的建连请求,并执行其它步骤在可被第一应用复用的RDMA链接上完成虚拟链接的创建。需要说明的是,在实现形式上,客户端除了是在第一应用所在电子设备中植入的动态库之外,也可以是能够实现本申请实施例提供的基于RDMA的建连方法的API、插件、SDK、APP或客户端程序等。当然,除了以软件方式实现之外,也可以在第一应用所在电子设备上新增能够实现本申请实施例提供的基于RDMA的建连方法的硬件模块,对此不做限定。
在本实施例中,第一应用需要与第二应用通信时,可以通过但不限于调用建连接口的方式发起建连请求。在高并发场景或者在需要多进程通信场景中,第一应用可以向第二应用多次发起建连请求,以请求与第二应用创建多条虚拟链接。针对每个建连请求,客户端为第一应用创建虚拟链接的过程相同或相似,在本实施例中,以任一建连请求为例对虚拟链接的创建过程进行说明,并将任一建连请求称为第一建连请求。
在接收到第一应用向第二应用发起的第一建连请求的情况下,获取客户端与服务端之间可被第一应用复用的第一RDMA链接。客户端与服务端之间可能存在多条RDMA链接,这些RDMA链接可能服务于不同的上层应用,需要从中选择能够为第一应用服务的RDMA链接;当然,客户端和服务端之间也可能不存在能够为第一应用服务的RDMA链接。
基于上述,如图3b所示,一种获取客户端与服务端之间可被第一应用复用的第一RDMA链接方式包括:
321、根据第一建连请求,判断客户端与服务端之间是否存在针对第一应用已创建的RDMA链接;若判断结果为是,即在客户端与服务端之间存在针对第一应用已创建的至少一条RDMA链接的情况下,执行步骤322;若否,即在客户端与所述服务端之间不存在针对第一应用已创建的RDMA链接的情况下,执行步骤324;
322、根据每条RDMA链接当前承载的虚拟链接数,识别至少一条RDMA链接中是否存在当前承载的虚拟链接数小于各自对应的最大虚拟链接数的候选RDMA链接;识别结果为是,即在存在候选RDMA链接的情况下,执行步骤323;若否,即不存在候选RDMA链接的情况下,执行步骤324;
323、从候选RDMA链接中选择一条RDMA链接作为第一RDMA链接。
324、在客户端与服务端之间针对第一应用创建第一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链接中选择资源量(SQ、RQ)最大的一条RDMA链接作为第一RDMA链接;
可以从多条候选RDMA链接中选择所支持的最大虚拟链接数最大的一条RDMA链接作为第一RDMA链接。
若客户端和服务端之间不存在已创建的能够服务于第一应用的RDMA链接,或者是客户端和服务端之间虽然存在已创建的能够服务于第一应用的RDMA链接但却不存在能够被第一应用复用的候选RDMA链接,例如这些已创建的RDMA链接均已满负荷,此时,需要在客户端与服务端之间针对第一应用创建一条新的RDMA链接,并赋予该新的RDMA链接复用性,将该新的具有复用性的RDMA链接作为第一RDMA链接。其中,赋予该新的RDMA链接复用性的过程,也就是在创建RDMA链接的过程中,协商该RDMA链接所支持的最大虚拟链接数的过程。
在一可选实施例中,创建第一RDMA链接的过程包括:客户端发起一个RDMA建连请求(Request)消息(简称为REQ消息),表示需要创建一条RDMA链接,该消息中携带有连接参数,比如本端要连接的QP(Queue Pair,队列对)的QPN(Query Pair Number)、起始PSN(Packet Sequence Number)、重传次数上限等等。QP就是一个发送工作队列和一个接收工作队列的组合,这两个队列分别称为SQ(Send Queue)和RQ(Receive Queue),QPN是QP的唯一编号。起始PSN是用来检测丢失或重复的数据包的起始数量值。另外,该消息中也可以携带一些自定义字段,用于满足用户的定制化需求。在本申请实施例中,自定义字段可以包括第一虚拟连接数,第一虚拟连接数是指从客户端这侧来看待创建RDMA链接所能承载的虚拟链接数。服务端在客户端发起REQ消息前一直处于监听状态,当它监听到REQ消息后,CM层会对连接参数进行校验和记录,可选地,自定义字段的信息可上送给用户进行校验。校验通过后,服务端会发送RDMA建连应答(Reply)消息(简称为REP消息),表示接受之前的连接请求,并且在消息中携带自己的连接参数——包括QPN、起始PSN等等。REP消息中也可以携带自定义字段,例如第二虚拟链接数,第二虚拟连接数是指从服务端这侧来看待创建RDMA链接所能承载的虚拟链接数。客户端收到REP消息后,将对其中的内容进行校验和记录,然后发送一个准备使用(Ready To Use,RTU)消息,表示同意服务端一侧的连接参数,至此,客户端与服务端之间的RDMA链接建立完成。之后,就可以利用双方约定好的QP进行数据交互了。
在上述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链接的创建过程,可以在选择出第一RDMA链接之后,通过单独的交互过程在客户端与服务端之间针对第一通道标识进行协商。如果第一RDMA链接是在不存在已创建RDMA链接或者不存在可被第一应用复用的候选RDMA链接的情况下实时创建的,则上述在客户端与服务端之间针对第一通道标识进行协商的过程可以在第一RDMA链接创建过程中同步完成。
具体地,以上文提到的创建第一RDMA链接的过程为例,在第一RDMA链接创建过程中,客户端选择第一通道标识,并将第一通道标识添加到RDMA建连请求消息中发送给服务端,以供服务端对第一通道标识进行可用性验证;服务端可以将第一通道标识是否通过可用性验证的信息携带在RDMA建连应答消息返回给客户端;若从服务端返回的RDMA建连应答消息中获取到第一通道标识通过可用性验证的信息,确定针对第一通道标识协商成功。当然,也可以在客户端和服务端通过RDMA建连请求消息中携带的第一虚拟链接数和RDMA建连应答消息中携带的第二虚拟链接数协商好第一RDMA链接可支持的最大虚拟链接数之后,客户端将第一通道标识添加到RTU消息中发送给服务端,以供服务端对第一通道标识进行可用性验证,并接收服务端针对RTU消息返回的应答消息,当从服务端返回的针对RTU消息的应答消息中获取到第一通道标识通过可用性验证的信息,确定针对第一通道标识协商成功。
或者,在不对第一通道标识进行可用性校验的可选方式中,在第一RDMA链接创建过程中,客户端选择第一通道标识,并将第一通道标识添加到RDMA建连请求消息中发送给服务端,在接收到服务端返回的RDMA建连应答消息时,说明服务端收到了第一通道标识,因此可确定针对第一通道标识协商成功。
在第一通道标识协商成功的情况下,可以根据第一通道标识创建与第一建连请求对应的第一虚拟链接。关于第一虚拟链接的创建过程可参见前文,在此不再赘述。
随着第一应用向第二应用发起的建连请求的不断增多,可以在第一RDMA链接上创建多条虚拟链接,多条虚拟链接共享第一RDMA链接的资源,例如SQ、RQ等。对第一应用和第二应用来说,可以通过承载于第一RDMA链接上的多条虚拟连接进行多路数据传输,实现并行数据传输或多进程数据传输。对第一应用和第二应用来说,通过任一条虚拟链接进行数据传输的过程相同或相似,下面以第一应用和第二应用通过承载于第一RDMA链接上的第一虚拟链接进行数据传输过程进行说明。
其中,第一应用和第二应用通过承载于第一RDMA链接上的第一虚拟链接进行数据传输过程包括:第一应用通过承载于第一RDMA链接上的第一虚拟链接向第二应用发送第一数据的过程,以及第一应用通过承载于第一RDMA链接上的第一虚拟链接接收第二应用发送的第二数据的过程。其中,在第一应用通过承载于第一RDMA链接上的第一虚拟链接向第二应用发送第一数据的过程中,根据第一虚拟链接对象与第一通道标识之间的对应关系,为第一数据添加第一通道标识;通过第一RDMA链接将添加第一通道标识后的第一数据发送给服务端,以使所述服务端根据第一通道标识将所述第一数据发送给所述第二应用。在第一应用通过承载于第一RDMA链接上的第一虚拟连接接收第二应用发送的第二数据的情况下,接收服务端通过第一RDMA链接发送的包含第一通道标识的第二数据;根据第二数据中包含的第一通道标识以及第一虚拟链接对象与第一通道标识之间的对应关系,确定第一虚拟链接对象,根据第一虚拟链接对象中的数据处理动作对第二数据进行处理,并将处理后的第二数据发送给第一应用。
具体地,当第一应用需要通过承载于第一RDMA链接上的第一虚拟链接向第二应用发送第一数据时,第一应用可以通过接口调用向客户端提交数据发送任务,该数据发送任务包括第一数据,客户端根据第一虚拟链接对象与第一通道标识之间的对应关系,为第一数据添加第一通道标识;将添加第一通道标识后的第一数据作为待发送数据写入内存缓存区内,并在发送队列SQ中写入WQE,该WQE中包含指向待发送数据(即添加第一通道标识后的第一数据)的指针,通知网卡通过第一RDMA链接将添加第一通道标识后的第一数据发送给服务端,以使服务端根据第一通道标识将第一数据发送给第二应用;在完成数据发送任务后向完成队列CQ中写入CQE,通知第一应用数据发送完成。可选地,客户端可以面向第一应用提供用于数据传输的接口,第一应用通过调用该用于数据传输的接口将第一数据提供给客户端。
当第一应用通过承载于第一RDMA链接上的第一虚拟链接接收第二应用发送的第二数据时,第一应用可以通过接口调用向客户端提交数据接收任务,该数据接收任务包括用于存储第二数据的内存缓存区的地址信息,客户端在接收队列RQ中写入WQE,该WQE中包含指用于存储第二数据的内存缓存区,网卡接收服务端通过第一RDMA链接发送的包含第一通道标识的第二数据,并写入WQE指向的内存缓存区内;在完成数据接收任务后向完成队列CQ中写入CQE,从WQE指向的内存缓存区内读取包含第一通道标识的第二数据,对第二数据进行解析得到第一通道标识,根据所述第二数据中包含的第一通道标识,以及第一虚拟链接对象与第一通道标识之间的对应关系,确定第一虚拟链接对象,根据第一虚拟链接对象中的数据处理动作对第二数据进行处理,并将处理后的第二数据上报给第一应用。
进一步,在一可选实施例中,在客户端与服务端之间针对第一通道标识进行协商的过程中,还可以将第一应用需要通过第一虚拟链接发送给第二应用的首个数据发送给服务端,以使服务端发送给第二应用。以第一应用是即时通讯应用的客户端为例,第二应用是即时通讯应用的服务端,则首个数据可以是客户端与服务端在建连情况下向服务端发送的第一条会话消息,或者是新会话创建请求消息,或者是对外分享的消息等。在该方式中,对于首个数据无需等待第一虚拟链接创建完成,可以在第一虚拟链接创建过程中完成发送,有利于提高数据的发送效率。进一步,如果第一通道标识是在RDMA链接创建过程中完成协商的,那么第一应用需要通过第一虚拟链接发送给第二应用的首个数据甚至无需等待第一RDMA链接创建完成,可以在第一RDMA链接和第一虚拟链接的同步创建过程中完成发送,有利于提高该数据的发送效率。
随着第一应用和第二应用之间的数据传输过程的结束,可能需要关闭第一虚拟链接。在本实施例中,客户端和服务端在感知到需要关闭第一虚拟链接的情况下,任意一方都可以主动发起关闭第一虚拟链接的请求。
客户端主动发起虚拟链接的关闭操作:在需要关闭第一虚拟连接的情况下,客户端可以向服务端发送第一链接关闭请求消息,以请求关闭第一虚拟链接;服务端在接收到第一链接关闭请求消息后一方面向客户端返回第一链接关闭应答消息,一方面针对第一虚拟链接执行资源释放操作,以将第一虚拟链接对应的第一通道标识置为空闲态;客户端在接收到服务端返回的第一链接关闭应答消息的情况下,认为服务端已经知道第一虚拟链接要关闭,于是针对第一虚拟链接执行资源释放操作,以将第一虚拟链接对应的第一通道标识置为空闲态。
服务端主动发起虚拟链接的关闭操作:在需要关闭第一虚拟连接的情况下,服务端可以向客户端发送第二链接关闭请求消息,以请求关闭第一虚拟链接;客户端在接收到第二链接关闭请求消息后一方面向服务端返回第二链接关闭应答消息,一方面针对第一虚拟链接执行资源释放操作,以将第一虚拟链接对应的第一通道标识置为空闲态;服务端在接收到服务端返回的第一链接关闭应答消息的情况下,认为客户端已经知道第一虚拟链接要关闭,于是针对第一虚拟链接执行资源释放操作,以将第一虚拟链接对应的第一通道标识置为空闲态。
其中,针对第一虚拟链接执行资源释放操作主要是指将第一虚拟链接对应的第一通道标识置为空闲态,以释放通道标识资源,但并不限于通道标识这一种资源,关于第一虚拟链接对象等都会被释放。
在本申请实施例中,在关闭第一虚拟链接的情况下,不会立即关闭第一RDMA链接;可选地,可以判断第一虚拟链接是否是第一RDMA链接上所承载的最后一条虚拟链接,如果是,则在第一虚拟链接被关闭后,第一RDMA链接就处于空闲状态了,此时,在针对第一虚拟链接完成资源释放后,可以等待设定时间,并在设定时间结束后,将第一RDMA链接关闭。也就是说,在第一RDMA链接所承载的最后一条虚拟链接完成资源释放后,等待设定时间;在设定时间结束后,将第一RDMA链接关闭。其中,关闭第一RDMA链接的过程主要是释放第一RDMA链接占用的各种资源,例如SQ、RQ等的过程。
进一步可选地,为了保证及时为第一应用与第二应用创建虚拟链接,可以要求客户端与服务端之间可以存在指定数量的RDMA链接,指定数量可以是1条、2条或3条RDMA链接等,对此不做限定。基于此,在关闭第一RDMA链接之前,需要判断第一应用对应的RDMA链接池中除第一RDMA链接之外是否还存在指定数量的RDMA链接;若是,则将第一RDMA链接关闭;若否,则禁止将第一RDMA链接关闭。
或者,为了保证及时为第一应用与第二应用创建虚拟链接,可以要求客户端与服务端之间可以当前承载的虚拟链接数小于对应的最大虚拟链接数的RDMA链接,以便第一应用在需要虚拟链接时能够随时复用已有的RDMA链接。基于此,在关闭第一RDMA链接之前,需要第一应用对应的RDMA链接池中除第一RDMA链接之外是否还存在当前承载的虚拟链接数小于对应的最大虚拟链接数的RDMA链接;若是,则将第一RDMA链接关系;若否,则禁止将第一RDMA链接关闭。
在此说明,上述以第一虚拟链接、第一RDMA链接的关闭过程为例进行说明,其它虚拟链接与RDMA链接的关闭过程相同或相似,不做赘述。另外,在上述链接关闭过程中,关于第一RDMA链接的一些判断条件均为示例,并不限于此。
图4为本申请实施例提供的另一种基于RDMA的建连方法的流程示意图。该方法是从服务端的角度进行的描述,如图4所示,该方法包括:
41、接收客户端通过其与服务端之间的第一RDMA链接发送的第一通道标识,第一通道标识是从第一RDMA链接支持的多个通道标识中选择的处于空闲态的通道标识,第一RDMA链接是客户端与服务端之间存在可被客户端侧第一应用复用的RDMA链接;
42、基于第一RDMA链接向客户端返回应答消息,该应答消息至少包括表示收到第一通道标识的消息,以供客户端在第一RDMA链接上创建与第一通道标识对应的第一虚拟链接,第一虚拟链接用于第一应用通过第一RDMA链接向服务端侧第二应用进行数据传输。
在一可选实施例中,该方法还包括:在第一RDMA链接上创建与第一通道标识对应的第一虚拟链接。进一步,在第一RDMA链接上创建与第一通道标识对应的第一虚拟链接,包括:创建与第一建连请求对应的第一虚拟链接对象,并建立第一虚拟链接对象与所述第一通道标识的对应关系,以得到所述第一虚拟链接。
在一可选实施例中,基于第一RDMA链接向客户端返回应答消息,包括:对第一通道标识进行可用性校验,并在第一通道标识通过可用性校验的情况下,基于第一RDMA链接向客户端返回第一通道标识通过可用性校验的应答消息。
在一可选实施例中,方法还包括:在第一RDMA链接创建过程中,接收客户端发送RDMA建连请求消息,RDMA建连请求消息中至少包括客户端支持的第一虚拟链接数;向客户端返回RDMA建连应答消息,RDMA建连应答消息中至少包括服务端支持的第二虚拟链接数;根据第一虚拟链接数和第二虚拟链接数,确定第一RDMA链接可支持的最大虚拟链接数。
在一可选实施例中,方法还包括:在需要关闭第一虚拟连接的情况下,向客户端发送第二链接关闭请求消息,以请求关闭第一虚拟链接;在接收到客户端返回的第二链接关闭应答消息的情况下,针对第一虚拟链接执行资源释放操作;或者,在接收到客户端发送的第一链接关闭请求消息时,向客户端返回第一链接关闭应答消息,并针对第一虚拟链接执行资源释放操作。
进一步可选地,方法还包括:若第一RDMA链接所承载的最后一条虚拟链接完成资源释放后,等待设定时间;在设定时间结束后,将第一RDMA链接关闭。
进一步可选地,将第一RDMA链接关闭之前,还包括:判断第一应用对应的RDMA链接池中除第一RDMA链接之外是否还存在指定数量的RDMA链接;若是,则将第一RDMA链接关闭;或者,判断第一应用对应的RDMA链接池中除第一RDMA链接之外是否还存在当前承载的虚拟链接数小于对应的最大虚拟链接数的RDMA链接;若是,则将第一RDMA链接关系。
关于上述方法实施例的详细描述可参见前述实施例,在此不再赘述。
需要说明的是,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如41、42等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
图5为本申请实施例提供的一种基于RDMA的建连装置的结构示意图。该装置可应用于客户端中负责完成基于RDMA链接的建连功能。如图5所示,该装置包括:
接收模块51,用于接收客户端侧第一应用向服务端侧第二应用发起的第一建连请求,第一建连请求是第一应用向第二应用发起的多个建连请求中的任一建连请求;
获取模块52,用于根据第一建连请求,获取客户端与服务端之间存在可被第一应用复用的第一RDMA链接;
建连模块53,用于在第一RDMA链接上创建与第一建连请求对应的第一虚拟链接,以使第一应用和第二应用通过承载于第一RDMA链接上的第一虚拟连接进行一路数据传输;
其中,在第一RDMA链接上创建多条虚拟链接的情况下,多条虚拟链接共享第一RDMA链接的资源,以使第一应用和第二应用通过承载于第一RDMA链接上的多条虚拟连接进行多路数据传输。
在一可选实施例中,建连模块53具体用于:从第一RDMA链接支持的多个通道标识中,选择处于空闲态的第一通道标识,其中,每个通道标识用于标识在第一RDMA链接上创建的一条虚拟链接;基于第一RDMA链接,在客户端与服务端之间针对第一通道标识进行协商;在协商成功的情况下,创建与第一建连请求对应的第一虚拟链接对象,并建立第一虚拟链接对象与第一通道标识的对应关系,以得到第一虚拟链接。
在一可选实施例中,建连模块53在客户端与服务端之间针对第一通道标识进行协商时,具体用于:基于第一RDMA链接,将第一通道标识发送给服务端,以供服务端对第一通道标识进行可用性验证;在接收到服务端返回的第一通道标识通过可用性验证的应答消息时,确定针对第一通道标识协商成功;或者,基于第一RDMA链接,将第一通道标识发送给服务端,并在接收到服务端返回的确认收到第一通道标识的应答消息时,确定针对第一通道标识协商成功。
在一可选实施例中,获取模块52具体用于:根据第一建连请求,判断客户端与服务端之间是否存在针对第一应用已创建的RDMA链接;在客户端与服务端之间存在针对第一应用已创建的至少一条RDMA链接的情况下,根据每条RDMA链接当前承载的虚拟链接数,识别至少一条RDMA链接中是否存在当前承载的虚拟链接数小于各自对应的最大虚拟链接数的候选RDMA链接;若存在候选RDMA链接,则从候选RDMA链接中选择一条RDMA链接作为第一RDMA链接。
在一可选实施例用于,获取模块52还用于:在客户端与服务端之间不存在针对第一应用已创建的RDMA链接或者不存在候选RDMA链接的情况下,在客户端与服务端之间针对第一应用创建第一RDMA链接,并在第一RDMA链接创建过程中,协商第一RDMA链接可支持的最大虚拟链接数,以使第一RDMA链接可被复用;其中,最大虚拟链接数用于限定第一RDMA链接所使用的通道标识的数量。
基于上述,获取模块52协商第一RDMA链接可支持的最大虚拟链接数时,具体用于:向服务端发送RDMA建连请求消息,RDMA建连请求消息中至少包括客户端支持的第一虚拟链接数;接收服务端针对RDMA建连请求消息返回的RDMA建连应答消息,RDMA建连应答消息中至少包括服务端支持的第二虚拟链接数;根据第一虚拟链接数和第二虚拟链接数,确定第一RDMA链接可支持的最大虚拟链接数。
在一可选实施例中,建连模块53在客户端与服务端之间针对第一通道标识进行协商时,具体用于:在第一RDMA链接创建过程中,将第一通道标识添加到RDMA建连请求消息中发送给服务端,以供服务端对第一通道标识进行可用性验证;若从服务端返回的RDMA建连应答消息中获取到第一通道标识通过可用性验证的信息,确定针对第一通道标识协商成功;或者,在第一RDMA链接创建过程中,将第一通道标识添加到RDMA建连请求消息中发送给服务端,并在接收到服务端返回的RDMA建连应答消息时,确定针对第一通道标识协商成功。
在一可选实施例中,建连模块53还用于:在基于第一RDMA链接,在客户端与服务端之间针对第一通道标识进行协商的过程中,将第一应用需要通过第一虚拟链接发送给第二应用的首个数据发送给服务端,以使服务端发送给第二应用。
在一可选实施例中,建连模块53还用于:在第一应用通过承载于第一RDMA链接上的第一虚拟链接向第二应用发送第一数据的情况下,根据第一虚拟链接对象与第一通道标识之间的对应关系,为第一数据添加第一通道标识;通过第一RDMA链接将添加第一通道标识后的第一数据发送给服务端,以使服务端根据第一通道标识将第一数据发送给第二应用;和/或,在第一应用通过承载于第一RDMA链接上的第一虚拟连接接收第二应用发送的第二数据的情况下,接收服务端通过第一RDMA链接发送的包含第一通道标识的第二数据;根据第一虚拟链接对象与第一通道标识之间的对应关系,确定第一虚拟链接对象,根据第一虚拟链接对象中的数据处理动作对第二数据进行处理。
在一可选实施例中,如图5所示,该装置还包括:断连模块54。断连模块54用于在需要关闭第一虚拟连接的情况下,向服务端发送第一链接关闭请求消息,以请求关闭第一虚拟链接;在接收到服务端返回的第一链接关闭应答消息的情况下,针对第一虚拟链接执行资源释放操作,以将第一虚拟链接对应的第一通道标识置为空闲态;或者,在接收到服务端发送的第二链接关闭请求消息时,向服务端返回第二链接关闭应答消息,并针对第一虚拟链接执行资源释放操作,以将第一虚拟链接对应的第一通道标识置为空闲态。
进一步可选地,断连模块54还用于:若第一RDMA链接所承载的最后一条虚拟链接完成资源释放后,等待设定时间;在设定时间结束后,将第一RDMA链接关闭。
进一步可选地,断连模块54还用于:将第一RDMA链接关闭之前,判断第一应用对应的RDMA链接池中除第一RDMA链接之外是否还存在指定数量的RDMA链接;若是,则将第一RDMA链接关闭;或者,判断第一应用对应的RDMA链接池中除第一RDMA链接之外是否还存在当前承载的虚拟链接数小于对应的最大虚拟链接数的RDMA链接;若是,则将第一RDMA链接关系。
在一可选实施例中,第一应用是基于RDMA协议开发的应用程序,则第一建连请求为RDMA建连请求;或者,第一应用是基于TCP/IP协议开发的应用程序,第一建连请求为套接字建连请求。
图6为本申请实施例提供的另一种基于RDMA的建连装置的结构示意图。该装置可应用于服务端中用于实现基于RDMA的建连功能。如图6所示,该装置包括:
接收模块61,用于接收客户端通过其与服务端之间的第一RDMA链接发送的第一通道标识,第一通道标识是从第一RDMA链接支持的多个通道标识中选择的处于空闲态的通道标识,第一RDMA链接是客户端与服务端之间存在可被客户端侧第一应用复用的RDMA链接;
发送模块62,用于基于第一RDMA链接向客户端返回应答消息,应答消息至少包括表示收到第一通道标识的消息,以供客户端在第一RDMA链接上创建与第一通道标识对应的第一虚拟链接,第一虚拟链接用于第一应用通过第一RDMA链接向服务端侧第二应用进行数据传输。
进一步,如图6所示,该装置还包括建连模块63和断连模块64。建连模块63用于根据第一通道标识在第一RDMA链接上创建与第一通道标识对应的第一虚拟链接。建连模块63具体用于:创建与第一建连请求对应的第一虚拟链接对象,并建立第一虚拟链接对象与所述第一通道标识的对应关系,以得到所述第一虚拟链接。
断连模块64用于:在需要关闭第一虚拟连接的情况下,向客户端发送第二链接关闭请求消息,以请求关闭第一虚拟链接;在接收到客户端返回的第二链接关闭应答消息的情况下,针对第一虚拟链接执行资源释放操作;或者,在接收到客户端发送的第一链接关闭请求消息时,向客户端返回第一链接关闭应答消息,并针对第一虚拟链接执行资源释放操作。
在一可选实施例中,发送模块62在基于第一RDMA链接向客户端返回应答消息时,具体用于:对第一通道标识进行可用性校验,并在第一通道标识通过可用性校验的情况下,基于第一RDMA链接向客户端返回第一通道标识通过可用性校验的应答消息。
在一可选实施例中,接收模块61还用于:在第一RDMA链接创建过程中,接收客户端发送RDMA建连请求消息,RDMA建连请求消息中至少包括客户端支持的第一虚拟链接数。相应地,发送模块62还用于:向客户端返回RDMA建连应答消息,RDMA建连应答消息中至少包括服务端支持的第二虚拟链接数。相应地,该装置还包括确定模块,用于根据第一虚拟链接数和第二虚拟链接数,确定第一RDMA链接可支持的最大虚拟链接数。
上述各装置实施例中的功能模块可用于执行上述方法实施例中的相应操作,关于其详细功能描述可参见前述方法实施例,在此不再赘述。
图7为本申请实施例提供的一种电子设备的结构示意图。该电子设备可以作为上述客户端所在的电子设备实现,该电子设备上还运行有第一应用,如图7所示,该电子设备包括:存储器71、处理器72以及RDMA设备73。
存储器71,用于存储计算机程序,并可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令,消息,图片,视频等。
处理器72,与存储器71耦合,用于执行存储器71中的计算机程序,以实现上述客户端的功能,具体包括:接收第一应用向服务端侧的第二应用发起的第一建连请求,第一建连请求是第一应用向第二应用发起的多个建连请求中的任一建连请求;根据第一建连请求,获取客户端与服务端之间可被第一应用复用的第一RDMA链接;在第一RDMA链接上创建与第一建连请求对应的第一虚拟链接,以使第一应用和第二应用通过承载于第一RDMA链接上的第一虚拟连接进行一路数据传输;其中,在第一RDMA链接上创建多条虚拟链接的情况下,多条虚拟链接共享第一RDMA链接的资源,以使第一应用和第二应用通过承载于第一RDMA链接上的多条虚拟连接进行多路数据传输。
在一可选实施例中,处理器72在第一RDMA链接上创建与第一建连请求对应的第一虚拟链接时,具体用于:从第一RDMA链接支持的多个通道标识中,选择处于空闲态的第一通道标识,其中,每个通道标识用于标识在第一RDMA链接上创建的一条虚拟链接;基于第一RDMA链接,在客户端与服务端之间针对第一通道标识进行协商;在协商成功的情况下,创建与第一建连请求对应的第一虚拟链接对象,并建立第一虚拟链接对象与第一通道标识的对应关系,以得到第一虚拟链接。
在一可选实施例中,处理器72在客户端与服务端之间针对第一通道标识进行协商时,具体用于:
基于第一RDMA链接,将第一通道标识发送给服务端,以供服务端对第一通道标识进行可用性验证;在接收到服务端返回的第一通道标识通过可用性验证的应答消息时,确定针对第一通道标识协商成功;
或者
基于第一RDMA链接,将第一通道标识发送给服务端,并在接收到服务端返回的确认收到第一通道标识的应答消息时,确定针对第一通道标识协商成功。
在一可选实施例中,处理器72具体用于:根据第一建连请求,判断客户端与服务端之间是否存在针对第一应用已创建的RDMA链接;在客户端与服务端之间存在针对第一应用已创建的至少一条RDMA链接的情况下,根据每条RDMA链接当前承载的虚拟链接数,识别至少一条RDMA链接中是否存在当前承载的虚拟链接数小于各自对应的最大虚拟链接数的候选RDMA链接;若存在候选RDMA链接,则从候选RDMA链接中选择一条RDMA链接作为第一RDMA链接。
在一可选实施例用于,处理器72还用于:在客户端与服务端之间不存在针对第一应用已创建的RDMA链接或者不存在候选RDMA链接的情况下,在客户端与服务端之间针对第一应用创建第一RDMA链接,并在第一RDMA链接创建过程中,协商第一RDMA链接可支持的最大虚拟链接数,以使第一RDMA链接可被复用;其中,最大虚拟链接数用于限定第一RDMA链接所使用的通道标识的数量。
基于上述,处理器72在协商第一RDMA链接可支持的最大虚拟链接数时,具体用于:向服务端发送RDMA建连请求消息,RDMA建连请求消息中至少包括客户端支持的第一虚拟链接数;接收服务端针对RDMA建连请求消息返回的RDMA建连应答消息,RDMA建连应答消息中至少包括服务端支持的第二虚拟链接数;根据第一虚拟链接数和第二虚拟链接数,确定第一RDMA链接可支持的最大虚拟链接数。
在一可选实施例中,处理器72在客户端与服务端之间针对第一通道标识进行协商时,具体用于:在第一RDMA链接创建过程中,将第一通道标识添加到RDMA建连请求消息中发送给服务端,以供服务端对第一通道标识进行可用性验证;若从服务端返回的RDMA建连应答消息中获取到第一通道标识通过可用性验证的信息,确定针对第一通道标识协商成功;或者,在第一RDMA链接创建过程中,将第一通道标识添加到RDMA建连请求消息中发送给服务端,并在接收到服务端返回的RDMA建连应答消息时,确定针对第一通道标识协商成功。
在一可选实施例中,处理器72还用于:在基于第一RDMA链接,在客户端与服务端之间针对第一通道标识进行协商的过程中,将第一应用需要通过第一虚拟链接发送给第二应用的首个数据发送给服务端,以使服务端发送给第二应用。
在一可选实施例中,处理器72还用于:在第一应用通过承载于第一RDMA链接上的第一虚拟链接向第二应用发送第一数据的情况下,根据第一虚拟链接对象与第一通道标识之间的对应关系,为第一数据添加第一通道标识;通过第一RDMA链接将添加第一通道标识后的第一数据发送给服务端,以使服务端根据第一通道标识将第一数据发送给第二应用;和/或,在第一应用通过承载于第一RDMA链接上的第一虚拟连接接收第二应用发送的第二数据的情况下,接收服务端通过第一RDMA链接发送的包含第一通道标识的第二数据;根据第一虚拟链接对象与第一通道标识之间的对应关系,确定第一虚拟链接对象,根据第一虚拟链接对象中的数据处理动作对第二数据进行处理。
在一可选实施例中,处理器72还用于:在需要关闭第一虚拟连接的情况下,向服务端发送第一链接关闭请求消息,以请求关闭第一虚拟链接;在接收到服务端返回的第一链接关闭应答消息的情况下,针对第一虚拟链接执行资源释放操作,以将第一虚拟链接对应的第一通道标识置为空闲态;或者,在接收到服务端发送的第二链接关闭请求消息时,向服务端返回第二链接关闭应答消息,并针对第一虚拟链接执行资源释放操作,以将第一虚拟链接对应的第一通道标识置为空闲态。
进一步可选地,处理器72还用于:若第一RDMA链接所承载的最后一条虚拟链接完成资源释放后,等待设定时间;在设定时间结束后,将第一RDMA链接关闭。
进一步可选地,处理器72还用于:将第一RDMA链接关闭之前,判断第一应用对应的RDMA链接池中除第一RDMA链接之外是否还存在指定数量的RDMA链接;若是,则将第一RDMA链接关闭;或者,判断第一应用对应的RDMA链接池中除第一RDMA链接之外是否还存在当前承载的虚拟链接数小于对应的最大虚拟链接数的RDMA链接;若是,则将第一RDMA链接关系。
在一可选实施例中,第一应用是基于RDMA协议开发的应用程序,则第一建连请求为RDMA建连请求;或者,第一应用是基于TCP/IP协议开发的应用程序,第一建连请求为套接字建连请求。
进一步,如图7所示,该电子设备还包括:通信组件74、显示器75、电源组件76、音频组件77等其它组件。图7中仅示意性给出部分组件,并不意味着电子设备只包括图7所示组件。另外,图7中虚线框所示组件可根据电子设备的具体实现形态而定。在电子设备实现为手机、笔记本电脑、平板电脑等终端设备的情况下,可以包含虚线框内的组件;在电子设备实现为服务器、云端服务器、服务器集群等服务端设备时,通常不包含虚线框内的组件。
除上述电子设备之外,本申请实施例还提供一种电子设备,该电子设备与图7所示电子设备具有相同或相似的结构,故不再图示。本实施例提供的电子设备与图7所示电子设备的区别在于:处理器执行存储器中存储的计算机程序所实现的功能不同。本实施例的电子设备可作为上述实施例中的服务端所在的电子设备,且该电子设备上运行有第二应用,其处理器执行存储器中存储的计算机程序,以用于实现上述服务端的功能,具体包括:接收客户端通过其与服务端之间的第一RDMA链接发送的第一通道标识,第一通道标识是从第一RDMA链接支持的多个通道标识中选择的处于空闲态的通道标识,第一RDMA链接是客户端与服务端之间存在可被客户端上第一应用复用的RDMA链接;基于第一RDMA链接向客户端返回应答消息,应答消息至少包括表示收到第一通道标识的消息,以供在在第一RDMA链接上创建与第一通道标识对应的第一虚拟链接,第一虚拟链接用于第一应用通过第一RDMA链接向服务端上的第二应用进行数据传输。
在一可选实施例中,处理器在基于第一RDMA链接向客户端返回应答消息时,具体用于:对第一通道标识进行可用性校验,并在第一通道标识通过可用性校验的情况下,基于第一RDMA链接向客户端返回第一通道标识通过可用性校验的应答消息。
在一可选实施例中,处理器还用于:在第一RDMA链接创建过程中,接收客户端发送RDMA建连请求消息,RDMA建连请求消息中至少包括客户端支持的第一虚拟链接数;向客户端返回RDMA建连应答消息,RDMA建连应答消息中至少包括服务端支持的第二虚拟链接数;根据第一虚拟链接数和第二虚拟链接数,确定第一RDMA链接可支持的最大虚拟链接数。
关于上述各电子设备中处理器所执行的各功能的详细描述,可参见前述方法实施例,在此不再赘述。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,当计算机程序被处理器执行时,致使处理器能够实现上述任一方法实施例中的各步骤。
上述实施例中的存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
上述实施例中的通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G、3G、4G/LTE、5G等移动通信网络,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
上述实施例中的显示器包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
上述实施例中的电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
上述实施例中的音频组件,可被配置为输出和/或输入音频信号。例如,音频组件包括一个麦克风(MIC),当音频组件所在设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (14)
1.一种基于RDMA的建连方法,应用于客户端,所述客户端侧运行有第一应用,其特征在于,所述方法包括:
接收第一应用向服务端侧的第二应用发起的第一建连请求,所述第一建连请求是所述第一应用向所述第二应用发起的多个建连请求中的任一建连请求;
根据所述第一建连请求,获取所述客户端与所述服务端之间可被所述第一应用复用的第一RDMA链接;
在所述第一RDMA链接上创建与所述第一建连请求对应的第一虚拟链接,以使所述第一应用和第二应用通过承载于所述第一RDMA链接上的所述第一虚拟连接进行一路数据传输;
其中,在所述第一RDMA链接上创建多条虚拟链接的情况下,所述多条虚拟链接共享所述第一RDMA链接的资源,以使所述第一应用和第二应用通过承载于所述第一RDMA链接上的多条虚拟连接进行多路数据传输。
2.根据权利要求1所述的方法,其特征在于,在所述第一RDMA链接上创建与所述第一建连请求对应的第一虚拟链接,包括:
从所述第一RDMA链接支持的多个通道标识中,选择处于空闲态的第一通道标识,其中,每个通道标识用于标识在所述第一RDMA链接上创建的一条虚拟链接;
基于所述第一RDMA链接,在所述客户端与所述服务端之间针对所述第一通道标识进行协商;
在协商成功的情况下,创建与所述第一建连请求对应的第一虚拟链接对象,并建立所述第一虚拟链接对象与所述第一通道标识的对应关系,以得到所述第一虚拟链接。
3.根据权利要求2所述的方法,其特征在于,基于所述第一RDMA链接,在所述客户端与所述服务端之间针对所述第一通道标识进行协商,包括:
基于所述第一RDMA链接,将所述第一通道标识发送给所述服务端,以供所述服务端对所述第一通道标识进行可用性验证;在接收到所述服务端返回的所述第一通道标识通过可用性验证的应答消息时,确定针对所述第一通道标识协商成功;
或者
基于所述第一RDMA链接,将所述第一通道标识发送给所述服务端,并在接收到所述服务端返回的确认收到所述第一通道标识的应答消息时,确定针对所述第一通道标识协商成功。
4.根据权利要求1所述的方法,其特征在于,根据所述第一建连请求,获取所述客户端与所述服务端之间可被所述第一应用复用的第一RDMA链接,包括:
根据所述第一建连请求,判断所述客户端与所述服务端之间是否存在针对所述第一应用已创建的RDMA链接;
在所述客户端与所述服务端之间存在针对所述第一应用已创建的至少一条RDMA链接的情况下,根据每条RDMA链接当前承载的虚拟链接数,识别所述至少一条RDMA链接中是否存在当前承载的虚拟链接数小于各自对应的最大虚拟链接数的候选RDMA链接;
若存在候选RDMA链接,则从所述候选RDMA链接中选择一条RDMA链接作为所述第一RDMA链接。
5.根据权利要求4所述的方法,其特征在于,还包括:
在所述客户端与所述服务端之间不存在针对所述第一应用已创建的RDMA链接或者不存在候选RDMA链接的情况下,在所述客户端与所述服务端之间针对所述第一应用创建第一RDMA链接,并在所述第一RDMA链接创建过程中,协商所述第一RDMA链接可支持的最大虚拟链接数,以使所述第一RDMA链接可被复用;
其中,所述最大虚拟链接数用于限定所述第一RDMA链接所使用的通道标识的数量。
6.根据权利要求5所述的方法,其特征在于,在所述第一RDMA链接创建过程中,协商所述第一RDMA链接可支持的最大虚拟链接数,包括:
向所述服务端发送RDMA建连请求消息,所述RDMA建连请求消息中至少包括所述客户端支持的第一虚拟链接数;
接收所述服务端针对所述RDMA建连请求消息返回的RDMA建连应答消息,所述RDMA建连应答消息中至少包括所述服务端支持的第二虚拟链接数;
根据所述第一虚拟链接数和所述第二虚拟链接数,确定所述第一RDMA链接可支持的最大虚拟链接数。
7.根据权利要求5所述的方法,其特征在于,在所述第一RDMA链接上创建与所述第一建连请求对应的第一虚拟链接,包括:在所述第一RDMA链接创建过程中,同时创建与所述第一建连请求对应的第一虚拟链接。
8.根据权利要求2-7任一项所述的方法,其特征在于,还包括:
在基于所述第一RDMA链接,在所述客户端与所述服务端之间针对所述第一通道标识进行协商的过程中,将所述第一应用需要通过所述第一虚拟链接发送给所述第二应用的首个数据发送给所述服务端,以使所述服务端发送给所述第二应用。
9.根据权利要求2-7任一项所述的方法,其特征在于,还包括:
在所述第一应用通过承载于所述第一RDMA链接上的所述第一虚拟链接向第二应用发送第一数据的情况下,根据所述第一虚拟链接对象与所述第一通道标识之间的对应关系,为所述第一数据添加所述第一通道标识;通过所述第一RDMA链接将添加所述第一通道标识后的第一数据发送给所述服务端,以使所述服务端根据所述第一通道标识将所述第一数据发送给所述第二应用;
和/或
在所述第一应用通过承载于所述第一RDMA链接上的第一虚拟连接接收第二应用发送的第二数据的情况下,接收所述服务端通过所述第一RDMA链接发送的包含所述第一通道标识的第二数据;根据所述第一虚拟链接对象与所述第一通道标识之间的对应关系,确定所述第一虚拟链接对象,根据所述第一虚拟链接对象中的数据处理动作对所述第二数据进行处理。
10.根据权利要求1-7任一项所述的方法,其特征在于,还包括:
在需要关闭所述第一虚拟连接的情况下,向所述服务端发送第一链接关闭请求消息,以请求关闭所述第一虚拟链接;在接收到所述服务端返回的第一链接关闭应答消息的情况下,针对所述第一虚拟链接执行资源释放操作,以将所述第一虚拟链接对应的第一通道标识置为空闲态;
或者
在接收到所述服务端发送的第二链接关闭请求消息时,向所述服务端返回第二链接关闭应答消息,并针对所述第一虚拟链接执行资源释放操作,以将所述第一虚拟链接对应的第一通道标识置为空闲态。
11.根据权利要求10所述的方法,其特征在于,还包括:
若所述第一RDMA链接所承载的最后一条虚拟链接完成资源释放后,等待设定时间;在设定时间结束后,将所述第一RDMA链接关闭。
12.一种基于RDMA的建连方法,其特征在于,包括:
接收客户端通过其与服务端之间的第一RDMA链接发送的第一通道标识,所述第一通道标识是从第一RDMA链接支持的多个通道标识中选择的处于空闲态的通道标识,所述第一RDMA链接是所述客户端与所述服务端之间存在可被所述客户端上第一应用复用的RDMA链接;
基于所述第一RDMA链接向所述客户端返回应答消息,所述应答消息至少包括表示收到所述第一通道标识的消息,以供在在所述第一RDMA链接上创建与所述第一通道标识对应的第一虚拟链接,所述第一虚拟链接用于所述第一应用通过所述第一RDMA链接向所述服务端上的第二应用进行数据传输。
13.一种电子设备,其特征在于,包括:存储器和处理器;所述存储器,用于存储计算机程序,所述处理器与所述存储器耦合,用于执行所述计算机程序,以用于实现权利要求1-11或者权利要求12中任一项所述方法中的步骤。
14.一种存储有计算机程序的计算机可读存储介质,其特征在于,当所述计算机程序被处理器执行时,致使所述处理器能够实现权利要求1-11或者权利要求12中任一项所述方法中的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211211865.3A CN115623057A (zh) | 2022-09-30 | 2022-09-30 | 基于rdma的建连方法、装置、设备及存储介质 |
PCT/CN2023/121269 WO2024067529A1 (zh) | 2022-09-30 | 2023-09-25 | 基于rdma的建连方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211211865.3A CN115623057A (zh) | 2022-09-30 | 2022-09-30 | 基于rdma的建连方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115623057A true CN115623057A (zh) | 2023-01-17 |
Family
ID=84860981
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211211865.3A Pending CN115623057A (zh) | 2022-09-30 | 2022-09-30 | 基于rdma的建连方法、装置、设备及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115623057A (zh) |
WO (1) | WO2024067529A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024067529A1 (zh) * | 2022-09-30 | 2024-04-04 | 杭州阿里云飞天信息技术有限公司 | 基于rdma的建连方法、装置、设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10417174B2 (en) * | 2016-06-24 | 2019-09-17 | Vmware, Inc. | Remote direct memory access in a virtualized computing environment |
CN108900602B (zh) * | 2018-06-27 | 2021-08-10 | 郑州云海信息技术有限公司 | 一种虚拟链接建立方法及相关装置 |
CN114625220A (zh) * | 2021-04-09 | 2022-06-14 | 深圳宏芯宇电子股份有限公司 | 服务器及其数据处理方法 |
CN114780465B (zh) * | 2022-03-01 | 2024-04-16 | 阿里巴巴(中国)有限公司 | 可共享远程直接数据存取链接的创建方法及装置 |
CN115623057A (zh) * | 2022-09-30 | 2023-01-17 | 阿里云计算有限公司 | 基于rdma的建连方法、装置、设备及存储介质 |
-
2022
- 2022-09-30 CN CN202211211865.3A patent/CN115623057A/zh active Pending
-
2023
- 2023-09-25 WO PCT/CN2023/121269 patent/WO2024067529A1/zh unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024067529A1 (zh) * | 2022-09-30 | 2024-04-04 | 杭州阿里云飞天信息技术有限公司 | 基于rdma的建连方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2024067529A1 (zh) | 2024-04-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112152926B (zh) | 一种管理应用的网络切片的方法及装置 | |
CN110958281B (zh) | 基于物联网的数据传输方法及通信装置 | |
CN104253856A (zh) | 可缩放Web实时通信媒体引擎以及相关的方法、系统 | |
CN107133109B (zh) | 一种模块间通信的方法、装置及计算设备 | |
CN111163130A (zh) | 一种网络服务系统及其数据传输方法 | |
AU2019256257A1 (en) | Processor core scheduling method and apparatus, terminal, and storage medium | |
WO2024067529A1 (zh) | 基于rdma的建连方法、装置、设备及存储介质 | |
CN114205762A (zh) | 短信流量控制方法、设备及存储介质 | |
CN112769945B (zh) | 分布式服务调用方法及装置 | |
CN114780465A (zh) | 可共享远程直接数据存取链接的创建方法及装置 | |
CN111510493B (zh) | 分布式数据传输方法及装置 | |
CN103220347A (zh) | Crp云交互方法 | |
CN110290139B (zh) | 消息传输方法及装置 | |
CN112689012A (zh) | 跨网络的代理通讯方法及装置 | |
WO2023035834A1 (zh) | 一种Wi-Fi直连通信方法及装置 | |
CN116244231A (zh) | 一种数据传输方法、装置、系统、电子设备及存储介质 | |
CN106845974B (zh) | 一种实现近场通信的点对点通信的方法及装置 | |
US9092779B2 (en) | Heuristics processing | |
CN107948232B (zh) | 基于Hook API的代理实现方法、数据传输方法、装置及系统 | |
CN112383617A (zh) | 进行长连接的方法、装置、终端设备以及介质 | |
CN115250276A (zh) | 分布式系统及数据处理的方法和装置 | |
CN111782366A (zh) | 一种分布式任务调度方法及装置 | |
US20150135269A1 (en) | Method and system for sharing applications among a plurality of electronic devices | |
WO2023217089A1 (zh) | 数据传输方法、装置、设备、系统及存储介质 | |
WO2024087064A1 (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 |