数据处理的方法、网络设备、计算节点和系统

文档序号:955610 发布日期:2020-10-30 浏览:10次 >En<

阅读说明:本技术 数据处理的方法、网络设备、计算节点和系统 (Data processing method, network equipment, computing node and system ) 是由 林伟彬 侯新宇 李涛 于 2019-04-30 设计创作,主要内容包括:本申请提供一种数据处理的方法、网络设备、计算节点和系统,该方法包括:网络设备根据第一队列的标识,从计算节点的队列信息存储空间中读取该第一队列的指针信息;再根据该读指针获取该第一队列中待处理数据,并处理该待处理数据;然后,根据该第一写指针更新该读指针所指示的单元的位置。上述技术方案可以减少传统技术中网络设备使用的写指针和计算节点存储的写指针不一致,所导致的网络设备数据处理错误的问题。(The application provides a data processing method, network equipment, a computing node and a system, wherein the method comprises the following steps: the network equipment reads the pointer information of the first queue from the queue information storage space of the computing node according to the identifier of the first queue; then, data to be processed in the first queue is obtained according to the read pointer, and the data to be processed is processed; then, the location of the cell indicated by the read pointer is updated according to the first write pointer. The technical scheme can solve the problem of data processing errors of the network equipment caused by the fact that the write pointer used by the network equipment is inconsistent with the write pointer stored by the computing node in the prior art.)

数据处理的方法、网络设备、计算节点和系统

技术领域

本申请涉及信息技术领域,更具体地,涉及数据处理的方法、网络设备、计算节点和系统。

背景技术

数据中心网络中的源计算节点可以通过源网络设备将待处理的数据发送至目标网络设备,然后由该目的网络设备将该接收到的数据写入到目的计算节点中。该源网络设备和该目标网络设备可以为网卡。该源网络设备和该目标网络设备可以用于源计算节点和目的计算节点之间相通信。

上述数据传输过程需要基于队列(queue)实现。每个队列中包括多个单元。利用指针指示当前队列中的待处理的单元和最新加入到当前队列中的单元。传统技术方案中,源网络设备会先从源计算节点获取写指针的物理地址,该写指针存放在该物理地址对应的存储空间中。源网络设备根据该写指针的物理地址,从源计算节点获取写指针。该写指针用于指示最新加入到当前队列的单元。这样,源网络设备可以根据该写指针,确定当前队列的最后一个的单元(即最新加入到当前队列的单元)。但是,源计算节点和源网络设备之间不是实时同步指针信息,在源计算节点在将写指针通知给源网络设备后,源计算节点可能继续在当前队列写入新的单元。在此情况下,源网络设备获取到的写指针所指示的单元并非是最新写入到当前队列中的单元。综上所述,因为源网络设备获取的写指针和源计算节点中写指针并非实时同步,会出现数据不一致,导致源网络设备获取到的写指针不是最新的写指针,影响网络设备的处理过程。

然而,随着数据中心中数据处理量的增加,计算节点之间通过多个队列传输不同业务应用的数据,队列的数量以及每个网络设备所需处理的数据也随之增加,网络设备无法实时的根据计算节点中存储的最新的写指针更新其存储的写指针,导致网络设备存储的写指针和计算节点生成的写指针的不一致,进而出现数据处理错误的问题。

发明内容

本申请提供一种数据处理的方法、网络设备、计算节点和通信系统,可以减少网络设备使用的写指针和计算节点存储的写指针不一致,导致网络设备数据处理错误的问题

第一方面,本申请提供一种数据处理的方法,该方法包括:网络设备根据第一队列的标识,从计算节点的队列信息存储空间中读取该第一队列的指针信息,其中该网络设备和该计算节点相连,该队列信息存储空间设置于该计算节点的内存中,该网络设备用于实现该计算节点和其他计算节点之间基于队列对进行通信,该队列对包括多个队列,该第一队列为该多个队列中任意一个,该第一队列的指针信息包括第一写指针和读指针,该读指针用于指示该网络设备需要处理的下一个单元的位置,该第一写指针用于指示该第一队列中当前时刻允许该计算节点存储数据的最后一个单元的位置;该网络设备根据该读指针获取该第一队列中待处理数据,并处理该待处理数据;该网络设备根据该第一写指针更新该读指针所指示的单元的位置。计算节点的队列信息存储空间中第一队列的写指针是计算节点实施维护的写指针。

因此,上述技术方案中,该网络设备从该队列信息存储空间读取的第一队列的写指针就是计算节点确定的最新的写指针。可以避免传统技术中网络设备使用的写指针和计算节点存储的写指针不一致,导致网络设备数据处理错误的问题。而且,上述数据处理中,计算节点每次更新写指针的位置后,直接将写指针传递给网络设备,避免传统技术中网络设备需要两次读操作(第一次读操作获取计算节点中存储写指针的物理位置,第二次读操作时根据上述物理位置读取写指针)才能获取指针的操作,减少了读操作的数量,降低了系统处理能力,提高了系统处理效率。另外,传统技术中需要两个存储空间保存一个写指针。具体地,两个存储空间中的一个保存写指针的地址,另一个保存写指针。本申请提供的方法只使用一个存储空间就可以保存写指针。因此,可以节省存储空间。

在一种可能的实现方式中,该网络设备根据第一队列的标识,从计算节点的队列信息存储空间中读取该第一队列的指针信息,包括:该网络设备根据该第一队列的标识,从该计算节点的队列信息存储空间中的第一存储空间读取该第一写指针,该第一存储空间为用于存储该第一写指针。

在另一种可能的实现方式中,在该网络设备根据该第一写指针更新该读指针所指示的单元的位置之前,该方法还包括:该网络设备根据第一队列的标识,从该网络设备的缓存中读取第二写指针,其中该第二写指针是该网络设备缓存的该第一队列的指针信息中的写指针,该网络设备的缓存用于存储该网络设备已读取的该第一队列的指针信息;该网络设备比较该第一写指针和该第二写指针;该网络设备在确定该第一写指针指示的单元为在第二写指针所指示的单元存储指令之后再存储指令的单元时,将该网络设备缓存的该第一队列的指针信息中的写指针更新为该第一写指针。基于上述技术方案,该网络设备可以实时更新缓存的第一队列的写指针,从而使得缓存的第一队列的写指针与网络设备的队列信息存储空间中的写指针是一致的。

在另一种可能的实现方式中,该网络设备比较该第一写指针和该第二写指针,包括:该网络设备比较该第一写指针的时间信息与该第二写指针的时间信息;该网络设备在确定该第一写指针指示的单元是为在第二写指针所指示的单元存储指令之后再存储指令的单元时,将该网络设备缓存的该第一队列的指针信息中的写指针更新为该第一写指针,包括:该网络设备在确定该第一写指针的时间信息早于该第二写指针的时间信息的情况下,将该网络设备缓存的该第一队列的指针信息中的写指针更新为该第一写指针。

在另一种可能的实现方式中,该网络设备比较该第一写指针和该第二写指针,包括:当该队列中工作队列元素未循环使用时,该网络设备比较第一距离和第二距离,其中该第一距离是该第一写指针与该读指针之间间隔的单元的数目,该第二距离是该第二写指针与该读指针之间间隔的单元的数目;该网络设备在确定该第一写指针指示的单元是为在第二写指针所指示的单元存储指令之后再存储指令的单元时,将该网络设备缓存的该第一队列的指针信息中的写指针更新为该第一写指针,包括:该网络设备在确定该第一距离大于该第二距离的情况下,将该网络设备缓存的该第一队列的指针信息中的写指针更新为该第一写指针。

在另一种可能的实现方式中,该网络设备根据第一队列的标识,从计算节点的队列信息存储空间中读取该第一队列的指针信息,包括:该网络设备获取该计算节点发送的所述第一队列的标识;该网络设备根据该标识在该队列信息存储空间读取所述第一队列的指针信息。

在另一种可能的实现方式中,该网络设备获取该第一队列的标识,包括:该网络设备识别门铃存储空间中预设字段发生变化,该门铃存储空间设置于该网络设备中,用于当该第一队列的写指针更新时,该计算节点通过更新该门铃存储空间中该预设字段;该网络设备从该门铃存储空间中读取该第一队列的标识。

在另一种可能的实现方式中,该网络设备获取第一队列的标识,包括:该网络设备接收该计算节点发送的所述第一队列的标识。

