数据传输方法、装置及计算机存储介质

文档序号:1314622 发布日期:2020-07-10 浏览:5次 >En<

阅读说明:本技术 数据传输方法、装置及计算机存储介质 (Data transmission method, device and computer storage medium ) 是由 唐盛武 黄健 杨裕焱 于 2019-12-11 设计创作,主要内容包括:本申请公开了一种数据传输方法、装置及计算机存储介质,属于通信技术领域。所述方法包括:接收端中配置有接收队列,接收队列包括N个内存块,一个内存块用于缓存一个数据单元,N为大于1的正整数。也即是,在本申请实施例中,在接收端配置一个固定容量的接收队列,当接收端接收到发送端发送的一个或多个数据单元时,将每个数据单元缓存在接收队列中的一个内存块中,并由接收端及时向发送端发送通知消息,以便于发送端能够根据空闲内存块的数量来发送数据单元,无需发送端每次传输数据之前先向接收端发送内存申请请求,从而避免了数据传输过程中接收端与发送端之间频繁的交互。(The application discloses a data transmission method, a data transmission device and a computer storage medium, and belongs to the technical field of communication. The method comprises the following steps: a receiving queue is configured in the receiving end, the receiving queue includes N memory blocks, one memory block is used for caching one data unit, and N is a positive integer greater than 1. That is, in this embodiment of the present application, a receiving queue with a fixed capacity is configured at a receiving end, and when the receiving end receives one or more data units sent by a sending end, each data unit is cached in one memory block in the receiving queue, and the receiving end sends a notification message to the sending end in time, so that the sending end can send the data units according to the number of idle memory blocks, and it is not necessary that the sending end sends a memory application request to the receiving end before transmitting data each time, thereby avoiding frequent interaction between the receiving end and the sending end in a data transmission process.)

数据传输方法、装置及计算机存储介质

技术领域

本申请涉及通信技术领域,特别涉及一种数据传输方法、装置及计算机存储介质。

背景技术

随着通信技术的发展,不同计算机之间可以采用RDMA(remote direct memoryaccess,远程直接内存访问)技术进行数据传输,该技术可以实现数据从一台计算机的内存直接传输到另一台计算机的内存,无需计算机上的CPU(central processing unit,中央处理器)的介入,从而有效解决了数据传输过程的延迟问题。

相关技术中,在利用RDMA技术进行数据传输时,如果接收端的内存未准备就绪就进入数据传输状态,将导致接收端接收数据出现延时的概率大大增加,极大影响数据传输性能。因此,发送端在每次进行数据传输之前,先向接收端发送内存申请请求,该内存申请请求携带待申请的内存的大小。接收端根据内存申请请求配置出用于缓存发送端发送的数据的内存,然后向发送端发送确认消息,发送端在接收到确认消息之后便可进行数据传输。

由于发送端每次在进行数据传输之前均需要和接收端进行消息交互,而随着数据传输次数的增多,频繁的消息交互会严重影响数据传输性能。

发明内容

本申请实施例提供了一种数据传输方法,可以避免现有技术中发送端和接收端频繁的消息交互。所述技术方案如下:

第一方面,提供了一种数据传输方法,应用于接收端,所述接收端中配置有接收队列,所述接收队列包括N个内存块,一个内存块用于缓存一个数据单元,所述N为大于1的正整数;所述方法包括:

接收发送端发送的一个或多个数据单元,所述一个或多个数据单元的数量小于所述N;

将所述一个或多个数据单元缓存在所述接收队列包括的内存块中;

向发送端发送用于指示所述接收队列中空闲内存块的数量的通知消息,以使所述发送端根据所述空闲内存块的数量继续发送数据单元,所述空闲内存块是指没有缓存数据单元的内存块。

可选的,所述向发送端发送用于指示所述接收队列中空闲内存块的数量的通知消息,包括:

如果检测到所述接收队列中存在内存块被移出所述接收队列,在所述接收队列中添加空闲内存块,添加的空闲内存块的数量和被移出的内存块的数量相同;

向所述发送端发送所述通知消息。

可选的,所述接收端上部署有计数器,所述计数器用于记录从创建所述接收队列到当前时间之间从所述接收队列中移出的内存块的总数量;

所述检测到所述接收队列中存在内存块被移出所述接收队列,包括:

如果所述计数器记录的数量发生变化,则确定检测到所述接收队列中存在内存块被移出所述接收队列;

所述向所述发送端发送所述通知消息,包括:

向所述发送端发送携带所述计数器记录的数量的通知消息,以使所述发送端根据所述计数器记录的数量确定所述接收队列中空闲内存块的数量。

可选的,所述方法还包括:

