数据处理方法、远程直接访存网卡和设备

文档序号:1686967 发布日期:2020-01-03 浏览:12次 >En<

阅读说明:本技术 数据处理方法、远程直接访存网卡和设备 (Data processing method, remote direct memory access network card and equipment ) 是由 孙贝磊 周超 李涛 于 2018-06-26 设计创作,主要内容包括:本申请提供了一种数据处理方法、RNIC和设备,该方法包括:第一RNIC接收第二RNIC发送的RDMA写请求,RDMA写请求包括第一数据和数据持久化标记,该数据持久化标记用于指示第一数据为待持久化的数据;根据该RDMA写请求,第一RNIC向第一处理器发送DMA写请求,以指示第一处理器将第一数据写入第一设备,第一RNIC与第一处理器属于第一设备,第二RNIC属于第二设备,两个设备基于RDMA方式通信;根据该数据持久化标记,第一RNIC确定该第一数据为待持久化的数据,第一RNIC指示第一处理器将第一数据保存到第一设备的非易失性存储器中。以此减小远程内存持久化过程中RDMA网络的负载。(The application provides a data processing method, an RNIC and equipment, wherein the method comprises the following steps: the method comprises the steps that a first RNIC receives an RDMA write request sent by a second RNIC, the RDMA write request comprises first data and a data persistence mark, and the data persistence mark is used for indicating that the first data are data to be persisted; according to the RDMA write request, the first RNIC sends a DMA write request to the first processor to instruct the first processor to write first data into the first equipment, the first RNIC and the first processor belong to the first equipment, the second RNIC belongs to the second equipment, and the two equipment communicate based on the RDMA mode; according to the data persistence flag, the first RNIC determines that the first data is data to be persisted, and the first RNIC instructs the first processor to save the first data to a non-volatile memory of the first device. Thereby reducing the load on the RDMA network during remote memory persistence.)

数据处理方法、远程直接访存网卡和设备

技术领域

本申请涉及计算机技术领域,尤其涉及数据处理方法、远程直接访存网卡和设备。

背景技术

存储级存储器(storage class memory,SCM),例如3D Xpoint,是一种新型非易失性存储器(non-volatile memory,NVM),它是一种同时结合了传统的存储介质(如机械硬盘、固态硬盘等)和存储器(如动态随机存取存储器)的复合型存储器。SCM可以像动态随机存取存储器一样嵌入主机板的插槽中,相较于动态随机存取存储器,SCM在失去电源的状态下仍然可以不间断地保存资料,具备断电保存的特性。SCM能够提供比快闪存储器更快的读写速度,在成本上比动态随机存取存储器更便宜。在一些计算设备系统架构中,SCM被用作内存使用。在一些方案中,通过以互连的方式将多个以SCM作为内存的计算设备连接形成SCM资源池以扩大SCM的容量,从而实现对数据的冗余备份。

在多个以SCM作为内存的计算设备组成的SCM资源池中,任意两台计算设备之间可以基于远程直接内存访问(remote direct memory access,RDMA)技术通信以及传输数据,远程直接内存访问可以简称为远程直接访存。与传统的网络传输技术不同,RDMA技术可以将数据直接从一台计算设备的内存传输到另一台计算设备的内存,而无需两台计算设备的操作系统或内核介入。对于基于RDMA技术进行通信以及数据传输的SCM资源池,需要解决远程内存持久化的问题。内存持久化,指的是将数据从计算设备的易失性存储介质写回到计算设备的非易失性存储介质中;而远程内存持久化,则指的是将一台计算设备的SCM中的数据写入到另一台计算设备后再令数据被保存到另一台计算设备的SCM中。在以SCM作为内存的存储系统中,计算设备A(发起远程操作请求的计算设备)的SCM中的数据要被保存至计算设备B(接收远程操作请求的计算设备)的SCM中,该数据需要经过计算设备B的处理器,而由于计算设备B的处理器中存在缓存,该数据可能会被暂时缓存在缓存中,面临掉电丢失的风险。在目前的解决方案中,计算设备A一般是在通过RDMA写(write)请求将数据写入到计算设备B中后,再通过发起一次RDMA读(read)请求或RDMA发送(send)请求,以将通过RDMA写请求写入的数据写回到计算设备B的SCM中,计算设备A发起的RDMA读请求或RDMA发送请求可以看作是远程内存持久化请求。这种方案存在以下问题:由于计算设备A在每次RDMA写请求之后都要发起一次远程内存持久化请求,增加了RDMA网络的网络负载。

发明内容

本申请提供数据处理方法、远程直接访存网卡和设备,解决额外发送的远程内存持久化请求所引起的网络负载较大的问题。

第一方面,提供了一种数据处理方法,包括:

第一远程直接访存网卡(remote direct memory access network interfacecard,RNIC)接收第二RNIC发送的远程直接访存(remote direct memory access,RDMA)写请求,RDMA写请求包括第一数据和数据持久化标记,该RDMA写请求用于请求将第一数据写入第一设备,该数据持久化标记用于指示第一数据为待持久化的数据,其中,第一RNIC是第一设备的RNIC,即接收RDMA请求的设备的RNIC,第二RNIC是第二设备的RNIC,即发送RDMA请求的设备的RNIC,第一设备和第二设备基于RDMA方式进行通信;根据该RDMA写请求,第一RNIC确定需要将第一数据写入第一设备,第一RNIC向第一处理器发送直接内存访问(direct memory access,DMA)写请求,该DMA写请求包括第一数据,以指示第一处理器将第一数据写入第一设备,其中,第一处理器是第一设备的处理器,第一RNIC和第一处理器之间基于DMA的方式通信;根据该数据持久化标记,第一RNIC确定该第一数据为待持久化的数据,第一RNIC指示第一处理器将将第一数据保存到第一设备的非易失性存储器中。

其中,非易失性存储器可以为SCM。SCM具体可以为相变式随机访问存储器(phase-change random access memory,PRAM),PRAM例如可以为3D Xpoint,电阻式随机访问存储器(resistive random access memory,ReRAM),磁性随机访问存储器(magnetic randomaccess memory,MRAM),等等。接收RDMA请求的设备可以称之为远端设备,发送RDMA请求的设备可以称之为本地设备。

在上述方案中,远端设备的RNIC在根据RDMA写请求中的数据持久化标记确定第一数据为待持久化的数据后,直接指示远端设备的处理器将第一数据保存到第一设备的非易失性存储器中,以完成对第一数据的内存持久化,不需要本地设备的RNIC再发起远程内存持久化请求。由于本地设备不需要在发起RDMA写请求之后再发起远程内存持久化请求,减小了RDMA网络的负载;另外,将数据持久化标记携带在RDMA写请求中使得远程写操作和远程内存持久化操作成为被连续执行的操作,保证数据写入远端设备后可被保存至非易失性存储器中,避免出现数据不一致的问题。

在一种可能的实现方式中,上述数据持久化标记可以为写持久化指令。在数据化标记为写持久化指令的情况下,该RDMA写请求也可以称之为RDMA写持久化请求,如rdmawrite durable。通过在原有的RDMA操作指令的基础上增加写持久化指令,远端设备的RNIC解析RDMA写请求得到该写持久化指令,远端设备的RNIC可确定该RDMA写请求中的第一数据为待持久化的数据。

在另一种可能的实现方式中,上述数据持久化标记为第一数据对应的目的存储地址,该目的存储地址对应的存储空间用于存储第一数据,该目的存储地址为上述第一设备中的持久存储地址,该持久存储地址用于存储待持久化的数据。这里,第一数据对应的目的存储地址为第二设备指定的第一设备中的用于存储第一数据的存储空间所对应的存储地址。远端设备事先分配用于存储待持久化的数据的存储空间,在确定第一数据对应的目的存储地址为远端设备中事先分配的用于存储待持久化的数据的存储空间所对应的存储地址的情况下,远端设备的RNIC可确定RDMA写请求中的第一数据为待持久化的数据。

在另一种可能的实现方式中,第一RNIC可以通过以下方式指示第一处理器将第一数据保存到第一设备的非易失性存储器中:第一RNIC在与第二RNIC对应的接收队列(receive queue,SQ)中添加DMA最低有效位(least significant bit,LSB)读请求;第一RNIC第一处理器发送该DMA LSB读请求,该DMA LSB读请求用于指示第一处理器将缓存在第一设备的外设总线链路中的所有数据写入至第一设备的非易失性存储器中。这种方式可以适用于在第一RNIC写数据的过程中,数据不经过第一处理器的最后层级缓存(last levelcache,LLC)的情况。由于数据不经过第一处理器的LLC,数据可能还未完成写入而缓存在处理器的输入/输出(I/O)控制器的缓存中,根据***扩展互连总线标准(peripheralcomponent interconnect express,PCIe)协议规定,在进行任意一个读操作前,需要将写操作全部完成,所以通过在接收队列中添加DMA LSB读请求,然后向处理器发送该DMA LSB读请求,使得处理器执行该DMA LSB读请求对应的读操作,读操作可以使得缓存在外设总线上的还未完成写入的数据写入到非易失性存储器中,进而可以将可能还缓存在外设总线上的第一数据保存到非易失性存储器中。