第二方面,本申请提供一种数据处理的方法,该方法包括:该计算节点根据待处理的队列数目以及队列信息的大小,确定队列信息存储空间以及该队列信息存储空间中的第一存储空间,其中该计算节点通过网络设备实现和其他计算节点基于队列对进行通信,该队列对包括多个队列,该计算节点能够直接对该第一存储空间进行写入操作;该计算节点将第一队列的写指针存储至该第一存储空间,其中,该第一队列为该多个队列中的任一个队列,该第一队列的写指针用于指示该第一队列中当前时刻允许该计算节点存储数据的最后一个单元的位置;该计算节点向该网络设备发送该第一队列的标识。计算节点的队列信息存储空间中第一队列的写指针是计算节点实施维护的写指针。而且,上述数据处理中,计算节点每次更新写指针的位置后,直接将写指针传递给网络设备,避免传统技术中网络设备需要两次读操作(第一次读操作获取计算节点中存储写指针的物理位置,第二次读操作时根据上述物理位置读取写指针)才能获取指针的操作,减少了读操作的数量,降低了系统处理能力,提高了系统处理效率。另外,传统技术中需要两个存储空间保存一个写指针。具体地,两个存储空间中的一个保存写指针的地址,另一个保存写指针。本申请提供的方法只使用一个存储空间就可以保存写指针。因此,可以节省存储空间。

在一种可能的实现方式中,该方法还包括:该计算节点确定该第一队列中当前时刻允许该计算节点存储数据的最后一个单元的位置发生变化;该计算节点更新该第一存储空间中第一队列的写指针存指示的单元的位置;该计算节点向该网络设备发送该第一队列的标识和第一写指针,该第一写指针用于指示更新后的该第一队列中当前时刻允许该计算节点存储数据的最后一个单元的位置。

第三方面,本申请提供一种网络设备,该网络设备包括用于执行第一方面或第一方面的任一种可能的实现方式的单元。

第四方面,本申请提供一种计算节点,该计算节点包括用于执行第二方面或第二方面的任一种可能的实现方式的单元。

第五方面,本申请提供一种网络设备,该网络设备包括处理器和存储器,该存储器存储程序代码,该处理器用于调用该存储器中的程序代码执行第一方面或第一方面的任一种可能的实现方式所述的方法

第六方面,本申请提供一种计算节点,该计算节点包括处理器和存储器,该存储器存储程序代码,该处理器用于调用该存储器中的程序代码执行第二方面或第二方面的任一种可能的实现方式所述的方法

第七方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质存储用于实现第一方面或第一方面的任一种可能的实现方式所述的方法的指令。

第八方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质存储用于实现第二方面或第二方面的任一种可能的实现方式所述的方法的指令。

第九方面,本申请提供了一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述第一方面或第一方面的任一种可能的实现方式所述的方法。

第十方面,本申请提供了一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述第二方面或第二方面的任一种可能的实现方式所述的方法。

第十一方面,本申请还提供一种系统,该系统包括第三方面的网络设备和第四方面的计算节点。

第十二方面,本申请还提供一种系统该,该系统包括第五方面的网络设备和第六方面的计算节点。

附图说明

图1是本申请实施例提供的一种系统架构的示意图。

图2是本申请提供的一种处理数据的方法的示意性流程图。

图3是根据本申请实施例提供的一种网络设备的结构框图。

图4是根据本发明实施例提供的另一种网络设备的结构框图。

图5是根据本申请实施例提供的一种计算节点的结构框图。

图6是根据本发明实施例提供的另一种计算节点的结构框图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

本申请实施例的技术方案可以应用于支持远程直接数据存取(remote directmemory access,RDMA)技术的网络设备和计算节点。例如,支持RDMA技术的数据中心的网络设备和计算节点,或者其他支持RDMA技术的网络设备和计算节点。其中,计算节点可以与网络设备连接,计算节点是指具有计算能力的设备,例如服务器、个人计算机(例如台式计算机设备、笔记本电脑)等。该网络设备可以称为该计算节点的网络设备。网络设备是能够将与该网络设备连接的计算节点通过有线或者无线的方式接入计算机网络的硬件设备。换句话说,该计算节点可以通过该计算节点的网络设备接入计算机网络。该网络设备也可以称为网卡(network interface card,NIC)、网络接口卡(network interface card)、网络适配器(network adapter)、物理网络接口(physical network interface)等。该网络设备可以是支持RDMA技术的网络设备,例如支持RDMA技术的远程直接数据存取接口卡(RDMAnetwork interface card,RNIC)。

可选的,在一些实施例中,该计算节点的网络设备可以是内置在该计算节点内部的。例如,该计算节点的网络设备可以通过高速串行计算机扩展总线标准(PeripheralComponent Interconnect Express,PCIe)接口、或用于加速器的缓存一致互联(cachecoherent interconnect for accelerator,CCIX)接口等接口与该计算节点的主板连接。

可选的,在另一些实施例中,该计算节点的网络设备可以是该计算节点的一个外置设备。例如,该网络设备可以通过通用串行总线(Universal Serial Bus,USB)接口与计算节点连接。

在本申请实施例中,计算节点包括硬件层、运行在硬件层之上的操作系统层,以及运行在操作系统层上的应用层。该硬件层包括中央处理器(central processing unit,CPU)、内存管理单元(memory management unit,MMU)和内存(也称为主存)等硬件。该操作系统可以是任意一种或多种通过进程(process)实现业务处理的计算机操作系统,例如,Linux操作系统、Unix操作系统、Android操作系统、iOS操作系统或windows操作系统等。该应用层包含浏览器、通讯录、文字处理软件、即时通信软件等应用。并且,本申请实施例并未对本申请实施例提供的方法的执行主体的具体结构特别限定,只要能够通过运行记录有本申请实施例的提供的方法的代码的程序,以根据本申请实施例提供的方法进行通信即可,例如,本申请实施例提供的方法的执行主体可以是计算节点,或者,是计算节点中能够调用程序并执行程序的功能模块。

图1是本申请实施例提供的一种系统架构的示意图。如图1所示的系统100中包括计算节点110、网络设备111、计算节点120和网络设备121。

计算节点110和计算节点120可以通过各自的网络设备互相通信。计算节点110的网络设备可以是网络设备111,计算节点120的网络设备可以是网络设备121。

网络设备111与网络设备121之间可以通过通信链路连接,该通信链路的介质可以是光纤等,本申请实施例对网络设备间的通信链路的具体介质并不限定。网络设备111与网络设备121之间可以包括一个或多个交换节点,也可以直接进行通信。如图1所示,计算节点110中包括一个存储装置112,该存储装置112可以用于存储计算节点110的队列信息。计算节点120中包括一个存储装置122,该存储装置122可以用于存储计算节点120的队列信息。

作为一个可能的实施例,虽然在图1中的存储装置112在计算节点110内,存储装置122在计算节点120内,但是存储装置112也可以是外挂于计算节点110或网络设备111的存储装置,存储装置122也可以是外挂于计算节点120或网络设备121的存储装置。

可以理解的是,图1仅示出了两个计算节点通过网络设备的连接关系。在一些支持RDMA技术的网络(例如数据中心网络)中可以包括更多的计算节点。这样的网络中的任意两个计算节点都可以通过如图1所示的方法连接。换句话说,图1所示的系统100可以是支持RDMA技术的网络中的任意两个计算节点的连接方式。

下面结合图2对支持RDMA技术的网络中的两个计算节点如何处理数据进行描述。

图2是本申请提供的一种处理数据的方法的示意性流程图。如图2所示,该队列实现方法包括如下步骤:

步骤201,第一计算节点和第二计算节点建立连接、创建队列对(queue pair,QP)。

具体地,第一计算节点和第二计算节点可以通过各自的网络设备建立连接。为便于描述,以下将第一计算节点的网络设备称为第一网络设备,将第二计算节点的网络设备称为第二网络设备。

以图1为例,第一计算节点为计算节点110,第一网络设备可以是网络设备111,第二计算节点可以是计算节点120,第二网络设备可以是网络设备121。

值得说明的是,在第一计算节点和第二计算节点的数据传输过程中,当第一计算节点向第二计算节点发送数据时,第一计算节点为源计算节点,相应地,第一网络设备为源网络设备;第二计算节点为目的计算节点,相应地,第二网络设备为目的网络设备。而当第二计算节点向第一计算节点发送数据时,第二计算节点为源计算节点,相应地,第二网络设备为源网络设备;第一计算节点为目的计算节点,相应地,第一网络设备为目的网络设备。为了便于描述,本申请的以下描述中以第一计算节点向第二计算节点发送数据为例进行描述。

