发明内容
本申请提供故障模拟与仿真方法以及相关设备,能真实地模拟存储设备的故障场景,覆盖存储设备可能出现的各种故障场景,提高测试可靠性。
第一方面,本申请实施例提供一种故障模拟与仿真方法,应用于存储设备,包括:
接收主机设备发送的处理命令;根据该处理命令在预置故障信息集合中查找与该处理命令对应的第一故障信息;在查找到第一故障信息的情况下,根据第一故障信息向所述主机设备发送处理响应。
在本申请中,将故障信息预置在预置故障信息集合中,在接收到主机设备发送的处理命令的情况下,可以根据与该处理命令对应的第一故障信息将处理响应发送给主机设备,由于主机设备接收到的处理响应是存储设备根据故障信息发出的,可以将各种故障信息预置在存储设备中,存储设备可以根据不同的故障信息发出不同的处理响应,主机设备可以接收到多种处理响应而并非只是单一的处理成功的响应,故可以模拟存储设备的各种故障场景,提高测试可靠性。
结合第一方面,在一些可能的实施例中,该方法还包括:
接收所述主机设备发送的模拟仿真命令,所述模拟仿真命令中携带模拟信息;
对所述模拟仿真命令进行解析得到所述模拟信息,所述模拟信息包括所述模拟仿真命令的命令模式和命令类型;在根据所述命令模式和所述命令类型确定所述模拟仿真命令为故障设置命令的情况下,根据处理命令与故障信息的对应关系将所述模拟信息中的故障模拟信息作为故障信息保存至所述预置故障信息集合中。将故障模拟信息作为故障信息保存在预置故障信息集合中,在进行故障模拟时,可以模拟各种故障场景。
结合第一方面,在一些实施例中,该方法还包括:
在根据所述命令模式和所述命令类型确定所述模拟仿真命令为故障查询命令的情况下,向所述主机设备发送第一查询响应,所述第一查询响应中携带所述预置故障信息集合中保存的故障信息。响应主机设备发送的故障查询命令,可以使主机设备确定存储设备中当前已经预置了哪些故障信息,便于用户及时调整故障模拟策略。
结合第一方面,在一些实施例中,该方法还包括:
在根据所述命令模式和所述命令类型确定所述模拟仿真命令为故障删除命令的情况下,删除所述预置故障信息集合中保存的第二故障信息,所述第二故障信息为所述模拟仿真命令指定的故障信息。根据主机设备发送的故障删除命令及时删除故障信息,有助于进行多次反复的故障模拟测试。
结合第一方面,在一些实施例中,该方法还包括:
在根据所述命令模式和所述命令类型确定所述模拟仿真命令为属性设置命令的情况下,根据所述模拟信息中的第一属性模拟信息修改第一属性,并保存所述第一属性的默认信息,所述第一属性为所述模拟仿真命令指定的属性。根据主机设备发送的属性设置命令进行属性的修改,可以实现对存储设备的各种属性信息的仿真,有助于实现在各种场景下对主机端的故障处理流程的验证。
结合第一方面,在一些实施例中,该方法还包括:
在根据所述命令模式和所述命令类型确定所述模拟仿真命令为属性查询命令的情况下,向所述主机设备发送第二查询响应,所述第二查询响应中携带第二属性当前的信息,所述第二属性为所述模拟仿真命令指定的属性。
结合第一方面,在一些实施例中,该方法还包括:
在根据所述命令模式和所述命令类型确定所述模拟仿真命令为属性删除命令的情况下,将第三属性设置为第三属性的默认信息,所述第三属性为所述模拟仿真命令指定的属性。在仿真结束的情况下,将存储设备的属性设置为默认属性,恢复存储设备的正常性能。
结合第一方面,在一些实施例中,所述模拟信息还包括故障模拟使能标记;该方法还包括:
在所述故障模拟使能标记为有效标记的情况下,执行所述根据所述处理命令在预置故障信息集合中查找与所述处理命令对应的第一故障信息的步骤;在所述故障模拟使能标记为无效标记的情况下,确定执行所述处理命令的执行结果,根据所述执行结果向所述主机设备发送处理响应。通过设置故障模拟使能标记,用户可以根据使用需求设置存储设备的工作模式,存储设备可以作为故障模拟设备来使用,也可以作为正常的存储设备来使用,满足用户的需求。
结合第一方面,在一些实施例中,所述模拟信息还包括掉电保存标记;所述将所述模拟信息中的故障模拟信息作为故障信息保存至所述预置故障信息集合中包括:在所述掉电保存标记为有效标记的情况下,将所述模拟信息中的故障模拟信息作为故障信息保存至非易失性随机访问存储器NVram中。通过设置掉电保存标记,存储设备保存的故障信息在掉电后也能保存的存储设备中,避免因测试过程中断电而导致信息丢失。
第二方面,本申请实施例提供另一种故障模拟与仿真方法,应用于主机设备,包括:
向存储设备发送处理命令;接收所述存储设备发送的处理响应;在根据所述处理响应确定所述存储设备发送故障的情况下,根据所述处理响应启动故障处理流程。
由于该第一故障信息不是由主机设备修改得到,而是由存储设备发出,可以将各种故障信息预置在存储设备中,从而可以模拟存储设备的各种故障场景,提高测试可靠性。
结合第二方面,在一些实施例中,该方法还包括:
向所述存储设备发送模拟仿真命令,所述模拟仿真命令中携带模拟信息,所述模拟信息包括所述模拟仿真命令的命令模式和命令类型;在所述模拟仿真命令为故障设置命令的情况下,所述模拟信息还包括故障模拟信息,所述故障模拟信息被所述存储设备作为故障信息保存至预置故障信息集合中,或者,在所述模拟仿真命令为属性设置命令的情况下,所述模拟信息还包括属性模拟信息,所述属性模拟信息被所述存储设备用于修改所述存储设备的第一属性,所述第一属性为所述模拟仿真命令指定的属性。根据模拟仿真命令的不同性质,使模拟信息携带不同的信息,可以根据测试需求将不同的模拟信息发送给存储设备,实现对各种故障场景的模拟。
第三方面,本申请实施例提供一种存储设备,该存储设备具有实现第一方面所述的行为方法的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,该存储设备包括故障模拟模块、配置模块以及属性模拟模块,其中:所述故障模拟模块用于:接收主机设备发送的处理命令,根据所述处理命令在预置故障信息集合中查找与所述处理命令对应的第一故障信息,在查找到所述第一故障信息的情况下,根据第一故障信息向所述主机设备发送处理响应;所述配置模块用于:接收主机设备发送的模拟仿真命令,所述模拟仿真命令中携带模拟信息,对所述模拟仿真命令进行解析得到所述模拟信息,所述模拟信息包括所述模拟仿真命令的命令模式和命令类型,根据所述命令模式选择不同的模块执行该模拟仿真命令;所述配置模块还用于在所述模拟仿真命令为故障设置命令、故障查询命令或者故障删除命令的情况下,执行该模拟仿真命令;所述属性模拟模块用于在所述模拟仿真命令为属性设置命令、属性查询命令或者属性删除命令的情况下,执行该模拟仿真命令。
在一个可能的设计中,该存储设备包括控制器和存储器以及存储接口,所述控制器、存储器和存储接口相互连接,其中,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,执行以下操作:通过存储接口接收主机设备发送的处理命令;根据所述处理命令在预置故障信息集合中查找与所述处理命令对应的第一故障信息;在查找到所述第一故障信息的情况下,通过存储接口根据所述第一故障信息向所述主机设备发送处理响应。
第四方面,本申请实施例提供一种主机设备,该主机设备具有实现第二方面所述的行为方法的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,该主机设备包括处理模块和存储设备驱动模块,其中:所述处理模块用于向存储设备发送处理命令,接收所述存储设备发送的处理响应,在根据所述处理响应确定所述存储设备产生故障的情况下,根据所述处理响应启动故障处理流程;所述存储设备驱动模块用于向存储设备发送模拟仿真命令,所述模拟仿真命令中携带模拟信息,所述模拟信息包括所述模拟仿真命令的命令模式和命令类型;在所述模拟仿真命令为故障设置命令的情况下,所述模拟信息还包括故障模拟信息,所述故障模拟信息被所述存储设备作为故障信息保存至预置故障信息集合中,或者,在所述模拟仿真命令为属性设置命令的情况下,所述模拟信息还包括属性模拟信息,所述属性模拟信息被所述存储设备用于修改所述存储设备的第一属性,所述第一属性为所述模拟仿真命令指定的属性。
在一个可能的设计中,该主机设备包括处理器和通信接口,所述处理器中存储程序代码,所述处理器用于调用所述程序代码,执行以下操作:通过通信接口向存储设备发送处理命令;接收所述存储设备发送的处理响应;在根据所述处理响应确定所述存储设备产生故障的情况下,根据所述处理响应启动故障处理流程。
第五方面,本申请实施例提供一种计算机存储介质,用于储存为存储设备所用的计算机程序指令,其包含用于执行上述第一方面所涉及的程序。
第六方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面和第一方面各个可能的实现方式中的任意一种方法。
第七方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第二方面和第二方面各个可能的实现方式中的任意一种方法。
在本申请中,通过将各种故障信息预置在存储设备的预置故障信息集合中,由于处理响应是由存储设备根据故障发出的,将故障信息预置在存储设备中可以模拟存储设备的各种故障场景,提高测试可靠性。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
本申请的方案可以应用于配置有一个或多个存储设备的主机设备,主机设备与存储设备之间通过一个或多个总线连接,其中,总线包括但不限于PCI总线、PCIe总线、DE总线、SATA总线、SATAe总线、mSATA总线;主机设备可以为服务器、个人计算机设备、可移动设备,等等。主机设备与存储设备的连接关系可以如图1所示,其中,一个主机设备101通过PCIe总线连接n个存储设备102(1021,1022,1023…102n)。
参见图2,图2是本申请实施例提供的一种故障模拟与仿真方法的流程示意图,如图所示,所述方法包括:
S201,主机设备向存储设备发送处理命令,存储设备接收该处理命令。
这里,处理命令的命令格式由主机设备与存储设备之间采用的存储标准协议决定,例如,该处理命令的命令格式为采用NVMe标准协议的命令格式,或者,该处理命令的命令格式为采用串行ATA高级主控接口标准协议的命令格式,等等。
本申请实施例中,处理命令是指主机设备发送给存储设备的业务命令或者功能命令,例如,该处理命令可以为数据存储命令,数据读取命令,存储设备重启命令,等等。
S202,存储设备根据处理命令在预置故障信息集合中查找与处理命令对应的第一故障信息。
本申请中,预置故障信息集合为预先设置在存储设备中的存储设备可能出现的一些故障信息的集合,预置故障信息集合中的故障信息包括但不限于:设备无法识别、设备重启失败、设备温度告警、数据读取失败、数据存储失败、响应延时返回,等等。
这里,存储设备可根据处理命令与故障信息的对应关系在预置故障信息集合中查找与处理命令对应的第一故障信息。
在一些可能的实施例中,可通过在不同的位置节点存储不同的故障信息来建立处理命令与故障信息的对应关系,在接收到处理命令时,存储设备可根据处理命令在对应的位置查找第一故障信息。例如,将对应于第一处理命令的第一故障信息保存在第一位置,将对应于第二处理命令的第二故障信息保存在第二位置,在查找时查找对应位置的故障信息即可查找到与处理命令对应的故障信息。
在另一些可能的实施例中,也可通过设置不同的参数或者标记来建立处理命令与故障信息的对应关系,例如相互对应的处理命令和故障信息的参数或者标记相同。
不限于这里的两种方式,在可选实施方式中,也可通过其他的方式建立处理命令与故障信息的对应的关系。
S203,存储设备根据第一故障信息向主机设备发送处理响应,主机设备接收处理响应。
这里,处理响应与处理命令的命令格式相同。
本申请实施例中,存储设备根据第一故障信息确定向主机设备发送处理响应的时间以及处理响应的具体内容,即存储设备根据第一故障信息确定什么时候向主机设备发送响应,向主机设备发什么。例如,第一故障信息为设备无法识别,则存储设备在接收到该处理命令后,向主机设备发送内容为“设备无法识别”的处理响应;第一故障信息为数据读取失败,则存储设备在接收到该处理命令后,向主机设备发送内容为“数据读取失败”的处理响应;第一故障信息为响应延时返回,则存储设设备在接收到第一处理命令后,根据第一故障信息中的延时时长,在经过时长等于该延时时长的时间段之后向主机设备发送对该处理命令的处理响应;等等,不限于这里的描述。
S204,主机设备根据所述处理响应启动故障处理流程。
本申请实施例中,主机设备根据该处理响应确定存储设备产生的故障的类型,即确定存储设备发生了何种故障,然后根据存储设备产生的故障的类型启动相应的故障处理流程。
具体的,例如,若主机设备在经过一段时间后才接收到存储设备发送的处理响应,则主机设备确定存储设备出现响应延时的故障,则主机设备启动响应延时的故障处理流程;若主机设备接收到“设备无法识别”的处理响应,则主机设备启动设备无法识别的故障处理流程;若主机设备接收到存储设备发送的“数据读取失败”的处理响应,则主机设备启动数据读取失败的故障处理流程。
在现有的故障模拟方法中,由于存储设备返回的都是执行处理命令的执行结果,在存储设备未出故障的情况下,该执行结果为正确的结果,主机设备只能对这些结果进行修改得到错误的结果,无法模拟设备识别失败、命令延时响应等不属于命令执行结果的故障信息;而在本申请实施例中,由于将事先将故障信息预置在存储设备中,存储设备在接收到主机设备发送的处理命令时,根据与该处理命令对应的第一故障信息返回处理响应而非执行该处理命令的执行结果,所以能够模拟如设备识别失败等现有的故障模拟方法不能模拟的故障,可以覆盖更多的故障场景,在不同故障场景下进行多种测试,提高对主机软件的故障流程的验证的可靠性。
在一些可能的实施例中,与处理命令对应的故障信息可能有一个或多个,在与处理命令对应的故障信息有多个的情况下,存储设备可根据处理命令对应的多个故障信息的优先级将优先级最高的故障信息确定为第一故障信息。
例如,预置故障信息集合中当前有设备无法识别、数据存储失败、设备重启失败三条故障信息,主机设备下发的处理命令为数据存储命令,则在预置故障信息集合中与处理命令对应的故障信息为设备无法识别和数据存储失败。由于在实际的情况中,在设备无法识别的情况下,存储设备无法接收到主机设备下发的命令,所以设备无法识别的优先级高于数据存储失败的优先级。所以,存储设备将设备无法识别作为该处理命令对应的第一故障信息。
在一些实施方式中,可以将非响应类型的故障信息的优先级设置为高于响应类型的故障信息的优先级,其中,非响应类型的故障信息指如设备无法识别、设备温度告警、响应延时返回等可以对应于多个处理命令的故障信息,响应类型的故障信息指如数据读取失败、数据存储失败、设备重启失败等只对应于一个特定的处理命令的响应的故障信息;在另一些实施例方式中,也可以根据故障信息对应的故障的严重情况设置故障信息的优先级,例如,在设备无法识别的情况下,存储设备接收不到主机设备发送的任何命令,则将设备无法识别的优先级设置为最高优先级;在又一些实施方式中,还可以结合故障信息的类型以及故障信息对应的故障的严重情况设置故障信息的优先级。
在这种实施例中,在与处理命令对应的故障信息的情况下,通过设置故障信息的优先级的方式,将优先级更高的故障信息作为第一故障信息,存储设备根据第一故障信息返回处理响应,更贴合于存储设备在实际使用过程中出现故障时返回响应的实际情况。
在一些可能的实施例中,主机设备可以通过向存储设备发送模拟仿真命令将故障模拟信息发送给存储设备,存储设备将主机设备下发的故障模拟信息作为故障信息保存至预置故障信息集合中。此外,除了对存储设备的设备故障信息进行模拟,还可以对存储设备的属性或者存储设备的其他功能特性进行模拟,其中,可以针对不同的模拟仿真目的,可设计不同的变量,然后将变量作为模拟信息的一部分携带在主机设备发送给存储设备的模拟仿真命令中,以使存储设备根据该模拟仿真命令中携带的变量进行相应的操作,以实现对多种场景的模拟。
参见图3,图3是本申请实施例提供的另一种故障模拟与仿真方法的流程示意图,如图所示,所述方法包括:
S301,主机设备向存储设备发送模拟仿真命令,该模拟仿真命令中携带模拟信息,存储设备接收该模拟仿真命令。
S302,存储设备对该模拟仿真命令进行解析得到模拟信息,模拟信息包括模拟仿真命令的命令模式和命令类型。
S303,存储设备根据模拟仿真命令的命令模式和命令类型进行模拟仿真操作。
本申请中,模拟仿真命令可以为有关于设备故障的命令,模拟仿真命令也可以为有关于设备属性的命令,模拟仿真命令还可以为与存储设备的其他功能特性有关的命令。
具体的,模拟仿真命令包括但不限于以下几种:
①模拟仿真命令为故障设置命令;②模拟仿真命令为故障查询命令;③模拟仿真命令为故障删除命令;④模拟仿真命令为属性设置命令;⑤模拟仿真命令为属性查询命令;⑥模拟仿真命令为属性删除命令。
本申请中,模拟仿真命令不同,则该模拟仿真命令中携带的模拟信息的内容不同,其中,在该模拟仿真命令的命令类型为“设置”型命令的情况下,该模拟信息还包括需要进行设置的模拟信息,例如,模拟信息还包括故障模拟信息,属性模拟信息,等等。
根据不同的模拟仿真命令,存储设备可进行不同的模拟仿真操作。参见图4A-4F,图4A-4F是本申请实施例提供的存储设备根据不同的模拟仿真命令进行不同的模拟仿真操作的示意图。
图4A示出了模拟仿真命令为故障设置命令的情况下存储设备进行模拟仿真操作的情况:
1)主机设备向存储设备发送故障设置命令,模拟信息中携带故障模拟信息。
这里,故障模拟信息为对存储设备可能出现的一些故障信息的模拟,故障模拟信息可以由用户在主机设备上进行设置,然后下发到存储设备上。故障模拟信息包括但不限于:设备无法识别模拟信息、设备重启失败模拟信息、设备温度告警模拟信息、数据读取失败模拟信息、数据存储失败模拟信息、响应延时返回模拟信息,等等,不限于这里的描述。
2)存储设备根据处理命令与故障信息的对应关系将模拟信息中的故障模拟信息作为故障信息保存至预置故障信息集合中。处理命令与故障信息的对应关系已在前述图2所示的实施例中进行介绍,此处不再赘述。
3)存储设备向主机设备返回“故障设置成功”的响应。
举例来说,例如,主机设备向存储设备发送故障设置命令,模拟信息中携带“读取数据失败”的故障模拟信息,则存储设备将“读取数据失败”这一故障模拟信息保存在预置故障信息集合中,同时,向主机设备发送“故障设置成功”的响应。
图4B示出了模拟仿真命令为故障查询命令的情况下存储设备进行模拟仿真操作的情况:
1)主机设备向存储设备发送故障查询命令。
2)存储设备确定预置故障信息集合中保存的故障信息。
3)存储设备向主机设备返回携带预置故障信息集合中保存的故障信息的第一查询响应。
举例来说,例如,预置故障信息集合中保存了“数据读取失败”、“数据存储失败”、“设备重启失败”共3条故障模拟信息,主机设备向存储设备发送故障查询指令,则存储设备向主机设备返回“数据读取失败”、“数据存储失败”以及“设备重启失败”这3条故障模拟信息给主机设备。
图4C示出了模拟仿真命令为故障删除命令的情况下存储设备进行模拟仿真操作的情况:
1)主机设备向存储设备发送故障删除命令,指定删除第二故障信息。
2)存储设备删除预置故障信息集合中保存的第二故障信息。
3)存储设备向主机设备返回“故障删除成功”的响应。
举例来说,例如,预置故障信息集合中保存了“数据读取失败”、“数据存储失败”、“设备重启失败”共3条故障模拟信息,主机设备向存储设备发送删除指令,指定删除“数据存储失败”这一故障信息,则存储设备删除“数据存储失败”这一故障信息,并向主机设备发送“故障删除成功”的响应。
图4D示出了模拟仿真命令为属性设置命令的情况下存储设备进行模拟仿真操作的情况:
1)主机设备向存储设备发送属性设置命令,指定设置存储设备的第一属性,模拟信息中携带第一属性模拟信息。
2)存储设备修改存储设备的第一属性为第一属性模拟信息,并保存第一属性的默认信息。
这里,默认信息是指存储设备某一个属性真实且固有的信息,通过软件修改的方式无法对该默认信息进行修改。
3)存储设备向主机设备返回“属性设置成功”的响应。
举例来说,例如,主机设备向存储设备发送属性设置命令,指定设置存储设备的容量,指定将存储设备的容量设置为100G,存储设备的默认容量为500G,则存储设备修改存储设备的容量为100G,并保存容量为500G这一默认容量,然后,存储设备向主机设备发送“属性设置成功”的响应。
图4E示出了模拟仿真命令为属性查询命令的情况下存储设备进行模拟仿真操作的情况:
1)主机设备向存储设备发送属性查询命令,指定查询存储设备的第二属性。
2)存储设备确定存储设备的第二属性当前的信息。
3)存储设备向主机设备返回携带第二属性当前的信息的第二查询响应。
举例来说,例如,主机设备向存储设备发送属性查询命令,指定查询存储设备的型号,存储设备确定存储设备当前的型号信息,向主机设备返回存储设备当前的型号信息。
图4F示出了模拟仿真命令为属性删除命令的情况下存储设备进行模拟仿真操作的情况:
1)主机设备向存储设备发送属性删除命令,指定删除存储设备的第三属性。
2)存储设备将第三属性修改为第三属性的默认信息。
3)存储设备向主机设备返回“属性删除成功”的响应。
举例来说,例如,主机设备向存储设备发送属性删除指令,指定删除存储设备的容量,存储设备的默认容量为500G,则存储设备将存储设备的容量修改为500G,然后向主机设备发送“属性删除成功”的响应。
不限于这里的几种情况,存储设备还可根据模拟仿真命令的命令模式和命令类型进行其他的模拟仿真操作。
本申请实施例中,主机设备通过向存储设备下发模拟仿真命令,可将故障模拟信息、属性模拟信息等模拟信息发送到存储设备中进行保存、设置、修改等,可以满足多种测试场景,实现多次反复的故障模拟测试,提高主机软件测试的可靠性。
在一些可能的实施例中,可将存储设备设计为两种工作模式,分别为正常存储模式和故障模拟模式,在正常存储模式下,主机设备按照正常的处理流程返回处理响应,在故障模拟模式下,主机设备根据第一故障信息返回处理响应。存储设备可以通过主机设备下发的模拟仿真命令来确定按照哪种工作模式返回处理响应。
上述模拟信息中还可携带故障模拟使能标记,在该故障模拟使能标记为有效标记的情况下,存储设备执行步骤S202~S203;在该故障模拟使能标识为无效标记的情况下,存储设备确定执行该处理命令的执行结果,根据该执行结果向主机设备发送处理响应。
具体的,故障模拟使能标记可以为模拟信息中的第一变量,用第一变量的值来指示故障模拟使能标记为有效标记或无效标记,例如,第一变量为1表示故障模拟使能标记为有效标记,第一变量为0表示故障模拟使能标记为无效标记,或者,第一变量为0表示故障模拟标记为有效标记,第一变量为1表示故障模拟使能标记为无效标记。用户可通过改变第一变量的值来使故障模拟使能标记为有效标记或者无效标记。
在这种实施例中,正常存储模式适用于用户正常的存储需求,故障模拟模式适用于用户的主机测试需求,通过设置两种工作模式可以满足用户的不同需求。
在一些可能的实施例中,存储设备可包括两种类型的存储器,其中一种存储器为掉电丢失型存储器,另一种存储器为掉电不丢失型存储器。在将模拟故障信息作为故障信息保存在预置故障信息集合中时,存储设备可以通过主机设备下发的模拟仿真命令来确定将故障信息保存在存储设备的哪种存储器中,其中,丢失型存储器中保存的故障信息和掉电丢失型存储器中保存的故障信息组成前述实施例中所述的预置故障信息集合。
上述模拟信息中还可携带掉电保存标记。在该掉电保存标记为有效标记的情况下,存储设备将模拟信息中的故障模拟信息作为故障信息保存至掉电不丢失型存储器中;可选的,存储设备同时还可将模拟故障信息作为故障信息保存在丢失型存储器中。在该掉电保存标记为无效标记的情况下,存储设备将模拟信息中的故障模拟信息作为故障信息保存至掉电丢失型存储器中。
这里,掉电不丢失型存储器可以为非易失性随机访问存储器(Non-VolatileRandom Access Memory,NVram),也可以为闪存(FLASH),等等;掉电丢失型存储器可以为随机访问存储器(Random Access Memory,RAM)。
在这种实施例中,用户可根据具体的测试需求确定将故障模拟信息的保存方式,在该故障模拟信息仅需要被使用一次的情况下,可将该故障信息保存在掉电丢失型存储器中,实现断电则自动擦除,节省存储空间;在该故障模拟信息需要被多次使用的情况下,可将该故障模拟信息同时保存在掉电丢失型存储器和掉电不丢失型存储器中,故障模拟信息在断电后仍能保存。通过设置掉电保存标记可满足用户不同的测试需求。
上述详细阐述了本申请的方法,为了便于更好地实施本申请的上述方案,本申请还提供了相应的装置。
参见图5,图5是本申请实施例提供的一种存储设备的结构示意图,该存储设备50包括配置模块510、故障模拟模块520、属性模拟模块530以及扩展模块540,其中:
该故障模拟模块520用于执行上述图2所示的方法实施例中的存储设备执行的步骤,即步骤S201~S203,故障模拟模块520可用于接收主机设备发送的处理命令,根据处理命令在预置故障信息集合中查找与处理命令对应的第一故障信息,根据第一故障信息向主机设备发送处理响应。
该配置模块510用于接收主机设备发送的模拟仿真命令,模拟仿真命令携带模拟信息,对该模拟仿真命令进行解析得到模拟信息,模拟信息包括仿真命令的命令模式和命令类型,该配置模块510还用于根据模拟仿真命令的命令模式确定通过哪一个模块来处理该模拟仿真命令,该配置模块510还用于根据该模拟仿真命令的命令模式将解析得到的模拟信息发送给处理该模拟仿真命令的模块以使该模块根据该模拟仿真命令的命令类型进行模拟仿真操作。
本申请实施例中,模拟仿真命令的命令类型包括但不限于设置、查询、删除、修改。
本申请实施例中,在该模拟仿真命令为有关于设备故障的命令的情况下,配置模块510确定通过故障模拟模块520来处理该模拟仿真命令。
具体的,在该模拟仿真命令为故障设置命令的情况下,配置模块510通过故障模拟模块520根据处理命令与故障信息的对应关系将模拟信息中的故障模拟信息作为故障信息保存至预置故障信息集合中。在该模拟仿真命令为故障查询命令的情况下,配置模块510通过故障模拟模块520向主机设备发送第一查询响应,第一查询响应中携带预置故障信息集合中保存的故障信息。在该模拟仿真命令为故障删除命令的情况下,配置模块510通过故障模拟模块520删除所述预置故障信息集合中保存的第二故障信息,所述第二故障信息为所述模拟仿真命令指定的故障信息。
在一些可能的实施例中,模拟信息还携带故障使能标记,其中,在该故障模拟使能标记为有效标记的情况下,该故障模拟模块520执行图2所示的步骤S202~S203;在该故障模拟使能标记为无效标记的情况下,该故障模拟模块520按照正常的处理流程返回处理响应,即故障模拟模块520用于确定执行该处理命令的执行结果,向主机设备发送携带该执行结果的处理响应。
在该模拟仿真命令为有关于设备属性的命令的情况下,配置模块510确定通过属性模拟模块530来处理该模拟仿真命令。
具体的,在该模拟仿真命令为属性设置命令的情况下,配置模块510通过属性模拟模块530根据模拟信息中的属性模拟信息修改第一属性,并保存第一属性的默认信息,第一属性为该模拟仿真命令指定的属性。在该模拟仿真命令为属性查询命令的情况下,配置模块510通过属性模拟模块530向所述主机设备发送第二查询响应,第二查询响应中携带第二属性当前的信息,第二属性为该模拟仿真命令指定的属性。在该模拟仿真命令为属性删除命令的情况下,配置模块510通过属性模拟模块530将第三属性设置为第三属性的默认信息,第三属性为该模拟仿真命令指定的属性。
在该模拟仿真命令为与存储设备的其他功能特性有关的命令的情况下,配置模块510通过扩展模块540来处理该模拟仿真命令。
在一些可能的实施例中,配置模块510还用于提供保存接口给故障模拟模块520、属性模拟模块530以及扩展模块540,故障模拟模块520、属性模拟模块530以及扩展模块540可以通过该保存接口与掉电不丢失型存储器进行交互,例如,通过该保存接口将需要断电保存的数据保存进该掉电不丢失型存储器,或者,删除该掉电不丢失型存储器中保存的数据。
在一种可能的实现方式中,模拟信息中还可携带掉电保存标记,可通过掉电保存标记来指示故障模拟模块520、属性模拟模块530以及扩展模块540保存信息的方式,在该掉电保存标记为有效标记的情况下,将模拟信息中的信息保存在掉电不丢失型存储器中,例如,在掉电保存标记为有效标记的情况下,故障模拟模块520用于将模拟信息中的故障模拟信息作为故障信息保存至NVram中。
需要说明的是,图5对应的实施例中未提及的内容以及各个模块执行步骤的具体实现方式可参见方法实施例的描述,这里不再赘述。
在一种可能的实现方式中,图5中的配置模块510、故障模拟模块520、属性模拟模块530以及扩展模块540所实现的相关功能可以结合控制器与存储接口来实现。参见图6,图6是本申请实施例提供的另一种存储设备的结构示意图,其中,该存储设备60包括控制器601、存储器602以及存储接口603,控制器601、存储器602以及存储接口603通过一个或多个总线连接,控制器可以执行图2和图3所示的方法中存储设备的功能。
存储器602用于存储程序代码等。存储器602可以包括易失性存储器(volatilememory),例如随机存取存储器(random access memory,RAM);存储器602还可以包括非易失性存储器(non-volatile memory),例如快闪存储器(flash memory),硬盘(hard diskdrive,HDD)或固态硬盘(solid-state drive,SSD);存储器602还可以包括上述种类的存储器的组合。存储接口603用于接收和发送数据,这里,存储接口可以为采用NVMe标准的接口,也可以为采用AHCI标准的接口。
控制器601可以调用所述程序代码执行以下操作:
通过存储接口603接收主机设备发送的处理命令;
根据所述处理命令在预置故障信息集合中查找与所述处理命令对应的第一故障信息;
在查找到所述第一故障信息的情况下,通过存储接口603根据所述第一故障信息向所述主机设备发送处理响应。
进一步地,控制器601还可以与存储接口603相配合,执行本申请图2或图3所示实施例中存储设备的操作,具体可参见方法实施例中的描述,在此不再赘述。
本申请实施例中,由于将事先将故障信息预置在存储设备中,存储设备在接收到主机设备发送的处理命令时,根据第一故障信息直接返回与该处理响应而非执行该处理命令的执行结果,能够模拟如设备识别失败等现有的故障模拟方法不能模拟的故障,可以覆盖更多的故障场景,在不同故障场景下进行多种测试,提高对主机软件的故障流程的验证的可靠性。
参见图7,图7是本申请实施例提供的一种主机设备的结构示意图,该主机设备70包括处理模块710和存储设备驱动模块720,其中:
处理模块710用于向存储设备发送处理命令,接收存储设备发送的处理响应,在根据所述处理响应中确定所述存储设备产生故障的情况下,根据所述处理响应启动故障处理流程;
存储设备驱动模块720用于向存储设备发送模拟仿真命令,模拟仿真命令中携带模拟信息,所述模拟信息包括模拟仿真命令的命令模式和命令类型。
在一些可能的实施例中,在所述模拟仿真命令为故障设置命令的情况下,所述模拟信息还包括故障模拟信息,所述故障模拟信息被所述存储设备作为故障信息保存至预置故障信息集合中,或者,在所述模拟仿真命令为属性设置命令的情况下,所述模拟信息还包括属性模拟信息,所述属性模拟信息被所述存储设备用于修改所述存储设备的第一属性,所述第一属性为所述模拟仿真命令指定的属性。
在一些可能的实施例中,该存储设备驱动模块720还用于接收存储设备针对该模拟仿真命令的响应。
在一些可能的实施例中,该主机设备还可以包括命令操作模块730,命令操作模块730用于接收用户或处理模块发送的指令,将该指令中携带的信息封装成满足主机设备和存储设备之间的存储标准的命令,通过存储设备驱动模块720将该模拟仿真命令发送给存储设备,例如,该命令可以为上述的处理命令,该命令也可以为上述的模拟仿真命令;该命令操作模块730还用于接收存储设备驱动模块720发送的响应。
在一种可能的实现方式中,图7中的处理模块710、存储设备驱动模块720以及命令操作模块730所实现的相关功能可以结合处理器与通信接口来实现,参见图8,图8是本申请实施例提供的另一种主机设备的结构示意图,其中,该主机设备80包括处理器801以及通信接口802,通信接口802用于接收和发送数据,通信接口可以为采用NVMe标准的接口,也可以为采用AHCI标准的接口,处理器801存储有与存储设备通信的程序,处理器调用该程序执行以下操作:
通过通信接口802向存储设备发送处理命令;
通过通信接口802接收所述存储设备发送的处理响应;
在根据所述处理响应确定所述存储设备产生故障的情况下,根据所述处理响应启动故障处理流程。
进一步地,处理器801还可以与通信接口802相配合,执行本申请图2或图3所示实施例中主机设备的操作,具体可参见方法实施例中的描述,在此不再赘述。
本申请实施例还提供了一种计算机存储介质,可以用于存储图2或图3所示实施例中所述存储设备或主机设备所用的计算机软件指令,其包含用于执行上述实施例中为存储设备或主机设备所设计的程序。该存储介质包括但不限于快闪存储器、硬盘、固态硬盘。
本申请实施例还提供了一种计算机程序产品,该计算机产品被计算设备运行时,可以执行上述图2或图3实施例中为存储设备或主机设备所设计的故障模拟与仿真方法。
本领域普通技术人员可以意识到,结合本申请中所公开的实施例描述的各示例的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机指令可以存储在计算机可读存储介质中,或者通过所述计算机可读存储介质进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。