在另一种可能的实现方式中,第一RNIC可以通过以下方式指示第一处理器将第一数据保存到第一设备的非易失性存储器中:第一RNIC在根据第一数据生成RDMA接收(receive)请求对应的工作队列项(work queue entry,WQE)之后,清除该WQE,该RDMA接收请求用于接收第二设备发起的RDMA发送(send)请求;在清除该WQE之后,第一RNIC生成该RDMA请求对应的完成队列项(completion queue entry,CQE),以指示第一处理器将缓存在第一处理器的易失性存储介质中的第一数据存储至所述第一设备的非易失性存储器中。第一处理器的易失性存储介质可以是LLC。这种方式可以适用于在远端设备的RNIC写数据的过程中,数据经过远端设备的处理器的LLC的情况。由于第一数据经过第一处理器的LLC,通过根据第一数据生成并清除RDMA接收请求对应的WQE以及生成RDMA接收请求对应的CQE,当第一处理器获取到CQE时,可以产生中断从而将使得第一处理器将相应地址的数据写回到非易失性存储器中。而WQE以及CQE均是根据第一数据产生的,其与第一数据相对应,将相应地址的数据写回到非易失性存储器中即可以将第一数据存储到非易失性存储器中。

在另一种可能的实现方式中,第一RNIC指示第一处理器将第一数据保存到第一设备的非易失性存储器中之后,还可以向第二RNIC发送第一数据对应的持久化确认消息,该持久化确认消息包括第二数据包序列号(packet sequence number,PSN),第二PSN为第一数据的序列号,该持久化确认消息用于指示第一数据的内存持久化完成。通过向第二RNIC发送持久化确认消息,第二RNIC可以根据该第二PSN确定第一数据被存储至第一设备的非易失性存储器中。

在另一种可能的实现方式中,第一RNIC接收第二RNIC发送的RDMA写请求之后,向第二RNIC发送第一数据对应的接收确认消息,第一数据对应的接收确认消息包括第一PSN,第一PSN为第一数据的序列号,该接收确认消息用于指示第一RNIC接收到第一数据。通过向第二RNIC发送接收确认消息,第二RNIC可根据第一PSN确定第一数据的传输完成。

第二方面,提供了另一种数据处理方法,包括:第二RNIC接收第二处理器的RDMA写持久化请求,该RDMA写持久化请求包括数据持久化标记,该RDMA写持久化请求用于请求将第一数据存储至至第一设备的非易失性存储器中,数据持久化标记用于指示第一数据为待持久化的数据,其中,第二RNIC和第二处理器分别为第二设备的RNIC和处理器,第二RNIC和第二处理器基于DMA方式的通信,第二设备为发起RDMA请求的设备,第一设备为接收RDMA请求的设备,第二设备和第一设备基于RDMA方式通信;第二RNIC根据RDMA写持久化请求生成RDMA写请求,该RDMA写请求包括第一数据和数据持久化标记;第二RNIC向第一RNIC发送该RDMA写请求,该RDMA写请求用于请求将第一数据写入第一设备,第一RNC为第一设备的RNIC。

其中,接收RDMA请求的设备可以称之为远端设备,发送RDMA请求的设备可以称之为本地设备,即,第一设备为远端设备,第二设备为本地设备。

在上述方案中,本地设备的RNIC接收到本地设备的处理器发起的RDMA写持久化请求的情况下,根据RDMA写持久化请求生成RDMA写请求,RDMA写请求自身的含义可以使远端设备的RNIC将第一数据写入远端设备,RDMA写请求中的数据持久化标记可以使远端设备的RNIC知道第一数据是待持久化的数据,从而远端设备的RNIC可以在将第一数据写入远端设备后,将该第一数据存储到第一设备的非易失性存储器中,完成对第一数据的内存持久化。该方案相当于将写请求和内存持久化请求融合在一个请求中,本地设备不需要再发送额外的内存持久化请求,减小了RDMA网络的负载;另外,将数据持久化标记携带在RDMA写请求中使得远程写操作和远程内存持久化操作成为被连续执行的操作,保证数据写入远端设备后可被保存至非易失性存储器中,避免出现数据不一致的问题。

在一种可能的实现方式中,上述数据持久化标记为写持久化指令。在数据化标记为写持久化指令的情况下,该RDMA请求也可以称之为RDMA写持久化请求,如rdma writedurable。通过在原有的RDMA操作指令的基础上增加写持久化指令,可使远端设备的RNIC在解析RDMA写请求得到该写持久化指令后确定该RDMA写请求中的第一数据为待持久化的数据。

在另一种可能的实现方式中,上述数据持久化标记为第一数据对应的目的虚拟内存地址,第一数据对应的目的存储地址为第一设备中的持久存储地址,该持久存储地地址对应的存储空间用于存储待持久化的数据。第一数据对应的目的存储地址指的是第二设备指定的第一设备中的用于存储第一数据的存储地址。通过将第一数据对应的目的存储地址设置为远端设备中的用于存储待持久化的数据的存储空间所对应的存储地址,可以使远端设备的RNIC根据该目的存储地址确定第一数据为待持久化的数据。

在另一种可能的实现方式中,第二RNIC在向第一RNIC发送RDMA写请求之后,在接收到第一RNIC发送的第一数据对应的持久化确认消息的情况下,第二RNIC生成RDMA写持久化请求对应的CQE,第一数据对应的持久化确认消息用于指示第一数据的内存持久化完成,该RDMA写持久化请求对应的CQE用于通知第二处理器的内存持久化完成。这种方式可以适用于在远端设备的RNIC写数据的过程中,数据不经过远端设备的处理器的LLC的情况。在接收到第一RNIC发送的持久化确认消息的情况下,第二RNIC生成RDMA写持久化请求对应的CQE,当第二处理器获取到CQE时,可以根据该CQE确定第一数的内存持久化完成,第一处理器不用再发起一次远程内存持久化请求,减小了RDMA网络的负载。

在另一种可能的实现方式中,第二RNIC生成RDMA写持久化请求对应的CQE之前,第二RNIC在接收到第一RNIC发送的第一数据对应的接收确认的情况下,缓存第一数据对应的接收确认消息,第一数据对应的接收确认消息包括第一PSN,第一PSN为第一数据的序列号,第一数据对应的接收确认消息用于指示第一RNIC接收到第一数据;第二RNIC接收第一RNIC发送的第一确认消息,第一确认消息包括第二PSN;在第二PSN与第一PSN相同的情况下,第二RNIC确定接收到第一数据对应的持久化确认消息。在RDMA协议中,确认(acknowledgement,ACK)消息仅用于表示确认的意思,而该ACK消息具体用于表示对什么请求的确认需要根据在接收到确认消息之前所发送的请求或者接收到的ACK消息的顺序进行判断,在该设计方案中,由于写入操作是发生在内存持久化操作之前,那么第一次接收到的携带第一数据的序列号的确认消息必然是第一数据的接收确认消息,在接收到第一数据的接收确认消息后,通过缓存该接收确认消息,则第二设备的RNIC不需要等到接收到第一数据的持久化确认消息就可以向第一设备RNIC发送第一数据的下一个数据,通过比较PSN的方式可以使一个数据的内存持久化和该数据的下一个数据的写入操作并行进行,提高数据内存持久化的效率,减小时延。

在另一种可能的实现方式中,第二RNIC向第一RNIC发送RDMA写请求之后,在接收到第一RNIC发送的第一数据对应的接收确认消息的情况下,第二RNIC生成RDMA写持久化请求对应的CQE,第一数据对应的接收确认消息用于指示第一RNIC接收到第一数据,该RDMA写持久化请求对应的CQE用于通知第二处理器第一数据已经写入第一设备;第二RNIC接收第二处理器发送的RDMA接收请求;在接收到第一数据对应的持久化确认消息的情况下,第二RNIC生成RDMA请求对应的CQE,第一数据对应的持久化确认消息用于指示第一数的内存持久化完成,该RDMA接收请求对应的CQE用于通知第二处理器第一数据的内存持久化完成。这种方式可以适用于在远端设备的RNIC写数据的过程中,数据经过远端设备的处理器的LLC的情况。由于第一数据经过第一设备的处理器的LLC,则在接收到第一数据对应的接收确认消息的情况下生成RDMA写持久化请求对应的CQE,使得第二处理器可以根据RDMA写持久化请求对应的CQE发起RDMA接收请求,省去了第二处理器发起RDMA发送请求的过程,减小了RDMA网络的负载。

在另一种可能的实现方式中,第二RNIC生成RDMA请求对应的CQE之前,第二RNIC还可以缓存第一数据对应的接收确认消息,第一数据对应的接收确认消息包括第一PSN,第一PSN为第一数据的序列号;第二RNIC接收第一RNIC发送的第一确认消息,该第一确认消息包括第二PSN;在第二PSN与第一PSN相同的情况下,第二RNIC确定接收到第一数据对应的持久化确认消息。通过缓存第一数据的接收确认消息,则第二设备不需要等到接收到第一数据的持久化确认就可以向第一设备发送第一数据的下一个数据,通过比较PSN的方式可以使一个数据的内存持久化和该数据的下一个数据的写入操作并行进行,提高数据内存持久化的效率,减小时延。

第三方面,提供了又一种数据处理方法,包括:第二处理器向第二RNIC发送RDMA写持久化请求,该RDMA写持久化请求包括数据持久化标记,RDMA写持久化请求用于请求将第一数据存储至第一设备的非易失性存储器中,数据持久化标记用于指示第一数据为待持久化的数据,其中,第二RNIC和第二处理器分别为第二设备的RNIC和处理器,第二RNIC和第二处理器基于DMA的方式通信,第二设备为发起RDMA请求的设备,第一设备为接收RDMA请求的设备,第一设备和第二设备基于RDMA方式通信;在获取到RDMA写持久化请求对应的CQE的情况下,第二处理器确定第一数据已经存储至所述第一设备的非易失性存储器中。

