一种维护连接的方法及存储设备与流程

文档序号:20677783发布日期:2020-05-08 18:03阅读:137来源:国知局
一种维护连接的方法及存储设备与流程

本申请涉及计算机存储领域,并且更具体地,涉及一种维护连接的方法及存储设备。



背景技术:

目前,网络小型计算机系统接口(internetsmallcomputersysteminterface,iscsi)技术是一种利用传输控制协议/网际协议(transmissioncontrolprotocol/internetprotocol,tcp/ip)来传输小型计算机系统接口(smallcomputersysteminterface,scsi)命令和数据的方法。iscsi通过利用以太网构建ip存储局域网,克服了直接连接存储设备的局限性,能够实现跨不同服务器共享存储资源,并能在不停机的状态下扩充存储容量。

传统的基于iscsi的存储系统中,如果存储设备中的业务进程中断,则存储设备的内核会回收该进程的资源。在此情况下,承载iscsi业务的tcp连接断开。该tcp连接断开会导致主机和存储设备之间的iscsi连接断开。当业务恢复时,主机和存储设备需要较长的时间恢复该iscsi连接,这会导致客户业务中断。



技术实现要素:

本申请提供一种维护连接的方法及存储设备,在存储业务进程中断的情况下,能够保证存储设备与主机之间的连接不断,从而确保存储业务正常运行。

第一方面,提供了一种维护连接的方法,应用于存储设备,包括:启动业务进程及为该业务进程设置附属进程;建立该业务进程及该附属进程与主机之间的网络连接,其中,在所建立的网络连接中,该业务进程与该附属进程被分配同一条链路;当该业务进程中断后,通过该附属进程维持该链路不中断。

本申请提供的维护连接不断的方法,在业务进程中断的情况下,可以通过附属进程维持业务进程对应的连接不中断,从而确保存储业务不被中断,给用户带来良好的存储体验。

结合第一方面,在第一方面的某些实现方式中,该建立该业务进程及该附属进程与主机之间的网络连接包括:为该业务进程及该附属进程分配相同的套接字,并设置该套接字对应的引用计数为大于1的值;该当该业务进程中断后,通过该附属进程维持该链路不中断包括:当该业务进程中断后,修改该套接字对应的引用计数,但修改后的引用计数不为零。

基于上述技术方案,在业务进程中断的情况下,通过确保业务进程对应的套接字的引用计数的值不被清零,从而使得业务进程对应的连接不会中断。

结合第一方面,在第一方面的某些实现方式中,该存储设备包括内核内存及共享内存,该内核内存由该存储设备的内核进程访问,该共享内存由该业务进程访问;该方法还包括:当接收到读请求时,执行该读请求,获取该读请求所读取的数据,将该数据分成至少一个数据包,并为该至少一个数据包中的每个数据包分配读序列号,通过该内核进程及该业务进程将数据包发送至主机,并将所发送的数据包的读序列号分别存储至该内核内存及该共享内存;当业务进程中断后,该内核进程继续发送数据包至主机,并将所发送数据包的读序列号存储至内核内存;当该业务进程被恢复后,该业务进程从该内核进程中获取第一序列号,从该共享内存中获取第二序列号,该第一序列号为该业务进程被恢复的时刻,该内核进程中的读序列号值最大的序列号,该第二序列号为该业务进程故障的时刻,该共享进程中的读序列号值最大的序列号;根据该第一序列号及该第二序列号的差值确定该业务进程恢复后发送数据的方式。

基于上述技术方案,本申请实施例提供的恢复数据传输的方法,当业务进程发生中断的情况下,能够快速恢复主机和存储设备之间的数据传输,使用户不会感知到业务进程曾经发生过中断,给用户带来良好的存储体验。

结合第一方面,在第一方面的某些实现方式中,该根据该第一序列号及该第二序列号的差值确定该业务进程恢复后发送数据的方式包括:当该第一序列号及该第二序列号的差值为零,则确定该业务进程中断前该业务进程所发送的数据是否是数据头,如果是数据头,则继续发送包括该数据头的数据包,如果不是数据头,则对当前发送的数据包中已发送的数据补零后与未发送的数据一起发送;当该第一序列号及该第二序列号的差值不为零,则确定在该业务进程恢复时,该内核进程所发送的数据是否是数据头,如果是数据头,则继续发送包括该数据头的数据包,如果不是数据头,则对当前发送的数据包中该内核进程已发送的数据补零后继续发送。