接收所述发送端发送的协商消息,所述协商消息携带所述待创建的内存块的大小以及待创建的内存块的数量;

根据所述协商消息创建所述接收队列,创建的接收队列中包括的内存块的数量等于所述协商消息中待创建内存块的数量,所述创建的接收队列中包括的内存块的大小等于所述协商消息中待创建的内存块的大小。

可选的,所述发送端基于远程直接内存访问RDMA方式向所述接收端传输数据;

所述接收发送端发送的一个或多个数据单元,包括:

通过所述接收端与所述发送端之间的数据链路接收所述一个或多个数据单元;

所述向发送端发送用于指示所述接收队列中空闲内存块的数量的通知消息,包括:

通过所述接收端与所述发送端之间的控制链路发送所述通知消息。

第二方面,提供了一种数据传输方法,应用于发送端,所述方法包括:

获取接收端发送的通知消息,所述通知消息用于指示所述接收端中配置的接收队列中空闲内存块的数量,所述接收队列包括N个内存块,一个内存块用于缓存所述发送端发送的一个数据单元,所述N为大于1的正整数,所述空闲内存块是指没有缓存数据单元的内存块;

根据所述通知消息,确定所述空闲内存块的数量;

根据所述空闲内存块的数量和待发送的数据单元的数量,确定目标数量;

向所述接收端发送所述目标数量个数据单元。

可选的,所述根据所述空闲内存块的数量和待发送的数据单元的数量,确定目标数量,包括:

如果所述空闲内存块的数量大于或等于待发送的数据单元的数量,将所述待发送的数据单元的数量确定为所述目标数量。

可选的,所述根据所述空闲内存块的数量和待发送的数据单元的数量,确定目标数量,包括:

如果所述空闲内存块的数量小于待发送的数据单元的数量,将所述空闲内存块的数量确定为所述目标数量。

可选的,所述接收端上部署有计数器,所述计数器用于记录从创建所述接收队列到当前时间之间从所述接收队列中移出的内存块的总数量,所述通知消息中携带所述计数器记录的数量;

所述根据所述通知消息,确定所述空闲内存块的数量,包括:

确定从创建所述接收队列到当前时间之间所述发送端发送的数据单元的总数量;

根据所述发送端发送的数据单元的总数量,所述N以及所述计数器记录的数量,确定所述空闲内存块的数量。

可选的,所述方法还包括:

向所述接收端发送协商消息,所述协商消息携带所述发送端传输数据时所使用的数据单元的大小和数据单元总数量,以使所述接收端根据所述协商消息创建所述接收队列。

第三方面,提供了一种数据传输装置,应用于接收端,所述接收端中配置有接收队列,所述接收队列包括N个内存块,一个内存块用于缓存一个数据单元,所述N为大于1的正整数;所述装置包括:

第一接收模块,用于接收发送端发送的一个或多个数据单元,所述一个或多个数据单元的数量小于所述N;

缓存模块,用于将所述一个或多个数据单元缓存在所述接收队列包括的内存块中;

发送模块,用于向发送端发送用于指示所述接收队列中空闲内存块的数量的通知消息,以使所述发送端根据所述空闲内存块的数量继续发送数据单元,所述空闲内存块是指没有缓存数据单元的内存块。

可选的,所述发送模块,包括:

创建子模块,用于如果检测到所述接收队列中存在内存块被移出所述接收队列,在所述接收队列中添加空闲内存块,添加的空闲内存块的数量和被移出的内存块的数量相同;

第一发送子模块,用于向所述发送端发送所述通知消息。

可选的,所述接收端上部署有计数器,所述计数器用于记录从创建所述接收队列到当前时间之间从所述接收队列中移出的内存块的总数量;

所述创建子模块,还用于:

如果所述计数器记录的数量发生变化,则确定检测到所述接收队列中存在内存块被移出所述接收队列;

所述第一发送子模块,还用于:

向所述发送端发送携带所述计数器记录的数量的通知消息,以使所述发送端根据所述计数器记录的数量确定所述接收队列中空闲内存块的数量。

可选的,所述装置还包括:

第二接收模块,用于接收所述发送端发送的协商消息,所述协商消息携带所述待创建的内存块的大小以及待创建的内存块的数量;

创建模块,用于根据所述协商消息创建所述接收队列,创建的接收队列中包括的内存块的数量等于所述协商消息中待创建内存块的数量,所述创建的接收队列中包括的内存块的大小等于所述协商消息中待创建的内存块的大小。

可选的,所述发送端基于远程直接内存访问RDMA方式向所述接收端传输数据;

所述第一接收模块包括:

接收子模块,用于通过所述接收端与所述发送端之间的数据链路接收所述一个或多个数据单元;