其中,接收RDMA请求的设备可以称之为远端设备,发送RDMA请求的可以称之为本地设备,即,第一设备为远端设备,第二设备为本地设备。

该方案可以适用于在远端设备的RNIC写数据的过程中,数据不经过远端设备的处理器的LLC的情况。本地设备的处理器只用发一次RDMA写请求即可将第一数据写入并内存持久化至远端设备中,不需要在发起RDMA写请求之后再发起远程内存持久化请求,减小了RDMA网络的负载;另外,将数据持久化标记携带在一个RDMA请求中使得远程写操作和远程内存持久化操作成为被连续执行的操作,保证数据写入远端设备后可被保存至非易失性存储器中,避免出现数据不一致的问题。

在另一种可能的实现方式中,上述数据持久化标记为写持久化指令。通过在原有的RDMA操作指令的基础上增加RDMA写持久化指令,可使远端设备的RNIC在解析RDMA请求得到该RDMA写持久化指令后确定该RDMA请求中的第一数据为待持久化的数据。

在另一种可能的实现方式中,上述数据持久化标记为第一数据对应的目的存储地址,第一数据对应的目的存储地址为第一设备中的持久存储地址,该持久存储地地址对应的存储空间用于存储待持久化的数据。第一数据对应的目的存储地址指的是第二设备指定的第一设备中的用于存储第一数据的存储地址。通过将第一数据对应的目的存储地址设置为远端设备中的用于存储待持久化的数据的存储空间所对应的存储地址,可以使远端设备的RNIC根据该目的存储地址确定第一数据为待持久化的数据。

第四方面,提供了又一种数据处理方法,包括:第二处理器向第二RNIC发送RDMA写持久化请求,该RDMA写持久化请求包括数据持久化标记,RDMA写持久化请求用于请求将第一数据存储至所述第一设备的非易失性存储器中,数据持久化标记用于指示第一数据为待持久化的数据,其中,第二RNIC和第二处理器分别为第二设备的RNIC和处理器,第二RNIC和第二处理器基于DMA的方式通信,第二设备为发起RDMA请求的设备,第一设备为接收RDMA请求的设备,第一设备和第二设备基于RDMA方式通信;在获取到RDMA写持久请求对应的CQE的情况下,第二处理器向第二RNIC发送RDMA接收请求;在获取到第二RNIC发送的RDMA接收请求对应的CQE的情况下,第二处理器确定第一数据已经存储至所述第一设备的非易失性存储器中。

这种方案可以适用于在远端设备的RNIC写数据的过程中,数据不经过远端设备的处理器的LLC的情况。省去了本地设备发送RDMA发送请求,减小RDMA网络的负载。

在一种可能的实现方式中,上述数据持久化标记为写持久化指令。通过在原有的RDMA操作指令的基础上增加RDMA写持久化指令,可使远端设备的RNIC在解析RDMA请求得到该RDMA写持久化指令后确定该RDMA请求中的第一数据为待持久化的数据。

在另一种可能的实现方式中,上述数据持久化标记为第一数据对应的目的存储地址,第一数据对应的目的存储地址为第一设备中的持久存储地址,该持久存储地地址对应的存储空间用于存储待持久化的数据。第一数据对应的目的存储地址指的是第二设备指定的第一设备中的用于存储第一数据的存储地址。通过将第一数据对应的目的存储地址设置为远端设备中的用于存储待持久化的数据的存储空间所对应的存储地址,可以使远端设备的RNIC根据该目的存储地址确定第一数据为待持久化的数据。

第五方面,提供了一种RNIC,包括用于执行第一方面或第一方面任一种可能实现方式中的数据处理方法的各个模块。

第六方面,提供了另一种RNIC,包括用于执行第二方面或第二方面任一种可能实现方式中的数据处理方法的各个模块。

第七方面,提供了一种处理器,用于执行上述第三方面或第四方面涉及的流程中的部分或全部流程。

第八方面,提供了一种第一设备,包括处理器、非易失性存储器以及RNIC,该RNIC用于执行上述第一方面所述的方法流程中的操作步骤。

第九方面,提供了一种第二设备,包括处理器、非易失性存储器以及RNIC,该RNIC用于执行上述第二方面所述的方法流程中的操作步骤,该处理器用于执行上述第三方面或第四方面所述的方法流程中的操作步骤。

第十方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。

第十一方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。

本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。

附图说明

图1是本申请实施例提供的一种计算设备的组成示意图;

图2是本申请实施例提供的一种远程内存持久化的流程示意图;

图3是本申请实施例提供的另一种远程内存持久化的流程示意图;

图4是本申请实施例提供的一种通过RDMA技术通信的计算设备网络的示意图;

图5是本申请实施例提供的本地设备和远端设备所组成的通信系统的示意图;

图6是本申请实施例提供的RNIC的一种实现方式的结构示意图;

图7是本申请实施例提供的RNIC的另一种结构示意图;

图8是本申请实施例提供的一种两台计算设备之间的通道示意图;

图9是本申请实施例提供的一种数据处理方法的流程示意图;

图10是本申请实施例提供的另一种数据处理方法的流程示意图;

图11是本申请实施例提供的另一种数据处理方法的流程示意图;

图12是本申请实施例提供的一种计算设备的组成结构示意图;

图13是本申请实施例提供的另一种计算设备的组成结构示意图。

具体实施方式

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

首先,结合图1至图3介绍下传统的数据处理方法。

图1为一种计算设备的示意图。如图1所示,计算设备10包括RNIC101、处理器102以及SCM103,RNIC、处理器102以及SCM103通过总线104连接,其中,总线104包括但不限于外设总线(如***器件互联(peripheral component interconnect,PCI)总线、PCIe总线等)、系统总线;处理器可以为中央处理器(central processing unit,CPU)。处理器包括102包括集成输入/输出控制器(integrated input/output,IIO),最后层级缓存(last levelcache,LLC)、集成内存控制器(integrated memory controller,iMC)以及一个或多个处理器内核(core)。在处理器中,IIO用于处理与RNIC等外设之间交互的报文,该报文可以为PCI报文、PCIe报文,等等。IIO、LLC、iMC以及处理器内核可以通过芯片内部总线连接,例如,处理器为进阶精简指令集机器(advanced RISC machine,ARM)架构的芯片,则IIO、LLC、iMC以及处理器内核通过先进高性能总线(advanced high performance bus,AHB)连接。

在以SCM作为内存的计算设备中,要将RNIC中的数据写入至SCM中,该数据需要经过计算设备的处理器,RNIC中的数据写入到SCM可以有如图1所示的两种数据流向。第一种数据流向包括:①数据被RNIC写入到处理器的IIO中,②处理器的IIO将数据写入到处理器的iMC中,处理器的iMC将数据缓存在iMC的异步动态随机存取存储器刷新区(asynchronousDRAM refresh,ADR),③处理器的iMC将数据写入到SCM中。第二种数据流向包括:①数据被RNIC写入到处理器的IIO中,②处理器的IIO将数据写入到处理器的LLC中,③处理器的LLC中的数据被刷至处理器的iMC中,处理器的iMC将数据缓存在iMC的ADR中,④处理器的iMC将数据写入到SCM中。由于iMC的ADR具有掉电不丢失的特性,一般情况下,数据被写入到ADR中后可以被认为是完成了内存持久化。

由图1可知,数据在处理器中有两种可能的数据流向,其中,数据在处理器中的流向由处理器架构特性决定。在一些处理器架构中,数据在处理器中的流向与IIO中的I/O数据直接访问(data direct I/O,DDIO)功能有关,如果IIO中的DDIO功能开启,则数据在处理器中的流向为上述第二种数据流向;如果IIO中的DDIO的功能未开启,则数据在处理器中的流向为上述第一种数据流向。在另一些处理器架构(如因特尔的Skylake架构)中,数据在处理器中的流向与IIO中的DDIO功能和RNIC发送给IIO的报文有关,如果RNIC发送给IIO的报文中的无监视(no-snoop,NS)标记位为1或IIO中的DDIO功能未开启,则数据在处理器中的流向为上述第一种数据流向;如果RNIC发送给IIO的报文中的NS标记位不为1,并且,处理器的DDIO功能开启,则数据在处理器中的流向为上述第二种数据流向。

以SCM作为内存的计算设备所形成的存储系统可包括多台以SCM作为内存的计算设备,在该存储系统中,两台计算设备之间的远程访问由计算设备的RNIC实现。两台计算设备可划分为两种角色,本地设备和远端设备,其中,“本地”和“远端”是两个相对的概念,本地设备指的是发起RDMA请求的计算设备,即请求访问另一台计算设备的计算设备。远端设备指的是接收RDMA请求的计算设备,即被另一台计算设备访问的计算设备。本地设备对远端设备的访问可以为本地设备向远端设备中写入数据,具体地,本地设备通过本地设备的RNIC将本地设备中的数据传输给远端设备的RNIC,远端设备通过远端设备的RNIC接收该数据,从而将本地设备中的数据传输到远端设备中。本地设备对远端设备的访问也可以为本地设备从远端设备中读取数据,具体地,本地设备可通过本地设备的RNIC读取远端设备的SCM中的数据,远端设备通过远端设备的RNIC将本地设备要读取的数据发送给本地设备的RNIC,本地设备的RNIC接收该数据从而完成对远端设备中的数据的读取。

在两台计算设备中实现远程内存持久化,针对于上述两种不同的数据流向,在一些设计方案中,有不同的远程内存持久流程。

对于第一种数据流向,数据不经过处理器的LLC,远程内存持久化的流程如图2所示,包括如下步骤:

S201,本地设备的处理器向本地设备的RNIC发起第一RDMA写请求。

S202,本地设备的RNIC处理第一RDMA写请求,根据第一RDMA写请求生成第二RDMA写请求。

S203,本地设备的RNIC将第二RDMA写请求发送给远端设备的RNIC,远端设备的RNIC接收第二RDMA写请求。

S204,远端设备的RNIC将第二RDMA写请求中的数据通过DMA的方式写入到SCM中。

这里,第二RDMA数据写请求中的数据在远端设备中的数据流向为第一种数据流向,由于数据在总线上传输,存在一定的时延,由于总线被占用等原因,部分数据可能被缓存在IIO等处于外设总线链路上的中间介质的缓存中。

S205,远端设备的RNIC向本地设备的RNIC发送ACK,本地设备的RNIC接收ACK。

S206,本地设备的RNIC生成第一RDMA写请求对应的CQE。

S207,本地设备的处理器获取第一RDMA写请求对应的CQE,确定数据写入完成。

S208,本地设备的处理器向本地设备的RNIC发起第一RDMA读请求。

S209,本地设备的RNIC处理第一RDMA读请求,根据第一RDMA读请求生成第二RDMA读请求。

S210,本地设备的RNIC将第二RDMA读请求发送给远端设备的RNIC,远端设备的RNIC接收第二RDMA读请求。

S211,远端设备的RNIC通过DMA的方式从SCM中读取数据。

由于在外设总线协议(如PCI协议、PCIe协议)中规定,在任意一个读操作被执行之前,需要完成在读操作之前的所有写操作,因此,通过DMA的方式从SCM中读取数据可以将缓存在IIO等外设总线链路上的中间介质中的数据写入SCM中。那么,通过DMA读取操作,可将可能还缓存在中间介质中的第一RDMA写请求中的数据写入SCM中。

S212,远端设备的RNIC远端设备的RNIC向本地设备的RNIC发送ACK,本地设备的RNIC接收ACK。

S213,本地设备的RNIC生成第一RDMA读请求对应的CQE。

S214,本地设备的处理器获取第一RDMA读请求对应的CQE,确定数据的内存持久化完成。

对于第二种数据流向,数据经过处理器的LLC,远程内存持久化的流程如图3所示,包括如下步骤:

S301,本地设备的处理器向本地设备的RNIC发起第一RDMA写请求。

S302,本地设备的RNIC处理第一RDMA写请求,根据第一RDMA写请求生成第二RDMA写请求。

S303,本地设备的RNIC将第二RDMA写请求发送给远端设备的RNIC,远端设备的RNIC接收第二RDMA写请求。

S304,远端设备的RNIC将第二RDMA写请求中的数据通过DMA的方式写入到SCM中。

第二RDMA写请求中的数据远端设备的数据流向为第二种数据流向,由于数据要经过LLC,所以在数据被写入到SCM的过程中,数据被缓存在LLC中。

S305,远端设备的RNIC向本地设备的RNIC发送ACK,本地设备的RNIC接收ACK。

S306,本地设备的RNIC生成第一RDMA写请求对应的CQE。

S307,本地设备的处理器获取第一RDMA写请求对应的CQE,确定数据写入完成。

S308,本地设备的处理器向本地设备的RNIC发起第一RDMA发送请求,第一RDMA发送请求中携带持久化标记。

S309,本地设备的RNIC处理第一RDMA发送请求,根据第一RDMA发送请求生成第二RDMA发送请求,第二RDMA请求中携带持久化标记以及数据的目的虚拟内存地址。

S310,本地设备的RNIC向远端设备的RNIC发送第二RDMA发送请求。

S311,远端设备的处理器向远端设备的RNIC发起第一RDMA接收请求。

S312,远端设备的RNIC生成第一RDMA接收请求对应的WQE。

S313,远端设备的RNIC根据第二RDMA发送请求生成第一RDMA接收请求对应的CQE。

S314,远端设备的RNIC向本地设备的RNIC发送ACK,本地设备的RNIC接收ACK。

S315,本地设备的RNIC生成第一RDMA发送请求对应的CQE。

S316,本地设备的处理器获取第一RDMA发送请求对应的CQE。

S317,本地设备的处理器向本地设备的RNIC发起第二RDMA接收请求。

S318,本地设备的RNIC生成第二RDMA接收请求对应的WQE。

S319,远端设备的处理器获取第一RDMA接收请求对应的CQE,确定第一RDMA接收请求对应的数据需要持久化。

S320,远端设备的处理器将对应地址的数据刷回到iMC的ADR中。

S321,远端设备的处理器向RNIC发起第三RDMA发送请求,第三RDMA请求中携带数据冲刷完成的指示。

S322,远端设备的RNIC处理第三RDMA发送请求,根据第三RDMA发送请求生成第四RDMA发送请求,第四RDMA发送请求中携带数据冲刷完成的指示。

S323,远端设备的RNIC向本地设备的RNIC发送第四RDMA发送请求,本地设备的RNIC接收第四RDMA发送请求。

S324,本地设备的RNIC根据第四RDMA发送请求中的数据冲刷完成的指示生成第二RDMA接收请求对应的CQE。

S325,本地设备的处理器获取第二RDMA接收请求对应的CQE,确定数据的内存持久化完成。

可以看到,在图2与图3所示的远程内存持久化流程中,在本地设备发起RDMA写请求之后,为了确保RDMA写请求中的数据被写入SCM中,本地设备需要在发起RDMA写请求之后发起一次RDMA读请求或RDMA发送请求将可能还未写入到SCM的数据写回到SCM中,RDMA读请求和RDMA发送请求可以被称为RDMA持久化请求。由于本地设备在每次RDMA写请求之后都要发起一次RDMA持久化请求,每一次RDMA请求均会占用一定的带宽,额外的RDMA持久化请求增加了RDMA网络的网络负载。

本申请实施例提供一种数据处理的方法、RNIC以及设备,以解决上述图2和图3所示的远程内存持久化的流程中所存在的网络负载较大的问题。

本申请实施例可以适用于计算设备之间相互连接并且通过RDMA技术通信的计算机网络,该计算机网络可以如图4所示,计算设备与计算设备可以通过有线网络(例如以太网)连接并进行通信。在该计算机网络中,存在两种角色,分别为本地设备和远端设备,本申请实施例具体可以适用于本地设备和远端设备所形成的通信系统。本地设备和远端设备所形成的通信系统可以如图5所示,本地设备和远端设备的结构可以参见图1所示的计算设备,每个计算设备包括RNIC、处理器以及SCM,其中,本地设备和远端设备的定义可见前述描述,本地设备和远端设备通过各自的RNIC与对端计算设备进行数据传输。

本申请实施例通过对RNIC的结构以及远程内存持久化流程进行改进,减轻远程内存持久化过程所需的网络负载。

首先,介绍本申请实施例提供的RNIC的一种实现方式,相较于一般的RNIC,本申请实施例的RNIC还包括持久化内存(persistent memory,PM)模块,该PM模块所实现的功能可以由门阵列组成的硬件电路实现,也可以由运行在RNIC中的软件程序实现。在RNIC中的控制部件的控制方式为以微存储为核心的微程序控制方式的情况下,该PM模块所实现的功能可以由运行在RNIC中的软件程序实现;在RNIC的控制部件的控制方式为以逻辑布线结构为主的控制方式的情况下,该PM模块所实现的功能可以由门阵列组成的硬件电路实现。PM模块用于执行与内存持久化有关的操作。其中,PM模块可以根据接收到的RDMA写请求中所携带的数据和参数判定该RDMA写请求中的数据是否需要进行内存持久化,并在根据该参数确定RDMA写请求中的数据需要进行内存持久化的情况下,直接指示处理器将该RDMA写请求中将该数据写入到计算设备的非易失性存储器中,完成对该数据的内存持久化。

本申请实施例中,非易失性存储器可以为SCM。SCM具体可以为PRAM,PRAM例如可以为3D Xpoint,ReRAM,MRAM,等等。

图6是本申请实施例提供的RNIC60的一种实现方式的结构示意图,该RNIC可以作为远端设备的RNIC被使用,也可以作为本地设备的RNIC被使用。如图2所示,RNIC60可包括接收模块601、调度模块602、发送模块603以及持久化内存模块604。

接收模块601用于接收外部计算设备发送的消息。在该RNIC60作为本地设备的RNIC的情况下,接收模块601可以用于接收远端设备的RNIC发送的请求或数据。本申请实施例中,在该RNIC60作为本地设备的RNIC的情况下,接收模块601可以用于执行图9-图11所示的方法实施例中第二RNIC与第一RNIC的交互流程中第二RNIC执行的接收操作。在该RNIC60作为远端设备的RNIC的情况下,接收模块601可以用于接收本地设备的RNIC发送的请求或数据。本申请实施例中,在该RNIC作为远端设备的RNIC的情况下,接收模块601可以用于执行图9-图11所示的方法实施例中第一RNIC与第二RNIC的交互流程中第一RNIC执行的接收操作。

发送模块603用于向外部计算设备发送消息。在该RNIC60作为本地设备的RNIC的情况下,发送模块603可以用于向远端设备的RNIC发送请求或数据。本申请实施例中,该RNIC60作为本地设备的RNIC的情况下,发送模块603可以用于执行图9-图11所示的方法实施例中第二RNIC与第一RNIC的交互流程中第二RNIC执行的发送操作。在该RNIC60作为远端设备的RNIC的情况下,发送模块603可以用于向本地设备的RNIC发送请求或数据。本申请实施例中,该RNIC60作为远端设备的RNIC的情况下,发送模块603可以用于执行图9-图11所示的方法实施例中第二RNIC与第一RNIC的交互流程中第一RNIC执行的发送操作。

