数据校验的方法、装置以及网卡与流程

文档序号:13876279阅读:374来源:国知局
数据校验的方法、装置以及网卡与流程

本申请涉及存储领域,并且更具体地,涉及数据校验的方法、装置以及网卡。



背景技术:

随着在网络上传输的nvme(non-volatilememoryexpressoverfabric,nvmf)技术的发展,远程直接数据存取(remotedirectmemoryaccess,rdma)在存储领域的低时延技术中将发挥越来越重要的作用。rdma是为了解决网络传输中服务器端数据处理的延迟而产生的数据传输技术。rdma通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响。

基于rdma的上层协议(upperlevelprotocol,ulp)业务通常会将访问存储空间的输入输出io业务分解成rdmasend、rdmaread操作和rdmawrite操作,其中rdmasend用于传输io控制命令,rdmaread和rdmawrite用于传输io数据(即,待传输的目标数据)。

在第一设备与第二设备之间传输目标数据的过程中,第二设备中可以实现rdma功能的网络适配器(rdmaenablenetworkinterfacecontroller,rnic)会将需要传输的目标数据封装成至少一个rdma报文,并将上述至少一个rdma报文通过rdma消息发送至第一设备的rnic,第一设备的rnic在接收到上述至少一个rdma报文中的最后一个rdma报文后,第一设备的rnic直接向第二设备的rnic发送ack。

然而,第一设备的rnic直接向第二设备的rnic发送的确认字符(acknowledgement,ack)仅能表示第一设备接收到最后一个rdma报文,而第二设备无法通过第一设备发送的ack确定rdma报文中的目标数据是否被存储到了第一设备的内存中。



技术实现要素:

本申请提供一种数据校验的方法、装置以及网卡,在一定程度上可以验证目标数据中的至少部分是否被存入第一设备的内存中,有利于提高第二设备对目标数据在第一设备中的存储结果的可信度。

第一方面,提供一种数据校验的方法,包括:第一设备的第一远程直接数据存取网络接口卡rnic通过第二设备的第二rnic,从所述第二设备的第二内存中获取第一数据,所述第一数据为待传输的目标数据中的至少部分数据;所述第一rnic将所述第一数据缓存在所述第一rnic的缓存中;在所述第一rnic将所述目标数据存储到所述第一设备的第一内存中之后,所述第一rnic从所述第一内存中读取所述目标数据中的第二数据,所述第二数据和所述第一数据为所述目标数据中位置相同的数据;若所述第一rnic确定所述第一数据和所述第二数据相同,所述第一rnic向所述第二rnic发送ack。

本申请实施例中,第一rnic通过确定第一数据和第二数据是否相同,对存储在第一内存中的数据进行校验,确定待传输的目标数据中第一数据被正确存储到第一内存中,并通过ack通知第二rnic,相对于现有技术中,第一rnic在接收到最后一个rdma报文之后直接向第二rnic发送ack的方式而言,有利于提高第二设备对目标数据在第一设备中的存储结果的可信度,也就是说增强了第一设备向第二设备发送的ack的可信度。上述第一设备向第二设备发送的ack还可以用于指示目标数据中的第一数据被正确存储在第一内存中,有利于提高上层业务应用对rdma的直接数据存取(directmemoryaccess,dma)结果的信任度。

进一步地,当上述第一数据为部分目标数据时,也就是说,仅验证一部分目标数据是否被存入第一内存中,对第一rnic中缓存的容量的要求较低,在一定程度上可以节约缓存的成本。

若上述第一数据是目标数据的全部数据时,相当于对目标数据中的全部数据进行了验证,有利于确定目标数据是否全部被正确存储第一内存中,相对于只验证部分目标数据的方案而言,进一步提高了ack的可信度。

可选地,所述ack用于指示所述第一数据和所述第二数据相同,也就是说,上述第一数据被存储在第一内存中。

可选地,上述第一数据可以是以目标数据在第二设备的第二内存中对应的内存地址的末地址为起点,向所述目标数据在第二设备的第二内存中对应的内存地址的首地址的方向,读取预设的内存地址长度后得到的数据,相应地,上述第二数据也可以是以目标数据在第一设备的第一内存中对应的内存地址的末地址为起点,向所述目标数据在第一设备的第一内存中对应的内存地址的首地址的方向,读取预设的内存地址长度后得到的数据。

通过以存储目标数据的内存地址的末地址到存储目标数据的内存地址的首地址的方向,读取预设内存地址长度的数据作为被验证的数据(第二数据),第一rnic无需记录存储目标数据的内存地址的首地址,有利于降低第一rnic实现方案的复杂度。