第二发送子模块,用于所述向发送端发送用于指示所述接收队列中空闲内存块的数量的通知消息,包括:

第三发送子模块,用于通过所述接收端与所述发送端之间的控制链路发送所述通知消息。

第四方面,提供了一种数据传输装置,应用于发送端,所述装置包括:

获取模块,用于获取接收端发送的通知消息,所述通知消息用于指示所述接收端中配置的接收队列中空闲内存块的数量,所述接收队列包括N个内存块,一个内存块用于缓存所述发送端发送的一个数据单元,所述N为大于1的正整数,所述空闲内存块是指没有缓存数据单元的内存块;

第一确定模块,用于根据所述通知消息,确定所述空闲内存块的数量;

第二确定模块,用于根据所述空闲内存块的数量和待发送的数据单元的数量,确定目标数量;

第一发送模块,用于向所述接收端发送所述目标数量个数据单元。

可选的,所述第二确定模块用于:

如果所述空闲内存块的数量大于或等于待发送的数据单元的数量,将所述待发送的数据单元的数量确定为所述目标数量。

可选的,所述所述第二确定模块还用于:

如果所述空闲内存块的数量小于待发送的数据单元的数量,将所述空闲内存块的数量确定为所述目标数量。

可选的,所述接收端上部署有计数器,所述计数器用于记录从创建所述接收队列到当前时间之间从所述接收队列中移出的内存块的总数量,所述通知消息中携带所述计数器记录的数量;

所述第一确定模块包括:

第一确定子模块,用于确定从创建所述接收队列到当前时间之间所述发送端发送的数据单元的总数量;

第二确定子模块,用于根据所述发送端发送的数据单元的总数量,所述N以及所述计数器记录的数量,确定所述空闲内存块的数量。

可选的,所述装置还包括:

第二发送模块,用于向所述接收端发送协商消息,所述协商消息携带所述发送端传输数据时所使用的数据单元的大小和数据单元总数量,以使所述接收端根据所述协商消息创建所述接收队列。

第五方面,提供了一种数据传输装置,所述数据传输装置包括处理器、通信接口、存储器和通信总线;

其中,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信;

所述存储器用于存放计算机程序;

所述处理器用于执行所述存储器上所存放的程序,以实现前述提供数据传输方法。

第六方面,提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现前述提供的数据传输方法的步骤。

本申请实施例提供的技术方案带来的有益效果至少包括:

在本申请实施例中,接收端中配置有接收队列,接收队列包括N个内存块,一个内存块用于缓存一个数据单元,N为大于1的正整数。也即是,在本申请实施例中,在接收端配置一个固定容量的接收队列,当接收端接收到发送端发送的一个或多个数据单元时,将一个或多个中每个数据单元缓存在接收队列中的一个内存块中,并由接收端及时向发送端发送通知消息,以便于发送端能够根据空闲内存块的数量来发送数据单元,无需发送端每次传输数据之前先向接收端发送内存申请请求,从而避免了数据传输过程中接收端与发送端之间频繁的交互。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种数据传输系统结构图。

图2是本申请实施例提供的一种数据传输方法流程图。

图3是本申请实施例提供的另一种数据传输方法流程图。

图4是本申请实施例提供的一种数据传输方法流程图。

图5是本申请实施例提供的一种接收队列示意图。

图6是本申请实施例提供的一种数据传输装置的结构示意图。

图7是本申请实施例提供的一种数据传输装置的结构示意图。

图8是本申请实施例提供的一种服务器的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

在对本申请实施例进行详细的解释说明之前,先对本申请实施例涉及的系统架构予以介绍。

图1是本申请实施例提供的一种数据传输系统架构图。如图1所示。该数据传输系统100包括一个或多个客户端101、一个或多个服务端102、

对于一个或多个客户端101中任一客户端101,该客户端101可以与一个或多个服务端102的任一服务端102之间通过无线或有线方式连接以进行通信。

其中,客户端101和服务端102之间可以进行数据传输。在本申请实施例中,客户端101和服务端102之间是通过RDMA方式进行数据传输的。如图1所示,服务端102和客户端101中分别部署有网卡(smartnic)。当服务端102和客户端101之间需要进行数据传输时,比如,当发送端101需要向服务端102发送数据时,发送端101上的网卡可以直接将发送端中的内存中的数据发送至服务端102上的网卡,由服务器端102上的网卡将接收到的数据存储至服务端102中的内存,中间不涉及客户端101和服务端102上的处理器,这样就不需要耗费过多的计算机的处理资源,从而提高了客户端101和服务端102之间传输数据的性能。