调度模块602用于与计算设备的处理器通信并进行相应的数据处理。在该RNIC60作为本地设备的RNIC的情况下,调度模块602用于与本地设备的处理器通信并进行数据处理。本申请实施例中,该RNIC60作为本地设备的RNIC的情况下,调度模块602可以用于执行图9-图11所示的方法实施例中第二RNIC执行的与第二处理器交互的操作或与调度有关的操作。在该RNIC60作为远端设备的RNIC的情况下,调度模块602用于与远端设备的处理器通信并进行数据处理。本申请实施例中,该RNIC60作为远端设备的RNIC的情况下,调度模块602可以用于执行图9-图11所示的方法实施例中第一RNIC执行的与第一处理器交互的操作或与调度有关的操作。

PM模块604用于执行与内存持久化有关的操作。本申请实施例中,对于上述第一种数据流向,PM模块604用于在接收模块601接收到RDMA写请求的情况下,判断该RDMA写请求中的第一数据是否为待持久化的数据,在确定该RDMA写请求中的第一数据为待持久化的数据的情况下,在该RDMA写请求对应的SQ中添加RDMA LSB读请求,以便调度模块603可以将该RDMA LSB读请求发送给处理器,以使处理器将缓存在外设总线链路上的数据写入非易失性存储器中,从而将第一数据写入至非易失性存储器中。本申请实施例中,对于上述第二种数据流向,PM模块604用于在接收模块601接收到RDMA写请求的情况下,判断该RDMA写请求中的第一数据是否为待持久化的数据,在确定该RDMA写请求中的第一数据为待持久化的数据的情况下,根据该RDMA写请求中的第一数据生成与RDMA接收请求对应的WQE,然后清除该WQE,再生成该RDMA接收请求对应的CQE,从而使得该RNIC60对应的处理器(即远端设备的处理器)可以根据该CQE将缓存在易失性存储介质中的第一数据写回到非易失性存储器中。

在一种可能的实现方式中,上述接收模块601、调度模块602、发送模块603以及持久化内存模块604所实现的功能可以由运算逻辑部件701、寄存器702、控制部件703以及输入输出接口704相互配合实现,如图7所示,运算逻辑部件701、寄存器702、控制部件703以及输入输出接口704可以通过一个或多个内部总线705连接。运算逻辑部件701可以用于执行运算命令,如加命令、减命令、乘命令、除命令,等等;逻辑运算部件701还可以用于获取逻辑命令,如或逻辑命令、与逻辑命令、非逻辑命令,等等;逻辑运算部件701还可以用于从控制部件703获取控制信号,根据获取到的控制信号从寄存器702中获取该控制信号对应的数据并执行相应的操作。寄存器702为一种存储空间较小的存储器,寄存器702可以用于保存各种指令;寄存器702还可以用于存储在指令执行过程中临时存放的寄存器操作数和中间或最终的操作结果;寄存器还可以用于存储逻辑运算部件701完成控制部件703请求的任务所使用的数据。控制部件703用于对寄存器中保存的指令进行译码,并发出为完成每条指令所要执行的各个操作的控制信号;控制部件703的控制方式可以有两种,一种为以微存储为核心的微程序控制方式,微程序可以保存在寄存器702中,另一种为以逻辑硬布线结构为主的硬件控制方式,控制部件703例如可以由各种与或门阵列组成。输入输出接口704用于发送或接收数据,输入输出接口704可以有多个,其可以分别用于接收处理器发送数据或发送数据给处理器,或者,用于接收外部计算设备发送的数据或发送数据给外部计算设备。

可选地,RNIC还可以包括晶体振荡器、媒体接入控制器、物理接口收发器,等等,本申请实施例不作限制。

基于前述图6和图7对应的实施例描述的RNIC,可以实现本申请实施例的数据处理方法。

在介绍本申请实施例的数据处理方法之前,为便于理解,首先对本申请实施例所涉及的一些概念进行介绍。

1、RDMA操作的概念

1)RDMA单边操作

RDMA单边操作是指本地设备上的应用访问远端设备的内存时,只有本地设备的处理器参与,不需要远端设备的处理器参与,即只有一边的处理器在工作。只要本地设备明确数据的源地址和目的地址,即可完成对远端设备的内存中的数据的读写操作。本申请实施例中,主要涉及的RDMA单边操作包括RDMA写操作(RDMA-Write)。

2)RDMA双边操作

RDMA双边操作是指本地设备上的应用访问远端设备的内存时,需要本地设备的处理器和远端设备的处理器均参与,即两个设备的处理器均在工作。本申请实施例,主要涉及的RDMA双边操作包括RDMA发送操作(RDMA-Send)和RDMA接收操作(RDMA-Receive)。如果本地设备要通过RDMA发送操作将数据传输到远端设备的内存中,远端设备必须先发起RDMA接收操作,以用于接收本地设备发起的RDMA发送操作。

2、队列的概念

本申请实施例中的队列与socket通信中的消息队列概念类似,可以理解是为了进行异步处理而设置的用于存放各种信息或数据的容器。

1)工作队列(work queue,WQ)

在RDMA技术中,当两个计算设备需要通信时,会在两个计算设备的RNIC之间建立通道(channel)连接,每条通道的首尾端点是两对队列队(queue pairs,QP)。示例性地,两台计算设备的RNIC之间的通道可以如图8所示,每对QP由发送队列(send queue,SQ)和RQ组成,SQ和RQ中管理着各种类型的消息。QP被直接映射到计算设备的应用(client)的虚拟地址空间,使得计算设备中的应用可以直接通过它访问RNIC。SQ和RQ都可以被称之为WQ,对于要发送数据的计算设备来说,WQ为SQ;对于要接收数据的计算设备来说,WQ为RQ。

计算设备中的应用可以创建工作请求(work request,WR)以利用WR通知QP中的某个WQ,WR中描述了应用的远程操作请求(如远程读操作请求、远程写操作请求等),使得计算设备的RNIC可以确定要处理调度以及执行的操作。在WQ中,WR被转换为WQE的格式,等待RNIC对其进行调度解析。例如,计算设备A的应用希望将存储于地址A的内容传输到地址B中(地址A为计算机A中的地址,地址B为计算机B中的地址),该应用则通过WR将地址A、地址B以及写指令告知计算机A的RNIC,计算机A的RNIC在SQ中添加WQE,WQE中包括该地址A、地址B以及该写指令。

计算设备的应用可以通过向该计算设备的RNIC发送RDMA请求作为WR,该计算设备的RNIC接收到该RDMA请求后,在WQ中添加该RDMA请求对应的WQE。对于发送类型的RDMA请求(如RDMA读请求、RDMA写请求、RDMA发送请求),该发送类型的RDMA请求对应的WQE被添加到SQ中,如图8所示;对于接收类型的RDMA请求(如RDMA接收请求),该接收类型的RDMA请求对应的WQE被添加到RQ中。

2)完成队列(completion queue entry,CQ)

除了QP外,RDMA技术中还有一种队列,为完成队列(completion queue entry,CQ),CQ用于存放某个操作对应的完成事件,以告知上层应用。例如,计算机A的应用希望将存储于地址A的内容传输到地址B中(地址A为计算机A中的地址,地址B为计算机B中的地址),计算机A的RNIC将地址A的内容发送给了计算机B的RNIC并确定计算机B的RNIC收到了该内容,则计算机A的RNIC生成CQE,计算机A的应用获取到该CQE后,确定将存储于地址A的内容传输到地址B这一事件完成。

接下来,介绍本申请实施例的数据处理方法。参见图9,图9是本申请实施例提供的一种数据处理方法的流程示意图,其中,第一RNIC和第一处理器分别为第一设备的RNIC和处理器,第一设备为远端设备;第二RNIC和第二处理器分别为第二设备的RNIC和处理器,第二设备为本地设备。如图所示,该方法包括:

S801,第二处理器向第二RNIC发送RDMA写持久化请求,第二RNIC接收RDMA写持久化请求,RDMA写持久化请求包括数据持久化标记。

RDMA写持久化请求可以理解为第二处理器创建的一个WR,用于描述第二处理器的远程操作请求。本申请实施例中,RDMA写持久化请求用于请求将第一数据存储至第一设备的非易失性存储器中,以完成对第一数据的内存持久化。

该RDMA写持久化请求可以包括RDMA操作指令、第一数据的源虚拟内存地址以及第一数据的目的虚拟内存地址。第一数据的源虚拟内存地址为第一数据在第二设备中的虚拟内存地址,该源虚拟内存地址对应的存储空间用于在第二设备中存储该第一数据。第一数据的目的虚拟内存地址为第一设备中的虚拟内存地址,该目的虚拟内存地址对应的存储空间用于在第一数据写入第一设备后存储该第一数据。目的虚拟内存地址为第一处理器通过虚拟内存地址注册过程注册的虚拟内存地址。举例来对源虚拟内存地址和目的虚拟内存地址进行说明,例如,第一数据被保存在第一设备的虚拟内存地址A所对应的存储空间中,第二处理器要将第一数据保存到第二设备的虚拟地址内存地址B所对应的存储空间中,则第一数据的源虚拟地址为第一设备中的虚拟内存地址A,第二数据的目的虚拟内存地址为第二设备中的虚拟内存地址B。