结合第一方面,在第一方面的一种可能的实现方式中,在所述第一rnic将所述目标数据存储到所述第一内存的过程中,且在所述第一rnic将所述目标数据中的第一数据存储到所述第一内存中之前,所述方法还包括:所述第一rnic对所述第一数据进行数据处理得到处理后的第一数据,所述处理后的第一数据与所述第一数据不同;所述第一rnic将所述处理后的第一数据存储在所述第一内存中,所述第一内存中存储所述处理后的第一数据的内存地址与所述第一内存中存储所述第一数据的内存地址相同。

因此,为了避免在第一数据存储到第一内存中之前,第一内存有可能存储了与第一数据相同的数据的特殊情况,本申请实施例通过对第一数据进行数据处理,并将处理后的数据存入第一内存中,以确保在第一数据存储到第一内存中之前,第一内存中存储的数据一定与第一数据不同,此时再结合数据顺序存储的存储机制,可以确定第二内存中内存地址位于第一数据的内存地址之前的数据被存储到第一内存中,有利于进一步提高第二设备对目标数据在第一设备中的存储结果的可信度。

结合第一方面,在第一方面的一种可能的实现方式中,所述目标数据承载于至少一个远程直接数据存取rdma报文中,所述至少一个rdma报文包括第一rdma报文,所述第一rdma报文为传输所述至少一个rdma报文的过程中的最后一个rdma报文,所述第一设备的第一远程直接数据存取网络接口卡rnic通过第二设备的第二rnic,从所述第二设备的第二内存中获取第一数据,包括:所述第一rnic接收所述第二rnic发送的所述第一rdma报文,所述第一rdma报文中承载所述第一数据。

因此,本申请实施例基于上述rdma报文的顺序存储机制,通过对最后一个rdma报文中的数据进行验证,可以进一步确定最后一个rdma报文以及在最后一个rdma报文之前传输的rdma报文是否被存入第一内存中,在一定程度上,简化了数据校验的复杂度,还有利于降低实施本申请实施例的方案对于缓存容量的需求。

结合第一方面,在第一方面的一种可能的实现方式中,所述目标数据承载于多个rdma报文中,所述多个rdma报文包括第二rdma报文和至少一个第三rdma报文,所述第二rdma报文为传输所述多个rdma报文的过程中的最后一个rdma报文,所述至少一个第三rdma报文为传输所述多个rdma报文的过程中传输所述最后一个rdma报文之前的报文,所述第一设备的第一远程直接数据存取网络接口卡rnic通过第二设备的第二rnic,从所述第二设备的第二内存中获取第一数据,包括:所述第一rnic接收所述第二rnic发送的所述第二rdma报文和所述至少一个第三rdma报文,所述第二rdma报文中承载的数据和所述至少一个第三rdma报文中承载的数据组成所述第一数据。

结合第一方面,在第一方面的一种可能的实现方式中,所述至少一个第三rdma报文为一个rdma报文,所述第三rdma报文为传输所述多个rdma报文的过程中传输所述最后一个rdma报文的前一个rdma报文。

本申请实施例中,通过对最后一个rdma报文以及最后一个rdma报文的前一个rdma报文中的数据进行验证,相对于随机对目标数据中的任意一段数据进行验证的方案而言,有利于降低第一rnic进行数据校验的复杂度。

第二方面,提供了一种数据校验的装置,所述数据校验的装置包括用于执行第一方面或第一方面任一种可能实现方式中的各个模块。

第三方面,提供了一种网卡,所述网卡设置在第一设备中,所述网卡包括处理器、存储器以及收发器,所述存储器存储有程序指令,所述处理器运行所述程序指令以执行以下步骤:控制所述收发器通过第二设备的第二网卡,从所述第二设备的第二内存中获取第一数据,所述第一数据为待传输的目标数据中的至少部分数据;将所述第一数据缓存在所述网卡的缓存中;将所述目标数据存储到所述第一设备的第一内存中之后,从所述第一内存中读取所述目标数据中的第二数据,所述第二数据和所述第一数据为所述目标数据中位置相同的数据;若确定所述第一数据和所述第二数据相同,控制所述收发器向所述第二rnic发送确认字符ack。

第四方面,提供了一种芯片,包括收发器、处理器和存储器。该处理器用于控制收发器收发信号,该存储器用于存储计算机程序,该处理器用于从存储器中调用并运行该计算机程序,使得该数据校验的装置执行第一方面中的方法。

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

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