假设第一计算节点创建的队列是该队列对中的发送队列(send queue,SQ),第二节点创建的是该队列对中的接收队列(receive queue,接收队列)。该发送队列可以保存在第一计算节点的存储装置中,该接收队列可以保存在第二计算节点的存储装置中。

第一计算节点创建的发送队列中包括一个或多个队列工作元素(work queueelement,WQE)。第二计算节点创建的接收队列中包括一个或多个WQE。属于同一个QP的发送队列和接收队列中WQE的数量可以相同或不同。当属于同一个QP的发送队列和接收队列中包含的WQE数量不同时,接收队列中WQE的数量需要大于或等于发送队列中WQE的数量,以保证所有第一计算节点中命令在接收队列中均可以有足够数量的WQE存储。

在创建完发送队列后,第一计算节点可以将需要发送的数据存储至发送队列的WQE中。第一计算节点向第二计算节点发送数据是以WQE为粒度进行的。可选的,在一些可能的实现方式中,第一计算节点向第二计算节点发送的数据可以直接存储在WQE。这种直接将数据存储到WQE的模式可以称为第一模式,该第一模式也可以称为inline模式,或者inline。可选的,在另一些可能的实现方式中,第一计算节点还可以将该发送的数据的存储位置信息存储至WQE。该待处理的数据的存储位置信息可以包括该待处理的数据存储在第一计算节点中的位置(也可以称为地址)和长度。这种将待发送的数据的存储位置信息存储至WQE的模式可以称为第二模式,该第二模式也可以称为非inline模式,或者非inline。

第一计算节点可以根据预设规则确定使用inline模式还是使用非inline模式。例如,在一些实施例中,第一计算节点可以根据待处理的数据的大小(也可以成为数据的长度)来选择是使用inline模式还是使用非inline模式。如果该待处理的数据的大小大于预设阈值,则选择非inline模式发送数据;如果待处理的数据的大小小于或等于预设阈值,则选择inline模式发送数据。又如,在另一些实施例中,第一计算节点可以根据待处理数据的类型来确定选择inline模式还是使用非inline模式发送数据。例如,若待处理的数据的类型是预设的一个或多个数据类型中的一个,则可以使用inline模式发送该待处理的数据;若待处理的数据的类型不属于该预设的一个或多个数据类型,则使用非inline模式发送该待处理的数据。进一步,在根据待处理数据的类型确定模式时,同时还需要考虑待处理的数据的长度,即使用inline模式的数据的大小需要小于或等于预设阈值。因此,数据类型满足使用inline模式发送的数据的大小也需要小于或等于预设阈值。除了上述两种预设规则外,还可以利用其它预设规则来确定选择使用inline模式还是使用非inline模式来发送该待处理的数目。本申请实施例对如何确定选择inline模式还是非inline模式发送待处理的数据的具体实现方式并不限定。

发送队列中可以包括至少一个单元。在一些可能的实现方式中,一个发送队列的单元与该发送队列中的WQE是一一对应的。换句话说,该发送队列中的每个单元是一个WQE。在另一些可能的实现方式中,一个发送队列中多个单元对应该发送队列中的一个WQE。换句话说,该发送队列的一个WQE可以是由多个单元组成。

类似的,接收队列中可以包括至少一个单元。在一些可能的实现方式中,一个接收队列中的单元与该接收队列中的WQE是一一对应的。换句话说,该接收队列中的每个单元是一个WQE。在另一些可能的实现方式中,一个接收队列中多个单元对应该接收队列中的一个WQE。换句话说,该接收队列的一个WQE可以是由多个单元组成。

发送队列的深度(即发送队列包括的单元数目)是在创建队列时确定的。如上所述,发送队列中的单元和WQE的关系可以是一个单元是一个WQE,也可以是多个单元组成一个WQE。因此,若发送队列的深度确定了,那么发送队列中包括的WQE的数目也就确定了。在一些情况下,第一计算节点需要发送至第二计算节点的数据所需的WQE的数目可能会超过第一计算节点创建的发送队列中包括的单元数目。在一些可能的实现方式中,第一计算节点可以循环使用发送队列中的单元数目。在另一些可能的实现方式中,第一计算节点可以对发送队列扩容,即增加该发送队列中单元数目,并使用新增后的单元发送数据。

相应的,接收队列的深度也是在创建队列时确定的。与发送队列类似,接收队列中的单元和WQE的关系可以是一个单元是一个WQE,也可以是多个单元组成一个WQE。因此,若发送队列的深度确定了,那么发送队列中包括的WQE的数目也就确定了。在一些情况下,第二计算节点需要接收的来自于第一计算节点的数据所需的WQE的数目可能会超过第二计算节点创建的接收队列中包括的单元数目。在一些可能的实现方式中,第二计算节点可以循环使用接收队列中的单元数目。在另一些可能的实现方式中,第二计算节点可以对接收队列扩容,即增加该接收队列中单元数目,并使用新增后的单元接收数据。

第一计算节点和第二计算节点如何循环使用队列中的WQE,以及如何对队列进行扩容会在稍后描述。

图1中仅示出了发送队列和接收队列,本申请实施例同样适用于完成队列(complete queue,CQ)、提交队列(submission queue,SQ)等其他形式的队列,为了便于说明,本申请实施例的以下内容以发送队列和接收队列为例进行详细描述。

第一计算节点可以创建对应于发送队列的队列信息,第二计算节点可以创建对应于接收队列的队列信息。为便于区分对应于发送队列的队列信息和对应于接收队列的队列信息,以下将对应于发送队列的队列信息称为发送队列信息,将对应于接收队列的队列信息称为接收队列信息。

发送队列信息也可以称为发送队列上下文、发送队列相关信息、发送队列上下文信息等。发送队列信息中可以包括发送队列的特征和发送队列的工作状态。发送队列的特征包括发送队列中的待处理的WQE在第一计算节点的存储装置中的物理地址、发送队列的索引地址、和发送队列深度。发送队列的索引地址可以指示该发送队列中的每个WQE在第一计算节点中的存储装置中的物理地址。发送队列深度用于指示该发送队列所包含的单元的个数。发送队列的工作状态包括发送队列状态和发送队列有效性,发送队列状态用于指示发送队列的当前状态,例如发送队列的当前状态可以是复位状态、初始化状态、错误状态等。发送队列有效性用于指示发送队列是否存在。发送队列的工作状态还可以包括指针信息。更具体地,指针信息可以包括读指针(也可以称为消费者指针)和写指针(也可以称为生产者指针)。该读指针指向在该发送队列中当前时刻待网络设备读取指令的处理的单元(以下简称当前待处理单元)。当前待处理单元是指根据输入输出(inputoutput,IO)命令正在处理的单元。例如,在单元与WQE是一一对应的情况下,该读指针指向的是当前待处理单元的位置。在多个单元对应一个WQE的情况下,该读指针指向的是组成当前处理的WQE的多个单元中的第一个单元。写指针指向发送队列中最新存储指令的单元的位置。例如,在单元与WQE是一一对应的情况下,该写指针指向存储指令至发送队列的WQE的单元的位置。在多个单元对应一个WQE的情况下,该写指针指向的是组成发送队列中最新存储指令的WQE多个单元中的最后一个单元的位置。

发送队列信息可以保存在一个存储装置中,第一计算节点可以直接或间接访问该存储装置。这里所称的间接访问该存储装置是指可以通过第一计算节点的网络设备(即第一网络设备)访问该存储装置。还以图1为例,若第一计算节点是计算节点110,则该存储装置可以是存储装置112。

在一些可能的实施例中,该存储装置可以是第一计算节点的主存储器。在另一些可能的实施例中,该存储装置可以是第一计算节点外挂的存储器。该外挂的存储器可以是外挂在第一计算节点,也可以是外挂在第一网络设备。该主存储器和该外挂的存储器可以是随机存取存储器(random access memory,RAM)。该RAM可以是双倍数据率同步动态随机存取存储器(double data rate synchronous dynamic random access memory,DDRSDRAM)、动态随机存储器(dynamic random-access memory,DRAM)、静态随机存储器(static random-access memory,SRAM)等。该存储装置可以是一个专用于存储队列信息的专用存储装置,也可以是一个可以用于存储该队列信息和其他信息的通用存储装置。例如,发送队列信息与发送队列可以保存在同一个存储装置中。为便于描述,以下将该存储装置中用于存储队列信息的存储空间称为队列信息存储空间。

