基于fpga的传输数据的方法、设备及系统

文档序号:1435297 发布日期:2020-03-20 浏览:9次 >En<

阅读说明:本技术 基于fpga的传输数据的方法、设备及系统 (Method, equipment and system for transmitting data based on FPGA ) 是由 李国川 于 2018-09-13 设计创作,主要内容包括:本申请公开了一种基于现场可编程门阵列FPGA服务器的传输数据的方法及系统,该方法包括基于源主机向目标主机发起的关于目标数据的远程写请求,在源主机的源FPGA端和目标主机的目标FPGA端之间建立传输链路,并分配源主机的第一内存队列和目标主机的第二内存队列,并将所述目标数据写入第一内存队列中;通过源FPGA端将第一内存队列中的目标数据写入源FPGA端的存储单元;将源FPGA端的存储单元中的目标数据通过传输链路写入目标FPGA端的存储单元中;通过目标FPGA端将目标FPGA端的存储单元中的目标数据写入第二内存队列中。(The method comprises the steps of establishing a transmission link between a source FPGA end of a source host and a target FPGA end of a target host based on a remote write request about target data initiated by the source host to the target host, distributing a first memory queue of the source host and a second memory queue of the target host, and writing the target data into the first memory queue; writing the target data in the first memory queue into a storage unit of the source FPGA end through the source FPGA end; writing target data in a storage unit of a source FPGA end into a storage unit of a target FPGA end through a transmission link; and writing the target data in the storage unit of the target FPGA end into a second memory queue through the target FPGA end.)

基于FPGA的传输数据的方法、设备及系统

技术领域

本申请涉及计算机技术领域,尤其涉及基于FPGA的传输数据的方法、设备及系统。

背景技术

面对高性能计算、大数据分析和浪涌型IO高并发、低时延应用,现有远程交互软硬件架构和应用高CPU消耗的技术特征一般不能满足应用的需求。这主要有体现在:处理延时过大,数十微秒;多次内存拷贝、中断处理,上下文切换、复杂的协议处理、网络延时过大、存储转发模式和丢包导致额外延时等。

因此,需要提供更快速或者更可靠的方案,以克服上述技术问题。

发明内容

本申请的目的在于提供一种基于FPGA的传输数据的方法、设备及系统,可以实现服务器之间的数据传输,从而提高数据传输的效率。

为解决上述技术问题,本申请实施例是这样实现的:

第一方面,提供一种基于现场可编程门阵列FPGA的传输数据的方法,包括:

基于源主机向目标主机发起的关于目标数据的远程写请求,在所述源主机的源FPGA端和所述目标主机的目标FPGA端之间建立传输链路,并分配所述源主机的第一内存队列和所述目标主机的第二内存队列,并将所述目标数据写入所述第一内存队列中;其中,所述第一内存队列是所述源主机为存储所述目标数据在所述源主机的内存中分配的内存单元,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元;

通过源FPGA端将第一内存队列中的目标数据写入所述源FPGA端的存储单元;

将所述源FPGA端的存储单元中的目标数据通过所述传输链路写入所述目标FPGA端的存储单元中;

通过所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中。

第二方面,提供了基于现场可编程门阵列FPGA的传输数据的方法,应用于源主机,包括:

基于源主机向目标主机发起的关于目标数据的远程写请求,在所述源主机的源FPGA端和所述目标主机的目标FPGA端之间建立传输链路,并分配所述源主机的第一内存队列,并将所述目标数据写入所述第一内存队列中;其中,所述第一内存队列是所述源主机为存储所述目标数据在所述源主机的内存中分配的内存单元;

通过所述源FPGA端将第一内存队列中的目标数据写入所述源FPGA端的存储单元;

将所述源FPGA端的存储单元中的目标数据通过所述传输链路写入所述目标FPGA端的存储单元中,以便所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元。

第三方面,一种基于现场可编程门阵列FPGA的传输数据的方法,应用于目标主机,包括:

从目标主机的目标FPGA端接收传输链路建立请求,所述传输链路建立请求是由源主机的源FPGA端基于目标数据的远程写请求发送给所述目标FPGA端的;

基于所述传输链路建立请求在所述源主机的源FPGA端和所述目标主机的目标FPGA端之间建立传输链路,并分配所述目标主机的第二内存队列,其中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元;

接收所述源FPGA端的存储单元中的目标数据通过所述传输链路传输后的目标数据,并写入所述目标FPGA端的存储单元中;

通过所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中。

第四方面,提供了一种具有源FPGA端的源主机,包括:

第一传输链路建立单元,基于所述源主机向目标主机发起的关于目标数据的远程写请求,在所述源FPGA端和所述目标主机的目标FPGA端之间建立传输链路;

第一内存分配单元,分配所述源主机的第一内存队列;其中,所述第一内存队列是所述源主机为存储所述目标数据在所述源主机的内存中分配的内存单元;

第一写入单元,在所述第一内存队列中写入所述目标数据;

第二写入单元,通过所述源FPGA端将第一内存队列中的目标数据写入所述源FPGA端的存储单元;

发送单元,将所述源FPGA端的存储单元中的目标数据通过所述传输链路传输到所述目标FPGA端的存储单元中,以便所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元。

第五方面,提供了一种具有目标FPGA端的目标主机,包括:

第一接收单元,在所述目标FPGA端接收传输链路建立请求,所述传输链路建立请求是由源主机的源FPGA端基于目标数据的远程写请求发送给所述目标FPGA端的;

第二传输链路建立单元,基于所述传输链路建立请求在所述源主机的源FPGA端和所述目标主机的目标FPGA端之间建立传输链路;

第二内存分配单元,分配所述目标主机的第二内存队列,其中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元;

第二接收单元,接收所述源FPGA端的存储单元中的目标数据通过所述传输链路传输后的目标数据;

第三写入单元,将所述传输后的目标数据写入所述目标FPGA端的存储单元中;

第四写入单元,通过所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中。

第六方面,提供了一种基于现场可编程门阵列FPGA的系统,包括:

具有源FPGA端的源主机和具有目标FPGA端的目标主机;

所述源主机包括:

第一传输链路建立单元,基于所述源主机向目标主机发起的关于目标数据的远程写请求,在所述源FPGA端和所述目标主机的目标FPGA端之间建立传输链路;

第一内存分配单元,分配所述源主机的第一内存队列;其中,所述第一内存队列是所述源主机为存储所述目标数据在所述源主机的内存中分配的内存单元;

第一写入单元,在所述第一内存队列中写入所述目标数据;

第二写入单元,通过所述源FPGA端将第一内存队列中的目标数据写入所述源FPGA端的存储单元;

发送单元,将所述源FPGA端的存储单元中的目标数据通过所述传输链路发送到所述目标FPGA端的存储单元中,以便所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元;

所述目标主机,包括:

第一接收单元,在目标FPGA端接收传输链路建立请求,所述传输链路建立请求是由源主机的源FPGA端基于目标数据的远程写请求发送给所述目标FPGA端的;

第二传输链路建立单元,基于所述传输链路建立请求在所述源主机的源FPGA端和所述目标主机的目标FPGA端之间建立传输链路;

第二内存分配单元,分配所述目标主机的第二内存队列,其中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元;

第二接收单元,接收所述源FPGA端的存储单元中的目标数据通过所述传输链路传输后的目标数据;

第三写入单元,将所述传输后的目标数据写入所述目标FPGA端的存储单元中;

第四写入单元,通过所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中。

第七方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:

基于源主机向目标主机发起的关于目标数据的远程写请求,在所述源主机的源FPGA端和所述目标主机的目标FPGA端之间建立传输链路,并分配所述源主机的第一内存队列,并将所述目标数据写入所述第一内存队列中;其中,所述第一内存队列是所述源主机为存储所述目标数据在所述源主机的内存中分配的内存单元;

通过所述源FPGA端将第一内存队列中的目标数据写入所述源FPGA端的存储单元;

将所述源FPGA端的存储单元中的目标数据通过所述传输链路写入所述目标FPGA端的存储单元中,以便所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元。

第八方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:

在目标主机的目标FPGA端接收传输链路建立请求,所述传输链路建立请求是由源主机的源FPGA端基于目标数据的远程写请求发送给所述目标FPGA端的;

基于所述传输链路建立请求在所述源主机的源FPGA端和所述目标主机的目标FPGA端之间建立传输链路,并分配所述目标主机的第二内存队列,其中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元;

接收所述源FPGA端的存储单元中的目标数据通过所述传输链路传输后的目标数据,并写入所述目标FPGA端的存储单元中;

通过所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中。

本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:

利用FPGA高速并行处理数据的特点,源主机和目标主机分别通过各自的FPGA端口直接实现两个主机之间数据的高速传输,可以消除在主机的内存与内核之间复制数据的需要,从而可以显著减小传输数据的延迟。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是本申请实施例的基于FPGA的传输数据的方法的示意性流程图;

图2是本申请的另一个实施例的基于FPGA的传输数据的方法的示意性流程图;

图3是本申请的再一个实施例的基于FPGA的传输数据的方法的示意性流程图;

图4是本申请的再一个实施例的基于FPGA的传输数据的方法的示意性流程图;

图5是本申请的再一个实施例的基于FPGA的传输数据的方法的示意性流程图;

图6是本申请的再一个实施例的基于FPGA的传输数据的方法的示意性流程图;

图7是本申请实施例数据传输的场景示意图;

图8是本申请的再一个实施例实施例的基于FPGA的传输数据的系统的示意性结构框图;

图9是本申请的再一个实施例的FPGA的传输数据的方法的示意性流程图;

图10是本申请的再一个实施例的FPGA的传输数据的方法的示意性流程图;

图11是本申请实施例的一种源主机的结构示意图;

图12是本申请实施例的一种目标主机的结构示意图;

图13是本申请实施例一种基于FPGA传输数据的系统框图;

图14是本申请的一个实施例电子设备的结构示意图;

图15是本申请的一个实施例电子设备的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

现有的数据传输方法,发送端需要先读取待发送数据,并写入内存,再通过CPU发送到网卡队列,接收端则需要通过CPU从网卡队列获取数据,再由CPU写入内存。这种传输方式需要占用较多的CPU资源,且依赖于CPU的处理,传输效率较差。

以下结合附图,详细说明本申请各实施例提供的技术方案。

图1是本申请实施例的基于FPGA的传输数据的方法的示意性流程图,以解决现有技术中远程交互软硬件架构和应用高CPU消耗的技术特征不能满足高并发、低时延应用的问题。本申请实施例的传输数据的方法,可包括:

S102.基于源主机向目标主机发起的关于目标数据的远程写请求,在源主机的源FPGA端和目标主机的目标FPGA端之间建立传输链路,并分配源主机的第一内存队列和目标主机的第二内存队列,并将目标数据写入第一内存队列。

其中,第一内存队列是源主机为存储目标数据在源主机的内存中分配的内存单元,第二内存队列是目标主机为存储目标数据在目标主机的内存中分配的内存单元。

应理解,本申请实施例的传输方法应用于源主机和目标主机。发送方主机为源主机,目标方主机为目标主机。本申请实施例中,源主机和目标主机都包括主控端和FPGA端。其中,主控端包括主机的CPU、内存、存储器等,用于控制管理主机的运行。FPGA端是基于FPGA的可编程器件,在本申请实施例中,FPGA端可以不经过CPU直接从主机的内存拷贝数据到FPGA端的存储单元,或者不经过CPU将FPGA端的存储单元的数据写入主机的内存。此外,FPGA端还可与对端的FPGA端交互数据。

应理解,目标数据,即源主机准备向目标主机发送的数据。

应理解,队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行***操作,和栈一样,队列是一种操作受限制的线性表。进行***操作的端称为队尾,进行删除操作的端称为队头。

在本申请实施例中,内存队列则是按照先进先出的规则进行访问的内存单元的集合。其中,在写入阶段先写入的内存单元,将在读取阶段先被读取。例如,内存单元1、2、3的写入顺序为3、2、1,则在读取阶段,先读取内存单元3,再读取内存单元2,最后读取内存单元1。第一内存队列是源主机的内存中按照先进先出进行访问的内存单元;第二内存队列是目标主机的内存中按照先进先出进行访问的内存单元。

应理解,本申请实施例中,采用内存队列而不使用普通的存储空间或存储单元,可以进行预读取,可以将要传输的数据提前发送到内存队列中规定的存储单元位置中;此外,对于虚拟化设备来说,采用内存队列管理,将更方便虚拟化设备的读写。

当然,内存单元也可以命名为内存存储单元或内存存储空间等等,只要表示主机的物理内存即可,不限于本实施例所限定的内存单元的命名。

当然,应理解,在分配源主机的第一内存队列时,源主机的源主控端可基于远程写请求中的目标数据的长度,为目标数据分配第一内存队列的起始地址和长度。

在源主机的写操作过程中,设定源主机的源FPGA端一次直接内存取DMA的内存队列的最大深度为第一DMA存取阈值(比如4Gbit)。如此,写操作的内容长度会出现两种情形:第一,写操作的内容长度大于第一DMA存取阈值;第二,写操作的内容长度小于或等于第一DMA存取阈值。本申请其它地方提到的第一DMA存取阈值的含义与此相同。

因此,源主机的源主控端基于远程写请求中的目标数据的长度,为目标数据分配第一内存队列的起始地址和长度的操作,具体可实现为:

如果目标数据的长度大于第一DMA存取阈值(如4Gbit),则源主控端分配的第一内存队列的长度为第一DMA存取阈值;

或者,如果目标数据的长度小于或等于第一DMA存取阈值,则源主控端分配的第一内存队列的长度为目标数据的长度。

当然,对于目标数据的长度小于第一DMA存取阈值的场景,源主控端也可配置大于目标数据的长度的一个数值作为第一内存队列的长度。不过,这种配置方法会造成一定的资源浪费。

当源主机的源主控端根据远程写请求中的目标数据的长度为目标数据分配第一内存队列的起始地址和长度的长度后,可在源FPGA端和目标FPGA端之间建立传输链路,以通过该传输链路将目标数据发送至目标主机的FPGA端中。

类似地,在分配第二内存队列时,目标主机的目标FPGA端可基于DMA写入内容(也即目标数据)的长度,确定第二内存队列的长度。

不妨可设定目标主机的目标FPGA端一次直接内存取DMA的内存队列的最大深度为第二DMA存取阈值。如果目标数据的长度大于第二DMA存取阈值,则分配第二内存队列的长度为第二DMA存取阈值;如果目标数据的长度小于或等于第二DMA存取阈值,则分配第二内存队列的长度为目标数据的长度。

当然,应理解,目标主机的第二DMA存取阈值与源主机的第一DMA存取阈值可以相同,也可以不同。

S104.通过源FPGA端将第一内存队列中的目标数据写入源FPGA端的存储单元。