本申请实施例中,第一rnic通过确定第一数据和第二数据是否相同,对存储在第一内存中的数据进行校验,确定待传输的目标数据中第一数据被正确存储到第一内存中,并通过ack通知第二rnic,有利于提高第二设备对目标数据在第一设备中的存储结果的可信度,也就是说增强了第一设备向第二设备发送的ack的可信度。

附图说明

图1是本申请实施例的传输数据的装置的示意性框图。

图2是基于rdma的io读过程的方法的示意性流程图。

图3是基于rdma的io写过程的方法的示意性流程图。

图4是本申请实施例的数据校验的方法的示意性流程图。

图5是本申请实施例中基于io读过程的数据校验的方法的示意性流程图。

图6是本申请实施例中基于io写过程的数据校验的方法的示意性流程图。

图7是本申请实施例的数据校验的装置的示意性框图。

图8是本申请另一实施例的网卡的示意性框图。

具体实施方式

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

为了便于理解本申请实施例的方法,先结合图1介绍下本申请实施例的传输数据的装置的示意性结构图。

图1是本申请实施例的传输数据的装置的示意性框图。图1所示的传输数据的装置100可以包括:内存110、中央处理器120、芯片组130和rnic140。其中,内存110、处理器120、芯片组130和rnic140通过内部连接通路相连。

内存110,用于存储数据和指令。

处理器120,用于解释内存110中存储的指令以及处理内存110中存储的数据,是上述数据校验的装置的控制核心和计算核心。

芯片组(chipset)130,用于与处理器120协同工作,解释内存110存储的指令或处理内存110中的数据。

rnic140,用于将数据校验装置接入网络,与接入该网络的其他设备进行通信。

下文基于图1所示的装置结合图2和图3详细描述传统的数据传输方法。应理解,图1所示的装置可以是图2和图3中所示的发起数据io过程的发起端,图1所示的装置还可以是图2和图3所示的被发起端写入数据或读取数据的目标端。

需要说明的是,图2和图3中的发起端和目标端可以是存储系统中的服务器、存储控制器、或存储设备等,本申请对上述发起端和目标端的具体形式不做限定。

图2是基于rdma的io读过程的方法的示意性流程图。图2所示的方法包括步骤210-280。

210,发起端(initiate,ini)中基于rdma的ulp业务发起io读请求(ioread)。

220,发起端根据io读请求,生成rdma发送(rdmasend)命令。

具体地,上述rdmasend命令包括io读请求,以及发起端的第一目标缓存的描述信息,其中第一目标缓存用于存储通过io读请求读取的目标数据。上述第一目标缓存的描述信息可以是第一目标缓存的主键(key),第一目标缓存空间的虚拟地址(virtualaddress,va),第一目标缓存空间的长度(length)等信息。

230,发起端向目标端(target,tgt)发送rdmasend命令。

具体地,目标端从rdmasend命令中解析io读请求,并提取第一目标缓存的描述信息。

240,目标端根据io读请求以及第一目标缓存的描述信息,从目标端的缓存中确定第二目标缓存,第二目标缓存用于缓存通过io读请求从目标端的内存中读取的数据。

250,目标端根据io读请求,将目标数据从目标端的内存中读到目标端的第二目标缓存中。

例如,目标端可以根据io读请求中携带的目标数据的存储地址,确定目标数据在目标端的内存中的存储地址,从而将该内存中的存储地址对应的目标数据从目标端的内存中读到目标端的第二目标缓存中。

260,目标端的rnic将第二目标缓存中的目标数据封装成至少一个rdma报文,并通过rdma写(write)命令将rdma报文发送至发起端的rnic。

270,发起端的rnic接收到至少一个rdma报文中的最后一个rdma报文后,发起端的rnic向目标端的rnic发送ack。

280,目标端的rnic通过rdmasend向发起端的rnic发送io响应(response)。

具体地,发起端的rnic接收到io响应后,发起端和目标端之间的数据传输的流程结束。

图3是基于rdma的io写过程的方法的示意性流程图。图3所示的方法包括步骤310-390。

310,发起端(initiate,ini)中基于rdma的ulp业务发起io写请求(iowrite)。

320,发起端根据io写请求,生成rdma发送(send)命令。

具体地,上述rdmasend命令包括io写请求,以及发起端的第一目标缓存的描述信息,其中第一目标缓存用于存储准备通过io写请求向目标端写入的目标数据。上述第一目标缓存的描述信息可以是第一目标缓存的主键(key),第一目标缓存的虚拟地址(virtualaddress,va),第一目标缓存的长度(length)等信息。