可以理解的是,图2所示的实施例中的第一计算节点作为源计算节点创建的是发送队列以及发送队列信息。在另一些实施例中,第一计算节点也可以作为目的计算节点创建接收队列以及接收队列信息。该队列信息存储空间也可以用于存储接收队列信息。

根据读写权限,该队列信息存储空间可以分为三部分:存储空间1、存储空间2和存储空间3。存储空间1、存储空间2和存储空间3的控制权限如下:

第一网络设备可以直接对存储空间1进行读操作和写操作。第一计算节点不可以直接或间接对存储空间1进行写操作,但是第一计算节点可以对存储空间1进行读操作。

第一网络设备可以直接对存储空间2进行读操作。第一计算节点可以间接对存储空间2进行写操作。

第一网络设备可以直接对存储空间3进行读操作。第一计算节点可以直接对存储空间3进行写操作。

可选的,第一计算节点间接对该存储空间2进行写操作可以是第一计算节点将待写入至存储空间2的数据发送至第一网络设备,由第一网络设备将该数据写入到存储空间2中。

可选的,第一网络设备间接对该存储空间2进行写操作可以包括:第一计算节点向第一网络设备申请由第一网络设备控制的锁;当第一计算节点在申请到锁时,为了避免数据不一致,第一计算节点需要将待写入的存储空间2锁住,此时,仅允许第一计算节点对存储空间2进行写入操作;然后,第一计算节点将需要写入数据写入到存储空间2,在完成写操作后,第一计算节点再向第一网络设备申请释放锁。若第一计算节点未申请到锁,则无法对存储空间2进行写操作。第一计算节点可以通过向第一网络设备发送用于申请锁的锁请求来申请由第一网络设备控制的锁。第一网络设备可以向第一计算节点发送反馈,该反馈用于通知第一计算节点是否申请到锁。在完成写操作后,第一计算节点可以向第一网络设备发送一个用于申请释放锁的释放请求。第一计算节点可以通过第一计算节点和第一网络设备之间的通信接口,直接将该锁请求和该释放请求发送至第一网络设备。在一些可能的实现方式中,第一网络设备也可以利用该通信接口,直接将该反馈发送至第一计算节点。在另一些可能的实现方式中,第一网络设备可以将该反馈写入到该存储装置中的一个指定位置。第一计算节点可以通过读取该指定位置保存的内容,获取该反馈。

第一计算节点直接对存储空间3进行写操作是指第一计算节点可以直接将待写入数据写入到存储空间3中,而无需通过其他装置(例如第一网络设备)将待写入数据写入到存储空间3中。

存储空间1,存储空间2和存储空间3可以保存队列信息中的不同内容。如上所述,发送队列信息中可以包括待处理的WQE在第一计算节点的存储装置中的物理地址、发送队列的索引地址、发送队列深度、发送队列状态、发送队列有效性和指针信息。

可选的,在一些可能的实现方式中,可以根据是否允许计算节点进行修改以及在计算节点进行修改过程中是否会对网络设备处理队列中的单元造成影响,发送队列信息中的不同内容可以保存在不同的存储空间中。

具体地,发送队列信息中不允许计算节点进行修改的内容可以保存在存储空间1中。发送队列信息中允许计算节点进行修改,但是修改过程会对对网络设备处理队列中的单元造成影响的内容可以保存在存储空间2中。发送队列信息中允许计算节点进行修改且修改过程中不会对对网络设备处理队列中的单元造成影响的内容可以保存在存储空间3中。

例如,在一些实施例中,第一计算节点可以对已创建好的发送队列进行扩容,即改变发送队列深度。但是如果再扩容过程中网络设备继续对队列中的单元进行处理,可能会出现错误。因此,发送队列深度可以保存在存储空间2中。这样,第一计算节点需要通过第一网络设备修改发送队列深度。第一网络设备在确定第一计算节点要修改队列深度的情况下,可以停止对发送队列进行处理。在发送队列深度修改好后,再开始处理发送队列。

又如,写指针指向的是最新存储指令的单元的位置。因此更新写指针并不会影响第一网络设备对发送队列的处理。因此,写指针可以保存在存储空间3中。

可选的,在另一些可能的实现方式中,可以根据预设规则,设置每个存储空间中保存的内容。例如,该预设规则可以是:将写指针保存在存储空间3中,将队列信息中除写指针以外的内容的存储方式按照现有的RDMA系统中保存队列信息的方式保存。又如,该预设规则可以是:将写指针和读指针保存在存储空间3中,将队列信息中除写指针和读指针以外的内容的存储方式按照现有的RDMA系统中保存队列信息的方式保存。

可选的,在一些可能的实现方式中,该第一计算节点可以在第一计算节点的初始化阶段就从存储装置的存储空间中划分出队列信息存储空间,并根据不同类型的存储空间需要保存的内容的大小,将该队列信息存储空间划分为存储空间1、存储空间2和存储空间3。每个队列具有一组存储空间1、存储空间2和存储空间3的集合,上述存储空间的集合仅用于存储一个与其绑定的队列的队列信息。第一计算节点的初始化阶段是指在第一计算节点开始工作之前,对第一计算节点进行设置的阶段。在初始化阶段过后,第一计算节点可以开始进入运行阶段。运行阶段是指第一计算节点可以提供数据读、写等服务的阶段。第一计算节点可以根据能够同时处理的队列的数目来确定队列信息存储空间的大小。例如,若第一计算节点能同时处理K个队列,且该K个队列中的每个队列的队列信息需要R bit的存储空间来保存(假设R为大于或等于1的正整数),则该第一计算节点可以确定队列信息存储空间的大小为K×R bit。该第一计算节点可以根据需要保存在存储空间1、存储空间2和存储空间3的信息大小,将该队列信息存储空间划分为三个不同类型的存储空间。还假设第一计算节点能同时处理K个队列。假设每个队列信息中,需要保存在存储空间1的信息的大小为R1bit,需要保存在存储空间2的信息的大小为R2bit,需要保存在存储空间3的信息的大小为R3bit,则可以确定存储空间1的大小为K×R1bit,存储空间2的大小为K×R2bit,存储空间3的大小为K×R3bit,R1、R2和R3的和为R。

与发送队列信息类似,接收队列信息也可以称为接收队列上下文、接收队列相关信息、接收队列上下文信息等。接收队列信息中可以包括接收队列的特征和接收队列的工作状态。接收队列的特征包括接收队列中待处理的WQE在目的计算节点的内存中的物理地址、接收队列的索引地址,和接收队列深度。接收队列的索引地址可以指示接收队列中的每个WQE在目的计算节点中的内存中的物理地址。接收队列深度用于指示接收队列中所包含的单元的个数。接收队列的工作状态包括接收队列状态和接收队列有效性,接收队列状态用于指示接收队列的当前状态,例如接收队列的当前状态可以是复位状态、初始化状态、错误状态等。接收队列有效性用于指示接收队列是否存在。接收队列的工作状态还可以包括指针信息。更具体地,指针信息可以包括读指针和写指针。该读指针指向在该接收队列中当前时刻待网络设备读取指令的处理的单元(以下简称当前待处理单元)。当前待处理单元是指根据输入输出(inputoutput,IO)命令正在处理的单元。例如,在单元与WQE是一一对应的情况下,该读指针指向的是当前待处理单元的位置。在多个单元对应一个WQE的情况下,该读指针指向的是组成当前处理的WQE的多个单元中的第一个单元。写指针指最新存储指令的单元的位置。例如,在单元与WQE是一一对应的情况下,该写指针指向的是最新存储指令至接收队列的WQE的单元的位置。在多个单元对应一个WQE的情况下,该写指针指向的是接收队列中最新存储指令的WQE多个单元中的最后一个单元的位置。

与第一计算节点保存发送队列信息类似,接收队列信息可以保存在一个存储装置中,第二计算节点可以直接或间接访问该存储装置。这里所称的间接访问该存储装置是指可以通过第二计算节点的网络设备(即第二网络设备)访问该存储装置。还以图1为例,若第二计算节点是计算节点120,则该存储装置可以是存储装置122。