结合第一方面,在第一方面的某些实现方式中,该存储设备包括内核内存及共享内存,该内核内存由该存储设备的内核进程访问,该共享内存由该业务进程访问;该方法还包括:当接收到写请求时,执行该写请求,获取该写请求所写入的至少一个数据包,该至少一个数据包中的每个数据包包括写序列号,通过该内核进程及该业务进程从主机接收数据包,并将所接收到的数据包的写序列号分别存储至该内核内存及该共享内存;当业务进程中断后,该内核进程继续从主机接收数据包,并将所接收数据包的写序列号存储至内核内存;当该业务进程被恢复后,该业务进程从该内核进程中获取第一序列号,从该共享内存中获取第二序列号,该第一序列号为该业务进程被恢复的时刻,该内核进程中的写序列号值最大的序列号,该第二序列号为该业务进程中断的时刻,该共享进程中的写序列号值最大的序列号;根据该第一序列号及该第二序列号的差值,确定目标数据,并指示该主机发送该目标数据。

第二方面,提供了一种存储设备,其特征在于,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法,具体的,该装置包括用于执行上述第一方面或第一方面任意可能的实现方式中的方法的模块。

第三方面,本申请实施例提供了一种设备,包括:存储器和处理器。其中,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,并且当该处理器执行该存储器存储的指令时,该执行使得该处理器执行第一方面或第一方面的任意可能的实现方式中的方法。

第四方面,本申请实施例提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。

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

第六方面,提供了一种芯片,包括至少一个处理器和接口;所述至少一个所述处理器,用于调用并运行计算机程序,以使所述芯片用于执行上述第一方面或第一方面任意可能的实现方式中的方法。

附图说明

图1是基于iscsi技术的网络存储系统的示意图;

图2是iscsi的协议体系结构的示意图;

图3是iscsi数据包的格式;

图4是适用于本申请实施例提供的方法的系统结构性框图;

图5是本申请实施例提供的维护连接不断的方法500的示意性流程图;

图6是本申请实施例提供的业务进程恢复后存储设备向主机发送数据的方法600的示意性流程图;

图7是本申请实施例提供的业务进程恢复后主机向存储设备发送数据的方法700的示意性流程图;

图8是本申请实施例提供的存储设备800的结构示意图。

具体实施方式

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

图1示出了基于iscsi技术的网络存储系统的示意图。该网络存储系统包括主机110,存储设备120、存储设备121和存储设备123。

如图1所示的基于iscsi技术的网络存储系统中包括一个主机和多个存储设备。另一些基于iscsi技术的网络存储系统中可以包括一个或多个主机和一个或多个存储设备。

图2示出了iscsi的协议体系结构的示意图。

iscsi的协议体系结构包括客户主机端和存储设备端。客户主机端将scsi指令和数据封装到tcp/ip包中,通过网络发送,并传送到存储设备端。存储设备收到tcp/ip包之后,将其还原为scsi指令和数据并且执行,完成之后将返回的scsi指令和数据再封装到tcp/ip包中,并传送回客户主机。下面具体介绍iscsi协议体系结构中每一层的功能:

scsi层:用于发送命令描述块(commanddescriptionblock,cdb),以及数据给iscsi层,接收和处理来自iscsi层的cdb。其中cdb执行从存储设备的磁盘读或写数据块的任务。

iscsi层:主要完成建立iscsi连接和进行iscsi会话管理的功能。iscsi层发送和接收iscsi协议数据单元(protocoldataunit,pdu),把scsi命令、状态和数据进行封装,建立客户主机和存储设备之间的iscsi会话。

tcp层:主机和存储设备的通讯可以建立在一个或者多个tcp连接上,tcp连接完成可靠的数据段传输。

ip层:网络层负责为互连网上的主机提供通讯。在网络层,数据的传送单位是数据包。网络层的任务是路由选择,使客户主机端tcp层所传下来的数据段能够根据网络地址找到目的主机。

数据链路(link)层:数据链路层的任务是在两个相邻结点间的线路上无差错的传送以帧为单位的数据。每个帧包括数据和必要的控制信息。在这些控制信息中,有同步信息、二层地址信息、差错控制信息等。

图3示出了iscsi数据包的格式。

以太网头字段可以携带源mac地址、目的mac地址等信息。

ip头字段可以携带源ip地址、目的ip地址等信息。

tcp头字段可以携带tcp序列号、数据长度信息等。

iscsipdu字段可以用于携带scsi命令和i/o请求。scsi命令即cdb。i/o请求为客户主机向存储设备进行数据的读/写操作。

图4示出了适用于本申请实施例提供的方法的系统结构性框图。