330,发起端向目标端发送rdmasend命令。

具体地,目标端从rdmasend命令中解析io写请求,并提取发起端中第一目标缓存的描述信息。

340,目标端根据接收到的io写请求以及第一目标缓存的描述信息,从目标端的缓存中确定第二目标缓存,该第二目标缓存用于缓存发起端通过io写请求写入目标端的目标数据。

350,目标端向发起端发送rdma写请求(readrequest)。

360,发起端从发起端的内存中将准备通过io写请求传输的目标数据读到第一目标缓存中。

370,发起端的rnic将第一目标缓存中的目标数据封装成至少一个rdma报文,并通过rdma读响应(readresponse)命令将rdma报文发送至目标端的rnic。

380,目标端的rnic接收到至少一个rdma报文中的最后一个rdma报文后,目标端的rnic向发起端的rnic发送ack。

390,目标端的rnic通过rdmasend向发起端的rnic发送io响应(response)。

具体地,发起端的rnic接收到io响应后,发起端和目标端之间的数据传输的流程结束。

为了便于描述,下文中将接收rdma报文的设备称为“第一设备”,将发送rdma报文的设备称为“第二设备”,例如,在io写过程中第一设备可以是上文中的目标端,第二设备可以是上文中的发起端;在io读过程中第一设备可以是上文中的发起端,第二设备可以是上文中的目标端。

从图2和图3所示的基于rdma的io请求(写请求或读请求)进行数据传输的过程中,第一设备的rnic在接收到第二设备的rnic发送的承载目标数据的最后一个rdma报文后,会直接向第二设备的rnic发送ack。然而,第二设备通过ack仅能确定第一设备的rnic接收到承载目标数据的最后一个rdma报文,无法确定第一设备的rnic是否将目标数据存储到第一设备的内存中。

为了解决上述问题,下文结合图4至图8,详细描述本申请实施例的数据校验的方法和装置。

图4是本申请实施例的数据校验的方法的示意性流程图。图4所示的方法包括:

410,第一设备的第一远程直接数据存取网络接口卡rnic,通过第二设备的第二rnic,从所述第二设备的第二内存中获取第一数据,所述第一数据为待传输的目标数据中的至少部分数据。

具体地,上述rnic可以是能够实现rdma技术和底层协议(lowerlayerprotocol,llp)的网络适配器(networkinterfacecard,nic)。

上述待传输的目标数据可以是第一设备的第一rnic需要直接从第二设备的内存中读取的数据。

上述第一数据为待传输的目标数据中的至少部分数据,可以指第一数据是待传输的目标数据中的全部数据;还可以指第一数据是待传输的目标数据中的任意一段数据,或者第一数据是待传输的目标数据中的任意1字节数据。

可选地,上述第一数据可以是以目标数据在第二设备的第二内存中对应的内存地址的末地址为起点,向所述目标数据在第二设备的第二内存中对应的内存地址的首地址的方向,读取预设的内存地址长度后得到的数据。

应理解,上述内存地址可以是逻辑地址,也就是说,存储目标数据的内存地址(逻辑地址)可以是连续的,但是存储目标数据的物理地址可以是离散的也可以是连续的。

需要说明的是,上述内存可以按照字节编制,也就是说,内存中的每个地址可以表示一个字节,则预设的内存地址长度可以以字节为单位;内存中每个字节可以使用8比特位表示,则上述预存的内存地址长度还可以是比特位为单位,本申请实施例对于上述预设的内存地址长度的具体体现形式不做限定。

例如,目标数据在第二设备的第二内存中的内存地址的末地址为n,且预设内存地址长度为4字节,则第一数据可以是存储在内存地址为n、n-1、n-2和n-4上的数据。

可选地,作为一个实施例,所述目标数据承载于至少一个远程直接数据存取rdma报文中,所述至少一个rdma报文包括第一rdma报文,所述第一rdma报文为传输所述至少一个rdma报文的过程中的最后一个rdma报文,步骤410包括:所述第一rnic接收所述第二rnic发送的所述第一rdma报文,所述第一rdma报文中承载所述第一数据。

具体地,若待传输的目标数据承载在一个rdma报文中,承载该目标数据的rdma报文可以称为only报文,则上述第一数据可以为only报文中的全部数据;若承载目标数据的rdma报文可以称为only报文,则上述第一数据还可以为only报文中的部分数据。