本申请实施例提供的数据传输方法就应用于客户端101和服务端102之间是通过RDMA方式进行数据传输的场景中。

图1中的客户端101和服务端102可以分别运行在不同的主机上。本申请实施例中的主机可以计算机、服务器等设备。另外,图1是以一个客户端和一个服务端为例进行说明,并不构成对本申请实施例的限定。

此外,图1中的网卡一般为无限带宽(Infiniband)网卡,或者为支持ROCE(RDMAover converged ethernet,RDMA过融合以太网)协议或iWARP(Internet Wide Area RDMAProtocol,互联网广域RDMA协议)的以太网卡。前述几个网卡仅仅用于举例说明,并不构成对本申请实施例的对网卡类型的限定。

需要说明的是,本申请实施例中,如果为单向数据传输,客户端101为发送端,服务端102为接收端。如果为双向数据传输,则客户端101既是发送端也是接收端,服务端102也既是发送端也是接收端。也即是,下述实施例提供的数据传输方法可以应用于客户端101向服务端102发送数据的场景,也可以应用于服务端102向客户端101发送数据的场景,也可以应用于客户端101向服务端102之间双向传输数据的场景。其中,任一方向另一方传输数据的具体方式均可以参考下述实施例,在此先不详细说明。

接下来对本申请实施例提供的数据传输方法进行详细的解释说明。

图2是本申请实施例提供的一种数据传输方法的流程图,该方法应用于接收端。请参考图2,该方法包括如下步骤:

步骤201:接收端接收发送端发送的一个或多个数据单元,一个或多个数据单元的数量小于N。

其中,接收端中配置有接收队列,接收队列包括N个内存块,一个内存块用于缓存一个数据单元,N为大于1的正整数

步骤202:接收端将一个或多个数据单元缓存在接收队列包括的内存块中。

步骤203:接收端向发送端发送用于指示接收队列中空闲内存块的数量的通知消息,以使发送端根据空闲内存块的数量继续发送数据单元,空闲内存块是指没有缓存数据单元的内存块。

在本申请实施例中,接收端中配置有接收队列,接收队列包括N个内存块,一个内存块用于缓存一个数据单元,N为大于1的正整数。也即是,在本申请实施例中,在接收端配置一个固定容量的接收队列,当接收端接收到发送端发送的一个或多个数据单元时,将一个或多个中每个数据单元缓存在接收队列中的一个内存块中,并由接收端及时向发送端发送通知消息,以便于发送端能够根据空闲内存块的数量来发送数据单元,无需发送端每次传输数据之前先向接收端发送内存申请请求,从而避免了数据传输过程中接收端与发送端之间频繁的交互。

图3是本申请实施例提供的一种数据传输方法的流程图,该方法应用于发送端。请参考图3,该方法包括如下步骤:

步骤301:发送端获取接收端发送的通知消息,通知消息用于指示接收端中配置的接收队列中空闲内存块的数量,接收队列包括N个内存块,一个内存块用于缓存发送端发送的一个数据单元,N为大于1的正整数,空闲内存块是指没有缓存数据单元的内存块。

步骤302:发送端根据通知消息,确定空闲内存块的数量

步骤303:发送端根据空闲内存块的数量和待发送的数据单元的数量,确定目标数量。

步骤304:发送端向接收端发送目标数量个数据单元。

在本申请实施例中,当发送端根据接收端发送的通知消息发送的一个或多个数据单元时,通知消息用于指示接收端中配置的接收队列中空闲内存块的数量。发送端根据空闲内存块的数量和待发送的数据单元的数量,向接收端发送目标数量个数据单元,无需发送端每次传输数据之前先向接收端发送内存申请请求,从而避免了数据传输过程中接收端与发送端之间频繁的交互。

图4是本申请实施例提供的一种数据传输方法的流程图,该方法应用于数据传输系统。请参考图4,该方法包括如下步骤;

步骤401:发送端向接收端发送协商消息,接收端接收发送端发送的协商消息,该协商消息携带待创建的内存块的大小以及待创建的内存块的数量。

在本申请实施例中,为了避免发送端在每次向接收端发送数据之前需要向接收端发送内存申请请求,可以将发送端配置为以数据单元为单位来传输数据,并预先在接收端中配置接收队列,该接收队列用于缓存发送端向接收端发送的数据单元,以便于后续接收端向发送端通知该接收队列中存储的数据单元的情况,以使发送端根据该接收队列中存储的数据单元的情况来控制发送的数据单元的数量,也即是,控制发送的流量。因此,发送端在向接收端传输数据之前,需要先通过步骤401至步骤402和接收端进行协商,以在接收端配置上述接收队列。