当源主机向目标主机发起远程写请求时,目标数据起初存储在源主机的物理内存(即第一内存队列)中,源主机会通过源FPGA端将第一内存队列中的目标数据先写入到源FPGA端的存储单元(也叫板上存储单元)。

S106.将源FPGA端的存储单元中的目标数据通过传输链路写入目标FPGA端的存储单元中。

当目标数据写入到源FPGA端的存储单元后,就可以通过传输链路将源FPGA端的存储单元的目标数据写入到目标FPGA端的存储单元中。换句话说,两个主机之间的数据传输是通过各自的FPGA端的存储单元进行。

S108.通过目标FPGA端将目标FPGA端的存储单元中的目标数据写入第二内存队列中。

当目标数据通过传输链路传输到目标FPGA端的存储单元后,目标FPGA端再将其存储单元中的目标数据写入到目标主机的物理内存(第二内存队列)中。

本申请实施例中,利用FPGA高速并行处理数据的特点,分别通过源主机和目标主机各自的FPGA端,在各自的内存与存储单元之间复制目标数据,并通过源FPGA端和目标FPGA端之间的传输链路将目标数据从源FPGA端的存储单元传输至目标FPGA端的存储单元,能够直接实现两个主机之间数据的高速传输,并且可以消除在服务器的内存与内核之间复制数据的需要,从而可以显著减小传输数据的延迟,解决了现有技术中远程交互软硬件架构和应用高CPU消耗的技术特征不能满足高并发、低时延应用的问题。

应理解,如图2所示,基于源主机向目标主机发起的关于目标数据的远程写请求,在源主机的源FPGA端和目标主机的目标FPGA端之间建立传输链路,可包括:

S202.源主控端基于远程写请求,向源FPGA端发送请求控制报文,请求控制报文携带目标主机的IP地址和端口、第一内存队列的起始地址和长度。

当然,应理解,HOME请求控制报文还可包括所需DMA内容的实际长度、端口号(比如源FPGA端口号、源主控端端口号等)以及其他控制或状态信息等。

应理解,当目标数据小于或等于第一DMA存取阈值时,只需往内存队列写入一次目标数据,源FPGA端可发送一次请求控制报文。当目标数据大于第一DMA存取阈值时,需要将目标数据分成多段写入内存队列;此时,源FPGA端需要发送多次请求控制报文,每次请求控制报文携带当次传输的第一内存队列长度。

此外,应理解,源FPGA端可包括至少一个FPGA板卡,不同FPGA板卡具有不同的MAC地址或IP地址。当源FPGA端具有多个FPGA板卡时,请求控制报文中还可携带FPGA板卡的MAC地址或IP地址,用于指示源FPGA端的FPGA板卡中处理HOME请求控制报文的FPGA板卡。

S204.源FPGA端基于请求控制报文,获取目标主机的目标MAC地址和目标端口号。

其中,目标主机的目标MAC地址和目标端口号为目标主机的目标FPGA端中的MAC地址和端口号。

应理解,源FPGA端可基于请求控制报文中的目标主机的IP地址和端口,向目标主机发起地址解析协议(Address Resolution Protocol,ARP)或邻居发现协议(NeighborDiscovery Protocol,NDP)请求,以请求获取目标主机的IP地址和端口;目标主机的目标FPGA端接收到ARP或NDP请求报文后,向源FPGA端反馈ARP或NDP应答。

应理解,ARP是一个位于TCP/IP协议栈中的低层协议,负责将某个IP地址解析成对应的MAC地址。

应理解,NDP是用来发现邻接点相关信息的协议。ndp运行在数据链路层,因此可以支持不同的网络层协议。NDP用来发现直接相连的邻居信息,包括邻接设备的设备名称、软/硬件版本、连接端口等,另外还可提供设备的ID、端口地址、硬件平台等信息。

应理解,由于网络地址数据库在存储数据的时候可能会按照IP地址和端口作为索引进行操作,因此,目标主机和目标FPGA端一般都会记录IP地址和端口。

应理解,当目标主机上部署多个虚拟设备时,该多个虚拟设备的MAC地址可能相同。为了区分不同的虚拟设备,可通过IP地址和端口进行进一步的区分。本实施例中的目标主机的目标MAC地址和目标IP地址、目标端口均是为了生成网络报文首部的IP五元组,以生成网络数据组包。

S206.源FPGA端基于获取的目标MAC地址和目标端口号,将DMA写请求通过网络报文发送给目标主机中的目标FPGA端。

S208.源FPGA端基于目标主机的目标FPGA端的DMA写应答,建立源FPGA端与目标FPGA端的传输链路。

如此,可通过源主机的源FPGA端对请求控制报文的分析获取目标主机的目标MAC地址和目标端口号,以将DMA写请求通过网络报文发送给目标主机中的目标FPGA端,从而根据目标FPGA端的DMA写应答建立源FPGA端与目标FPGA端的传输链路,以建立好两个主机(源主机和目标主机)之间的联系,便于后续目标数据的传输。

当然,应理解,在步骤S204之前,该传输方法还可包括:源FPGA端建立并维护源DMA调度目录。

其中,源DMA调度目录用于源FPGA端基于源DMA调度目录,以DMA方式将目标数据从第一内存队列写入到源FPGA端的存储单元。

应理解,源FPGA端通过建立源DMA调度目录,从而能够记录以DMA方式从源主机内存向源FPGA端的存储单元写入目标数据的进度,以便源FPGA端基于源DMA调度目录确定如何进行DMA调度。

相应地,在步骤S206中的源FPGA端基于目标主机反馈的目标MAC地址和目标端口号,将DMA写请求通过网络报文发送给目标主机中的目标FPGA端之前,方法还包括:

目标FPGA端建立并维护目标DMA调度目录,目标DMA调度目录用于目标FPGA端基于DMA调度目录以DMA方式将目标FPGA端的存储单元中的内存数据写入到目标主机的第二内存队列中。

类似地,目标FPGA端通过建立目标DMA调度目录,从而能够记录以DMA方式从目标FPGA端的存储单元向目标主机内存写入目标数据的进度,以便目标FPGA端基于目标DMA调度目录确定如何进行DMA调度。

应理解,在第一内存队列中写入目标数据时,基于目标数据的长度与第一DMA存取阈值的大小关系的不同,存在不同的实现方式。

可选地,如果所述目标数据的长度小于或等于第一DMA存取阈值,则源主控端在分配所述第一内存队列后写入所述目标数据。

例如,假设第一DMA存取阈值4G,目标数据3G,则源主控端直接在分配第一内存队列后写入。

或者,如果所述目标数据的长度大于第一DMA存取阈值,则源主控端在分配所述第一内存队列后写入所述目标数据的初始部分数据,并在接收到第一内存队列的数据被读取完毕的指示后,清空第一内存队列并写入所述目标数据中的剩余部分数据,直至所述目标数据全部写入第一内存队列,其中,所述目标数据最后一次写入第一内存队列的数据长度小于或等于第一DMA存取阈值,所述目标数据最后一次写入第一内存队列之前写入的数据长度等于第一DMA存取阈值。

例如,假设第一DMA存取阈值4G,目标数据7G,则源主控端分配第一内存队列的深度为4G,并写入目标数据的前4G;在接收到第一内存队列的数据被读取完毕的指示后,清空第一内存队列,并写入目标数据的后3G。当然,应理解,第一内存队列的数据被读取完毕的指示,可以是源FPGA端发送的DMA阶段性中断,等等。