若待传输的目标数据承载在多个rdma报文中,则承载第一数据的报文可以是传输上述多个rdma报文的过程中最后传输的rdma报文,即最后一个rdma报文。上述第一数据可以是最后一个rdma报文中携带的部分数据,上述第一数据还可以是最后一个rdma报文中携带的全部数据。

举例而言,发起端的rnic可通过检测rdma报文的是否携带有last标识来判断接收到rdma报文是否是最后一个rdma报文。

还应理解,上述第一数据的数据长度可以是预设的,例如,预设第一数据的数据长度为1字节,则可以从上述第一rdma报文中提取任意1字节作为第一数据。上述第一数据的数据长度还可以是随上述第一rdma报文中携带的数据长度变化而变化的,也就是说,当第一rdma报文中携带了4字节的数据,则第一数据的数据长度可以是4字节。

需要说明的是,上述rdma报文可以指基于rdma技术传输的数据报文,又称rdma数据包(rdmapacket)。

在传输多个rdma报文的过程中,多个rdma报文是可以按照预设的顺序(例如,rdma报文的生成数据)依次被存入第一内存中的,也就是说,在第n-1个rdma报文被存储第一内存中之前,第n个rdma报文是不会被存入第一内存中的,其中,n为自然数,且第n个rdma报文是第n-1个rdma报文的下一个rdma报文。

因此,本申请实施例基于上述rdma报文的顺序存储机制,通过对最后一个rdma报文中的数据进行验证,可以进一步确定最后一个rdma报文以及在最后一个rdma报文之前传输的rdma报文是否被存入第一内存中,在一定程度上,简化了数据校验的复杂的,还有利于降低本申请实施例的方案对于缓存容量的需求。

可选地,作为一个实施例,所述目标数据承载于多个rdma报文中,所述多个rdma报文包括第二rdma报文和至少一个第三rdma报文,所述第二rdma报文为传输所述多个rdma报文的过程中的最后一个rdma报文,所述至少一个第三rdma报文为传输所述多个rdma报文的过程中传输所述最后一个rdma报文之前的报文,步骤410包括:所述第一rnic接收所述第二rnic发送的所述第二rdma报文和所述至少一个第三rdma报文,所述第二rdma报文中承载的数据和所述至少一个第三rdma报文中承载的数据组成所述第一数据。

具体的,上述第二rdma报文中承载的数据和所述至少一个第三rdma报文中承载的数据组成所述第一数据,可以指第一数据是由第二rdma报文中的全部数据和至少一个第三rdma报文中的至少部分数据组成的;上述第一数据还可以是由第二rdma报文中的部分数据和至少一个第三rdma报文中的至少数据组成的。

需要说明的是,在上文中提到上述第一数据的数据长度可以是预设的,当第二rdma报文中携带的数据的数据长度不足上述预设的数据长度时,可以从至少一个第三rdma报文中提取至少部分数据与第二rdma报文中携带的数据一起补足预设的数据长度。

例如,预设的第一数据的长度为4字节,第二rdma报文中携带的数据的数据长度为1字节,此时还需要从至少一个第三rdma报文中提取3字节的数据与第二rdma报文中的数据一起组成第一数据,满足预设的第一数据的长度。

还应理解,从上述至少一个第三rdma报文中提取至少部分数据与所述第二rdma报文中的数据组成第一数据时,上述至少一个第三rdma中的部分数据可以随机进行选择,例如,可以选择在传输承载目标数据的多个rdma报文的过程中,最开始传输的第一rdma报文中的至少部分数据。

可选地,作为一个实施例,所述至少一个第三rdma报文为一个rdma报文,所述第三rdma报文为传输所述多个rdma报文的过程中传输所述最后一个rdma报文的前一个rdma报文。

可选地,承载上述目标数据的多个rdma报文的传输顺序与所述多个rdma报文中携带的数据在第二内存中的内存地址的递增的顺序相同。换句话说,传输多个rdma报文中的第n-1个rdma报文和第n个rdma报文时,第n-1个rdma报文中携带的数据的内存地址的取值的最大值小于第n个rdma报文中携带的数据的内存地址的取值的最小值,且所述多个rdma报文中承载的目标数据在第二内存中的内存地址是连续的,所述多个rdma报文中的每个rdma报文中的数据在第二内存中的内存地址也是连续的。

例如,承载待传输的目标数据的rdma报文为3个rdma报文,包括rdma报文1、rdma报文2和rdma报文3,传输上述3个rdma报文的顺序也是按照从rdma报文1到rdma3的顺序依次传输的,也就是说,rdma报文3是传输3个rdma报文中的最后一个rdma报文。上述每个rdma报文中携带2字节的数据,且预设的第一数据的数据长度为4字节,则rdma报文3中携带的数据的数据长度不满足预设的第一数据的数据长度,此时,可以从rdma报文2中提取2字节的数据与rdma报文3中的数据一起组成第一数据。