如图4所述,该系统包括存储设备400和主机460。

在本申请的实施例中,存储设备400包括存储器410、处理器420、通信接口430以及总线440。其中,存储器410、处理器420、通信接口430通过总线440实现彼此之间的通信连接。

存储器410中包括进程内存401、共享内存402和内核内存403。存储器410可以是只读存储器(readonlymemory,rom),静态存储设备,动态存储设备或者随机存取存储器(randomaccessmemory,ram)。存储器410可以存储程序和数据,当存储器410中存储的程序被处理器420执行时,处理器420用于执行本申请实施例的维护连接的方法的各个步骤。

处理器420可以采用通用的中央处理器(centralprocessingunit,cpu),微处理器,应用专用集成电路(applicationspecificintegratedcircuit,asic),或者一个或多个集成电路,用于执行相关程序,以实现本申请方法实施例的维护连接的方法。

处理器420还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请实施例的维护连接的方法的各个步骤可以通过处理器420中的硬件的集成逻辑电路或者软件形式的指令或程序代码完成。

上述处理器420还可以是通用处理器、数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器410,处理器420读取存储器410中的信息,结合其硬件完成本申请实施例中存储设备400包括的单元所需执行的功能。

通信接口430可以使用但不限于收发器一类的收发装置,来实现存储设备400与其他设备或通信网络之间的通信。例如,该通信接口430可以实现存储设备400与主机450之间的数据通信。

总线440可以为存储设备400中的各个部件(例如,存储器410、处理器420、通信接口430)之间提供传送信息的通路。

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