与保存该发送队列信息的存储装置类似,在一些实施例中,保存接收队列信息的存储装置可以是第二计算节点的主存储器。在另一些实施例中,保存接收队列信息的存储装置可以是第二计算节点外挂的存储器。该外挂的存储器可以是外挂在第二计算节点,也可以是外挂在第二网络设备。该主存储器和该外挂的存储器可以是随机存取存储器。该随机存取存储器可以是双倍数据率同步动态随机存取存储器、动态随机存储器、静态随机存储器等。该存储装置可以是一个专用于存储队列信息的专用存储装置,也可以是一个可以用于存储队列信息和其他信息的通用存储装置。为便于描述,以下将该存储装置中用于存储接收队列信息的存储空间称为队列信息存储空间。可以理解的是,图2所示的实施例中的第二计算节点作为目的计算节点创建的是接收队列以及接收队列信息。在另一些实施例中,第二计算节点也可以作为源计算节点创建发送队列以及发送队列信息。该队列信息存储空间也可以用于存储该发送队列信息。

可选的,根据读写权限,队列信息存储空间也可以分为三部分:存储空间4、存储空间5和存储空间6。存储空间4、存储空间5和存储空间6的控制权限如下:

第二网络设备可以直接对存储空间4进行读操作和写操作。第二计算节点不可以直接或间接对存储空间4进行写操作,但是第二计算节点可以对存储空间4进行读操作。

第二网络设备可以直接对存储空间5进行读操作。第二计算节点可以间接对存储空间5进行写操作。

第二网络设备可以直接对存储空间6进行读操作。第二计算节点可以直接对存储空间6进行写操作。

可选的,第二计算节点间接对存储空间5进行写操作可以是第二计算节点将待写入至存储空间5的数据发送至第二网络设备,由第二网络设备将待写入数据写入到存储空间2中。

可选的,第二计算节点间接对该存储空间5进行写操作可以包括:第二计算节点向第二网络设备申请由第二网络设备控制的锁;当第二计算节点在申请到锁时,为了避免数据不一致,第二计算节点需要将待写入的存储空间5锁住,此时,仅允许第二计算节点对存储空间5进行写入操作;然后,第二计算节点将需要写入数据写入到存储空间5,在完成写操作后,第二计算节点再向第二网络设备申请释放锁。若第二计算节点未申请到锁,则无法对存储空间5进行写操作。

第二计算节点直接对存储空间6进行写操作是指第二计算节点可以直接将待写入数据写入到存储空间6中,而无需通过其他装置(例如第二网络设备)将该待写入数据写入到存储空间6中。

存储空间4,存储空间5和存储空间6可以保存队列信息中的不同内容。如上所述,接收队列信息中可以包括待处理的WQE在第二计算节点的存储装置中的物理地址、接收队列的索引地址、接收队列深度、接收队列状态、接收队列有效性和指针信息。根据是否允许修改以及修改过程中是否会对队列的处理造成影响,接收队列信息中的不同内容可以保存在不同的存储空间中。

可选的,在一些可能的实现方式中,可以根据是否允许计算节点进行修改以及在计算节点进行修改过程中是否会对网络设备处理队列中的单元造成影响,接收队列信息中的不同内容可以保存在不同的存储空间中。

具体地,接收队列信息中不允许计算节点进行修改的内容可以保存在存储空间4中。接收队列信息中允许计算节点进行修改,但是修改过程会对对网络设备处理队列中的单元造成影响的内容可以保存在存储空间5中。接收队列信息中允许计算节点进行修改且修改过程中不会对对网络设备处理队列中的单元造成影响的内容可以保存在存储空间6中。

例如,在一些实施例中,第二计算节点可以对已创建好的接收队列进行扩容,即改变接收队列深度。但是如果再扩容过程中网络设备继续对队列中的单元进行处理,可能会出现错误。因此,接收队列深度可以保存在存储空间5中。这样,第二计算节点需要通过第二网络设备修改接收队列深度。第二网络设备在确定第二计算节点要修改队列深度的情况下,可以停止对接收队列进行处理。在接收队列深度修改好后,再开始处理接收队列。

又如,写指针指向的是最新存储指令的单元的位置。因此更新写指针并不会影响第二网络设备对接收队列的处理。因此,写指针可以保存在存储空间6中。

可选的,在另一些可能的实现方式中,可以根据预设规则,设置每个存储空间中保存的内容。例如,该预设规则可以是:将写指针保存在存储空间6中,将队列信息中除写指针以外的内容的存储方式按照现有的RDMA系统中保存队列信息的方式保存。又如,该预设规则可以是:将写指针和读指针保存在存储空间3中,将队列信息中除写指针和读指针以外的内容的存储方式按照现有的RDMA系统中保存队列信息的方式保存。

可选的,在一些可能的实现方式中,该第二计算节点可以在第二计算节点的初始化阶段就从存储装置的存储空间中划分出队列信息存储空间,并根据不同类型的存储空间需要保存的内容的大小,将该队列信息存储空间划分为存储空间4、存储空间5和存储空间6。第二计算节点的初始化阶段是指在第二计算节点开始工作之前,对第二计算节点进行设置的阶段。在初始化阶段过后,第二计算节点可以开始进入运行阶段。运行阶段是指第二计算节点可以提供数据读、写等服务的阶段。第二计算节点可以根据能够同时处理的队列的数目来确定队列信息存储空间的大小。例如,若第二计算节点能同时处理S个队列,且该S个队列中的每个队列的队列信息需要T bit的存储空间来保存(假设T为大于或等于1的正整数),则该第二计算节点可以确定队列信息存储空间的大小为K×R bit。该第二计算节点可以根据需要保存在存储空间4、存储空间5和存储空间6的信息大小,将该队列信息存储空间划分为三个不同类型的存储空间。还假设第二计算节点能同时处理K个队列。假设每个队列信息中,需要保存在存储空间4的信息的大小为T1bit,需要保存在存储空间5的信息的大小为T2bit,需要保存在存储空间6的信息的大小为T 3bit,则可以确定存储空间4的大小为S×T1bit,存储空间5的大小为S×T2bit,存储空间6的大小为S×T3bit,T1、T2和T3的和为T。

步骤202,第一计算节点通知第一网络设备处理该发送队列。

当发送队列中存储新的指令时,该发送队列的写指针位置会发生变化,第一计算节点可以通过门铃(doorbell)机制通知第一网络设备存在待处理的发送队列。第一计算节点可以在与第一网络设备预先约定的寄存器或存储空间中存储预设格式的数据,当第一网络设备检测到该预先约定的寄存器或存储空间中存储的内容发生变化时,第一网络设备从该预先约定的寄存器或存储空间中读取预设格式的数据。也就是说,上述门铃机制可以利用预设寄存器或存储空间存储预设格式的数据。例如,门铃机制由寄存器实现,每个队列可以有一个对应的队列标识,如队列数(queue number,QN)或者队列名称等。第一计算节点可以将对应于该队列(即步骤201中确定的发送队列)的队列标识写入到寄存器中。第一网络设备在检测到该门铃后,可以读取该寄存器中的队列标识,并将读取到的队列标识记录下来。可选的,在第一网络设备读取到该寄存器中的队列标识并记录了读取到的队列标识后,通知第一计算节点可以将该寄存器中保存的该队列标识删除。第一计算节点在获取到该通知后,将该寄存器中保存的该队列标识删除。

可选的,该队列标识可以基于先进先出机制保存至该寄存器。这样在该队列标识被读取后,该队列标识就被从该寄存器中删除。

可选的,第一计算节点也可以直接发送一个携带有队列标识的消息给第一网络设备。这样,该第一网络设备在接收到该消息的情况下,可以确定需要处理与该消息中的队列标识对应的队列。

类似的,第二计算节点也可以通知第二网络设备处理该接收队列。第二计算节点通知第二网络设备处理该接收队列的实现方式与第一计算节点通知第一网络设备处理该发送队列的实现方式相同。为了简洁,在此不再赘述。

步骤203,第一网络设备根据该队列标识,获取发送队列信息。

通过步骤202,第一网络设备可以确定需要处理一个发送队列并可以获取该发送队列的队列标识。如上所述,第一计算节点和第一网络设备之间同时存在多个队列,每个队列可以有一个对应的队列标识,每个队列也对应一个队列信息。因此,第一网络设备可以根据获取到的该队列标识,从用于队列信息存储空间中确定由该队列标识指示的发送队列信息。

可选的,第一网络设备中可以设置一个队列信息的缓存。该队列信息的缓存可以利用RAM实现。该队列信息的缓存中包括至少一个队列信息。在一些实施例中,第一网络设备可以先根据该队列标识,确定该队列信息的缓存中是否包括该队列标识指示的发送队列信息。若该队列信息的缓存中包括发送队列信息,则可以直接从该队列信息的缓存中获取发送队列信息。若该队列信息的缓存中不包括发送队列信息,则第一网络设备可以从队列信息存储空间中获取发送队列信息。