420,所述第一rnic将所述第一数据缓存在所述第一rnic的缓存中。

430,在所述第一rnic将所述目标数据存储到所述第一内存中之后,所述第一rnic从所述第一内存中读取第二数据,所述第二数据和所述第一数据为所述目标数据中位置相同的数据。

具体地,上述第二数据和第二数据为目标数据中位置相同的数据可以理解为第二数据在所述第一内存中的内存地址在第一内存中存储所述目标数据的内存地址的范围内的相对位置,与所述第一数据在所述第二内存中的内存地址在第二内存中存储所述目标数据的内存地址的范围内的相对位置相同;或者第二数据在第一内存中的内存地址相对于目标数据在第一内存中的内存地址的首地址的偏移量,与第一数据在第二内存中的内存地址相对于目标数据在第二内存中的内存地址的首地址的偏移量相等;或者,第二数据在第一内存中的内存地址相对于目标数据在在第一内存中的内存地址的末地址的偏移量,与第一数据在第二内存中的内存地址相对于目标数据在第二内存中的内存地址的末地址的偏移量相同,换句话说,第二数据和第一数据是原本应该相同的数据。

440,若所述第一rnic确定所述第一数据和所述第二数据相同,所述第一rnic向所述第二rnic发送ack。

本申请实施例中,第一rnic通过确定第一数据和第二数据是否相同,对存储在第一内存中的数据进行校验,确定待传输的目标数据中的至少部分数据被正确存储到第一内存中,并通过ack通知第二rnic,相对于现有技术中,第一rnic在接收到最后一个rdma报文之后直接向第二rnic发送ack的方式而言,增强了ack的可信度,即该ack可以用于指示目标数据中的至少部分数据被正确存储在第一内存中,有利于提高上层业务应用对rdma的直接数据存取(directmemoryaccess,dma)结果的信任度。

进一步地,当上述第一数据为部分目标数据时,也就是说,仅验证一部分目标数据是否被存入第一内存中,对第一rnic中缓存的容量的要求较低,在一定程度上可以节约缓存的成本。

若上述第一数据是目标数据的全部数据时,相当于对目标数据中的全部数据进行了验证,有利于确定目标数据是否全部被正确存储第一内存中,相对于只验证部分目标数据的方案而言,进一步提高了ack的可信度。

可选地,所述ack用于指示所述第一数据和所述第二数据相同,也就是说,上述第一数据被存储在第一内存中。

需要说明的是,上述第一rnic向所述第二rnic发送ack后,可以理解为数据传输过程结束。

结合图1和图2可以看出,图1或图2示出的流程中,数据传输的结束点在步骤270或步骤380。而本申请实施例的方案中,数据传输过程的结束点可停留在步骤260,或者步骤370,可以节省第一rnic和第二rnic之间的信令交互。

可选地,作为一个实施例,在步骤430之前,所述方法还包括步骤450和步骤460。

450,所述第一rnic对所述第一数据进行数据处理得到处理后的第一数据,所述处理后的第一数据与所述第一数据不同。

具体地,在所述第一rnic将所述目标数据存储到所述第一内存的过程中,且在所述第一rnic将所述目标数据中的第一数据存储到所述第一内存中之前,第一rnic将第一数据进行数据处理得到处理后的第一数据。

需要说明的是,上述对第一数据进行处理可以指对第一数据进行取反计算,使得处理后的第一数据与第一数据不同;或者当第一数据包含多个字节且每个字节中的数据内容不同时,可以通过打乱第一数据中的多个字节的顺序,使得处理后的第一数据与第一数据的内容不同,本申请实施例对于数据处理的具体方式不做具体限定。

460,所述第一rnic将所述处理后的第一数据存储在所述第一内存中,所述第一内存中存储所述处理后的第一数据的内存地址与所述第一内存中存储所述第一数据的内存地址相同。

需要说明的是,目标数据在第二内存中可以存储在一段连续的内存地址对应的内存空间中,第一rnic在向第一内存中存储目标数据时,可以按照目标数据在第二内存中的内存地址顺序将目标数据存入第一内存中,假设目标数据在第二内存中的内存地址包括第一段内存地址和第二段内存地址,且第一段内存地址与第二段内存地址连续,第一段内存地址的偏移量小于第二段内存地址的偏移量,则在目标数据存储到第一内存的过程中,如果第一段内存地址中的数据未存到第一内存中,则第二段内存地址中的数据也不会继续往第一内存中存储。因此,基于上述数据顺序的存储机制,如果确定第二段存储地址中的数据被存入第一内存中,则可以认为第一段存储地址中的数据被存入第一内存中。