或者,如果所述目标数据的长度大于第一DMA存取阈值,则源主控端在分配多个内存队列后,按照预设写入顺序往所述多个内存队列写入所述目标数据,并将所述多个内存队列中第一个写入的内存队列设置为第一内存队列;在接收到第一内存队列的数据被读取完毕的指示后,清空第一内存队列,并依照写入顺序将下一个有数据的内存队列设置为第一内存队列,并在目标数据尚未写完时将目标数据的剩余部分写入清空的内存队列。应理解,在这个方案中,源主控端可分配多个内存队列,并轮流选择其中之一作为源FPGA端拷贝数据的第一内存队列。

例如,假设第一DMA存取阈值4G,目标数据7G,则源主控端分配内存队列A的深度为4G,分配内存队列B的深度为4G,并在内存队列A写入目标数据的前4G,在内存队列B写入目标数据的后3G(也就是说,内存队列B的实际长度是3G),并将内存队列A设置为第一内存队列;在接收到第一内存队列的数据被读取完毕的指示后,清空第一内存队列(即清空内存队列A),并将内存队列B设置为第一内存队列。

具体地,源主控端在第一内存队列写入数据后,可将第一内存队列的起始地址,队列深度,目标服务器的IP、端口,源服务器的IP、端口发送到源服务器端的源FPGA端。如果第一内存队列内的数据被完全下传到源服务器端的源FPGA端,同时源主控端接收到源FPGA端的DMA读完成中断后,则源主控端清空并释放内存队列A,将内存队列B设置为第一内存队列;源主控在第一内存队列写入数据后,可将第一内存队列的起始地址,队列深度,目标服务器的IP、端口,源服务器的IP、端口发送到源服务器端的源FPGA端。

又例如,假设第一DMA存取阈值4G,目标数据15G,则源主控端分配内存队列A的深度为4G,分配内存队列B的深度为4G,并在内存队列A写入目标数据的第一段4G,在内存队列B写入目标数据的第二段4G,并将内存队列A设置为第一内存队列;在第一次接收到第一内存队列的数据被读取完毕的指示后,清空第一内存队列(即清空内存队列A),并将内存队列B设置为第一内存队列,并在内存队列A写入目标数据的第三段4G;在第二次接收到第一内存队列的数据被读取完毕的指示后,清空第一内存队列(即清空内存队列B),并将内存队列A设置为第一内存队列,并在内存队列B写入目标数据的最后3G;在第三次接收到第一内存队列的数据被读取完毕的指示后,清空第一内存队列(即清空内存队列A),并将内存队列B设置为第一内存队列。

具体地,源主控端将目标数据顺序写到内存队列A和内存队列B中,剩余部分存储在硬盘或其他存储设备中。首先源主控端将内存队列A为第一内存队列,并在第一内存队列写入数据后,将第一内存队列的起始地址,内存队列深度,目标服务器的IP、端口,源服务器的IP、端口发送到源服务器端的源FPGA端。如果第一内存队列内的数据被完全下传到源服务器端的源FPGA端,同时源主控端接收到源FPGA端的DMA读完成中断后,则源主控端清空内存队列A,并将内存队列B设置为第一内存队列,并将第一内存队列的起始地址,内存队列深度,目标服务器的IP、端口,源服务器的IP、端口发送到源服务器端的源FPGA端。此外,源主控端清空内存队列A后,将硬盘或其他存储设备剩余的目标数据拷贝到内存队列A中。如果第一内存队列内的数据被完全下传到源服务器端的源FPGA端,同时接收到源FPGA端的DMA读完成中断后,源主控端清空内存队列B,并将内存队列A设置为第一内存队列,将第一内存队列的起始地址,内存队列深度,目标服务器的IP、端口,源服务器的IP、端口发送到源服务器端的源FPGA端。彼此循环,直到完成所有目标数据的传送。

应理解,基于目标数据长度与第一DMA存取阈值的大小关系,步骤S104可以存在多种实现方式。

可选地,在一种具体的实现方式中,目标数据的长度小于或等于第一DMA存取阈值。此时,如图3所示,步骤S104可实现为:

S302.源FPGA端在监控到源FPGA端的存储单元的空闲空间大于第一预定阈值后,向源主机的源主控端发起请求读取数据的中断。

应理解,当源主机向目标主机发起的关于目标数据的远程写请求时,源主机的源主控端基于远程写请求中的目标数据的长度,为目标数据分配第一内存队列的起始地址和长度。

因此,当第一内存队列中的目标数据写入到源FPGA端的存储单元时,也需要监控存储单元的空闲空间,以将目标数据稳定地传输到存储单元中。

本申请实施例中,第一预定阈值的取值,可以等于目标数据的长度;也可以小于目标数据的长度,例如,目标数据的长度*10%、目标数据的长度*20%,等等。

S304.源主控端基于请求读取数据的中断,向源FPGA端发起第一DMA启动命令。

其中,所述第一DMA启动命令用于所述源FPGA端启动DMA读取,将目标数据从第一内存队列读取到所述源FPGA端的存储单元。

应理解,源主控端收到请求读取数据的中断后,即可确认源FPGA端存储空间中的空闲空间可以满足存储目标数据的条件。此时,源主控端可向源FPGA端发起第一DMA启动命令,指示源FPGA端启动DMA读取。

S306.源FPGA端基于源DMA调度目录,通过DMA方式将目标数据从第一内存队列读取到源FPGA端的存储单元中。

源FPGA端响应于第一DMA启动命令,开始对目标数据的DMA读取。

应理解,在目标数据的长度小于或等于第一DMA存取阈值的情况下,源FPGA端只需发送一次请求读取数据的中断,即可将目标数据读取到源FPGA端的存储单元中。

应理解,当然,应理解,源FPGA端还可建立DMA请求,并维护DMA应答目录。具体地,在步骤S306中,源FPGA端可采用更新规则credit算法。

为便于理解,下面对credit算法做一些简单介绍。

Credit调度算法是自Xen3.0版本以来使用的缺省的调度算法,其为一种按比例公平共享的非抢占式调度算法。Credit调度算法为每一个Guest操作系统设置二元组(weight,cap),各个Guest操作系统之间weight的比例决定它们各自占用CPU时间片的比例;而cap决定一个Guest操作系统用CPU时间的上限值,比如cap=50,表示Guest操作系统只能最多只能占用半个物理CPU的所有时间,cap=100,表示Guest操作系统只能最多只能占用一个物理CPU的所有时间。

Credit调度算法将各个虚拟CPU分为两个队列,under队列和over队列,它只调度Under队列中的虚拟CPU。最开始所有的虚拟CPU都在under队列,每个domain的初始Credit为其对应的weight值;每当虚拟CPU被调度时,这个虚拟CPU对应的domain的Credit就被减小,当发现虚拟CPU对应的domain的Credit为负数时,这个虚拟CPU就被放入over队列;当所有的虚拟CPU都在over队列中时,Credit调度算法按比例为所有的domain的Credit加上最初为domain设置的weight值,并把对应的虚拟CPU入至under队列;周而复始。系统每次调度处于队首且优先级为under的VCPU运行。当一个处理器空闲时或该处理器的就绪VCPU队列中无under优先级的VCPU时,它将查看其它处理器以找到一个可运行的VCPU到本处理器上运行。

这个算法的好处是向上和向下同时反压,达到数据流不会出现溢出风险,阻止流程拥塞。

S308.源FPGA端在目标数据读取完毕并传输至目标FPGA端后,向源主控端发起第一DMA完成中断。

当目标数据由源FPGA端的物理内存写入到源FPGA端的存储单元后,即可将目标数据从源FPGA端的存储单元经传输链路传输至目标主机的目标FPGA端(通常是传输到目标FPGA端的存储单元)。此时,源FPGA端可发起第一DMA完成中断,向源主控端通知目标数据已成功写入到源FPGA端的存储单元。