还应理解,本申请实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(randomaccessmemory,ram)可用,例如静态随机存取存储器(staticram,sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(synchronousdram,sdram)、双倍数据速率同步动态随机存取存储器(doubledataratesdram,ddrsdram)、增强型同步动态随机存取存储器(enhancedsdram,esdram)、同步连接动态随机存取存储器(synchlinkdram,sldram)和直接内存总线随机存取存储器(directrambusram,drram)。

下面结合图5和图7介绍本申请实施提供的维护不断连接的方法。

图5出了本申请实施例提供的维护连接不断的方法500的示意性流程图。

510,启动业务进程及为业务进程设置附属进程。

启动业务进程及为业务进程设置附属进程,可以是在存储设备通电的情况下,在存储设备中建立业务进程,并建立该业务进程的附属进程。

例如,在存储设备通电的情况下,先建立业务进程,然后再建立该业务进程的附属进程。或者,在存储设备通电的情况下,同时建立业务进程及该业务进程的附属进程。

本申请实施例中,对附属进程的数目不作具体限定。

在一种实现方式中,在存储设备中可以建立该业务进程的一个附属进程。

在另一种实现方式中,在存储设备中可以建立该业务进程的n个备份进程,n为大于或等于2的正整数。

520,建立业务进程及附属进程与主机之间的网络连接,其中,在所建立的网络连接中,业务进程与附属进程被分配同一条链路。

业务进程及附属进程与主机之间的网络连接可以是存储设备与主机之间的iscsi会话。该iscsi会话基于tcp连接。

存储设备与主机建立基于tcp连接的iscsi会话,可以通过以下方式实现:主机中安装有iscsi启动器(initiator),存储设备中安装有iscsi目标器(target)。建立iscsi会话的具体过程可以由iscsi启动器和iscsi目标器实现。存储设备与主机建立基于tcp连接的iscsi会话后,主机可以向存储设备发送读或写请求。

在所建立的网络连接中,业务进程与附属进程被分配同一条链路(即,同一条tcp连接),即可以通过该业务进程和该附属进程共同维护该链路,当该链路中的业务进程和附属进程都发生中断的情况下,该链路才会断开。

建立业务进程及附属进程与主机之间的网络连接还包括:为业务进程及附属进程分配相同的套接字,并设置套接字对应的引用计数为大于1的值。

应理解,业务进程及附属进程与主机之间建立网络连接后,存储设备为业务进程及附属进程分配相同的套接字,并设置该套接字对应的引用计数为大于1的值,该套接字的引用计数的值保存至存储设备的进程内存中。

在一些实施例中,套接字对应的引用计数的值与进程数目是一比一的关系。

应理解,该进程包括业务进程和附属进程。套接字对应的引用计数的值与进程数目是一比一的关系可以是指,存储设备中每建立一个进程,就将该进程的套接字对应的引用计数的值加1。若存储设备建立了k个进程,则该套接字的引用计数的值被设置为k,k为大于或等于2的正整数。

例如,根据步骤510存储设备建立了一个业务进程和该业务进程的一个附属进程,存储设备与主机建立基于tcp连接的iscsi会话时,将该业务进程对应的套接字的引用计数的值设置为2,并将该套接字的引用计数的值保存至存储设备的进程内存中。

例如,根据步骤510存储设备建立了一个业务进程和该业务进程的两个附属进程,存储设备与主机建立基于tcp连接的iscsi会话时,将该业务进程对应的套接字的引用计数的值设置为3,并将该套接字的引用计数的值保存至存储设备的进程内存中。

在另一些实施例中,套接字的引用计数的值与进程数目是y比1的关系,其中y为大于或等于2的整数。

套接字的引用计数的值与tcp连接中的进程数目是y比一的关系可以是指,存储设备中每建立一个进程,就将该进程的套接字对应的引用计数的值加y。若存储设备建立了k个进程,则该套接字的引用计数的值被设置为y×k,k为大于或等于2的正整数。

例如,根据步骤510存储设备建立了一个业务进程和该业务进程的一个附属进程,存储设备与主机建立基于tcp连接的iscsi会话时,将该业务进程对应的套接字的引用计数的值设置为4,并将该套接字的引用计数的值保存至存储设备的进程内存中。

例如,根据步骤510存储设备建立了一个业务进程和该业务进程的两个附属进程,存储设备与主机建立基于tcp连接的iscsi会话时,将该业务进程对应的套接字的引用计数的值设置为9,并将该套接字的引用计数的值保存至存储设备的进程内存中。

530,当业务进程中断后,通过附属进程维持链路不中断。

当业务进程中断后,通过附属进程维持链路不中断包括:当业务进程中断后,修改套接字对应的引用计数,但修改后的引用计数不为零。

应理解,业务进程中断,可以指业务进程发生了故障,也可以指业务进程进行升级。

例如,业务进程中断前,存储设备的进程内存中保存的套接字的引用计数的值为2,当业务进程发生故障时,存储设备的内核释放业务进程对应的套接字的引用计数,即对进程内存中保存的套接字的引用计数减1。此时,进程内存中保存的套接字的引用计数变为1,没有被清零。在此情况下,存储设备与主机之间的tcp连接保持不断。

在本申请实施例中,在主机与存储设备之间的读或写请求执行完成的情况下,主机可以向存储设备发送请求结束会话的消息,存储设备接收到该消息后会关闭与主机之间的iscsi会话。

在一种实现方式中,当iscsi会话结束时,结束业务进程和附属进程。在业务进程和附属进程结束后,进程内存保存的套接字对应的引用计数的值为0。例如,假设步骤520中建立了k个附属进程,套接字的引用计数和进程数目是一比一的关系。在此情况下,进程内存保存的值为n。如果该业务进程结束,则将该进程内存保存的套接字对应的引用计数的值减1;如果该k个附属进程中的一个附属进程结束,则将该进程内存保存的套接字对应的引用计数的值减1。这样,如果该业务进程和该k个附属进程都结束,则该进程内存保存的套接字对应的引用计数的值为0。例如,假设步骤520中建立了k个附属进程,套接字的引用计数和进程数目是y比一的关系。在此情况下,进程内存保存的套接字对应的引用计数的值为n。如果该业务进程结束,则将该进程内存保存的值减y;如果该k个附属进程中的一个附属进程结束,则将该进程内存保存的套接字对应的引用计数的值减y。这样,如果该业务进程和该k个附属进程都结束,则该进程内存保存的套接字对应的引用计数的值为0。

在另一种实现方式中,当iscsi会话结束时,将进程内存保存的值清零。换句话说,可以在确定iscsi会话结束后将该进程内存保存的值直接设置为0。

作为示例非限定,存储设备与主机建立tcp连接时,由于在存储设备的进程内存中保存的套接字的引用计数的值为业务进程的套接字的引用计数与业务进程的附属进程的套接字的引用计数的和。例如,假设建立了k个附属进程,套接字的引用计数和进程数目是一比一的关系。在此情况下,当iscsi会话中的业务进程结束时,对附属进程的套接字的引用计数的值减k,此时进程内存保存的套接字的引用计数的值被清零,tcp断连接,iscsi会话结束。例如,假设建立了k个附属进程,套接字的引用计数和进程数目是y比一的关系。在此情况下,当iscsi会话中的业务进程结束时,对附属进程的套接字的引用计数的值减y×k,此时进程内存保存的套接字的引用计数的值被清零,tcp断连接,iscsi会话结束。

本申请实施例提供的维护连接不断的方法,在业务进程发生中断的情况下,业务进程对应的套接字的引用计数的值不被清零,业务进程对应的tcp连接不会中断。在此情况下,该业务进程对应的iscsi连接也不会中断,从而确保存储业务不被中断,给用户带来良好的存储体验。

在本申请实施中,利用步骤520中建立的基于tcp连接的iscsi会话,主机可以读取存储设备中保存的数据。

存储设备中还包括内核内存及共享内存,内核内存由存储设备的内核进程访问,共享内存由业务进程访问。

当存储设备接收到主机发送的读请求时,存储设备执行读请求,获取读请求所读取的数据,将该数据分成至少一个数据包,并为每个数据包分配读序列号。存储设备将读请求对应的数据包发送至主机,并将读序列号分别存储至内核内存及共享内存。

存储设备将读请求对应的数据包发送至主机,并将读序列号分别存储至内核内存及共享内存可以包括:存储设备通过内核进程和业务进程,将数据包发送至主机,并将读序列号分别存储至内核内存和共享内存。

内核进程通过映射将内核内存中保存的读请求对应的数据包的序列号和该数据包的长度信息,写入共享内存。

例如,内核进程生成一个字符设备。该字符设备用于将发送至主机的数据包的读序列号和该数据包中的数据长度复制到业务进程。业务进程将获取到的读序列号和数据长度写入到共享内存。业务进程生成一个与字符设备对应的描述符fd。内核进程可以通过映射函数mmap和该fd将存储设备的内核内存中的发送至主机的数据包的读序列号和该数据包中的数据长度复制到业务进程。业务进程将获取到的读序列号和数据包中的数据长度写入存储设备的共享内存中。

当业务进程中断后,内核进程继续发送数据包至主机,并将所发送数据包的序列号存储至内核内存。

应理解,业务进程中断后,由于主机与存储设备之间的tcp连接维持不断,故内核进程可以继续发送数据包至主机。在此情况下,内核进程可以将发送的数据包的读序列号写入内核内存,内核内存可以保存所发送的数据包的读序列号。

当业务进程被恢复后,业务进程从内核进程中获取第一序列号,从共享内存中获取第二序列号。第一序列号为业务进程被恢复的时刻,内核进程中的读序列号值最大的序列号,第二序列号为业务进程故障的时刻,共享进程中的读序列号值最大的序列号。

存储设备根据第一序列号及第二序列号的差值确定业务进程恢复后发送数据的方式,包括:当该第一序列号及该第二序列号的差值为零,则确定该业务进程中断前该业务进程所发送的数据是否是数据头,如果是数据头,则继续发送包括该数据头的数据包,如果不是数据头,则对当前发送的数据包中已发送的数据补零后与未发送的数据一起发送;当该第一序列号及该第二序列号的差值不为零,则确定在该业务进程恢复时,该内核进程所发送的数据是否是数据头,如果是数据头,则继续发送包括该数据头的数据包,如果不是数据头,则对当前发送的数据包中该内核进程已发送的数据补零后继续发送。

应理解,数据头包括如图3所示的以太网头、ip头和tcp头。

应理解,补零后继续发送,可以包括以下情况:

1.在第一序列号大于第二序列号的情况下,存储设备向主机发送长度为t的预设数据,其中t为第一长度与已经发送的第一数据包中的数据的长度的差,第一长度为第一数据包的长度,第一数据包的读序列号为第一序列号,t为大于或等于1且小于或等于第一长度的正整数。

应理解,长度为t的预设数据可以是t个0,也可以是t个1,或者也可以是其他形式的长度为t的预设数据,本申请对此不作具体限定。

2.在第二序列号等于第一序列号的情况下,存储设备向主机发送长度为k的预设数据,其中k为第二长度与已经发送的第二数据包中的数据的长度的差,第二长度为第二数据包的长度,第二数据包的读序列号为第二序列号,k为大于或等于1的且小于或等于第二长度的正整数。

应理解,长度为k的预设数据可以是k个0,也可以是k个1,或者也可以是其他形式的长度为k的预设数据,本申请对此不作具体限定。

下面,结合图6,介绍业务进程恢复后,存储设备向主机发送的数据。

图6示出了业务进程恢复后存储设备向主机发送数据的方法600的示意性流程图。

610,获取第一tcp序列号(即,第一序列号的一例)和第二tcp序列号(即,第二序列号的一例)。

在本申请实施例中,第一序列号为业务进程被恢复的时刻,内核进程中的读序列号值最大的序列号。第二序列号为业务进程中断的时刻,共享进程中的读序列号值最大的序列号。

一些实施例中,在业务进程发生中断的情况下,存储设备向主机发送一个或多个数据包,并将该一个或多个数据包的tcp序列号保存至内核内存。在此情况下,该第一tcp序列号与该第二tcp序列号不相同。

例如,当业务进程中断时间较长时,在此过程中,存储设备可以向主机发送一个或多个数据包。

一些实施例中,在业务进程发生中断的情况下,存储设备继续向主机发送中断前发送的数据包中的数据,业务进程恢复时刻,该数据包中的数据还没有发送完。在此情况下,该第一tcp序列号与该第二tcp序列号相同。

一些实施例中,在业务进程发生中断的情况下,存储设备没有向主机发送一个或多个数据包。在此情况下,该第一tcp序列号与该第二tcp序列号相同。

620,确定第一tcp序列号(即,第一序列号的一例)和第二tcp序列号(即,第二序列号的一例)是否相同。

若第一tcp序列号与第二tcp序列号不相同,则执行步骤630。

若第一tcp序列号与第二tcp序列号相同,则执行步骤640。

630,根据第一长度和业务进程恢复前已经发送的第一数据包中的数据,确定向主机发送的数据。

一些实施例中,在第一tcp序列号大于第二tcp序列号的情况下,存储设备向主机发送长度为t的零数据,其中t为第一长度与已经发送的第一数据包中的数据的长度的差,第一长度为第一数据包的长度,第一数据包的读序列号为第一tcp序列号,t为大于或等于1且小于或等于第一长度的正整数。

例如,存储设备接收到主机发送的读请求后,存储设备需要向主机发送读请求的数据,该数据通过数据包1发送,数据包1的长度为200个字节,该数据包1的读序列号为12000。

业务进程中断前,存储设备向主机发送了数据包1中的100个字节的数据。业务进程中断过程中,存储设备继续向主机发送了120个字节的数据,该120个字节的数据中的100个字节的数据为数据包1中中断前未发送完的数据,该120个字节数据中的20个字节的数据为数据包2中的数据。其中,数据包2为存储设备向主机发送完数据包1后发送的下一数据包,且该数据包2携带的数据的长度为100。

在此情况下,业务进程恢复时刻,内核内存保存的第一tcp序列号为12200,共享内存保存的第二tcp序列号为12000。业务进程恢复后,存储设备应该向主机发送80个0。

一些实施例中,在第一tcp序列号大于第二tcp序列号的情况下,存储设备判断业务进程发生中断时刻,存储设备正在发送第一数据包的数据头。在此情况下,业务进程恢复中断后,存储设备继续向主机发送第一数据包的负载部分的数据(即图3中的iscsipdu),第一数据包的读序列号为第一tcp序列号。

例如,存储设备接收到主机发送的读请求后,存储设备需要向主机发送读请求的数据,该数据通过数据包1携带,中断前存储设备向主机发送该数据包1中的数据,业务进程中断过程中,存储设备向主机发送数据包1中中断前未发送完的剩余所有的数据,并向主机发送数据包2的数据头,数据包2为存储设备向主机发送完数据包1后发送的下一数据包。在此情况下,业务进程恢复时刻,内核内存保存的第一tcp序列号大于共享内存保存的第二tcp序列号。业务进程恢复后,存储设备应该向主机发送数据包2中数据头后面的数据。

640,根据第二长度和业务进程恢复前已经发送的第二数据包中的数据,确定向主机发送的数据。

一些实施例中,在第二tcp序列号等于第一tcp序列号的情况下,存储设备向主机发送长度为k的零数据,其中k为第二长度与已经发送的第二数据包中的数据的长度的差,第二长度为第二数据包的长度,第二数据包的读序列号为第二tcp序列号,k为大于或等于1的且小于或等于第二长度的正整数。

例如,存储设备接收到主机发送的读请求后,存储设备需要向主机发送读请求的数据,该数据通过数据包1发送,数据包1的长度为200个字节,该数据包1的读序列号为12000。

业务进程中断前,存储设备向主机发送了数据包1中的60个字节的数据。业务进程中断过程中,存储设备继续向主机发送了数据包1中的40个字节的数据。

在此情况下,业务进程恢复时刻,内核内存保存的第一tcp序列号为12000,共享内存保存的第二tcp序列号为12000。业务进程恢复后,存储设备应该向主机发送100个0。

一些实施例中,在第二tcp序列号等于第一tcp序列号的情况下,存储设备判断业务进程发生中断时刻,存储设备正在发送第二数据包的数据头。在此情况下,业务进程恢复中断后,存储设备继续向主机发送第二数据包的数据,第二数据包的读序列号为第二tcp序列号。

例如,存储设备接收到主机发送的读请求后,存储设备需要向主机发送读请求的数据,该数据通过数据包1携带,中断前存储设备向主机发送了该数据包1的数据头,业务进程中断过程中,存储设备没有向主机发送数据包1中未发完的数据。在此情况下,业务进程恢复时刻,内核内存保存的第一tcp序列号等于共享内存保存的第二tcp序列号。业务进程恢复后,存储设备应该向主机发送数据包1中数据头后面的数据。

本申请实施例提供的恢复数据传输的方法,当业务进程发生中断的情况下,能够快速恢复主机和存储设备之间的数据传输,使用户不会感知到业务进程曾经发生过中断,给用户带来良好的存储体验。

在本申请实施中,利用步骤520中建立的基于tcp连接的iscsi会话,主机还可以向存储设备中写入数据。

当存储设备接收到主机发送的写请求时,存储设备执行写请求,获取写请求所写入的至少一个数据包,至少一个数据包中的每个数据包包括写序列号。存储设备通过内核进程及业务进程从主机接收数据包,并将所接收到的数据包的写序列号分别存储至内核内存及共享内存。

当业务进程中断后,内核进程继续从主机接收数据包,并将所接收数据包的序列号存储至内核内存。

应理解,业务进程中断后,由于主机与存储设备之间的tcp连接维持不断,故存储设备内核可以继续接收主机发送的数据包,并将该数据包的写序列号保存至内核内存中。

当业务进程被恢复后,业务进程从内核进程中获取第一序列号,从共享内存中获取第二序列号,第一序列号为业务进程被恢复的时刻,内核进程中的写序列号值最大的序列号,第二序列号为业务进程中断的时刻,共享进程中的写序列号值最大的序列号;

根据第一序列号及第二序列号的差值确定对业务进程恢复后接收到的数据包的处理方式,包括:根据第一序列号及第二序列号的差值,确定目标数据,并指示主机发送目标数据。

应理解,本申请实施例中所称的保存接收到的数据包可以是指保存接收到的数据包所携带的数据。

应理解,数据头包括如图3所示的以太网头、ip头和tcp头。

应理解,根据第一序列号及第二序列号的差值,确定目标数据,并指示所述主机发送目标数据,包括以下情况:

1.当第一序列号及第二序列号的差值为零,确定目标数据为未接收到的第二数据包中的数据,其中,第二长度为第二数据包的长度,第二数据包的写序列号为第二序列号。

2.当第一序列号及第二序列号的差值不为零,确定目标数据为第一数据包中的数据,其中,第一长度为第一数据包的长度,第一数据包的写序列号为第一序列号。

下面,结合图7,介绍业务进程恢复后,存储设备接收主机发送的数据。

图7示出了本申请实施例提供的业务进程恢复后主机向存储设备发送数据的方法700的示意性流程图。

710,获取第一tcp序列号(即,第一序列号的一例)和第二tcp序列号(即,第二序列号的一例)。

在本申请实施例中,第一序列号为业务进程被恢复的时刻,内核进程中的写序列号值最大的序列号。第二序列号为业务进程中断的时刻,共享进程中的写序列号值最大的序列号。

一些实施例中,在业务进程发生中断的情况下,存储设备接收主机发送一个或多个数据包,并将该一个或多个数据包的tcp序列号保存至内核内存。在此情况下,该第一tcp序列号与该第二tcp序列号不相同。

例如,当业务进程中断时间较长时,在此过程中,主机可以向存储设备发送一个或多个数据包。

一些实施例中,在业务进程发生中断的情况下,存储设备没有接收主机发送一个或多个数据包。在此情况下,该第一tcp序列号与该第二tcp序列号相同。

一些实施例中,在业务进程发生中断的情况下,主机继续向存储设备发送业务进程中断前的数据包中的数据,业务进程恢复时刻,该数据包中的数据还没有被发送完。在此情况下,该第一tcp序列号与该第二tcp序列号相同。

720,确定第一tcp序列号(即,第一序列号的一例)和第二tcp序列号(即,第二序列号的一例)是否相同。

若第一tcp序列号与第二tcp序列号不相同,则执行步骤730。

若第一tcp序列号与第二tcp序列号相同,则执行步骤740。

730,根据第一tcp序列号及第二tcp序列号的差值和第二长度确定目标数据,并指示主机发送目标数据。

根据第一tcp序列号及第二tcp序列号的差值和第二长度确定目标数据,包括:在第一tcp序列号及第二tcp序列号的差值等于第二长度的情况下,确定目标数据为第一数据包,其中,第二长度为第二数据包的长度,第二数据包的写序列号为第二tcp序列号,第一数据包为存储设备接收到的第二数据包的下一个数据包。

例如,存储设备接收到主机发送的写请求后,主机需要向存储设备发送写请求的数据,该数据通过数据包1发送,数据包1的长度为200个字节,该数据包1的读序列号为12000。

业务进程中断前,主机向存储设备发送了数据包1中的100个字节的数据。业务进程中断过程中,主机继续向存储设备发送了100个字节的数据。

在此情况下,业务进程恢复时刻,内核内存保存的第一tcp序列号为12200,共享内存保存的第二tcp序列号为12000。业务进程恢复后,存储设备接收主机发送的数据包2中的数据。

根据第一tcp序列号及第二tcp序列号的差值和第二长度确定目标数据,包括:在第一tcp序列号及第二tcp序列号的差值大于第二长度的情况下,确定目标数据为未接收到的第一数据包中的数据,其中,第一长度为第一数据包的长度,第一数据包的写序列号为第一tcp序列号。

例如,存储设备接收到主机发送的写请求后,主机需要向存储设备发送写请求的数据,该数据通过数据包1发送,数据包1的长度为200个字节,该数据包1的读序列号为12000。

业务进程中断前,主机向存储设备发送了数据包1中的100个字节的数据。业务进程中断过程中,主机继续向存储设备发送了120个字节的数据,该120个字节的数据中的100个字节的数据为数据包1中中断前未发送完的数据,该120个字节数据中的20个字节的数据为数据包2中的数据。其中,数据包2为主机向存储设备发送完数据包1后发送的下一数据包,且该数据包2携带的数据的长度为40。

在此情况下,业务进程恢复时刻,内核内存保存的第一tcp序列号为12200,共享内存保存的第二tcp序列号为12000。业务进程恢复后,存储设备接收主机发送的数据包2中的剩余20个字节的数据,存储设备接收完该数据包2后并删除该数据包2。

740,确定目标数据为未接收到的第二数据包中的数据,并指示主机发送目标数据。

当第一tcp序列号及第二tcp序列号的差值为零,确定目标数据为未接收到的第二数据包中的数据,其中,第二长度为第二数据包的长度,第二数据包的写序列号为第二tcp序列号。

例如,存储设备接收到主机发送的写请求后,主机向存储设备发送写请求的数据,该该数据通过数据包1发送,数据包1的长度为200个字节,该数据包1的读序列号为12000。

业务进程中断前,主机向存储设备发送了数据包1中的160个字节的数据。业务进程中断过程中,主机没有向存储设备发送数据包1中的数据。

在此情况下,业务进程恢复时刻,内核内存保存的第一tcp序列号为12000,共享内存保存的第二tcp序列号为12000。业务进程恢复后,存储设备接收主机发送的数据包1中的剩余40个字节的数据。

本申请实施例提供的恢复数据传输的方法,当业务进程发生中断的情况下,能够快速恢复主机和存储设备之间的数据传输,使用户不会感知到业务进程曾经发生过中断,给用户带来良好的存储体验。

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

还应理解的是,这些步骤或操作仅是示例,本申请实施例还可以执行其它操作或者各种操作的变形。此外,各个步骤可以按照上述实施例呈现的不同的顺序来执行,并且有可能并非要执行上述实施例中的全部操作。

下面结合图8详细描述本申请的设备的实施例。应理解,方法实施例的描述与设备实施例的描述相互对应,因此,未详细描述的部分可以参见前面方法实施例。

图8示出了本申请实施例提供的存储设备800的结构示意图。如图8所示,存储设备800包括:通信单元801、存储单元802、处理单元803。

存储单元802:用于存储指令和数据;

处理单元803,用于启动业务进程及为该业务进程设置附属进程;

该处理单元803,还用于通过通信单元801建立该业务进程及该附属进程与主机之间的网络连接,其中,在所建立的网络连接中,该业务进程与该附属进程被分配同一条链路;

该处理单元803,还用于通过该附属进程维持该链路不中断。

应理解,该维护连接的装置800中各单元分别用于执行本申请实施例的维护连接的方法的各个步骤。这里,为了避免赘述,省略其详细说明。

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

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

本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。

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

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

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

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

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

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

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

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

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