具体实施方式
下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种数据包发送系统,可以在双控系统或多控系统的所有控制器或者所有JBOD均发生故障,但并非所有控制器或者所有JBOD中实现相同功能的模块和交换设备同时发生故障时,维持整个I/O流程的完整性,提高了双控系统或多控系统的可靠性。
图1为本发明数据包发送系统一个实施例的结构示意图,如图1所示,该数据包发送系统包括:至少两个启动器101;至少两条数据链路,本发明实施例以数据包发送系统包括两条数据链路为例进行说明,但本发明实施例并不仅限于此,该数据包发送系统也可包括三条或三条以上数据链路。
其中一条数据链路包括依次连接的以下设备:第一光纤通道(FiberChannel;以下简称:FC)前端子板102、第一目标器(Target;以下简称:TGT)103、第一小型计算机系统接口(Small Computer System Interface;以下简称:SCSI)模块104、第一高速缓冲存储器(Cache)105、第一廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks;以下简称:RAID)106和第一固态硬盘(Solid State Disk;以下简称:SSD)组107;另一条数据链路包括依次连接的以下设备:第二FC前端子板108、第二TGT 109、第二SCSI模块110、第二Cache 111、第二RAID 112和第二SSD组113;该数据包发送系统还包括:交换设备114。一个启动器101与一条数据链路的FC前端子板连接。
其中,第一FC前端子板102、第一TGT 103、第一SCSI模块104和第一Cache 105实现第一控制器的功能;第一RAID 106和第一SSD组107实现第一JBOD的功能。同样,第二FC前端子板108、第二TGT 109、第二SCSI模块110和第二Cache 111实现第二控制器的功能;第二RAID112和第二SSD组113实现第二JBOD的功能。交换设备114是具有选路功能的设备,例如:具有选路功能的交换子板。
该系统中还包括接口1~接口12这12个接口,其中接口1是启动器101与第一FC前端子板102之间的接口,接口2是第一FC前端子板102与第一TGT 103之间的接口,接口3是第一TGT 103与第一SCSI模块104之间的接口,接口4是第一SCSI模块104与第一Cache 105之间的接口,接口5是第一Cache 105与第一RAID 106之间的接口,接口6是第一RAID 106与第一SSD组107之间的接口;接口7是启动器101与第二FC前端子板108之间的接口,接口8是第二FC前端子板108与第二TGT 109之间的接口,接口9是第二TGT 109与第二SCSI模块110之间的接口,接口10是第二SCSI模块110与第二Cache 111之间的接口,接口11是第二Cache 111与第二RAID112之间的接口,接口12是第二RAID 112与第二SSD组113之间的接口。
交换设备114通过上述接口1~接口12与两条数据链路连接,可以预先配置接口之间的对应关系,并将该接口之间的对应关系保存在交换设备114上,该接口之间的对应关系为一个启动器和一条数据链路的FC前端子板间的接口,与另一个启动器和另一条数据链路的FC前端子板间的接口的对应关系,以及一条数据链路中各设备间的接口与另一条数据链路中各设备间的接口的对应关系,以图1为例,该接口之间的对应关系为接口1~接口6与接口7~接口12的对应关系。本实施例中,接口1~接口6与接口7~接口12的对应关系可以如表1所示。
表1
接口 |
对应接口 |
接口1 |
接口7 |
接口2 |
接口8 |
接口3 |
接口9 |
接口4 |
接口10 |
接口5 |
接口11 |
接口6 |
接口12 |
以上只是接口之间的对应关系的一种示例,本发明实施例并不局限于此,在实际实现时可以根据具体的硬件连接配置各接口的对应关系,不影响本发明实施例的实现。
本实施例中,在其中任意一条数据链路的设备发生故障时,交换设备114接收发生故障的设备的上游设备发送的I/O数据包,根据接收该I/O数据包的接口和上述接口之间的对应关系,确定与接收该I/O数据包的接口对应的发送接口,并通过该发送接口将该I/O数据包下发至另一条数据链路中与该发生故障的设备对应的设备,该发生故障的设备与另一条数据链路中与该发生故障的设备对应的设备实现相同的功能,上述另一条数据链路为两条数据链路中除发生故障的设备所在数据链路之外的一条数据链路。
上述数据包发送系统实现了在双控系统或多控系统的所有控制器或者所有JBOD均发生故障,但并非所有控制器或者所有JBOD中实现相同功能的模块和交换设备同时发生故障时,维持整个I/O流程的完整性,提高了双控系统或多控系统的可靠性。
图2为本发明数据包发送方法一个实施例的流程图,如图2所示,该实施例包括:
步骤201,当至少两条数据链路中任意一条数据链路的设备发生故障时,交换设备接收发生故障的设备的上游设备发送的I/O数据包。
本实施例中,当上述数据包发送系统的任意一条数据链路的设备发生故障时,该发生故障的设备的上游设备将I/O数据包发送至交换设备,由该交换设备对该I/O数据包进行后续处理。
步骤202,交换设备根据预置的接收I/O数据包的接口和发送接口之间的对应关系,确定与接收该I/O数据包的接口对应的发送接口。
本实施例中,预先配置接口之间的对应关系,并将该接口之间的对应关系保存在交换设备上,该接口之间的对应关系为一个启动器和一条数据链路的FC前端子板间的接口,与另一个启动器和另一条数据链路的FC前端子板间的接口的对应关系,以及一条数据链路中各设备间的接口与另一条数据链路中各设备间的接口的对应关系,以图1为例,该接口之间的对应关系为接口1~接口6与接口7~接口12的对应关系,该接口之间的对应关系可以如表1所示。在接收到I/O数据包之后,交换设备根据接收该I/O数据包的接口和上述接口之间的对应关系,即可确定与接收该I/O数据包的接口对应的发送接口。
步骤203,通过该发送接口将上述I/O数据包下发至另一条数据链路中与该发生故障的设备对应的设备。
其中,该发生故障的设备与另一条数据链路中与该发生故障的设备对应的设备实现相同的功能。上述另一条数据链路为至少两条数据链路中除发生故障的设备所在数据链路之外的一条数据链路。
本实施例实现了在双控系统或多控系统的所有控制器或者所有JBOD均发生故障,但并非所有控制器或者所有JBOD中实现相同功能的模块和交换设备同时发生故障时,维持整个I/O流程的完整性,提高了双控系统或多控系统的可靠性。
图3为本发明数据包发送方法另一个实施例的流程图,如图3所示,该实施例包括:
步骤301,当至少两条数据链路中任意一条数据链路的设备发生故障时,交换设备接收发生故障的设备的上游设备发送的I/O数据包。
本实施例中,当上述数据包发送系统的任意一条数据链路的设备发生故障时,该发生故障的设备的上游设备将I/O数据包发送至交换设备,由该交换设备对该I/O数据包进行后续处理。
步骤302,交换设备存储接收到的I/O数据包。
优选地,在接收到发生故障的设备的上游设备发送的I/O数据包之后,交换设备可以将接收到的I/O数据包存储起来,例如:将接收到的I/O数据包存储到该交换设备的随机存储器中,从而可以防止交换设备突然发生故障而导致数据包丢失。
步骤303,根据预置的接收该I/O数据包的接口和发送接口之间的对应关系,确定与接收该I/O数据包的接口对应的发送接口。
本实施例中,预先配置接口之间的对应关系,并将该接口之间的对应关系保存在交换设备上,该接口之间的对应关系为一个启动器和一条数据链路的FC前端子板间的接口,与另一个启动器和另一条数据链路的FC前端子板间的接口的对应关系,以及一条数据链路中各设备间的接口与另一条数据链路中各设备间的接口的对应关系,以图1为例,该接口之间的对应关系为接口1~接口6与接口7~接口12的对应关系,该接口之间的对应关系可以如表1所示。在接收到I/O数据包之后,交换设备根据接收该I/O数据包的接口和上述接口之间的对应关系,即可确定与接收该I/O数据包的接口对应的发送接口。
步骤304,通过该发送接口将存储的I/O数据包下发至另一条数据链路中与该发生故障的设备对应的设备。
其中,该发生故障的设备与另一条数据链路中与该发生故障的设备对应的设备实现相同的功能。上述另一条数据链路为至少两条数据链路中除发生故障的设备所在数据链路之外的一条数据链路。
本实施例实现了在双控系统或多控系统的所有控制器或者所有JBOD均发生故障,但并非所有控制器或者所有JBOD中实现相同功能的模块和交换设备同时发生故障时,维持整个I/O流程的完整性,提高了双控系统或多控系统的可靠性。
图4为本发明数据包发送方法再一个实施例的流程图,如图4所示,该实施例包括:
步骤401,数据链路的设备接收I/O数据包,该设备为至少两条数据链路中任意一条数据链路的设备。
步骤402,当确定该设备的下游设备发生故障时,将该I/O数据包发送至交换设备。由该交换设备根据预置的接收该I/O数据包的接口和发送接口之间的对应关系,确定与接收该I/O数据包的接口对应的发送接口,并通过该发送接口将该I/O数据包下发至另一条数据链路中与该设备的下游设备对应的设备。上述接口之间的对应关系可以如表1所示。其中,该设备的下游设备与另一条数据链路中与该设备的下游设备对应的设备实现相同的功能。上述另一条数据链路为至少两条数据链路中除该设备所在数据链路之外的一条数据链路。
另外,当该设备确定该设备的下游设备未发生故障时,该设备将该I/O数据包发送至该设备的下游设备。
确定该设备的下游设备发生故障具体可以为:该设备先将I/O数据包发送至该设备的下游设备,在接收到发送失败响应或在预定时间长度内未接收到该设备的下游设备的响应之后确定该设备的下游设备发生故障;或者,该设备通过心跳检测,在预定的时间长度内未接收到该设备的下游设备的心跳响应时,确定该设备的下游设备发生故障。以上只是确定该设备的下游设备发生故障的两种方式,本发明实施例对确定该设备的下游设备发生故障的方式不做限定。
本实施例中,任意一条数据链路中的设备接收到I/O数据包之后,当确定该设备的下游设备发生故障时,该设备将该I/O数据包发送至交换设备,由该交换设备将该I/O数据包下发至另一条数据链路中与该设备的下游设备对应的设备。从而实现了在双控系统或多控系统的所有控制器或者所有JBOD均发生故障,但并非所有控制器或者所有JBOD中实现相同功能的模块和交换设备同时发生故障时,维持整个I/O流程的完整性,提高了双控系统或多控系统的可靠性。
图5为本发明数据包发送方法又一个实施例的流程图,如图5所示,该实施例包括:
步骤501,数据链路的设备接收I/O数据包,该设备为至少两条数据链路中任意一条数据链路的设备。
步骤502,存储接收到的I/O数据包。
优选地,在该设备接收到I/O数据包之后,该设备可以存储接收到的I/O数据包,例如将该I/O数据包存储到该设备的随机存储器中,从而可以防止该设备突然发生故障而导致数据包丢失。
步骤503,当确定该设备的下游设备发生故障时,将存储的I/O数据包发送至交换设备。由该交换设备根据预置的接收该I/O数据包的接口和发送接口之间的对应关系,确定与接收该I/O数据包的接口对应的发送接口,并通过该发送接口将该I/O数据包下发至另一条数据链路中与该设备的下游设备对应的设备。上述接口之间的对应关系可以如表1所示。其中,该设备的下游设备与另一条数据链路中与该设备的下游设备对应的设备实现相同的功能。上述另一条数据链路为至少两条数据链路中除该设备所在数据链路之外的一条数据链路。
另外,当该设备确定该设备的下游设备未发生故障时,该设备将该I/O数据包发送至该设备的下游设备。
确定该设备的下游设备发生故障具体可以为:该设备先将I/O数据包发送至该设备的下游设备,在接收到发送失败响应或在预定时间长度内未接收到该设备的下游设备的响应之后确定该设备的下游设备发生故障;或者,该设备通过心跳检测,在预定的时间长度内未接收到该设备的下游设备的心跳响应时,确定该设备的下游设备发生故障。以上只是确定该设备的下游设备发生故障的两种方式,本发明实施例对确定该设备的下游设备发生故障的方式不做限定。
本实施例中,任意一条数据链路的设备接收到I/O数据包之后,该设备可以先存储该I/O数据包,当确定该设备的下游设备发生故障时,该设备将存储的I/O数据包发送至交换设备,由该交换设备将该I/O数据包下发至另一条数据链路中与该设备的下游设备对应的设备。从而实现了在双控系统或多控系统的所有控制器或者所有JBOD均发生故障,但并非所有控制器或者所有JBOD中实现相同功能的模块和交换设备同时发生故障时,维持整个I/O流程的完整性,提高了双控系统或多控系统的可靠性。
下面通过一个具体的实施例,对本发明实施例提出的基于图1所示数据包发送系统的数据包发送方法进行详细说明。
图6为本发明数据包发送方法还一个实施例的流程图,该实施例假设图1所示数据包发送系统中的第一TGT 103、第一Cache 105和第二SCSI模块110发生故障,如图6所示,该实施例包括:
步骤601,启动器101向第一FC前端子板102发送I/O数据包。
具体地,启动器101可以通过ISCSI协议/FC协议将该I/O数据包发送至第一FC前端子板102。
步骤602,第一FC前端子板102接收I/O数据包,在确定第一TGT 103发生故障之后,将该I/O数据包发送至交换设备114。
其中,确定第一TGT 103发生故障具体可以为:第一FC前端子板102先将I/O数据包发送至第一TGT 103,在接收到发送失败响应或在预定时间长度内未接收到第一TGT 103的响应之后确定第一TGT 103发生故障;或者,第一FC前端子板102通过心跳检测,在预定的时间长度内未接收到第一TGT103的心跳响应时,确定第一TGT 103发生故障。以上只是确定第一TGT 103发生故障的两种方式,本发明实施例对第一FC前端子板102确定第一TGT103发生故障的方式不做限定。
步骤603,交换设备114通过接口2接收I/O数据包,并根据接口之间的对应关系,确定接口2对应的接口。
具体地,交换设备114通过接口2接收第一FC前端子板102发送的数据包,通过查找表1,交换设备114可以确定接口2对应的接口为接口8。
步骤604,交换设备114将该I/O数据包通过接口8发送至第二TGT 109。
步骤605,第二TGT 109接收交换设备114发送的I/O数据包,在确定第二SCSI模块110发生故障之后,将I/O数据包通过接口9发送至交换设备114。
其中,确定第二SCSI模块110发生故障具体可以为:第二TGT 109先将I/O数据包发送至第二SCSI模块110,在接收到发送失败响应或在预定时间长度内未接收到第二SCSI模块110的响应之后确定第二SCSI模块110发生故障;或者,第二TGT 109通过心跳检测,在预定的时间长度内未接收到第二SCSI模块110的心跳响应时,确定第二SCSI模块110发生故障。以上只是确定第二SCSI模块110发生故障的两种方式,本发明实施例对第二TGT109确定第二SCSI模块110发生故障的方式不做限定。
步骤606,交换设备114通过接口9接收I/O数据包,并根据接口之间的对应关系,确定接口9对应的接口。
具体地,交换设备114通过接口9接收第二TGT 109发送的I/O数据包,通过查找表1,交换设备114可以确定接口9对应的接口为接口3。
步骤607,交换设备114通过接口3将I/O数据包发送至第一SCSI模块104。
步骤608,第一SCSI模块104接收交换设备114发送的I/O数据包,在确定第一Cache 105发生故障之后,将该I/O数据包通过接口4发送至交换设备114。
其中,确定第一Cache 105发生故障具体可以为:第一SCSI模块104先将I/O数据包发送至第一Cache 105,在接收到发送失败响应或在预定时间长度内未接收到第一Cache 105的响应之后确定第一Cache 105发生故障;或者,第一SCSI模块104通过心跳检测,在预定的时间长度内未接收到第一Cache105的心跳响应时,确定第一Cache 105发生故障。以上只是确定第一Cache105发生故障的两种方式,本发明实施例对第一SCSI模块104确定第一Cache105发生故障的方式不做限定。
步骤609,交换设备114通过接口4接收I/O数据包,并根据接口之间的对应关系,确定接口4对应的接口。
具体地,交换设备114通过接口4接收第一SCSI模块104发送的I/O数据包,通过查找表1,交换设备114可以确定接口4对应的接口为接口10。
步骤610,交换设备114通过接口10将I/O数据包发送至第二Cache 111。
步骤611,第二Cache 111接收交换设备114发送的I/O数据包,并将该I/O数据包发送至第二RAID 112。
步骤612,第二RAID 112接收第二Cache 111发送的I/O数据包,并将该I/O数据包发送至第二SSD组113。
步骤613,第二SSD组113接收第二RAID 112发送的I/O数据包,并对该I/O数据包进行相应操作,例如:保存该I/O数据包中的数据,或者根据该I/O数据包中的命令读取相应的数据等。
本实施例中,在图1所示数据包发送系统中,任意一条数据链路中的一设备发现该设备的下游设备发生故障之后,该设备将该设备的上游设备发送的I/O数据包发送至交换设备114;交换设备114根据接收该I/O数据包接口和接口之间的对应关系,确定发送接口,然后通过确定的发送接口将I/O数据包发送至另一条数据链路中与该设备的下游设备对应的设备。从而实现了在双控系统或多控系统的所有控制器或者所有JBOD均发生故障,但并非所有控制器或者所有JBOD中实现相同功能的模块和交换设备同时发生故障时,维持整个I/O流程的完整性,提高了双控系统或多控系统的可靠性。以图1所示系统架构为例,现有技术的双控系统不能运行的可能性为 而通过本发明实施例提供的方法,图1所示系统架构不能运行的可能性降低为 大大提高了双控系统或多控系统的可靠性。
上述实施例以数据包发送系统中包括两条数据链路为例进行说明,当该数据包发送系统中包括三条或三条以上数据链路时,数据包的发送方法与之类似,在此不再赘述。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图7为本发明交换设备一个实施例的结构示意图,该实施例的交换设备可以实现如本发明图2或图3所示实施例的流程,该交换设备可以为具有选路功能的交换子板。如图7所示,该交换设备包括:接收模块71、确定模块72和发送模块73。
其中,当至少两条数据链路中任意一条数据链路的设备发生故障时,接收模块71接收发生故障的设备的上游设备发送的I/O数据包,确定模块72根据预置的接收模块71接收该I/O数据包的接口和发送接口之间的对应关系,确定与接收该I/O数据包的接口对应的发送接口;发送模块73通过确定模块72确定的发送接口将该I/O数据包下发至另一条数据链路中与该发生故障的设备对应的设备。其中,该发生故障的设备与另一条数据链路中与该发生故障的设备对应的设备实现相同的功能。上述另一条数据链路为至少两条数据链路中除发生故障的设备所在数据链路之外的一条数据链路。
本实施例中,预先配置接口之间的对应关系,该接口之间的对应关系为一个启动器和一条数据链路的光纤通道前端子板间的接口,与另一个启动器和另一条数据链路的光纤通道前端子板间的接口的对应关系,以及一条数据链路中各设备间的接口与另一条数据链路中各设备间的接口的对应关系,以图1为例,该接口之间的对应关系为接口1~接口6与接口7~接口12的对应关系,该接口之间的对应关系可以如表1所示。
本实施例中,当任意一条数据链路的设备发生故障时,发生故障的设备的上游设备将I/O数据包发送至交换设备,交换设备的接收模块71接收到I/O数据包之后,确定模块72根据预置的接收模块71接收该I/O数据包的接口和发送接口之间的对应关系可以确定与接收该I/O数据包的接口对应的发送接口,然后由发送模块73通过确定模块72确定的发送接口将该I/O数据包下发至另一条数据链路中与该发生故障的设备对应的设备,从而实现了在双控系统或多控系统的所有控制器或者所有JBOD均发生故障,但并非所有控制器或者所有JBOD中实现相同功能的模块和交换设备同时发生故障时,维持整个I/O流程的完整性,提高了双控系统或多控系统的可靠性。
图8为本发明交换设备另一个实施例的结构示意图,该实施例的交换设备可以实现如本发明图2或图3所示实施例的流程,该交换设备可以为具有选路功能的交换子板。如图8所示,该交换设备包括:接收模块81、确定模块82、发送模块83和存储模块84。
其中,当至少两条数据链路中任意一条数据链路的设备发生故障时,接收模块81接收发生故障的设备的上游设备发送的I/O数据包,确定模块82根据预置的接收模块81接收该I/O数据包的接口和发送接口之间的对应关系,确定与接收该I/O数据包的接口对应的发送接口;发送模块83通过确定模块82确定的发送接口将该I/O数据包下发至另一条数据链路中与该发生故障的设备对应的设备。其中,该发生故障的设备与另一条数据链路中与该发生故障的设备对应的设备实现相同的功能。上述另一条数据链路为至少两条数据链路中除发生故障的设备所在数据链路之外的一条数据链路。
存储模块84可以存储接收模块81接收到的I/O数据包,这时发送模块83用于通过确定模块82确定的发送接口将存储模块84存储的I/O数据包下发至另一条数据链路中与该发生故障的设备对应的设备,从而可以防止该交换设备突然发生故障而导致I/O数据包丢失。其中,该发生故障的设备与另一条数据链路中与该发生故障的设备对应的设备实现相同的功能。
本实施例中,当任意一条数据链路的设备发生故障时,发生故障的设备的上游设备将I/O数据包发送至交换设备,交换设备的接收模块81接收到I/O数据包之后,可以由存储模块84先存储该I/O数据包,确定模块82根据预置的接收模块81接收该I/O数据包的接口和发送接口之间的对应关系可以确定与接收该I/O数据包的接口对应的发送接口,然后由发送模块83通过确定模块82确定的发送接口将存储模块84存储的I/O数据包下发至另一条数据链路中与该发生故障的设备对应的设备,从而实现了在双控系统或多控系统的所有控制器或者所有JBOD均发生故障,但并非所有控制器或者所有JBOD中实现相同功能的模块和交换设备同时发生故障时,维持整个I/O流程的完整性,提高了双控系统或多控系统的可靠性。
在具体实现时,图7所示交换设备的接收模块71和发送模块73,以及图8所示交换设备的接收模块81和发送模块83可以由命令包传送芯片(Transfer)实现;图7所示交换设备的确定模块72,以及图8所示交换设备的确定模块82和存储模块84可以由带有精简指令集计算(ReducedInstructions Set Computing;以下简称:RISC)处理器、随机存储器(RandomAccess Memory;以下简称:RAM)、只读存储器(Read Only Memory;以下简称:ROM)和时钟的处理器芯片实现,该处理器芯片可以选用MPC系列的芯片,但本发明实施例并不仅限于此,本发明实施例对处理器芯片的系列不作限定,可以采用任意可以实现上述功能的处理器芯片。
图9为本发明处理器芯片一个实施例的结构示意图,如图9所示,该处理器芯片9可以包括:RISC处理器91、RAM 92、ROM 93和时钟模块94。其中,RISC处理器91用于程序控制,ROM 93用于放置交换设备功能程序。为了避免一次软件崩溃就引起处理器芯片出错,可以在ROM 93中放置压缩的交换设备功能程序,在处理器芯片上电时再将该交换设备功能程序解压到RAM 92中。可以将RAM 92分块,比如分100块,图10为本发明RAM分块一个实施例的示意图,如图10所示,Block0~Block5用于放置解压出来的交换设备功能程序,Block6~Block10用于放置配置参数,提供参数配置和修改功能,该配置参数包括预置的接口之间的对应关系,例如:可以将表1所示的对应关系设置在配置参数中,保存在RAM 92的Block6~Block10中;RAM 92的其他块用于存储I/O数据包以及预留,实现图8所示交换设备的存储模块84的功能。时钟模块94用于为交换设备提供时钟。具体地,上述交换设备可以为具有选路功能的交换子板。
另外,该处理器芯片还可以包括管脚1~管脚7,用于基本的功能交互,例如:管脚1可用于数据交互,管脚2可用于内存寻址,管脚3可用于接口控制,管脚4可用于错误上报,管脚5可用于中断触发,管脚6和管脚7可用于系统时钟。当然,本发明实施例并不仅限于此,处理器芯片还可引出更多管脚,管脚的功能也可根据具体的实际情况进行不同设置。
图11为本发明数据包发送装置一个实施例的结构示意图,该实施例的数据包发送装置可以作为目标器,或目标器的一部分;或者作为SCSI模块,或SCSI模块的一部分;或者作为高速缓冲存储器,或高速缓冲存储器的一部分;该实施例的数据包发送装置可以实现如本发明图4或图5所示实施例的流程。
如图11所示,该数据包发送装置可以包括:数据包接收模块1101和数据包发送模块1102。其中,数据包接收模块1101用于接收I/O数据包;当确定该数据包发送装置的下游设备发生故障时,数据包发送模块1102将数据包接收模块1101接收的I/O数据包发送至交换设备,使得该交换设备根据预置的接收I/O数据包的接口和发送接口之间的对应关系,确定与接收该I/O数据包的接口对应的发送接口,并通过该发送接口将I/O数据包下发至另一条数据链路中与该数据包发送装置的下游设备对应的设备。上述接口之间的对应关系可以如表1所示。其中,该数据包发送装置的下游设备与另一条数据链路中与该数据包发送装置的下游设备对应的设备实现相同的功能。上述另一条数据链路为至少两条数据链路中除该数据包发送装置所在数据链路之外的一条数据链路。
另外,数据包发送模块1102还可以在确定该数据包发送装置的下游设备未发生故障时,将该I/O数据包发送至该数据包发送装置的下游设备。
确定数据包发送装置的下游设备发生故障具体可以为:数据包发送模块1102先将I/O数据包发送至该数据包发送装置的下游设备,在接收到发送失败响应或在预定时间长度内未接收到该数据包发送装置的下游设备的响应之后确定该数据包发送装置的下游设备发生故障;或者,该数据包发送装置通过心跳检测,在预定的时间长度内未接收到该数据包发送装置的下游设备的心跳响应时,确定该数据包发送装置的下游设备发生故障。以上只是确定该数据包发送装置的下游设备发生故障的两种方式,本发明实施例对确定该数据包发送装置的下游设备发生故障的方式不做限定。
本实施例中,在数据包接收模块1101接收到I/O数据包之后,当确定该数据包发送装置的下游设备发生故障时,数据包发送模块1102将该I/O数据包发送至交换设备,由该交换设备将该I/O数据包下发至另一条数据链路中与该数据包发送装置的下游设备对应的设备。从而实现了在双控系统或多控系统的所有控制器或者所有JBOD均发生故障,但并非所有控制器或者所有JBOD中实现相同功能的模块和交换设备同时发生故障时,维持整个I/O流程的完整性,提高了双控系统或多控系统的可靠性。
图12为本发明数据包发送装置另一个实施例的结构示意图,该实施例的数据包发送装置可以作为目标器,或目标器的一部分;或者作为SCSI模块,或SCSI模块的一部分;或者作为高速缓冲存储器,或高速缓冲存储器的一部分;该实施例的数据包发送装置可以实现如本发明图4或图5所示实施例的流程。
如图12所示,该数据包发送装置可以包括:数据包接收模块1201、数据包发送模块1202和数据包存储模块1203。其中,数据包接收模块1201用于接收I/O数据包;当确定该数据包发送装置的下游设备发生故障时,数据包发送模块1202将数据包接收模块1201接收的I/O数据包发送至交换设备,使得该交换设备根据预置的接收I/O数据包的接口和发送接口之间的对应关系,确定与接收该I/O数据包的接口对应的发送接口,并通过该发送接口将I/O数据包下发至另一条数据链路中与该数据包发送装置的下游设备对应的设备。上述接口之间的对应关系可以如表1所示。其中,该数据包发送装置的下游设备与另一条数据链路中与该数据包发送装置的下游设备对应的设备实现相同的功能。上述另一条数据链路为至少两条数据链路中除该数据包发送装置所在数据链路之外的一条数据链路。
另外,数据包发送模块1202还可以在确定该数据包发送装置的下游设备未发生故障时,将该I/O数据包发送至该数据包发送装置的下游设备。
其中,确定数据包发送装置的下游设备发生故障具体可以为:数据包发送模块1202先将I/O数据包发送至该数据包发送装置的下游设备,在接收到发送失败响应或在预定时间长度内未接收到该数据包发送装置的下游设备的响应之后确定该数据包发送装置的下游设备发生故障;或者,该数据包发送装置通过心跳检测,在预定的时间长度内未接收到该数据包发送装置的下游设备的心跳响应时,确定该数据包发送装置的下游设备发生故障。以上只是确定该数据包发送装置的下游设备发生故障的两种方式,本发明实施例对确定该数据包发送装置的下游设备发生故障的方式不做限定。
优选地,数据包存储模块1203可以存储数据包接收模块1201接收到的I/O数据包,这时数据包发送模块1202可以在确定该数据包发送装置的下游设备发生故障时,将数据包存储模块1203存储的I/O数据包发送至交换设备,从而可以防止该数据包发送装置突然发生故障而导致数据包丢失。
本实施例中,在数据包接收模块1201接收到I/O数据包之后,可以先由数据包存储模块1203存储数据包接收模块1201接收到的I/O数据包,当确定该数据包发送装置的下游设备发生故障时,数据包发送模块1202将数据包存储模块1203存储的I/O数据包发送至交换设备,由该交换设备将该I/O数据包下发至另一条数据链路中与该数据包发送装置的下游设备对应的设备。从而实现了在双控系统或多控系统的所有控制器或者所有JBOD均发生故障,但并非所有控制器或者所有JBOD中实现相同功能的模块和交换设备同时发生故障时,维持整个I/O流程的完整性,提高了双控系统或多控系统的可靠性。
在具体实现时,由于目标器、SCSI模块和高速缓冲存储器实现的功能均是对I/O数据包的处理,因此目标器、SCSI模块和高速缓冲存储器可以使用相同的功能芯片实现,即图11或图12所示的数据包发送装置可以由一种功能芯片实现。图13为本发明功能芯片一个实施例的结构示意图,如图13所示,该功能芯片13可以包括:RISC处理器1301、ROM 1302、第一RAM 1303和时钟模块1304;为了进行I/O交互,该功能芯片还可以包括:I/O接口1305和第二RAM 1306;该功能芯片还可以包括:电源控制器1307。
其中,RISC处理器1301用于程序控制,ROM 1302用于放置芯片功能程序。为了避免一次软件崩溃就引起功能芯片出错,可以在ROM 1302中放置压缩的芯片功能程序,在功能芯片上电时再将该芯片功能程序解压到第一RAM 1303中。可以将第一RAM 1303分块,比如分100块,可以采用如图10所示的分块方式,在功能芯片中,第一RAM 1303的Block0~Block5用于放置解压出来的芯片功能程序,Block6~Block10用于放置配置参数,提供参数配置和修改功能,其他块用于存储I/O数据包以及预留,实现数据包存储模块1203的功能。时钟模块1304用于为功能芯片提供时钟。第二RAM 1306用于I/O控制,与I/O接口1305共同实现I/O交互功能,可以实现图11所示数据包发送装置中数据包接收模块1101和数据包发送模块1102的功能,还可以实现图12所述数据包发送装置中数据包接收模块1201和数据包发送模块1202的功能;电源控制器1307用于管理该功能芯片的电压和功耗。
另外,该功能芯片还可以包括管脚1~管脚14,用于基本的功能交互,例如:管脚1可用于数据交互,管脚2可用于内存寻址,管脚3可用于接口控制,管脚4可用于错误上报,管脚5可用于中断触发,管脚6和管脚7可用于系统时钟,管脚8可用于上电管理,管脚9~管脚14用于输入或输出I/O数据包。当然,本发明实施例并不仅限于此,功能芯片还可引出更多管脚,管脚的功能也可根据具体的实际情况进行不同设置。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对本发明的技术方案进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。