S310.源主控端基于第一DMA完成中断将第一内存队列清空,并释放第一内存队列。

可选地,在另一种具体的实现方式中,目标数据的长度大于第一DMA存取阈值。此时,如图4所示,步骤S104可实现为:

S402.源FPGA端在监控到源FPGA端的存储单元的空闲空间大于第一预定阈值后,向源主机的源主控端发起请求读取数据的中断。

本申请实施例中,第一预定阈值的取值,可以等于第一DMA存取阈值;也可以小于第一DMA存取阈值,例如,第一DMA存取阈值*10%、第一DMA存取阈值*20%,等等。

S404.源主机的源主控端基于请求读取数据的中断,向源FPGA端发起第一DMA启动命令。

步骤S402和步骤S404的具体实现可参考步骤S302和步骤S304,不再赘述。

S406.源FPGA端基于源DMA调度目录,依次通过DMA读取不大于第一DMA存取阈值的目标数据到源FPGA端的存储单元中。

应理解,如果目标数据的长度大于第一DMA存取阈值,显然无法通过一次DMA中断将第一内存队列中的目标数据写入到源FPGA端的存储单元中。此时,源FPGA端会根据第一DMA启动命令,利用源DMA调度目录,依次读取不大于第一DMA存取阈值的部分目标数据并写入到源FPGA端的存储单元。

如果该DMA读取不是源FPGA端最后一次DMA读取目标数据,则执行步骤S408;

如果该DMA读取是源FPGA端最后一次DMA读取目标数据,则执行步骤S412.

S408,源FPGA端在最后一次DMA读取以外的DMA读取完成后,向源主控端发送第一DMA阶段性中断。

其中,在最后一次DMA读取以外的DMA读取操作完成后,源FPGA端向源主控端发送第一DMA阶段性中断,以通知源主控端该次DMA读取已经完成,可准备下一部分的目标数据到第一内存队列中。

S410,源主控端基于第一DMA阶段性中断将第一内存队列清空,将下一部分目标数据写入第一内存队列,并通知源FPGA端发起下一次DMA读取。

源FPGA端收到通知后,继续执行步骤S406.

S412,源FPGA端在最后一次DMA读取完成后,向源主控端发送第一DMA完成中断。

在最后一次DMA读取操作完成后,源FPGA端向源主控端发送第一DMA完成中断,以通知源主控端目标数据读取已经完成。

S414.源主控端基于第一DMA完成中断将第一内存队列清空,并释放第一内存队列。

源主控端接收到第一DMA完成中断后,即可清空第一内存队列,并释放第一内存队列。

当然,应理解,为便于源FPGA端与目标FPGA端之间数据传输调度,源FPGA端还可在维护源DDR调度目录。具体地,源FPGA端可响应于启动DMA命令,建立并维护源DDR调度目录。

进一步地,在建立并维护源DDR调度目录后,步骤S106具体可实现为:源FPGA端基于源DDR调度目录,将源FPGA端的存储单元中的数据封装成数据报文并发送至目标FPGA端;

相应地,目标FPGA端可基于接收的数据报文,建立并维护目标DDR调度目录,并基于目标DDR调度目录将数据报文中的有效数据写入到目标FPGA端的存储单元中。

也就是说,源FPGA端的存储单元和目标FPGA端的存储单元在进行数据传输时,源FPGA端会根据源DDR调度目录将源FPGA端的存储单元的数据封装成数据报文发送给目标FPGA端,而目标FPGA端会建立并维护目标DDR调度目录,以根据目标DDR调度目录将数据报文中的有效数据写入到目标FPGA端的存储单元中。

此外,目标FPGA端基于接收的数据报文,还可向源FPGA端反馈数据报文的应答响应。

应理解,在传输链路进行数据传输时,有可能发生丢包的现象。为避免数据丢失,目标FPGA端可通过数据报文的应答响应,将是否接收到准确的数据报文反馈给源FPGA端。

基于数据报文的反馈情况的不同,源FPGA端可采取不同的操作。

具体地,步骤S106还可包括:

如果源FPGA端在发送数据报文后预定时间内接收到关于数据报文接收错误的应答响应,则源FPGA端重发数据报文;

或者,如果源FPGA端在预定时间内未接收到数据报文的应答响应,则源FPGA端重发数据报文;

或者,源FPGA端在预定时间内接收到数据报文接收正确的应答响应,则源FPGA端发送下一个数据报文。

应理解,当源FPGA端将数据报文发送给目标FPGA端后,可根据目标FPGA端针对该数据报文的应答响应情况确定是否重发数据报文,从而可以保证数据传输的完整性。

当然,应理解,步骤S106还可包括:目标FPGA端在将数据报文中的有效数据写入到目标FPGA端的存储单元后,更新目标DMA调度目录。

本申请实施例中,通过基于目标数据在目标FPGA端的存储单元的写入情况更新目标DMA调度目录,从而使得目标FPGA端能够基于目标DMA调度目录将目标FPGA端的存储单元以DMA方式写入到第二内存队列中。

类似地,应理解,基于目标数据长度与目标FPGA端的第二DMA存取阈值的大小关系,步骤S108可以存在多种实现方式。

可选地,作为一个实施例,在一种具体的实现方式中,目标数据的长度小于或等于目标FPGA端的第二DMA存取阈值。此时,如图5所示,步骤S108可包括:

S502.目标FPGA端在监控到目标FPGA端的存储单元中的目标数据的长度大于第二预定阈值后,向目标主机的目标主控端发起请求写入数据的中断。

应理解,目标FPGA端接收到由源FPGA端发送过来的目标数据后,目标FPGA端会将其存储到目标FPGA端的存储单元中,并监控其所接收的目标数据的大小。

当目标FPGA端监控到目标FPGA端的存储单元中的目标数据大于第二预定阈值后,即可准备将目标FPGA端的存储单元中的目标数据写入到目标主机的物理内存(即第二内存队列中)。

应理解,第二预定阈值,可以是目标数据的总长度,或者是比目标数据的总长度小的一个数值,例如目标数据的总长度*10%,目标数据的总长度*20%,等等。该数值的设定,可取决于目标数据写入目标FPGA端的存储单元的速度及目标数据从目标FPGA端的存储单元读取到第二内存队列的速度,或者由其它因素决定,本申请实施例对此不作限制。

此时,目标FPGA端可向目标主控端发起请求写入数据的中断,以及时地将目标数据从目标FPGA端的存储单元移动到目标主机的物理内存(即第二内存队列),以便目标主机的目标主控端对物理内存中的目标数据进行相应的处理操作。

S504.目标主控端基于请求写入数据的中断,向目标FPGA端发起第二DMA启动命令。

其中,所述第二DMA启动命令用于所述目标FPGA端启动DMA写入,将目标数据从所述目标FPGA端的存储单元写入到第二内存队列。

应理解,当目标主控端接收到请求写入数据的中断后,即可确认所述目标FPGA端的存储单元已存储有一定数量的目标数据。此时,目标主控端可向目标FPGA端发起第二DMA启动命令,指示目标FPGA端启动DMA写入。

S506.目标FPGA端基于目标DMA调度目录,通过DMA方式将目标数据从源FPGA端的存储单元写入到第二内存队列中。

目标FPGA端响应于第二DMA启动命令,开始对目标数据的DMA写入。

应理解,在目标数据的长度小于或等于第二DMA存取阈值的情况下,目标FPGA端只需发送一次请求写入数据的中断,即可将目标数据从目标FPGA端的存储单元写入到第二内存队列中。