在第一网络设备中包括该队列信息的缓存的情况下,若发送队列信息是从队列信息存储空间中获取的,则第一网络设备还可以将发送队列信息保存至该队列信息的缓存中。

可选的,第一网络设备可以先确定该队列信息的缓存中是否还有足够的存储空间可以用于保存发送队列信息。若该队列信息的缓存中有足够的存储空间可以用于保存发送队列信息,则可以直接将发送队列信息保存至该队列信息的缓存中。若该队列信息的缓存中没有足够的存储空间可以用于保存发送队列信息,则可以先根据预设规则删除该队列信息的缓存中保存的一个或多个队列信息,然后再将发送队列信息保存至该队列信息的缓存中。例如,该预设规则可以是删除最早写入到该队列信息的缓存中的队列信息。又如,该预设规则也可以是删除最早写入到该队列信息的缓存中的指定个数的队列信息。又如,该预设规则可以是删除指定时间之前写入到该队列信息的缓存中的队列信息。又如,该预设规则也可以是随机删除该队列信息的缓存中的指定个数的队列信息。

如上所述,第一计算节点可以直接更新该发送队列信息中的写指针。第一计算节点在更新了发送队列信息中的写指针后,可以将更新的写指针通知给第一网络设备。因此,在一些可能的实现方式中,第一网络设备还可以获取一个写指针。例如,该第一网络设备在获取到队列标识的情况下,可以直接根据该队列标识从队列信息存储空间中的存储空间3读取写指针。又如,在利用门铃机制传递该队列标识的情况下,该门铃中除了携带该队列标识外,还可以携带该一个写指针。又如,该计算节点可以通过一个专用消息将该写指针发送给第一网络设备。为了区分该写指针与该发送队列信息中的写指针,以下将第一网络设备通过门铃或专用消息获取到的写指针称为写指针1,将第一网络设备从该发送队列信息中获取的写指针称为写指针2。

当第一网络设备获取到写指针1时,第一网络设备可以根据写指针2、写指针1以及发送队列信息,对发送队列进行处理。该网络设备可以比较写指针2和写指针1,确定两个写指针中较新的写指针,根据较新的写指针和发送队列信息,对发送队列进行处理。若两个写指针相同,则可以根据获取到的发送队列信息对发送队列进行处理。

可选的,在一些可能的实现方式中,当队列中WQE未循环使用前,可以通过比较比较写指针2和读指针的距离,以及写指针1和读指针的距离来确定最新的写指针。其中,队列中WQE未循环使用是指队列中任意一个单元未用于存储两个不同的指令或数据。例如,如图1所示发送队列1中包括4个WQE,WQE未被循环使用是指计算节点110未利用任意一个单元存储两个不同的指令或指令数据。

具体地,在发送队列信息是从该队列信息的缓存中确定的情况下,确定写指针2和写指针1中距离读指针(这里的读指针是指发送队列信息中的读指针)较远的一个指针;若写指针2距离该读指针较远(即写指针2与该读指针的距离(以下简称“第二距离”)大于写指针1与该读指针的距离(以下简称“第一距离”)),则表示写指针2是较新的写指针;若写指针1距离该读指针较远(即该第一距离大于该第二距离),则表示写指针1是较新的写指针。因此,若写指针2距离该读指针较远,则可以确定写指针2是最新的写指针;若写指针1距离该读指针较远,则可以确定写指针1是最新的写指针。。

在一些可能的实现方式中,写指针2与该读指针的距离可以是指写指针2指示的单元与该读指针指示的单元之间间隔的单元数目。类似的,写指针1与该读指针的距离可以是指写指针1指示的单元与该读指针指示的单元之间间隔的单元数目。假设写指针1指示的单元与该读指针指示的单元之间间隔的单元的数目为M1,写指针2指示的单元与该读指针指示的单元之间间隔的单元数目为M2。若M2大于M1,则表示第二距离大于第一距离;若M2小于M1,则表示第二距离小于第一距离;若M1等于M2,则表示第一距离与第二距离相同。

可选的,在另一些可能的实现方式中,写指针可以有一个对应的时间信息。可选的,在另一些可能实现方式中,写指针的时间信息可以是将数据保存到写指针指示的单元的时间。可选的,在另一些可能的实现方式中,写指针的时间信息可以是计算节点开始使用组成写指针对应的WQE的单元存储数据的时间。在此情况下,可以根据写指针2的时间信息和写指针1的时间信息来确定最新的写指针。若写指针2的时间信息晚于写指针1的时间信息,则写指针2是最新的写指针;若写指针1的时间信息晚于写指针2的时间信息,则写指针1是最新的写指针;若写指针2的时间信息与写指针1的时间信息相同,则这两个写指针是相同的。例如,写指针2的时间信息可以是2019年3月1日19时38分59秒;写指针1的时间信息可以是2019年3月1日19时40分3秒。可以看出,写指针1的时间信息所指示的时间晚于写指针2的时间信息所指示的时间,在此情况下,可以确定写指针1是最新的写指针。

若写指针1是最新的写指针,则可以将发送队列信息中的写指针2替换为写指针1,得到更新的发送队列信息,根据更新的发送队列信息,对发送队列进行处理。

可选的,第一网络设备在确定了该更新的发送队列信息的情况下,还可以更新该队列信息的缓存中的发送队列信息。第一网络设备可以将该队列信息的缓存中的发送队列信息删除,将该更新的发送队列信息保存至该队列相关信息的缓存。或者,第一网络设备也可以直接将发送队列信息中的写指针2替换为该写指针1。

如上所述,第一计算节点可以直接更新该发送队列信息中的写指针。因此,如果第一计算节点更新了发送队列信息中的写指针,第一计算节点可以再次通知第一网络设备处理该发送队列(即再次执行步骤202)。这样,第一网络设备可以再次获取该发送队列信息(即再次执行步骤203)。此时该发送队列信息中的写指针是更新后的写指针。换句话说,只要第一计算节点更新了写指针,第一计算节点就执行一次步骤202,相应的,第一网络设备执行一次步骤203。因此,第一网络设备获取到的写指针指示的单元就是第一计算节点最新存储数据的单元。可以避免出现第一网络设备获取到的写指针所指示的单元与第一计算节点最新生成的存储数据的单元不一致的情况发生。

相应的,第二网络设备获取接收队列信息。第二网络设备获取该接收队列信息的实现方式与第一网络设备获取该发送队列信息的实现方式类似,在此就不必赘述。

步骤204,第一网络设备根据该发送队列信息执行发送命令,将发送队列中的WQE中存储的数据发送至第二网络设备。相应的,第二网络设备根据接收队列信息执行接收命令,并将接收到的来自于第一网络设备的数据保存至第二计算节点。

还以图1为例,假设第一计算节点需要将数据1、数据2、数据3和数据4发送至第二计算节点。数据1至数据4中的每个数据存储在一个WQE中。换句话说,需要四个WQE,每个WQE用于存储数据1至数据4中的一个数据。如上所述,若采用inline模式,则存储在WQE中的是数据。若采用非inline模式,则存储在WQE中的是数据的存储位置信息。

如图1所示,WQE 11至WQE 14中的每个WQE对应一个单元,第一计算节点创建的发送队列1中共包括四个WQE。因此,数据1至数据4中的每个数据可以存储在这四个WQE中的一个WQE中。数据1存储在发送队列1的WQE 11中,数据2存储在发送队列1的WQE 12中,数据3存储在发送队列1的WQE 13中,数据4存储在发送队列WQE 14中。假设数据1至数据4依次被存储至WQE 11至WQE 14中,换句话说,WQE11是第一个被写入数据的WQE,WQE 14是最后一个被写入数据的WQE。该发送队列信息中的读指针指向的是对应于WQE 11的单元,即单元11,写指针指示的是WQE 14对应的单元,即单元14。第一网络设备可以读取该发送队列信息,并根据该发送队列信息中的读指针获取发送队列中的WQE 11,将对应于WQE 11的数据1发送至第二网络设备。

相应的,第二计算节点创建的接收队列中也包括四个WQE,分别为WQE 21、WQE 22、WQE 23和WQE 24。接收队列中的WQE 21至WQE 24分别指向第二计算节点内存中的四个不同的存储位置。

第二网络设备读取对应于接收队列的接收队列信息,并根据该接收队列信息中的读指针,获取接收队列中的WQE 21,将接收到的数据1存储到接收队列中的WQE21指向的第二计算节点内存中的存储位置。第一计算节点在处理完WQE 11对应的数据后,继续获取发送队列中的WQE 12,将对应于WQE 12的数据2发送至第二网络设备,第二网络设备将接收到的数据存储到接收队列中的WQE 22指向的第二计算节点内存中的存储位置,以此类推。