若上述的第二段存储地址中的数据为上述第一数据时,在上述第一数据在向第一内存中存储之前,第一内存中可能已经存储有数据,并且在特殊情况下,第一内存中原本存储的数据可能和第一数据的内容相同,此时,无论第一数据是否存储到第一内存中,还是可以得到第一rnic确定缓存中的第一数据和第一内存中读取第二数据相同的结果,在上述这种情况下,其实无法通过上述数据顺序存储的存储机制确定目标数据中存储在第一段存储地址中的数据是否被存储到第一内存中。

因此,为了避免在第一数据存储到第一内存中之前,第一内存有可能存储了与第一数据相同的数据的特殊情况,本申请实施例通过对第一数据进行数据处理,并将处理后的数据存入第一内存中,以确保在第一数据存储到第一内存中之前,第一内存中存储的数据一定与第一数据不同,此时再结合数据顺序存储的存储机制,可以确定第二内存中内存地址位于第一数据的内存地址之前的数据被存储到第一内存中,以进一步提高上层业务应用对rdma的直接数据存取(directmemoryaccess,dma)结果的信任度。

为了便于理解,下文结合图5和图6分别以io读过程和io写过程描述本申请实施例的数据校验方法。需要说明的是,下文中io读过程和io写过程的描述侧重点为与本申请实施例相关的部分,其余可以参见上文中图2和图3所示的io读过程和io写过程的描述,为了简洁,在此不再赘述。

图5是本申请实施例中基于io读过程的数据校验的方法的示意性流程图。图5所示的方法包括510-560。

510,目标端的第一rnic,通过发起端的第二rnic,从目标端的第二内存中获取第一数据,第一数据为待传输的目标数据中的至少部分数据。

需要说明的是,上述目标端可以是发起io读过程的设备,上述目标端可以是存储需要通过io读过程读取的数据。

520,目标端的第一rnic将第一数据缓存在第一rnic的缓存中。

530,目标端的第一rnic对第一数据进行数据处理,得到处理后的第一数据,处理后的第一数据和第一数据不同。

540,目标端第一rnic将处理后的第一数据存储在第一内存中,第一内存中存储所述处理后的第一数据的内存地址与第一内存中存储第一数据的内存地址相同。

550,在目标端的第一rnic将目标数据存储到目标端的第一内存中之后,第一rnic从第一内存中读取第二数据,第二数据和第一数据为目标数据中位置相同的数据。

560,若目标端的第一rnic确定第一数据和第二数据相同,目标端的第一rnic向发起端的第二rnic发送ack。

图6是本申请实施例中基于io写过程的数据校验的方法的示意性流程图。图6所示的方法包括610-660。

610,发起端的第一rnic,通过目标端的第二rnic,从目标端的第二内存中获取第一数据,第一数据为待传输的目标数据中的至少部分数据。

需要说明的是,上述发起端可以是发起io读过程的设备,上述目标端可以是存储需要通过io读过程读取的数据。

620,发起端的第一rnic将第一数据缓存在第一rnic的缓存中。

630,发起端的第一rnic对第一数据进行数据处理,得到处理后的第一数据,处理后的第一数据和第一数据不同。

640,发起端第一rnic将处理后的第一数据存储在第一内存中,第一内存中存储所述处理后的第一数据的内存地址与第一内存中存储第一数据的内存地址相同。

650,在发起端的第一rnic将目标数据存储到发起端的第一内存中之后,第一rnic从第一内存中读取第二数据,第二数据和第一数据为目标数据中位置相同的数据。

660,若发起端的第一rnic确定第一数据和第二数据相同,发起端的第一rnic向目标端的第二rnic发送ack。

上文结合图1至图6详细地描述了本申请实施例的数据校验的方法,下文结合图7和图8详细地描述本申请实施例的数据校验的装置。

图7是本申请实施例的数据校验的装置的示意性框图。图7所示的数据校验的装置700包括获取单元710、处理单元720和发送单元730。

获取单元,用于通过第二设备的第二rnic从所述第二设备的第二内存中获取第一数据,所述第一数据为待传输的目标数据中的至少部分数据;

处理单元,用于将所述第一数据缓存在第一设备的第一rnic的缓存中;