S508.目标FPGA端在DMA写入完毕后,向目标主控端发送第二DMA完成中断。

当目标FPGA端将其存储单元的目标数据写入到第二内存队列(目标FPGA端的物理内存)中后,目标FPGA端应向目标主控端发送第二DMA完成中断,以通知目标主控端目标数据已成功写入目标主机的物理内存中。

S510.目标主控端基于第二DMA完成中断清空第二内存队列的数据,并释放第二内存队列。

可选地,在另一种具体的实现方式中,目标数据的长度大于第二DMA存取阈值。此时,如图6所示,步骤S108中的通过目标FPGA端将目标FPGA端的存储单元中的目标数据写入第二内存队列中的操作可包括:

S602.目标FPGA端在监控到目标FPGA端的存储单元的数据大于第二预定阈值后,向目标主机的目标主控端发起请求读取数据的中断。

S604.目标主机的目标主控端基于请求写入数据的中断,向目标FPGA端发起第二DMA启动命令。

S606.目标FPGA端基于目标DMA调度目录,依次通过DMA写入将不大于第一DMA存取阈值的目标数据从目标FPGA端的存储单元写入到第二内存队列中。

如果该DMA写入不是目标FPGA端最后一次DMA写入目标数据,则执行步骤S608;

如果该DMA写入是目标FPGA端最后一次DMA写入目标数据,则执行步骤S612.

S608.目标FPGA端在最后一次DMA写入以外的DMA写入完成后,向目标主控端发送第二DMA阶段性中断。

其中,在最后一次DMA写入以外的DMA写入操作完成后,目标FPGA端向目标主控端发送第二DMA阶段性中断,以通知目标主控端该次DMA写入已经完成,可对第二内存队列中的数据进行处理,以准备将下一部分的目标数据写入到第二内存队列中。

S610.目标主控端基于第二DMA阶段性中断清空第二内存队列,将下一部分目标数据写入第二内存队列,并通知目标FPGA端发起下一次DMA写入。

目标FPGA端收到通知后,继续执行步骤S606。

S612.目标FPGA端在最后一次DMA写入完成后,向目标主控端发送第二DMA完成中断。

在最后一次DMA写入操作完成后,目标FPGA端向目标主控端发送第二DMA完成中断,以通知目标主控端目标数据写入已经完成。

S614.目标主控端基于第二DMA完成中断清空第二内存队列,并释放第二内存队列。

目标主控端接收到第二DMA完成中断后,即可清空第二内存队列的数据,并释放第二内存队列。

当然,应理解,在上述任一项实施例中,源FPGA端和目标FPGA端均具有内核旁路功能和网络传输功能,在不需要任何内核内存参与的条件下,写请求可以从用户空间发送到本地FPGA(源主机的源FPGA端),再发送给远程FPGA(目标主机的目标FPGA端),如此,可以减少在处理传输、调度数据流时内核内存空间与用户空间之间环境切换的次数。

在本申请实施例的传输数据的方法中,通过源DMA调度目录和目标DMA调度目录的处理(DMA可以直接存到内存中),内核协议栈旁路使应用程序无需执行内核内存调用就可向网卡发送命令。并且,应用程序可以访问远程内存,而不占用远程机器中的任何CPU。两个主机的内存数据在交互过程中,无需任何进程(或处理器)干预,从而可以降低对CPU资源的消耗。

当然,应理解,在本申请的方案中,一个源主机可同时向多个目标主机进行传输。

另外,在两个主机之间传输的数据被作为离散消息流,通过目录建立、更新、释放消除了应用将数据流分成不同消息或事务的需要。而且,本申请实施例的传输数据的方法支持本地处理多个内存队列,即多个内存缓冲区调度,从而可以提高软、硬件交互通道的利用率。

此外,本申请实施例的传输数据的方法在源FPGA端、目标FPGA端设计中,对控制信息和数据交互分开处理,如此,可以便于用户对设备做分布式监管和部署。

图7是本申请实施例数据传输的场景示意图。如图7所示,源主机的源FPGA端通过DMA方式将目标数据从源主控端的内存队列读取到源FPGA端存储单元,再经传输链路传输到目标主机的目标FPGA端的存储单元,然后由目标FPGA端通过DMA方式从目标FPGA端存储单元写入到目标主控端的内存队列。为进一步理解本申请的技术方案,下面给出了图8的具体流程图。

图8是本申请一个具体实施例的基于现场可编程门阵列FPGA的传输数据的方法的示意性流程图。下面结合图8对本申请上述实施例的方法进行说明。如图8所述,源主机和目标主机都可包括主控端和FPGA端。其中,主控端可包括内存模块(MEM)、CPU模块等;FPGA模块可包括用于进行DMA存取的DMA模块,用于目录管理调度的DIR模块、用于存储FPGA端数据的DDR模块等。主控端和FPGA端之间通过PCIE标准的报文进行交互。

在一个具体的实施例中,基于现场可编程门阵列FPGA服务器的传输数据的方法的实现过程可以为:

步骤1:源主机的源主控端基于向目标主机写数据的写请求,分配内存队列。

源主机的源主控端发起向目标主机写数据的写请求。不妨将待写的数据称为目标数据。

基于该写请求,源主控端可通过CPU分配第一内存队列。在分配第一内存队列的长度时,需要确定源主控端一次DMA的内存队列最大深度,即第一DMA存取阈值。不妨假设第一DMA存取阈值为4Gbit。如此,在进行写操作时可能会出现两种情况,即目标数据的长度大于4Gbit的情况,以及目标数据的长度小于或等于4Gbit的情况。其中,如果目标数据的长度小于或等于4Gbit,那么内存队列的深度为内容长度。如果目标数据的长度大于4Gbit,那么内存队列的深度为4Gbit。当然,分配内存队列后,即可写入目标数据。写入目标数据的具体方式,可参考图1所示实施例的相关步骤,不再赘述。

步骤2:源主机的源主控端发起DMA写请求。

基于上述DMA写请求,源主控端可将HOME请求控制报文(home_descriptor)等下传到源FPGA端,以发起DMA写请求。HOME请求控制报文,可包括内存队列的起始地址和所需DMA内容的实际长度、板卡MAC地址、IP地址,端口号,对端服务器的IP地址及其他控制、状态信息,等等。该HOME请求控制报文一般遵循高速串行计算机扩展总线标准(PeripheralComponent Interconnect Express,PCIE)结构。

步骤3:源FPGA端请求建立传输链路。

步骤2发送标准的PCIE结构的控制信息流,进入到源FPGA端内部的目录管理调度模块DIR,DIR模块将记录分析home_descriptor报文。

首先,源FPGA端的DIR模块通过分析home_descriptor,向对端发送ARP或NDP请求报文获取对端的MAC地址和端口。

其次,源FPGA端的DIR模块可建立并维护目的MAC地址和端口的目录,具体更新规则可使用LRU(Least recently used,最近最少使用)算法等。

此外,源FPGA端的DIR模块还可在获取对端MAC地址、端口号后,将DMA写请求和其他控制信息封装成网络报文发送给对端的板卡,即目标主机的目标FPGA端,并监听获取对端的DMA写应答。

另外,源FPGA端的DIR模块还可监听对端的ARP或NDP请求,同时发送应答,这个应答必须要正确的收到,才能建立源FPGA端与目标FPGA端的传输链路。应理解,此处需要建立延时机制,在固有的时间内接到对端的应答信号表示控制指令配置成功,相反,则发起重传请求,直到接收到应答。