假设除了数据1至数据4外,第一计算节点还需要将数据5发送至第二计算节点。与数据1至数据4相同,数据5也需要存储在一个WQE中。然而,如图1所示的发送队列1中的WQE11至WQE 14已经用于存储数据1至数据4。在此情况下,发送队列中已经没有可用的WQE。在此情况下,第一计算节点可以循环利用WQE或者对发送队列进行扩容来将数据5发送至第二计算节点。

在一些可能的实现方式中,发送队列中的WQE可以循环利用。具体地,在WQE 1保存的数据1被发送至第二计算节点后,第一网络设备可以继续依次处理WQE 12、WQE13和WQE14。此外,在WQE 11保存的数据1被发送至第二计算节点后,第一计算节点可以将WQE 11中存储的数据1清除,并将数据5存储到WQE 11中。第一网络设备在处理完WQE 4后,可以继续处理WQE 1。这样,第一网络设备就可以将数据5发送至第二网络设备。此外,在将数据5存储到WQE 11中后,WQE 11成为了最后一个被写入数据的WQE。在此情况下,发送队列信息中的写指针所指示的单元可以更新为WQE 11对应的单元,即单元1。第一计算节点可以直接更新存储空间3中的写指针,将存储空间3中的写指针指向的单元从单元4修改为单元1。

在另一些可能的实现方式中,第一计算节点可以对发送队列1进行扩容,增加新的WQE 15,并将数据5存储到WQE 15中。这样,第一网络设备可以依次处理WQE 11、WQE 12、WQE13、WQE 14和WQE 15,从而将数据1至数据5发送至第二计算节点。与循环利用WQE相同,在数据5被存储到WQE 15后,WQE 15成为最后一个被写入数据的WQE。在此情况下,发送队列信息中的写指针所指示的单元可以更新为WQE 15所对应的单元。第一计算节点可以直接更新存储空间3中的写指针,将存储空间3中的写指针指向的单元从单元4修改为WQE 15所对应的单元。

对应的,第二计算节点也可以通过循环利用WQE或对接收队列进行扩容来讲数据5保存至第二计算节点中。

在一些可能的实现方式中,接收队列1中的WQE可以循环利用。具体地,在数据1被保存至WQE 21指向的存储位置后,第二网络设备可以继续依次将接收到的数据2保存至WQE22指向的存储位置,数据3保存至WQE 23指向的存储位置,数据4保存至WQE24指向的存储位置。此外,在数据1被保存至WQE 21指向的存储位置后,第二计算节点可以将WQE 21中存储的存储位置清除,并将一个新的存储位置存储到WQE 21中,且该存储位置不同于原WQE 21以及WQE 22至WQE 24指向的存储位置。第二网络设备在将数据4保存至WQE 24指向的存储位置,可以将接收到的新的数据(即数据5)保存至WQE 21指向的存储位置。这样,第二网络设备就可以将来自于第一计算节点的数据5保存至第二计算节点。此外,在将WQE 21指向的存储位置更新后,WQE 21成为了最后一个被写入数据的WQE。在此情况下,接收队列信息中的写指针所指示的单元可以更新为WQE 21对应的单元,即单元1。第二计算节点可以直接更新存储空间6中的写指针,将存储空间6中的写指针指向的单元从单元4修改为单元1。

在另一些可能的实现方式中,第二计算节点可以对接收队列1进行扩容,增加新的WQE 25。WQE 25指向第二计算节点内存中的一个存储位置,该存储位置不同于WQE 21至WQE24中的任一个WQE指向的存储位置。这样,第二网络设备可以将接收到的数据1至数据5依次存储至WQE 11、WQE 22、WQE 23、WQE 24和WQE 25指向的存储位置,从而将数据1至数据5存储至第二计算节点。与循环利用WQE相同,在增加新的WQE 25后,WQE 25成为最后一个被写入数据的WQE。在此情况下,接收队列信息中的写指针所指示的单元可以更新为WQE 25所对应的单元。第二计算节点可以直接更新存储空间6中的写指针,将存储空间6中的写指针指向的单元从单元4修改为WQE 25所对应的单元。

综上所述,假设初始状态(即刚刚创建完队列对)下的发送队列和接收队列中分别包括N1个WQE(假设N1为大于或等于1的正整数),每使用一个WQE(即将数据保存至WQE或将指向存储位置的信息保存到WQE),发送队列和接收队列中的可用WQE数目减少1个。如果发送队列和接收队列中的无可用WQE,则发送队列和接收队列中的可用WQE的数目降为0。此时,可以通过扩容方式,在发送队列和接收队列中添加新的WQE,或者,清除已完成处理的WQE中的数据,重新利用WQE对应的存储空间存储信息,以此循环利用存储资源。

上述实施例中所称的在队列中添加单元或WQE可以是被理解为通过扩容的方式在发送队列中增项新的单元或WQE,也可以被理解为采用循环利用存储资源的方式重新利用已有的单元或WQE。

图2所示方法中第一计算节点执行的各个步骤可以由运行在第一计算节点的硬件层之上的应用程序实现。具体为运行在第一计算节点处理器上的应用程序实现,该应用程序在实现上述方法的各个步骤时可以绕过运行在第一计算节点硬件层之上的操作系统直接访问第一计算节点的存储装置。对应的第二计算节点的第二网络设备也可以直接将接收到的数据写入到第二计算节点的存储装置。换句话说,可以利用与第一计算节点运行的应用软件直接将数据直接从第一计算节点的内存传输到第二计算节点的内存中。传输过程中无需双方操作系统的介入。

综上所述,本申请实施例提供的技术方案中,计算节点可以将当前时刻更新的写指针直接传递给网络设备,避免传统技术中网络设备和计算节点存储的写指针不一致,导致网络设备数据处理错误的问题。而且,上述数据处理中,计算节点每次更新写指针的位置后,直接将写指针传递给网络设备,避免传统技术中网络设备需要两次读操作(第一次读操作获取计算节点中存储写指针的物理位置,第二次读操作时根据上述物理位置读取写指针)才能获取指针的操作,减少了读操作的数量,降低了系统处理能力,提高了系统处理效率。另外,传统技术中需要两个存储空间保存一个写指针,一个保存写指针的地址,另一个保存写指针。本申请实施例提供的方法只使用一个存储空间就可以保存写指针。因此,可以节省存储空间。

上文中结合图1至图2,详细描述了根据本申请实施例所提供的数据处理的方法,下面将结合图3至图6,描述根据本申请实施例所提供的数据处理的装置和系统。

图3是根据本申请实施例提供的网络设备的结构框图。如图3所示,网络设备300包括获取单元301和处理单元302。

获取单元,用于根据第一队列的标识,从计算节点的队列信息存储空间中读取该第一队列的指针信息。该计算节点是与网络设备300相连的计算节点。网络设备300用于实现该计算节点和其他计算节点的通信。该队列信息存储空间设置在该计算节点的内存中。

例如,在一些可能的实现方式中,网络设备300可以是图1中的网络设备111,该计算节点可以是图1中的计算节点110。该队列信息存储空间可以设置在存储装置112中。在此情况下,该第一队列可以是图2所示方法中的发送队列。该第一队列的指针信息可以是图2所示方法中的发送队列指针信息。

可选的,网络设备300可以是图1中的网络设备121,该计算节点可以是图1中的计算节点120。该队列信息存储空间可以设置在存储装置122中。在此情况下,该第一队列可以是图2所示方法中的接收队列。该第一队列的指针信息可以是图2所示方法中的接收队列指针信息。

可以理解的是,该第一队列除了可以是接收队列或发送队列外,还可以是其他形式的队列,例如完成队列、提交队列等。

处理单元302,用于根据该指针信息中的读指针获取该第一队列中待处理数据,并处理该待处理数据;

处理单元302,还用于根据该第一写指针更新该读指针所指示的单元的位置。

获取单元301可以由接收器实现。处理单元302可以由处理器实现。接收单元301和处理单元302的具体功能和有益效果可以参见图2所示的方法中的第一网络设备或第二网络设备。

应理解的是,本发明实施例的网络设备300可以通过专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logicdevice,PLD)实现,上述PLD可以是复杂程序逻辑器件(complex programmable logicaldevice,CPLD),现场可编程门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。也可以通过软件实现图2所示的数据处理方法时,网络设备300及其各个模块也可以为软件模块。