在一种可能的实现方式中,参考图1,发送端上配置有第一网卡,第一网卡上部署有网卡驱动接口,网卡驱动接口中内置有参数设置模块。接收端上配置有第二网卡,第二网卡上也部署有网卡驱动接口。此时,步骤401的实现过程可以为:第一网卡上的网卡驱动接口通过内置的参数设置模块获取待创建内存块的数量和待创建内存块的大小,然后根据这两个参数生成协商消息,并将该协商消息发送至第二网卡上的网卡驱动接口,以实现发送端向接收端发送协商消息。

其中,上述第一网卡和第二网卡上的网卡驱动接口均可以标记为rdma_connect,参数设置模块可以标记为conn_param,待创建内存块的数量和待创建内存块的大小可以标记为private_data。

步骤402:接收端根据协商消息创建接收队列,创建的接收队列中包括的内存块的数量等于该协商消息中待创建内存块的数量,该创建的接收队列中包括的内存块的大小等于该协商消息中待创建的内存块的大小。

在本申请实施例中,当发送端以数据单元为单位传输数据时,为了便于接收端能够及时获取到接收队列中的数据单元的存储情况,在接收端中配置的接收队列为包括多个内存块的接收队列,每个内存块用于存储一个数据单元,以便于后续接收端能够根据接收队列中空闲内存块的数量来快速确定接收队列中的数据单元的存储情况。因此,接收端在接收到发送端发送的协商消息时,便可根据协商消息创建接收队列。

在一种可能的实现方式中,接收端可以严格按照发送端发送的协商消息来创建接收队列,也即是,创建接收队列中的内存块的数量等于协商消息中携带的待创建的内存块的大小,创建的接收队列中包括内存块的大小等于协商消息中包括的待创建的内存块的大小。

在另一种可能的实现方式中,接收端也可以非严格按照发送端发送的协商消息来创建接收队列,也即是,内存块的大小大于协商消息中包括的待创建的内存块的大小,接收队列中的内存块的数量大于协商消息中携带的待创建的内存块的大小。

比如,协商消息中携带的发送端传输数据时所使用的数据单元的大小为B,此时,接收端确定的内存块的大小可以为B,也可以为大于B的一个数值。协商消息中携带的协商消息中包括的待创建的内存块的数量为P,此时,创建接收队列中的内存块的数量可以为P,也可以为大于P的一个数值。

另外,接收端在成功创建接收队列之后,需要向发送端回复确认消息,以使发送端能够确定接收端这一侧已经成功创建了接收队列,从而开始进行数据传输。

需要说明的是,如果创建的接收队列中的内存块的数量大于协商消息中携带的待创建的内存块的数量,此时,上述确认消息中还需携带创建的接收队列中的内存块的数量,以便于发送端能够获知创建的接收队列的基本情况。可选地,如果创建的接收队列中的内存块的大小大于协商消息中包括的待创建的内存块的大小,该确认消息中还可以携带创建的接收队列中的内存块的大小。

在通过上述步骤401至步骤402在接收端配置完接收队列之后,发送端便可通过下述步骤403向接收端传输数据。也即是,在本申请实施例中,在发送端向接收端发送数据之前,接收端中配置有接收队列,接收队列包括N个内存块,一个内存块用于缓存一个数据单元,N为大于1的正整数。

另外,需要说明的是,上述N个内存块还可以称为一个内存池,也即是,在本申请实施例中,通过上述步骤401至步骤402创建了一个容量一定的内存池。

步骤403:发送端向接收端发送一个或多个数据单元,接收端接收发送端发送的一个或多个数据单元,一个或多个数据单元的数量小于N。

基于步骤401可知,发送端被配置为以数据单元为单位来传输数据,因此,在一种可能的实现方式中,当发送端需要向接收端发送数据时,可以将待发送的数据进行分块,得到一个或多个数据单元,然后将这一个或多个数据单元发送至接收端。

步骤404:接收端将一个或多个中每个数据单元缓存在接收队列中的一个内存块中。

由于接收端接收这一个或多个数据单元是有先后顺序的,因此,在步骤405中,每当接收端接收到一个数据单元,便可将该数据单元缓存在接收队列中的内存块中,从而实现将这一个或多个中每个数据单元依次缓存在一个或多个内存块中。

另外,为了便于对接收队列中的内存块进行管理,还可以将接收队列中各个内存块按照存储数据单元的先后顺序进行排列,排序后的接收队列标记为RQ。也即是,缓存数据单元较早的内存块排在接收队列中靠近队头的位置。如此,空闲内存块便排在接收队列中靠近队尾的位置。后续当接收端的处理器需要处理数据时,便可从接收队列的对头开始依次移出一个内存块,对该内存块中缓存的数据单元进行处理,也即是,从接收队列中消费内存块。