这里,虚拟内存地址是与计算设备的内存中的物理地址存在映射关系的逻辑存储地址,其用于在计算设备中实现程序之间的隔离以及保证程序的正常运行。在计算设备中,一个应用程序在经过编译后会形成多个子程序,这些子程序的地址通常都是从“0”开始的,子程序中的其他地址都是在相对于起始地址(即“0”)计算的,这些地址所形成的地址范围称为地址空间,地址空间中的地址为逻辑存储地址;这些地址对应到计算设备的内存的存储空间中,计算设备的内存的存储空间的地址所形成的地址范围称为内存空间,内存空间中的地址为物理地址。在多个子程序同时运行的情况下,这些子程序的地址都需要从地址“0”开始载入,由于计算机中为0的物理地址只有一个,那么有部分子程序必然无法从“0”开始载入,这样就使得地址空间内的逻辑存储地址和内存空间中的物理地址不一致,如子程序A需要从逻辑存储地址0载入,但实际载入时是从物理地址10开始载入,那么需要通过地址映射将地址空间内的逻辑存储地址转换为内存空间内与之对应的物理地址。

在RDMA技术中,第一处理器事先分配内存中的一段存储空间,该存储空间用于存储与RDMA操作有关的数据,然后通过虚拟地址地址注册过程将目标页表发送给RNIC,目标页表用于存储该存储空间对应的虚拟内存地址以及物理内存地址的对应关系,使得RNIC可以根据该目标页表确定用于存储与RDMA操作有关的数据的存储空间所对应的虚拟内存地址和物理内存地址,RNIC还可以根据该目标页表确定某一虚拟内存地址对应的物理内存地址。例如,处理器将物理地址为1001~3000的内存空间中的存储空间用于存储与RDMA操作有关的数据,其对应的虚拟内存地址为1~2000,示例性地,处理器将如表1所示的页表发送给RNIC。

表1

虚拟内存地址 物理地址
1 1001
2 1001
2000 3000

在虚拟内存地址注册过程中,处理器除了将目标页表发送给RNIC外,处理器还指定注册的地址空间的访问标记,访问标记用于表示该地址空间对应的存储空间的属性,如地址空间对应的存储空间的属性为远程可读(remote read),即该存储空间是可以读取数据的存储空间,又如地址空间对应的存储空间的属性为远程可写(remote write),即该存储空间是可以写入数据的存储空间,又如地址空间对应的存储空间的属性为远程可读写,即该存储空间是既可以读取数据的存储空间,又可以写入数据的存储空间,等等。在虚拟内存地址注册过程中,处理器通过将地址空间的起始虚拟内存地址、地址空间的长度以及地址空间的访问标记发送给RNIC,以告知RNIC各个地址空间对应的存储空间的属性以及其包含的虚拟内存地址。举例来进行说明,例如,处理器将物理地址为1001~3000的内存空间中的存储空间用于存储与RDMA操作有关的数据,其对应的虚拟内存地址为1~2000,其中,处理器将虚拟内存地址为1~500的地址空间对应的存储空间指定为可读的存储空间,将501~1000的地址空间对应的存储空间指定为可写的存储空间,将1001~1500的地址空间对应的存储空间指定为可读并且可写的存储空间,则处理器可发送如表2所示的信息给RNIC。

表2

起始虚拟内存地址 地址空间的长度 访问标记
1 500 可读
501 500 可写
1001 500 可读并且可写

在进行虚拟内存地址注册过程之后,第一设备可以将虚拟内存地址注册过程中注册的地址空间的相关信息通过RDMA发送操作发送给第二设备,以使第二设备可以获知第一设备中的用于存储与RMDA操作相关的数据的存储空间所对应的虚拟内存地址,该地址空间的相关信息包括注册的地址空间的起始虚拟内存地址、地址空间的长度以及访问标记。

本申请实施例中,数据持久化标记用于指示第一数据为待持久化的数据。根据RDMA网络的网络特性,数据持久化标记可以有以下两种可能的情况:

1)在RDMA网络中,计算设备的RNIC根据解析得到的RDMA操作指令执行相应的操作。基于这一设定,在本申请实施例的第一种可能的实现中,可以在RDMA操作指令中新增写持久化指令,通过该写持久化指令表示该第一数据是需要写入以及内存持久化的数据,即数据持久化标记为写持久化指令。

在数据持久化标记为写持久化指令的情况下,该RDMA写持久化请求可以包括写持久化指令、第一数据的源虚拟内存地址以及第一数据的目的虚拟内存地址。

2)在本申请实施例的第二种可能的实现中,该数据持久化标记也可以为第一数据对应的目的存储地址,其中,该目的存储地址对应的存储空间用于存储第一数据,该目的存储地址为第一设备中的持久化存储地址,该持久存储地址对应的存储空间用于存储待持久化的数据。

如前所述,第一设备的处理器会通过虚拟内存地址注册过程指定用于存储与RDMA操作有关的数据的存储空间所对应的地址空间以及地址空间的访问标记,并且,在进行虚拟地址注册过程之后,第一设备会将虚拟内存地址注册过程中注册的信息通过RDMA发送操作发送给第二设备。基于这一设定,可以在访问标记中增设远程写持久化标记,远程写持久化标记表示地址空间对应的存储空间用于存储待持久化的数据。那么,该目的存储地址可以为目的虚拟内存地址,该目的虚拟内存地址为第一处理器通过虚拟内存地址注册过程注册的访问标记为写持久化标记的地址空间中的逻辑存储地址。由于该目的存储地址为第一处理器通过虚拟内存地址注册过程注册的访问标记为写持久化标记的地址空间中的逻辑存储地址,访问标记为写持久化的标记的地址空间对应的存储空间用于存储待持久化的数据,则该目的虚拟内存地址对应的存储空间用于存储待持久化的数据。

在数据持久化标记为第一数据的目的虚拟内存地址的情况下,该RDMA写持久化请求可以包括写指令、第一数据的源虚拟内存地址以及第一数据的目的虚拟内存地址,该目的虚拟内存地址为为第一处理器通过虚拟内存地址注册过程注册的访问标记为写持久化标记的地址空间中的逻辑存储地址。

S802,第二RNIC根据RDMA写持久化请求生成RDMA写请求,RDMA写请求包括第一数据和数据持久化标记。

在一种具体的实现方式中,第二RNIC可以在SQ中创建该RDMA写持久化请求对应的WQE,该RDMA写持久化请求对应的WQE可以包括第一数据的源虚拟内存地址、RDMA操作指令以及第一数据的目的虚拟内存地址;然后在调度到该RDMA写持久化请求对应的WQE时,根据第一数据的源虚拟内存地址从该源虚拟内存地址中获取第一数据,将该第一数据、第一数据的目的虚拟内存地址以及该RDMA操作指令封装进RDMA传输报文中以形成RDMA写请求,其中,RDMA传输报文指在第一RNIC和第二RNIC之间传输的报文。其中,第二RNIC根据RDMA写持久化请求生成RDMA写请求这一操作具体可以由第二RNIC的调度模块执行。

如果数据持久化标记为写持久化指令,则该RDMA写请求可以包括写持久化指令、第一数据的目的虚拟内存地址以及第一数据,该RDMA写请求也可以称之为写持久化请求;如果数据持久化标记为第一数据的目的虚拟内存地址,则该RDMA写请求可以包括写指令、第一数据的目的虚拟内存地址以及第一数据,该第一数据的目的虚拟内存地址为第一处理器通过虚拟内存地址注册的持久化虚拟内存地址。

可选地,该RDMA写请求还可以包括第一数据的序列号、第一设备的QP序号。第一数据数据包的序列号用于在第一设备与第二设备的传输过程中唯一地标识该第一数据,便于检测丢失或重复的数据包;远端设备的QP序号用于标识本地设备和远端设备之间的唯一的通道。

S803,第二RNIC将RDMA写请求发送给第一RNIC,第一RNIC接收RDMA写请求。

本申请实施例中,第二RNIC可以基于无限带宽(InfiniBand,IB)协议将RDMA写请求发送给第一RNIC;第二RNIC也可以基于融合以太网远程直接内存访问(RDMAoverConverged Ethernet,RoCE)协议将RDMA写请求发送给第一RNIC;第二RNIC还可以基于传输控制协议的远程直接内存访问(iWARP)协议将RDMA写请求发送给第一RNIC。

具体实现中,第二RNIC通过第二RNIC的发送模块将RDMA写请求发送给第一RNIC,第一RNIC通过第一RNIC的接收模块接收该RDMA写请求。

第一RNIC的接收模块在接收到该RDMA写请求后,将该RDMA写请求放入对应于第一RNIC的RQ中,等待第一RNIC的调度模块对其进行调度。在第一RNIC的调度模块调度到该RDMA写请求的情况下,第一RNIC的调度模块对该RDMA写请求进行解析得到第一数据、第一数据的目的虚拟内存地址以及RDMA操作指令。

在数据持久化标记为写持久化指令的情况下,第一RNIC的调度模块可以将写持久化指令发送给第一RNIC的PM模块,第一RNIC的PM模块根据写持久化指令确定第一数据为待持久化的数据,执行步骤S805;第一RNIC的调度模块根据第一数据的目的虚拟内存地址以及写持久化指令,确定需要将第一数据写入到该目的虚拟内存地址中,第一RNIC的调度模块执行步骤S804。

在数据持久化标记为第一数据的目的虚拟内存地址的情况下,第一RNIC的调度模块可以将第一数据的目的虚拟内存地址发送给PM模块,由于第一数据的目的虚拟内存地址为第一处理器通过虚拟内存地址注册过程注册的访问标记为远程写持久标记的地址空间中的逻辑存储地址,第一RNIC的PM模块确定第一数据为待持久化的数据,执行步骤S805;第一RNIC的调度模块根据第一数据的目的虚内存地址以及写指令,确定需要将第一数据写入到该目的虚拟内存地址中,第一RNIC的调度模块执行步骤S804。