步骤4:目标FPGA端向目标主控端上传DMA写请求。

目标FPGA端的DIR模块接收到报文后,可分析报文,并根据报文类型进行相应的处理。

如果是ARP或NDP请求,则直接返回应答,并向源FPGA端发送ARP或NDP请求,以获取源FPGA端的MAC地址和端口号。

如果是DMA写请求,则转成PCIE格式的请求信号,发送给目标主控端。

此外,目标FPGA端的DIR模块还可建立并维护DMA调度目录。

步骤5:目标主控端分配内存队列。

目标主控端的CPU接收到DMA请求指令后,根据此次DMA写的内容实际长度分配内存队列。

与源主控端分配内存队列长度类似,设定目标主控端一次DMA的内存队列最大深度为第二DMA存取阈值。如果目标数据的长度大于第二DMA存取阈值,则队列长度为第二DMA存取阈值;如果目标数据的长度小于或等于第二DMA存取阈值,则队列长度为目标写入的长度。

不妨假设第二DMA存取阈值也为4Gbit。

步骤6:目标FPGA端更新DMA调度目录。

目标FPGA端的DIR模块接收到内存队列的起始地址并,更新DMA调度目录。

步骤7:目标FPGA建立传输链路。

目标FPGA端的DIR模块基于步骤6的结果,生成DMA链路已经打通的应答网络报文,并反馈给源FPGA端,以通知源FPGA端可以通过网络发送数据报文。

步骤8:源FPGA端发起DMA读请求。

源FPGA端的DIR模块通过分析接收到的home_descriptor,确认是应答网络报文后,即可发起网间数据传递操作。

源FPGA端通过DMA模块在监控到所述源FPGA端的存储单元的空闲空间大于第一预定阈值后,即可向主机发起DMA读请求,并监听DMA应答。

此外,源FPGA端的DIR模块还可建立并维护DMA目录。DMA目录的更新规则可采用credit算法,这个算法的好处是向上和向下同时反压,达到数据流不会出现溢出风险,阻止流程拥塞。

当然,应注意,由于目标数据的长度与第一DMA存取阈值的关系,源服务器端有两种分配内存队列的方式。相应地,其通过中断进行DMA读取的方式也不同。

如果目标数据的长度小于或等于第一DMA存取阈值,则只需向源主控端发起一次DMA读取中断。

如果目标数据的长度大于第一DMA存取阈值,则需向源主控端发起多次DMA读取中断。

步骤10:源主控端响应DMA读请求,启动DMA读取。

源主控端基于DMA读请求,建立并维护DDR调度目录。DDR调度目录的更新规则可采用credit算法。如前所述,这个算法的好处是向上和向下同时反压,达到数据流不会出现溢出风险,阻止流程拥塞。当然,也不排除采用其它算法。

源主控端还可将目标数据写入第一内存队列,并向源FPGA端发起第一DMA启动命令,以启动DMA读取。

其中,第一DMA启动命令用于所述源FPGA端启动对目标数据的DMA读取。

应理解,虽然在图8中仅用步骤9的一个单向箭头表示,但是在实际的传输过程中。DMA读取过程需要源FPGA端和源主控端的多次交互。

对于目标数据长度小于或等于第一DMA存取阈值的场景,源FPGA端的DIR模块在收到第一DMA启动命令后,可基于源DMA调度目录,通过DMA方式将所述目标数据读取到所述源FPGA端的存储单元中;源FPGA端在目标数据读取完毕并传输至目标FPGA端后,向源主控端发起第一DMA完成中断;源主控端基于第一DMA完成中断清空第一内存队列的数据,并释放第一内存队列。

对于目标数据长度大于第一DMA存取阈值的场景,源FPGA端的DIR模块在收到第一DMA启动命令后,可基于源DMA调度目录,依次通过DMA读取不大于第一DMA存取阈值的目标数据到源FPGA端的存储单元中;如果所述DMA读取不是源FPGA端最后一次DMA读取目标数据,则源FPGA端在最后一次DMA读取以外的DMA读取完成后,向源主控端发送第一DMA阶段性中断;源主控端基于第一DMA阶段性中断将第一内存队列的数据移出,将下一部分目标数据写入第一内存队列,并通知源FPGA端发起下一次DMA读取;如果所述DMA读取是源FPGA端最后一次DMA读取目标数据,则源FPGA端在最后一次DMA读取完成后,向源主控端发送第一DMA完成中断;源主控端基于第一DMA完成中断清空第一内存队列的数据,并释放第一内存队列。

具体实现可参考图3及图4所示实施例,不再赘述。

步骤10:源FPGA端向目标FPGA端传输数据。

源FPGA端的DIR模块可根据DDR调度目录情况,将源FPGA端的存储单元内的数据封装成以太网报文,发送到目标FPGA端。

源FPGA端的DIR模块在接收到目标FPGA端反馈的成功接收的应答信号后,可更新DDR调度目录。全部传输完毕后,可释放DDR调度目录。

为了保证网间通信不丢包,如果在某个数据报文发送之后预定时间内未收到数据报文的成功接收应答信号,则重发该数据报文;如果在预定时间内接收到目标FPGA端反馈的失败接收的应答信号,也重发该数据报文。

步骤11:目标FPGA端接收数据。

目标FPGA端的DIR模块接收到数据报文后,提取数据报文中的有效数据并存储,同时更新DMA调度目录。

目标FPGA端的DIR模块可建立并维护DDR调度目录。

为保证网间数据传递不丢包,如果接收的数据报文解析成功,则反馈接收成功的应答报文;如果接收的数据报文解析失败或接收数据报文失败,则反馈接收失败的应答报文。

步骤12:目标FPGA端请求DMA写入。

目标FPGA端的DIR模块在监控到目标FPGA端的存储单元的数据大于第二预定阈值后,向目标主机的目标主控端发起请求读取数据的中断。

相应地,目标主机的目标主控端基于请求写入数据的中断,向目标FPGA端发起第二DMA启动命令。第二DMA启动命令用于指示目标FPGA端启动DMA写入。

步骤13:目标FPGA端进行DMA写入。

目标FPGA端可根据DMA调度目录执行读DDR,然后将数据通过DMA模块封装成PCIE报文写入第二内存队列。

应注意,在DMA写过程中,目标主机有两种分配内存队列情况:

1)对于目标数据的长度小于等于4Gbit的情况,数据发送到目标主控端内存队列并完成后,目标FPGA端的DIR模块向HOME端发起完成中断,通知HOME端DMA写操作完成。

2)目标FPGA端的DIR模块还释放此次释放DMA请求及应答目录。

3)对于目标数据的长度大于4Gbit的情况,目标FPGA端的DIR模块对目标数据以4Gbit为单位分拆,每次都以小于等于4Gbit长度发DMA写请求。在最后一个小于等于4Gbit长度之前的每个以4Gbit为单位的DMA写内存过程中,目标FPGA端的DIR模块根据目录准确的接收到所有4Gbit内容并存储到存储单元后,DIR模块向目标主控端发起阶段性完成中断,通知目标主控端更新内存队列。直到最后一个DMA写请求完成,目标FPGA端的DIR模块根据目录准确的接收到最后一个DMA的应答数据内容并存储到存储单元后,DIR模块执行前面的步骤1)和步骤2)。

步骤14:目标主控端释放内存资源。

目标主控端的CPU接收到阶段性完成中断后将指定内存中的数据移出内存;目标主控端的CPU接收到DMA完成中断后指定内存中的数据移出内存并释放内存队列。