因此,在一种可能的实现方式中,步骤405可能的实现过程为:按照一个或多个中每个数据单元的接收时间从早到晚的顺序,依次将这一个或多个中每个数据单元缓存在接收队列中的一个空间内存块中。

如图5所示,接收端创建的接收队列中处于队头的内存块0已经存储有数据单元,表示该内存块已经被占用,当发送端按照先后顺序分别向接收端发送数据单元1、数据单元2、数据单元3,接收端的接收队列按照次序分别将数据单元1放置在内存块1中,将数据单元2放置在内存块2中,将数据单元3放置在内存3中,该接收队列的队尾放置有空闲内存块,该空闲内存块用于对接收端后续接收的数据单元进行存储。

步骤405:接收端向发送端发送用于指示接收队列中空闲内存块的数量的通知消息,发送端获取接收端发送的通知消息,空闲内存块是指没有缓存数据单元的内存块。

在一种可能的实现方式中,步骤405可能的实现过程为:每当接收端向缓存中的内存块中缓存数据时,接收端便可直接确定当前接收队列中的空闲内存块的数量,然后将该空闲内存块的数量携带在通知消息中,并向发送端发送该通知消息。

可选地,接收端的处理器在处理接收队列的内存块的过程中,为了保证接收队列的容量固定,因此,每当处理器从接收队列中移出一个内存块,便在接收队列中添加一个空闲内存块,以保证接收队列中包括的内存块的个数一直保持为N。由于发送端可以预先获知到接收端配置的接收队列中的内存块的总数量N,因此,发送端只需要知道接收队列中被移出的内存块的数量,便可确定接收队列中空闲内存块的数量。所以,在另一种可能的实现方式中,步骤403可能的实现过程为:接收端实时监控接收队列,如果检测到接收队列中存在内存块被移出接收队列,则在接收队列中添加空闲内存块,添加的空闲内存块的数量和被移出的内存块的数量相同;向发送端发送通知消息。此时,通知消息中携带的是被移出的内存块的数量。

另外,接收端还可以创建完成队列,该完成队列可以标记为CQ,该完成队列用于存储接收队列中被移出的内存块,也即是,当接收端的处理器处理完接收队列的一个数据单元时,则将该已处理数据单元所占用的内存块移出接收队列,并放置在完成队列。因此,接收端的处理器可以实时监控完成队列中是否有新的内存块产生,当判断出有新内存块产生时,向发送端发送通知消息。比如,处理器可以通过判定计算机代码包括的opcode为IBV_WC_RECV以判断出完成队列有接收到新数据。

进一步地,接收端上部署有计数器,计数器用于记录从创建接收队列到当前时间之间从接收队列中移出的内存块的总数量。也即是,该计数器用于记录完成队列中内存块的数量。由于完成队列中的内存块是指被接收端的处理器处理之后的内存块,因此,该计数器还可以称为处理计数器。

此时,接收端检测到接收队列中存在内存块被移出接收队列的实现过程为:如果上述计数器记录的数量发生变化,则确定检测到接收队列中存在内存块被移出接收队列。这种情况下,向发送端发送通知消息的实现过程可以为:向发送端发送携带计数器记录的数量的通知消息,以便于发送端计数器记录的数量确定接收队列中空闲内存块的数量。

另外,在传统的RDMA技术中,发送端和接收端由于不涉及处理器的介入,因此发送端和接收端在进行数据传输时,通常是在发送端和接收端之间创建数据链路以利用该数据链路进行数据传输,此时通过该数据链路传输的数据同时包括有效的数据以及内存请求请求等这类控制消息。在本申请实施例中,为了避免这类控制消息占用有效数据的带宽,可以在发送端和接收端之间分别创建数据链路和控制链路,通过数据链路来传输数据单元这种有效数据,通过控制链路传输上述协商消息以及通知消息等控制消息,以避免控制消息占用数据单元所使用的数据链路的有效带宽,从而提高了数据传输性能。

步骤406:发送端根据该通知消息,确定空闲内存块的数量。

基于步骤405可知,在一种场景中,如果通知消息中直接携带有空闲内存块的数量,此时发送端则可直接从该通知消息中获取空闲内存块的数量。

可选地,在另一种场景中,如果接收端上部署有计数器,计数器用于记录从创建接收队列到当前时间之间从接收队列中移出的内存块的总数量,此时通知消息中携带计数器记录的数量。这种情况下,步骤406的实现过程可以为:确定从创建接收队列到当前时间之间发送端发送的数据单元的总数量;根据发送端发送的数据单元的总数量,N以及计数器记录的数量,确定空闲内存块的数量。