S804,第一RNIC向第一处理器发送DMA写请求,第一处理器接收DMA写请求,DMA写请求包括第一数据。

第一RNIC向第一处理器发送DMA写请求这一操作由可以第一RNIC的调度模块执行。

这里,第一RNIC向第一处理器发送DMA写请求即为以DMA的方式将第一数据写入到第一设备的非易失性存储器中。

S805,第一RNIC指示第一处理器将第一数据保存到第一设备的非易失性存储器中。

从图9所示的步骤可看出,远端设备的RNIC接收到根据RDMA写请求之后,根据该RDMA写请求中的数据持久化标记确定RDMA写请求中的数据是要进行内存持久化的数据,直接指示第一处理将第一数据保存到第一设备的非易失性存储器中,这相当于将RDMA写请求和RDMA持久化请求合并在一个请求中,省去了远端设备再发起RDMA持久化请求的操作,由于每一次请求均需要占用一定的网络带宽,省去远端设备发起RDMA持久化请求的操作就节省一次请求占用的带宽,减轻了RDMA网络的负载;另外,由于将RDMA写请求和RDMA持久化请求合并在一个请求中,相当于将数据的写操作和内存持久化操作变成两个需要被连续执行的操作,保证数据写入远端设备后可以被保存到远端设备的非易失性存储器中,避免出现数据不一致的问题。

由前述内容可知,要将RNIC接收到的数据写入至该RNIC对应的计算设备的非易失性存储器中,数据要经过该RNIC对应的处理器,由于总线被占用等原因,数据可能会被暂时缓存在处理器的各级缓存中。由于处理器架构特性的不同,数据在处理器中存在两种数据流向,即第一数据在第一处理器中有两种不同的数据流向。本申请实施例中,结合图1所述的不同的数据流向,第一RNIC指示第一处理器将第一数据保存到第一设备的非易失性存储器中所采用的方式不同,下面对两种不同的数据流向对应的数据处理方法的流程进行具体介绍。参见图10-图11。

图10是本申请实施例提供的另一种数据处理方法的流程示意图,该流程适用于数据流向为上述第一种数据流向的情况,其中,第一RNIC和第一处理器分别为第一设备的RNIC和处理器,第一设备为远端设备;第二RNIC和第二处理器分别为第二设备的RNIC和处理器,第二设备为本地设备。如图所示,该方法包括以下流程:

S901,第二处理器向第二RNIC发送RDMA写持久化请求,第二RNIC接收RDMA写持久化请求,RDMA写持久化请求包括数据持久化标记。

S902,第二RNIC根据RDMA写持久化请求生成RDMA写请求,RDMA写请求包括第一数据和数据持久化标记。

S903,第二RNIC将RDMA写请求发送给第一RNIC,第一RNIC接收RDMA写请求。

S904,第一RNIC向第一处理器发送DMA写请求,第一处理器接收DMA写请求,DMA写请求包括第一数据。

这里,步骤S901~S904的实现方式可参考上述步骤S801~S804的描述,此处不再赘述。其中,第一RNIC的PM模块根据持久化标记确定第一数据为待持久化的数据,第一RNIC的PM模块执行步骤S905。

S905,第一RNIC在与第二RNIC对应的RQ中添加DMA LSB读请求。

这里,第一RNIC的PM模块可根据RDMA写请求中第一设备的QP确定与第二RNIC对应的RQ,然后在该RQ中添加DMA LSB读请求。DMA LSB读请求为一次DMA读操作对应的请求,该DMA LSB读请求对应的虚拟内存地址可以为第一处理器通过虚拟内存地址注册过程注册的任意一段地址空间中的逻辑存储地址。其中,该DMA LSB读请求对应的虚拟内存地址指该DMA LSB读请求对应的DMA LSB读操作要读取的存储空间所对应的虚拟内存地址。

在获取到该DAM LSB读请求之后,第一RNIC的调度模块执行步骤S906。

S906,第一RNIC向第一处理器发送DMA LSB读请求,第一处理器接收DMA LSB读请求。

这里,如果第一处理器的架构为数据在处理器中的流向与IIO中的DDIO功能和RNIC发送给IIO的报文有关的处理器架构,第一RNIC在DMA LSB读请求中将NS标记置为1。

通过向第一处理器发起DMA LSB读请求,可以使第一处理器在DMA LSB读请求之前的所有写操作完成,从而使得还未被写入至非易失性存储器中的所有数据写入非易失性存储器中,保证在发起DMA LSB读请求之前通过DMA写请求写入的第一数据能够被写入非易失性存储器中,完成了对第一数据的内存持久化。

进一步地,在完成对第一数据进行内存持久化之后,第一RNIC可通过向第二RNIC发送确认消息以告知第一数据的内存持久化完成。图10所示的方法还可以包括:

S907,第一RNIC向第二RNIC发送第一数据对应的持久化确认消息,第二RNIC接收第一数据对应的持久化确认消息。

第一数据对应的持久化确认消息包括第二PSN,第二PSN为第一数据的序列号。

具体实现中,第一RNIC通过第一RNIC的发送模块将第一数据对应的持久化确认消息发送给第二RNIC,第二RNIC通过第二RNIC的接收模块接收该第一数据对应的持久化确认消息。

第一RNIC的调度模块从RDMA写请求中获取第一数据的序列号,作为第二PSN,将第二PSN封装进RDMA传输报文中以形成确认消息,并通过第一RNIC的发送模块发送给第二RNIC。第二RNIC的接收模块在接收到该确认消息后,将该确认消息发送给第二RNIC的调度模块,第二RNIC的调度模块解析该确认消息得到第二PSN,根据第二PSN确定该确认消息为第一数据对应的持久化确认消息。

S908,第二RNIC生成RDMA写持久化请求对应的CQE。

这里,第二RNIC的调度模块根据第一数据对应的持久化确认消息确定第一数据已经存储至第一设备的非易失性存储器中,第二RNIC的调度模块根据第二PSN确定该第一数据对应的WQE,获取该WQE中的内容生成RDMA写持久化请求对应的CQE,该RDMA写持久化请求对应的CQE可以包括第一数据的源虚拟内存地址和/或第二PSN和/或目的虚拟内存地址。

S909,第二处理器获取RDMA写持久化请求对应的CQE,确定第一数据已经存储至第一设备的非易失性存储器中。

这里,第二处理器可根据CQE中的内容确定第一数据已经存储至第一设备的非易失性存储器中。例如,该CQE的内容为第一数据的源虚拟地址,第二处理器确定该源虚拟内存地址中存储的数据已经存储至第一设备的非易失性存储器中,即第一数据已经存储至第一设备的非易失性存储器中。第一数据被存储至第一设备的非易失性存储器中后,第一数据的内存持久化完成。

从图10所示的步骤可看出,在本申请实施例中,对于数据不经过处理器的LLC的情况,本申请实施例只需要本地设备发起一次RDMA写请求即可将该RDMA写请求中的数据写入至远端设备的非易失性存储器中,与图2所示的流程相比,省去了一次单边操作,减小了本地设备的处理器的负载,同时,节省了发起RDMA持久化请求所占用的带宽,减轻了网络负载。

图11是本申请实施例提供的另一种数据处理方法的流程示意图,该流程适用于数据流向为上述第二种数据流向的情况,其中,第一RNIC和第一处理器分别为第一设备的RNIC和处理器,第一设备为远端设备;第二RNIC和第二处理器分别为第二设备的RNIC和处理器,第二设备为本地设备。如图所示,该方法包括以下流程:

S1001,第二处理器向第二RNIC发送RDMA写持久化请求,第二RNIC接收RDMA写持久化请求,RDMA写持久化请求包括数据持久化标记。

S1002,第二RNIC根据RDMA写持久化请求生成RDMA写请求,RDMA写请求包括第一数据和数据持久化标记。

S1003,第二RNIC将RDMA写请求发送给第一RNIC,第一RNIC接收RDMA写请求。

S1004,第一RNIC向第一处理器发送DMA写请求,第一处理器接收DMA写请求,DMA写请求包括第一数据。

这里,步骤S1001~S1004的实现方式可参考上述步骤S801~804的描述,此处不再赘述。其中,第一RNIC的PM模块根据数据持久化标记确定第一数据为待持久的数据后,执行步骤S1006~S1007。

S1005,第一处理器向第一RNIC发送第一RDMA接收请求,第一RNIC接收第一RDMA接收请求。

由于数据在第一处理器中要经过LLC,需要第一处理器将LLC中的数据写回到非易失性存储器中,即需要第一处理器的参与,而第一处理器为远端设备的处理器,则将LLC中的数据写回到非易失性存储器中要涉及RDMA双边操作。对于RDMA双边操作,远端设备必须先发起RDMA接收操作,则第一处理器向第二RNIC发送第一RDMA接收请求,用于接收第二设备发送的RDMA发送请求。

S1006,第二RNIC根据第一数据生成第一RDMA接收请求对应的WQE。

在一种可能的实现方式中,该第一RDMA接收请求对应的WQE可包括第一数据的目的虚拟内存地址;在另一种可能的实现方式中,该第一RDMA接收请求对应的CQE可包括第一数据的序列号;在又一种可能的实现方式中,该第一RDMA接收请求对应的CQE可包括第一数据的目的虚拟内存地址和第一数据的序列号。

S1007,第二RNIC清除第一RDMA接收请求对应的WQE,并生成第一RDMA接收请求对应的CQE。