根据本发明实施例的网络设备300可对应于执行本发明实施例中描述的方法,并且网络设备300中的各个单元的上述和其它操作和/或功能分别为了实现图2中的各个方法的相应流程,为了简洁,在此不再赘述。

图4是根据本申请实施例提供的网络设备的结构框图。图4所示的网络设备400包括:处理器401、存储器402和通信接口403,处理器401、存储器402和通信接口403通过总线404相通信。

处理器401、存储器402和通信接口403之间通过内部连接通路互相通信,传递控制和/或数据信号。

上述本发明实施例揭示的方法可以应用于处理器401中,或者由处理器401实现。处理器401可以是中央处理器(central processing unit,CPU),还可以是其他通用处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(applicationspecific integrated circuit,ASIC)、现场可编程门阵列(field programmable gatearray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。在实现过程中,上述方法的各步骤可以通过处理器401中的硬件的集成逻辑电路或者软件形式的指令完成。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储器402中,该存储器402可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(synchronousDRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data date SDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambusRAM,DR RAM)处理器401读取存储器402中的指令,结合其硬件完成上述方法的步骤。

可选的,存储器402可以存储用于执行如图2所示方法中第一网络设备执行的方法的指令。处理器401可以执行存储器402中存储的指令结合其他硬件(例如收发器403)完成如图2所示方法中第一网络设备的步骤,具体工作过程和有益效果可以参见图2所示实施例中的描述。

可选的,存储器402可以存储用于执行如图2所示方法中第二网络设备执行的方法的指令。处理器401可以执行存储器402中存储的指令结合其他硬件(例如收发器403)完成如图4所示方法中第二网络设备的步骤,具体工作过程和有益效果可以参见图2所示实施例中的描述。

总线404除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线404。

应理解的是,根据本发明实施例的网络设备400可对应于本发明实施例中的网络设备300,并可以对应于执行根据本发明实施例的图2所示方法中的第一网络设备或第二网络设备为执行主体,并且网络设备400中的各个模块的上述和其它操作和/或功能分别为了实现图2中的各个方法的相应流程,为了简洁,在此不再赘述。

图5是根据本申请实施例提供的计算节点的结构框图。如图5所示,计算节点500包括接处理单元501、存储单元502和发送单元503。

处理单元501,用于根据待处理的队列数目以及队列信息的大小,确定队列信息存储空间以及该队列信息存储空间中的第一存储空间。计算节点500与网络设备相连。该网络设备用于实现计算节点500和其他计算节点的通信。该队列信息存储空间设置在存储单元502中。

例如,在一些可能的实现方式中,该网络设备可以是图1中的网络设备111,计算节点500可以是图1中的计算节点110。该队列信息存储空间可以设置在存储装置112中。储存装置112可以是存储单元502。

又如,在另在一些可能的实现方式中,该网络设备可以是图1中的网络设备121,计算节点500可以是图1中的计算节点120。该队列信息存储空间可以设置在存储装置122中。储存装置122可以是存储单元502。

处理单元501,还用于将第一队列的写指针存储至该第一存储空间,其中,该第一队列为该多个队列中的任一个队列,该第一队列的写指针用于指示该第一队列中当前时刻允许该计算节点存储数据的最后一个单元的位置。

发送单元503,用于向该网络设备发送该第一队列的标识。

处理单元501可以由处理器实现。存储单元502可以由存储器实现。发送单元503可以由发送器实现。处理单元501、存储单元502和发送单元503的具体功能和有益效果可以参见图2所示的方法中的第一计算节点或第二计算节点,在此就不再赘述。

应理解的是,本发明实施例的计算节点500可以通过专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logicdevice,PLD)实现,上述PLD可以是复杂程序逻辑器件(complex programmable logicaldevice,CPLD),现场可编程门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。也可以通过软件实现图2所示的数据处理方法时,计算节点500及其各个模块也可以为软件模块。

根据本发明实施例的计算节点500可对应于执行本发明实施例中描述的方法,并且计算节点500中的各个单元的上述和其它操作和/或功能分别为了实现图2中的各个方法的相应流程,为了简洁,在此不再赘述。

图6是根据本发明实施例提供的计算节点的结构框图。图6所示的计算节点600包括:处理器601,处理器601连接一个或多个数据存储设备。该数据存储设备可以包括存储介质(storage medium)602和内存单元(memory unit)604。存储介质602可以是只读的,如只读存储器(ROM),或可读/可写,如硬盘或闪存存储器。内存单元604可以是随机存取存储器(RAM)。内存单元604可以物理上集成在处理器601中,也可以在独立单元或单元中构建。存储介质602、通信接口603和内存单元604,处理器601、存储介质602、通信接口603和内存单元604通过总线605相通信。

处理器601是计算节点600的控制中心,提供执行指令、执行中断动作、提供定时功能和其他功能的排序和处理设施。可选的,处理器601包括一个或多个中央处理器(CPU)。如图6所示的CPU 0和CPU 1。可选的,计算节点600包括多个处理器。处理器601可以是单核(单CPU)处理器,也可以是多核(多CPU)处理器,除非另有说明,否则用于执行任务的处理器或存储器等部件可以实现为临时配置的用于在给定时间执行任务的通用组件或制造用于执行任务的特定组件,如本文所使用的术语“处理器”是指一个或多个设备或电路。处理器601还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。

处理器601的CPU执行的程序代码可以存储在内存单元604或存储介质602中。可选的,程序代码(例如,内核、待调试程序)存储在存储介质602中,被复制到存储器单元604中供处理器601执行。处理器601可执行至少一个内核(例如,内核来自销售在LINUXTM、UNIXTM、windowsTM、ANDROIDTM、IOS等操作系统中的内核)。处理器601通过控制其他程序或进程的执行,控制与周边设备的通信,控制数据处理设备资源的使用,从而控制计算节点600的运行,以此实现上述图2所示方法的操作步骤。

计算节点600还包括用于直接或通过外部网络与其他设备或系统通信的通信接口603。可选的,计算节点600还包括输出设备和输入设备(图6未示出)。输出设备与处理器601连接,能够以一种或多种方式显示信息。输出设备的一个示例是液晶显示器(LCD)、发光二极管(LED)显示器、阴极射线管(CRT)或投射器等视觉显示设备。输入设备还与处理器101连接。能够接收来自计算节点600或更多方式的用户的输入。输入设备的示例包括鼠标、键盘、触摸屏设备或感应设备等。

总线605除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线604。

计算节点600可以通过通信接口603与图4所示的网络设备400进行通信,实现上述图2所示方法的操作步骤。可选的,图4所示的网络设备400也可以通过总线605接入计算节点600,例如,具体实现时网络设备400可以通过计算节点600中设置的PCIe插槽(图6未示出)的形式接入计算节点,并通过总线605与计算节点的各个元素进行通信。

应理解,根据本发明实施例的数据处理的计算节点600可对应于本发明实施例中的分数据处理的计算节点400,并可以对应于执行根据本发明实施例中图2所示方法中的相应主体,并且计算节点600中的各个模块的上述和其它操作和/或功能分别为了实现图2中的各个方法的相应流程,为了简洁,在此不再赘述。

本申请实施例还提供一种系统,包括图4所示网络设备和图6所述计算节点,网络设备和计算节点用于实现上述图2所示方法流程,为了简洁,在此不再赘述。

本申请实施例还提供一种芯片,该芯片包括收发单元和处理单元。其中,收发单元可以是输入输出电路、通信接口;处理单元为该芯片上集成的处理器或者微处理器或者集成电路。该芯片可以执行上述方法实施例中第一网络设备的方法。

本申请实施例还提供一种芯片,该芯片包括收发单元和处理单元。其中,收发单元可以是输入输出电路、通信接口;处理单元为该芯片上集成的处理器或者微处理器或者集成电路。该芯片可以执行上述方法实施例中第二网络设备的方法。

本申请实施例还提供一种芯片,该芯片包括收发单元和处理单元。其中,收发单元可以是输入输出电路、通信接口;处理单元为该芯片上集成的处理器或者微处理器或者集成电路。该芯片可以执行上述实施例中第一计算节点执行的方法。

本申请实施例还提供一种芯片,该芯片包括收发单元和处理单元。其中,收发单元可以是输入输出电路、通信接口;处理单元为该芯片上集成的处理器或者微处理器或者集成电路。该芯片可以执行上述实施例中第二计算节点执行的方法。

上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

29页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种资源分配的方法、终端、服务器及存储介质

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!