例如,若确定从创建接收队列到当前时间之间发送端发送的数据单元的总数量S时,而由于接收端中的接收队列的内存块的总数量为N,以及计数器记录的数量H,便可确实出接收队列中的空闲内存块的数量为N-(S-H)。

步骤407:发送端根据空闲内存块的数量和待发送的数据单元的数量,确定目标数量。

在一种可能的实现方式中,步骤407可能的实现过程为:如果空闲内存块的数量大于或等于待发送的数据单元的数量,将待发送的数据单元的数量确定为目标数量。如果空闲内存块的数量小于待发送的数据单元的数量,将空闲内存块的数量确定为目标数量。通过这种方式,可以实现发送端根据接收端中的接收队列中的数据单元的存储情况控制发送的流量。

例如,如果当前空闲内存块的数量为7。而待发送的数据单元的数量3,则将该待发送的数据单元的数量3确定为目标数量。如果当前空闲内存块的数量为2。而待待发送的数据单元的数量3,则将该当前空闲内存块的数量2确定为目标数量。

步骤408:发送端向接收端发送目标数量个数据单元。

其中,目标数量可以为一个或多个,当发送端向接收端发送目标数量个数据单元之后,接收端便可通过上述步骤404继续处理发送端发送的数据单元。在本申请实施例中,接收端中配置有接收队列,接收队列包括N个内存块,一个内存块用于缓存一个数据单元,N为大于1的正整数。也即是,在本申请实施例中,在接收端配置一个固定容量的接收队列,当接收端接收到发送端发送的一个或多个数据单元时,将一个或多个中每个数据单元缓存在接收队列中的一个内存块中,并由接收端及时向发送端发送通知消息,以便于发送端能够根据空闲内存块的数量来发送数据单元,无需发送端每次传输数据之前先向接收端发送内存申请请求,从而避免了数据传输过程中接收端与发送端之间频繁的交互。

上述所有可选技术方案,均可按照任意结合形成本申请的可选实施例,本申请实施例对此不再一一赘述。

图6是本申请实施例提供的一种数据传输装置的结构示意图,该数据传输装置可以由软件、硬件或者两者的结合实现。该数据传输装置可以包括:

第一接收模块601,用于接收发送端发送的一个或多个数据单元,该一个或多个数据单元的数量小于N;

缓存模块602,用于将该一个或多个数据单元缓存在该接收队列包括的内存块中;

发送模块603,用于向发送端发送用于指示该接收队列中空闲内存块的数量的通知消息,以使发送端根据该空闲内存块的数量继续发送数据单元,该空闲内存块是指没有缓存数据单元的内存块。

可选的,发送模块,包括:

创建子模块,用于如果检测到该接收队列中存在内存块被移出该接收队列,在该接收队列中添加空闲内存块,添加的空闲内存块的数量和被移出的内存块的数量相同;

第一发送子模块,用于向发送端发送该通知消息。

可选的,接收端上部署有计数器,该计数器用于记录从创建该接收队列到当前时间之间从该接收队列中移出的内存块的总数量;

创建子模块,还用于:

如果计数器记录的数量发生变化,则确定检测到该接收队列中存在内存块被移出该接收队列;

第一发送子模块,还用于:

向发送端发送携带计数器记录的数量的通知消息,以使发送端根据计数器记录的数量确定该接收队列中空闲内存块的数量。

可选的,装置还包括:

第二接收模块,用于接收该发送端发送的协商消息,该协商消息携带该待创建的内存块的大小以及待创建的内存块的数量;

创建模块,用于根据该协商消息创建该接收队列,创建的接收队列中包括的内存块的数量等于该协商消息中待创建内存块的数量,该创建的接收队列中包括的内存块的大小等于该协商消息中待创建的内存块的大小。

可选的,发送端基于远程直接内存访问RDMA方式向接收端传输数据;

该第一接收模块包括:

接收子模块,用于通过接收端与发送端之间的数据链路接收一个或多个数据单元;

第二发送子模块,用于向发送端发送用于指示该接收队列中空闲内存块的数量的通知消息,包括:

第三发送子模块,用于通过接收端与发送端之间的控制链路发送该通知消息。

在本申请实施例中,在本申请实施例中,接收端中配置有接收队列,接收队列包括N个内存块,一个内存块用于缓存一个数据单元,N为大于1的正整数。也即是,在本申请实施例中,在接收端配置一个固定容量的接收队列,当接收端接收到发送端发送的一个或多个数据单元时,将一个或多个中每个数据单元缓存在接收队列中的一个内存块中,并由接收端及时向发送端发送通知消息,以便于发送端能够根据空闲内存块的数量来发送数据单元,无需发送端每次传输数据之前先向接收端发送内存申请请求,从而避免了数据传输过程中接收端与发送端之间频繁的交互。