在一种可能的实现方式中,第二RNIC的PM模块可从该第一RDMA接收请求对应的WQE中获取该WQE的内容,然后根据获取到的WQE的内容生成第一RDMA接收请求对应的CQE,该第一RDMA接收请求对应的CQE可包括第一数据的目的虚拟内存地址和/或第一数据的序列号。

在步骤S1006~S1007中,第二RNIC的PM模块执行的操作代替了第二设备发起的RDMA发送请求的操作,其实现的效果与第二设备通过发起RDMA发送请求以指示将第一数据存储至第一设备的非易失性存储器中的效果是一样的。

S1008,第一处理器获取第一RDMA接收请求对应的CQE,将第一数据存储至第一设备的非易失性存储器中。

在第一RDMA接收请求对应的CQE包括第一数据的目的虚拟内存地址的情况下,第一处理器可以根据该第一数据的目的虚拟内存地址在LLC中找到该第一数据,从而将第一数据存储至第一设备的非易失性存储器中;在第一RDMA接收请求对应的CQE包括第一数据的序列号的情况下,第一处理器可以根据该第一数据的序列号在LLC中找到该第一数据,从而将第一数据存储至第一设备的非易失性存储器中。

在可选的实施方式中,第一RNIC在接收到第一数据后,可向第二RNIC发送确认消息以告知第二RNIC接收到第一数据,则在步骤S1003之后还包括:

S1009,第一RNIC向第二RNIC发送第一数据对应的接收确认消息,第二RNIC接收第一数据对应的接收确认消息。

这里,第一数据对应的接收确认消息包括第一PSN,第一PSN为第一数据的序列号,第一数据对应的接收确认消息用于指示第一RNIC接收到该第一数据。

具体实现中,第一RNIC通过第一RNIC的发送模块将第一数据对应的接收确认消息发送给第二RNIC,第二RNIC通过第二RNIC的接收模块接收该第一数据对应的接收确认消息。

第一RNIC的调度模块从RDMA写请求中获取第一数据的序列号,作为第一PSN,将第一PSN封装进RDMA传输报文中以形成确认消息,并通过第一RNIC的发送模块发送给第二RNIC。第二RNIC的接收模块在接收到该确认消息后,将该确认消息发送给第二RNIC的调度模块,第二RNIC的调度模块解析该确认消息得到第一PSN,第二RNIC的调度模块根据第一PSN确定该确认消息为第一数据对应的接收确认消息。

S1010,第二RNIC生成RDMA写持久化请求对应的CQE。

S1011,第二处理器获取RDMA写持久化请求对应的CQE,确定第一数据传输完成。

步骤S1010~S1011的具体实现方式可参考步骤S908~S909的描述,此处不不再赘述。

在前述步骤中,由第一RNIC代替第二设备发起RDMA发送请求操作,则第二处理器可以在确定第一数据传输完成之后,发起RDMA接收请求,以接收第一处理器发起的RDMA发送请求,在步骤S1011之后还可以包括:

S1012,第二处理器向第二RNIC发起第二RDMA接收请求,第二RNIC接收第二RDMA接收请求。

S1013,第二RNIC生成第二RDMA接收请求对应的WQE。

在可选的实施方式中,第一处理器在将第一数据存储至第一设备的非易失性存储器之后,第一RNIC可通过向第二RNIC发送确认消息以告知第一数据的内存持久化完成,则在步骤S1008之后还可以包括:

S1014,第一处理器向第一RNIC发送RDMA发送请求,第一RNIC接收RDMA发送请求。

这里,RDMA发送请求用于指示第一数据已经存储至第一设备的非易失性存储器中,该第一RDMA发送请求可包括第一数据的序列号。

S1015,第一RNIC生成RDMA发送请求对应的WQE。

S1016,第一RNIC向第二RNIC发送第一数据对应的持久化确认消息,第二RNIC接收第一数据对应的持久化确认消息。

这里,第一数据对应的持久化确认消息包括第二PSN,第二PSN为第一数据的序列号。

具体实现中,第一RNIC通过第一RNIC的发送模块将第一数据对应的持久化确认消息发送给第二RNIC,第二RNIC通过第二RNIC的接收模块接收该第一数据对应的持久化确认消息。

第一RNIC的调度模块从第一RDMA发送请求中获取第一数据包的序列号,作为第二PSN,然后将第二PSN封装进RDMA传输报文中以形成确认消息,并通过第一RNIC的发送模块发送给第二RNIC。第二RNIC的接收模块在接收到该确认消息后,将该确认消息发送给第二RNIC的调度模块,第二RNIC的调度模块解析该确认消息得到第二PSN,第二RNIC的调度模块确定该确认消息为第一数据对应的持久化确认消息。

在接收到第一RNIC发送的第一数据对应的持久化确认消息的情况下,第二RNIC执行步骤S1018。

S1017,第一RNIC清除RDMA发送请求对应的WQE,并生成RDMA发送请求对应的CQE。

S1018,第二RNIC生成第二RDMA接收请求对应的CQE。

S1019,第二处理器获取第二RDMA接收请求对应的CQE,确定第一数据已经存储至第一设备的非易失性存储器中。

第一数据被存储至第一设备的非易失性存储器中后,第一数据的内存持久化完成。

从图11所示的步骤可看出,在本申请实施例中,对于数据经过远端设备的处理器的LLC的情况,本地设备的处理器在发送单边操作之后只需要再发送一次双边操作就可以将数据保存至远端设备的非易失性存储器中,与图3所示的流程相比,省去了一次双边操作,减小了本地设备的处理器的负载,同时,节省了发起RDMA持久化请求所占用的带宽,减轻了网络负载。

在上述图10与图11所示的过程中,涉及的是将一个数据保存到第一设备的非易失性存储器的过程,上述方案还可以用于将多个数据保存到第一设备非易失性存储器中。RDMA传输协议中规定,本地设备的RNIC需在确定上一个数据的传输过程已经完成才会将下一个数据发送给远端设备的RNIC,即,本地设备的RNIC在接收到远端设备的RNIC发送的针对上一个数据的ACK报文才会向远端设备发送下一个数据。在一种可能的实现方式中,可以使两个数据中的前一个数据的内存持久化过程和后一个数据的写入过程并行进行,以提高传输效率。

使两个数据中的前一个数据的内存持久化过程和后一个数据的写入过程并行进行的具体实现方式可以为:第一RNIC在接收到该RDMA写请求之后,向第二RNIC发送第二确认消息,第二确认消息中携带第一数据的PSN;第二RNIC接收到该第二确认消息后,由于是第一次接收到PSN为第一数据的PSN的确认消息,第二RNIC根据该第一数据的PSN确定接收到第一数据对应的接收确认消息,进而确定第一RNIC接收到第一数据,第二RNIC向第一RNIC发送第一数据的下一个数据所对应的RDMA写请求;另外,第二RNIC缓存该第二确认消息,在接收到PSN为第一数据的PSN的第一确认消息的情况下,第二RNIC根据该第一确认消息中的第一数据的PSN以及之前缓存的第二确认消息中的第一数据的PSN确定是第二次接收到PSN为第一数据的PSN的确认消息,第二RNIC确定接收到第一数据对应的持久化确认,执行上述步骤S908或S1018。

在RDMA传输协议中,确认消息仅用于表示确认的意思,而该确认消息具体用于表示对什么请求的确认需要根据在接收到确认消息之前所发送的请求或者接收到的确认消息的顺序进行判断,由于写入操作是发生在内存持久化操作之前,那么第一次接收到的携带第一数据的序列号的确认消息必然是第一数据的接收确认消息,在接收到第一数据的接收确认消息后,通过缓存该接收确认消息,则第二设备的RNIC不需要等到接收到第一数据的持久化确认消息就可以向第一设备RNIC发送第一数据的下一个数据,通过比较接收到确认消息中的PSN的方式可以使一个数据的内存持久化和该数据的下一个数据的写入操作能够并行进行,提高将多个数据保存到远端设备的非易失性存储器中的效率,减小时延。

上述方法可以在计算设备的RNIC和处理器上实现,为了便于更好地实施本申请实施例的上述方法,本申请实施例还提供了相应的计算设备。

参见图12,图12是本申请实施例提供的一种计算设备的组成结构示意图,该计算设备130包括RNIC131、处理器132和非易失性存储器133。其中,RNIC131的结构可以如图6所示,处理器132的结构可以如图1中的处理器102所示。非易失性存储器133可以为SCM。

RNIC131用于执行上述图9-图11所示的方法实施例中第一RNIC所执行的步骤,处理器132用于执行上述图9-图11所示的方法实施例中第一处理器所执行的步骤。

参见图13,图13是本申请实施例提供的一种计算设备的组成结构示意图,该计算设备140包括RNIC141,处理器142和非易失性存储器143。其中,RNIC141的结构可以如图6所示,处理器142的结构可以如图1中的处理器102所示。非易失性存储器133包括可以为SCM、NVRAM、NVDIMM。

RNIC141用于执行上述图9-图11所示的方法实施例中第二RNIC所执行的步骤,处理器142用于执行上述图9-图11所示的方法实施例中第二处理器所执行的步骤。

本申请实施例还提供一种处理器,该处理器的结构可以如图1中的处理器所示,该处理器用于执行上述图9-图11所示的方法实施例中第二处理器所执行的步骤。

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

需说明,本申请实施例所涉及的第一、第二、第三、第四以及各种数字编号仅为描述方便进行的区分,并不用来限制本申请实施例的范围。

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

37页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:转换板卡和硬盘接口装置

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!