步骤12-14的具体实现可参考图5、图6所示实施例,不再赘述。

步骤15:源主控端释放内存资源。

类似地,源主控端根据两种分配内存队列情况释放内存资源。

4)对于目标数据小于等于4Gbit的情况,只要源FPGA端的DIR模块根据目录准确的接收到所有内容并存储到存储单元后,源FPGA端的DIR模块向源主控端发起完成中断,通知源主控端DMA写可以完成。

5)源FPGA端的DIR模块释放此次释放DMA请求、应答目录。

6)对于目标数据大于4Gbit的情况,源FPGA端的DIR模块对目标数据以4Gbit为单位分拆,每次都以小于等于4Gbit长度发DMA读取,在最后一个小于等于4Gbit长度之前的每个以4Gbit为单位的DMA读内存过程中,源FPGA端的DIR模块根据目录准确的接收到所有4Gbit内容并存储到存储单元后,源FPGA端的DIR模块向源主控端发起阶段性完成中断,通知源主控端更新内存队列。直到最后一个DMA读请求完成,源FPGA端的DIR模块根据目录准确的接收到最后一个DMA的应答数据内容并存储到存储单元后,源FPGA端的DIR模块执行步骤4)和步骤5)。

步骤16:源主控端释放内存资源。

源主控端的CPU接收到阶段性完成中断后更新内存队列,并执行步骤2;HOME端的CPU接收到DMA完成中断后释放内存队列。

图9是本申请的再一个实施例的FPGA的传输数据的方法的示意性流程图。该方法包括:

S902,基于源主机向目标主机发起的关于目标数据的远程写请求,在源主机的源FPGA端和目标主机的目标FPGA端之间建立传输链路,并分配源主机的第一内存队列,并将目标数据写入第一内存队列。

其中,所述第一内存队列是源主机为存储目标数据在源主机的内存中分配的内存单元。

S904,通过源FPGA端将第一内存队列中的目标数据写入源FPGA端的存储单元。

S906,将源FPGA端的存储单元中的目标数据通过所述传输链路写入目标FPGA端的存储单元中,以便目标FPGA端将目标FPGA端的存储单元中的目标数据写入所述第二内存队列中。

所述第二内存队列是目标主机为存储目标数据在目标主机的内存中分配的内存单元。

图9所示实施例的具体实现可参考图1-图8所示实施例中源主机执行的方法,不再赘述。

图10是本申请的再一个实施例的FPGA的传输数据的方法的示意性流程图。该方法包括:

S1002,在目标主机的目标FPGA端接收传输链路建立请求。

所述传输链路建立请求是由源主机的源FPGA端基于目标数据的远程写请求发送给目标FPGA端的。

S1004,基于所述传输链路建立请求在源主机的源FPGA端和目标主机的目标FPGA端之间建立传输链路,并分配目标主机的第二内存队列。

其中,所述第二内存队列是目标主机为存储目标数据在目标主机的内存中分配的内存单元;

S1006,接收源FPGA端的存储单元中的目标数据通过所述传输链路传输后的目标数据,并写入目标FPGA端的存储单元中。

S1008,通过目标FPGA端将目标FPGA端的存储单元中的目标数据写入所述第二内存队列中。

图10所示实施例的具体实现可参考图1-图8所示实施例中目标主机执行的方法,不再赘述。

本申请实施例还可提供一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行图9所示实施例的方法,或者执行图1至图8所示实施例中源主机执行的方法。

本申请实施例还可提供一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行图10所示实施例的方法,或者执行图1至图8所示实施例中目标主机执行的方法。

图11是本申请实施例的一种源主机的结构示意图。该源主机1100具有源主控端和源FPGA端,该源主机包括:

第一传输链路建立单元1110,基于所述源主机向目标主机发起的关于目标数据的远程写请求,在所述源FPGA端和所述目标主机的目标FPGA端之间建立传输链路;

第一内存分配单元1120,分配所述源主机的第一内存队列;其中,所述第一内存队列是所述源主机为存储所述目标数据在所述源主机的内存中分配的内存单元;

第一写入单元1130,将所述目标数据写入第一内存队列中;

第二写入单元1140,通过所述源FPGA端将第一内存队列中的目标数据写入所述源FPGA端的存储单元;

发送单元1150,将所述源FPGA端的存储单元中的目标数据通过所述传输链路传输到所述目标FPGA端的存储单元中,以便所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元。

源主机1100还可执行图1-图8所示实施例中源主机执行的方法,不再赘述。

图12是本申请实施例的一种目标主机的结构示意图。该目标主机1200具有目标主控端和目标FPGA端,该目标主机1200包括:

第一接收单元1210,在所述目标FPGA端接收传输链路建立请求,所述传输链路建立请求是由源主机的源FPGA端基于目标数据的远程写请求发送给所述目标FPGA端的;

第二传输链路建立单元1220,基于所述传输链路建立请求在所述源主机的源FPGA端和所述目标主机的目标FPGA端之间建立传输链路;

第二内存分配单元1230,分配所述目标主机的第二内存队列,其中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元;

第二接收单元1240,接收所述源FPGA端的存储单元中的目标数据通过所述传输链路传输后的目标数据;

第三写入单元1250,将所述传输后的目标数据写入所述目标FPGA端的存储单元中;

第四写入单元1260,通过所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中。

目标主机1200还可执行图1-图8所示实施例中目标主机执行的方法,不再赘述。

图13是本申请实施例一种基于FPGA传输数据的系统框图。该系统包括:如图11所示实施例的源主机1100和如图12所示实施例的目标主机1200。

图14是本申请的一个实施例电子设备的结构示意图。请参考图14,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。

处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图14中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。

处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成数据传输装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:

基于源主机向目标主机发起的关于目标数据的远程写请求,在所述源主机的源FPGA端和所述目标主机的目标FPGA端之间建立传输链路,并分配所述源主机的第一内存队列,并将所述目标数据写入第一内存队列中;其中,所述第一内存队列是所述源主机为存储所述目标数据在所述源主机的内存中分配的内存单元;

通过所述源FPGA端将第一内存队列中的目标数据写入所述源FPGA端的存储单元;

将所述源FPGA端的存储单元中的目标数据通过所述传输链路写入所述目标FPGA端的存储单元中,以便所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元。

上述如本申请图1-图9所示实施例揭示的源主机执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。

该电子设备还可执行图9的方法,并实现源主机在图1-图9所示实施例的功能,本申请实施例在此不再赘述。

图15是本申请的一个实施例电子设备的结构示意图。请参考图15,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。

处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图15中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。

处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成数据传输装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:

在目标主机的目标FPGA端接收传输链路建立请求,所述传输链路建立请求是由源主机的源FPGA端基于目标数据的远程写请求发送给所述目标FPGA端的;

基于所述传输链路建立请求在所述源主机的源FPGA端和所述目标主机的目标FPGA端之间建立传输链路,并分配所述目标主机的第二内存队列,其中,所述第二内存队列是所述目标主机为存储所述目标数据在所述目标主机的内存中分配的内存单元;

接收所述源FPGA端的存储单元中的目标数据通过所述传输链路传输后的目标数据,并写入所述目标FPGA端的存储单元中;

通过所述目标FPGA端将所述目标FPGA端的存储单元中的所述目标数据写入所述第二内存队列中。

上述如本申请图1-图8及图10所示实施例揭示的目标主机执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。

该电子设备还可执行图10的方法,并实现目标主机在图1-图8及图10所示实施例的功能,本申请实施例在此不再赘述。

上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

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

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

39页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:GPIO接口的配置方法及系统

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!