图7是本申请实施例提供的一种数据传输装置的结构示意图,该数据传输装置可以由软件、硬件或者两者的结合实现。该数据传输装置可以包括:

获取模块,用于获取接收端发送的通知消息,通知消息用于指示接收端中配置的接收队列中空闲内存块的数量,该接收队列包括N个内存块,一个内存块用于缓存发送端发送的一个数据单元,N为大于1的正整数,空闲内存块是指没有缓存数据单元的内存块;

第一确定模块,用于根据通知消息,确定空闲内存块的数量;

第二确定模块,用于根据空闲内存块的数量和待发送的数据单元的数量,确定目标数量;

第一发送模块,用于向接收端发送目标数量个数据单元。

可选的,第二确定模块用于:

如果空闲内存块的数量大于或等于待发送的数据单元的数量,将待发送的数据单元的数量确定为目标数量。

可选的,第二确定模块还用于:

如果空闲内存块的数量小于待发送的数据单元的数量,将空闲内存块的数量确定为目标数量。

可选的,接收端上部署有计数器,该计数器用于记录从创建接收队列到当前时间之间从接收队列中移出的内存块的总数量,通知消息中携带计数器记录的数量;

第一确定模块包括:

第一确定子模块,用于确定从创建接收队列到当前时间之间发送端发送的数据单元的总数量;

第二确定子模块,用于根据发送端发送的数据单元的总数量,N以及计数器记录的数量,确定空闲内存块的数量。

可选的,该装置还包括:

第二发送模块,用于向接收端发送协商消息,协商消息携带发送端传输数据时所使用的数据单元的大小和数据单元总数量,以使接收端根据协商消息创建接收队列。

在本申请实施例中,当发送端根据接收端发送的通知消息发送的一个或多个数据单元时,通知消息用于指示接收端中配置的接收队列中空闲内存块的数量。发送端根据空闲内存块的数量和待发送的数据单元的数量,向接收端发送目标数量个数据单元,无需发送端每次传输数据之前先向接收端发送内存申请请求,从而避免了数据传输过程中接收端与发送端之间频繁的交互。

需要说明的是:上述实施例提供的数据传输装置在数据传输时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据传输装置与数据传输方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

本申请实施例还提供了一种非临时性计算机可读存储介质,当所述存储介质中的指令由终端的处理器执行时,使得终端能够执行上实施例提供的数据传输方法。

本申请实施例还提供了一种包含指令的计算机程序产品,当其在终端上运行时,使得终端执行上述实施例提供的数据传输方法。

图8是本申请实施例提供的一种服务器结构示意图。该服务器可以是后台服务器集群中的服务器。该服务器应用于本申请实施例中的发送端和接收端。具体来讲:

服务器800包括中央处理单元(CPU)801、包括随机存取存储器(RAM)802和只读存储器(ROM)803的系统存储器804,以及连接系统存储器804和中央处理单元801的系统总线805。服务器800还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)806,和用于存储操作系统813、应用程序814和其他程序模块815的大容量存储设备807。

基本输入/输出系统806包括有用于显示信息的显示器808和用于用户输入信息的诸如鼠标、键盘之类的输入设备809。其中显示器808和输入设备809都通过连接到系统总线805的输入输出控制器810连接到中央处理单元801。基本输入/输出系统806还可以包括输入输出控制器810以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器810还提供输出到显示屏、打印机或其他类型的输出设备。

大容量存储设备807通过连接到系统总线805的大容量存储控制器(未示出)连接到中央处理单元801。大容量存储设备807及其相关联的计算机可读介质为服务器800提供非易失性存储。也就是说,大容量存储设备807可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。

不失一般性,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知计算机存储介质不局限于上述几种。上述的系统存储器804和大容量存储设备807可以统称为存储器。

根据本申请的各种实施例,服务器800还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器800可以通过连接在系统总线805上的网络接口单元811连接到网络812,或者说,也可以使用网络接口单元811来连接到其他类型的网络或远程计算机系统(未示出)。

上述存储器还包括一个或者一个以上的程序,一个或者一个以上程序存储于存储器中,被配置由CPU执行。

本申请实施例还提供了一种非临时性计算机可读存储介质,当所述存储介质中的指令由服务器的处理器执行时,使得服务器能够执行上述实施例提供的数据传输方法。

本申请实施例还提供了一种包含指令的计算机程序产品,当其在服务器上运行时,使得服务器执行上述实施例提供的数据传输方法。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

22页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种IASS网络平台下处理ARP数据包的优化方法及其系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!