所述处理单元,还用于从第一设备的内存中读取第二数据,所述第二数据在所述第一内存中的内存地址在第一内存中存储所述目标数据的内存地址的范围内的相对位置,与所述第一数据在所述第二内存中的内存地址在第二内存中存储所述目标数据的内存地址的范围内的相对位置相同;

若所述第一rnic确定所述第一数据和所述第二数据相同,发送单元,用于向所述第二rnic发送ack。

可选地,作为一个实施例,所述处理单元,还用于将所述第一数据进行处理得到处理后的第一数据,所述处理后的第一数据与所述第一数据不同;所述处理单元,还用于将所述处理后的第一数据存储在所述第一内存中,所述第一内存中存储所述处理后的第一数据的内存地址与所述第一内存中存储所述第一数据的内存地址相同。

可选地,作为一个实施例,承载所述目标数据的报文包括至少一个远程直接数据存取rdma报文,所述至少一个rdma报文包括第一rdma报文,所述第一rdma报文为传输所述至少一个rdma报文的过程中的最后一个rdma报文,

所述获取单元,具体用于接收所述第二rnic发送的所述第一rdma报文,所述第一rdma报文中承载所述第一数据。

可选地,作为一个实施例,承载所述目标数据的报文包括多个rdma报文,所述多个rdma报文包括第二rdma报文和至少一个第三rdma报文,所述第二rdma报文为传输所述多个rdma报文的过程中的最后一个rdma报文,所述至少一个第三rdma报文为传输所述多个rdma报文的过程中传输所述最后一个rdma报文之前的报文,

所述获取单元,具体用于接收所述第二rnic发送的所述第二rdma报文和所述至少一个第三rdma报文,所述第二rdma报文中承载的数据和所述至少一个第三rdma报文中承载的数据组成所述第一数据。

可选地,作为一个实施例,所述至少一个第三rdma报文为一个rdma报文,所述第三rdma报文为传输所述多个rdma报文的过程中传输所述最后一个rdma报文的前一个报文。

在可选的实施例中,所述数据校验的装置700可以为网卡800,所述获取单元710和所述发送单元730可以为网卡中的收发器870,所述处理单元720可以为网卡中的处理器820,所述网卡还可以包括输入/输出接口830和存储器810,具体如图8所示。

图8是本申请另一实施例的网卡的示意性框图。图8所示的网卡800可以包括:存储器810、处理器820、输入/输出接口830、收发器840。其中,存储器810、处理器820、输入/输出接口830和收发器840通过内部连接通路相连,该存储器810用于存储程序指令,该处理器820用于执行该存储器820存储的程序指令,以控制输入/输出接口830接收输入的数据和信息,输出操作结果等数据,并控制收发器840发送信号。

所述处理器运行所述程序指令以执行上文第一设备的第一rnic所执行的步骤,例如,可控制所述收发器通过第二设备的第二网卡,从所述第二设备的第二内存中获取第一数据,所述第一数据为待传输的目标数据中的至少部分数据;将所述第一数据缓存在所述网卡的缓存中;将所述目标数据存储到所述第一设备的第一内存中之后,从所述第一内存中读取所述目标数据中的第二数据,所述第二数据和所述第一数据为所述目标数据中位置相同的数据;若确定所述第一数据和所述第二数据相同,控制所述收发器向所述第二rnic发送确认字符ack。

可选地,上述的缓存可设置在存储器中。

应理解,在本申请实施例中,该处理器820可以采用通用的中央处理器(centralprocessingunit,cpu),微处理器,应用专用集成电路(applicationspecificintegratedcircuit,asic),或者一个或多个集成电路,用于执行相关程序,以实现本申请实施例所提供的技术方案。

还应理解,收发机840又称通信接口,使用例如但不限于收发器一类的收发装置,来实现数据校验的装置800与其它设备或通信网络之间的通信。

该存储器810可以包括只读存储器和随机存取存储器,并向处理器820提供指令和数据。处理器820的一部分还可以包括非易失性随机存取存储器。例如,处理器820还可以存储设备类型的信息。

在实现过程中,上述方法的各步骤可以通过处理器820中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的数据校验方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器810,处理器820读取存储器810中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。

应理解,本申请实施例中,该处理器可以为中央处理单元(centralprocessingunit,cpu),该处理器还可以是其它通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

应理解,在本申请实施例中,“与a相应的b”表示b与a相关联,根据a可以确定b。但还应理解,根据a确定b并不意味着仅仅根据a确定b,还可以根据a和/或其它信息确定b。

应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

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

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

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

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

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1