技术领域
[0001] 本
发明实施例涉及但不限于测试技术,尤指一种固态硬盘(SSD,Solid State Drives)异常掉电的测试方法、装置和系统。
背景技术
[0002] SSD掉电分为两种,一种是正常掉电,另一种是异常掉电。
[0003] 正常掉电是指在掉电前,主机会通过命令通知SSD,比如串行高级技术附件(SATA,Serial Advanced Technology Attachment)中的Idle Immediately,SSD收到该命令后,会将SSD的动态随机存取
存储器(DRAM,Dynamic Random Access Memory)中的数据写入SSD的闪存;其中,DRAM中的数据例如可以是DRAM中的buffer中缓存的数据、映射表、闪存的
块信息、其他信息等。主机等SSD将DRAM中的数据写入SSD的闪存后,才会真正停止对SSD的供电。正常掉电不会导致数据的丢失,重新上电后,SSD只需把掉电前写入闪存的数据重新加载到DRAM中,又能接着掉电前的状态继续工作。
[0004] 异常掉电是指SSD在没有收到主机的掉电通知时就被断电;或者收到主机的掉电通知后还没来得及将DRAM中的数据写入SSD的闪存就被断电了。异常掉电可能会导致数据的丢失,比如DRAM中的数据来不及写入闪存,掉电导致这部分数据丢失,还有根据闪存特性,如果掉电发生在写多层单元(MLC,Multi-Level Cell)的上页(Upper Page),会导致其对应的下页(Lower Page)数据遭到破坏,也就意味着之前写入闪存的数据也可能由于异常掉电导致丢失。
[0005] SSD掉电是SSD测试工作中的一个重要环节,根据SSD掉电的测试结果可以判断SSD是否正常,因此对SSD掉电的测试至关重要,然而目前没有有效方式能够对SSD进行异常掉电的测试。
发明内容
[0006] 本发明实施例提供了一种SSD异常掉电的测试方法、装置和系统,能够对SSD进行异常掉电的测试。
[0007] 本发明一个实施例提出了一种固态硬盘异常掉电的测试方法,包括:
[0008] 接收到测试指令;其中,所述测试指令包括:掉电类型、待测固态硬盘SSD的数量、每一个待测SSD的模型Model号、为待测SSD供电的电源的插槽号;
[0009] 当没有任何一个用于向SSD下发输入输出IO命令的
进程启用时,将当前循环次数加1后进行预定处理;分别获取每一个待测SSD的Model号、容量信息和Smart信息并进行预定处理;其中,预定处理包括以下一个或多个的组合:打印;写入第一日志文件;
[0010] 根据待测SSD的数量启用对应数量的用于向待测SSD下发IO命令的进程,通过启用的进程分别向每一个待测SSD下发IO命令;
[0011] 分别在每一个待测SSD执行IO命令过程中向为每一个待测SSD供电的电源下发掉电命令,在下发掉电命令后的第一预设时间后向所述电源下发上电命令;分别对每一个待测SSD的上电次数进行预定处理,结束所有启用的用于向待测SSD下发IO命令的进程;继续执行所述将当前循环次数加1后进行预定处理的步骤,直到当前循环次数加1后大于最大循环次数。
[0012] 在本发明实施例中,所述通过启用的进程分别向每一个待测SSD下发IO命令包括:
[0013] 分别生成每一个待测SSD的配置文件,分别根据每一个待测SSD的配置文件通过启用的进程向每一个待测SSD下发IO命令。
[0014] 在本发明实施例中,所述配置文件包括所述待测SSD的容量信息对应的范围内的逻辑区块地址LBA中用于执行IO命令的LBA、读写比例、IO块大小。
[0015] 在本发明实施例中,该方法还包括:
[0016] 分别根据每一个待测SSD执行IO命令时生成的第二日志文件判断每一个待测SSD是否存在IO异常的情况,当判断出所有待测SSD均不存在IO异常的情况时,继续执行所述分别向为每一个待测SSD供电的电源下发掉电命令的步骤。
[0017] 在本发明实施例中,该方法还包括:
[0018] 分别检测每一个待测SSD的Model号、容量信息和Smart信息是否正常,当所有待测SSD的Model号、容量信息和Smart信息均正常时,继续执行所述结束所有启用的用于向待测SSD下发IO命令的进程的步骤。
[0019] 本发明另一个实施例提出了一种固态硬盘异常掉电的测试装置,包括处理器和计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令被所述处理器执行时,实现上述任一种固态硬盘异常掉电的测试方法。
[0020] 本发明另一个实施例提出了一种计算机可读存储介质,其上存储有
计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述任一种固态硬盘异常掉电的测试方法的步骤。
[0021] 本发明另一个实施例提出了一种固态硬盘异常掉电的测试系统,包括:
[0022] 固态硬盘异常掉电的测试装置,包括处理器和计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令被所述处理器执行时,实现上述任一种固态硬盘异常掉电的测试方法;
[0023] 电源,与一个或多个待测固态硬盘SSD连接,用于为一个或多个待测SSD供电,在固态硬盘异常掉电的测试装置的控制下进行掉电和上电操作;
[0024] 一个或多个待测SSD,与电源和固态硬盘异常掉电的测试装置中的处理器连接,用于接收处理器下发的IO命令并执行。
[0025] 本发明实施例包括:接收到测试指令;其中,所述测试指令包括:掉电类型、待测固态硬盘SSD的数量、每一个待测SSD的模型Model号、为待测SSD供电的电源的插槽号;当没有任何一个用于向SSD下发输入输出IO命令的进程启用时,将当前循环次数加1后进行预定处理;分别获取每一个待测SSD的Model号、容量信息和Smart信息并进行预定处理;其中,预定处理包括以下一个或多个的组合:打印;写入第一日志文件;根据待测SSD的数量启用对应数量的用于向待测SSD下发IO命令的进程,通过启用的进程分别向每一个待测SSD下发IO命令;分别在每一个待测SSD执行IO命令过程中向为每一个待测SSD供电的电源下发掉电命令,在下发掉电命令后的第一预设时间后向所述电源下发上电命令;分别对每一个待测SSD的上电次数进行预定处理,结束所有启用的用于向待测SSD下发IO命令的进程;继续执行所述将当前循环次数加1后进行预定处理的步骤,直到当前循环次数加1后大于最大循环次数。本发明实施例通过在待测SSD执行IO命令过程中对待测SSD进行下电和上电操作,从而实现了对SSD进行异常掉电的测试。
[0026] 本发明实施例的其它特征和优点将在随后的
说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明实施例而了解。本发明实施例的目的和其他优点可通过在说明书、
权利要求书以及
附图中所特别指出的结构来实现和获得。
附图说明
[0027] 附图用来提供对本发明实施例技术方案的进一步理解,并且构成说明书的一部分,与本发明实施例的实施例一起用于解释本发明实施例的技术方案,并不构成对本发明实施例技术方案的限制。
[0028] 图1为本发明一个实施例提出的SSD异常掉电的测试方法的
流程图;
[0029] 图2为本发明另一个实施例提出的SSD异常掉电的测试系统的结构组成示意图;
[0030] 图3为本发明另一个实施例提出的SSD异常掉电的测试装置的结构组成示意图。
具体实施方式
[0031] 下文中将结合附图对本发明实施例进行详细说明。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互任意组合。
[0032] 在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的
计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0033] 参见图1,本发明一个实施例提出了一种SSD异常掉电的测试方法,包括:
[0034] 步骤100、接收到测试指令;其中,测试指令包括:掉电类型、待测SSD的数量、每一个待测SSD的模型(Model)号、为待测SSD供电的电源的插槽号。
[0035] 在一个示例性实例中,掉电类型可以是交流掉电,也可以是直流掉电。
[0036] 在一个示例性实例中,为待测SSD供电的电源可以是程序控制电源,也就是可以通过程序来控制上电和下电操作的电源;为待测SSD供电的电源也可以是外接的SATA
背板。
[0037] 在一个示例性实例中,一个电源可以为一个或一个以上待测SSD供电,当一个电源为两个或两个以上待测SSD供电时,一个待测SSD对应电源的一个插槽。
[0038] 步骤101、当没有任何一个用于向SSD下发输入输出(IO,Input Output)命令的进程启用时,将当前循环次数加1后进行预定处理;分别获取每一个待测SSD的Model号、容量信息和Smart信息并进行预定处理;其中,预定处理包括以下一个或多个的组合:打印;写入第一日志文件。
[0039] 在一个示例性实例中,当前循环次数的初始值可以设置为0,当然,也可以设置为其他的值,本发明实施例对此不作限定。
[0040] 在一个示例性实例中,可以分别根据每一个待测SSD的Model号采用fdisk-1命令获取每一个待测SSD的容量信息。
[0041] 在一个示例性实例中,可以分别根据每一个待测SSD的Model号采用smartctl-a命令获取每一个待测SSD的Smart信息。
[0042] 在一个示例性实例中,用于向SSD下发IO命令的进程可以是Vdbench进程。
[0043] 在一个示例性实例中,在每一轮
迭代开始时,预先获取每一个待测SSD的Model号、容量信息和Smart信息并进行预处理,以便及时检测待测SSD的Model号、容量信息和Smart信息是否出现异常。
[0044] 步骤102、根据待测SSD的数量启用对应数量的用于向待测SSD下发IO命令的进程,通过启用的进程分别向每一个待测SSD下发IO命令。
[0045] 在一个示例性实例中,通过启用的进程分别向每一个待测SSD下发IO命令包括:
[0046] 分别生成每一个待测SSD的配置文件,分别根据每一个待测SSD的配置文件通过启用的进程向每一个待测SSD下发IO命令。
[0047] 在一个示例性实例中,配置文件包括待测SSD的容量信息对应的范围内的逻辑区块地址(LBA,Logical Block Address)中用于执行IO命令的LBA、读写比例、IO块大小等。
[0048] 在一个示例性实例中,读写比例是指下发的IO命令中读命令所占的比例和写命令所占的比例。
[0049] 在一个示例性实例中,IO块大小是指读或写的最小单元。
[0050] 在一个示例性实例中,在向每一个待测SSD下发IO命令时,按照该待测SSD的配置文件中的读写比例来写法读命令和写命令。
[0051] 在一个示例性实例中,不同待测SSD的配置文件可以是同一个,也可以是不同的配置文件,本发明实施例对此不作限定,也不用于限定本发明实施例的保护范围。
[0052] 在一个示例性实例中,每一轮迭代生成的配置文件中的待测SSD的用于执行IO命令的LBA和读写比例是随机的,其他信息是固定不变的。
[0053] 步骤103、分别在每一个待测SSD执行IO命令过程中向为每一个待测SSD供电的电源下发掉电命令,在下发掉电命令后的第一预设时间后向电源下发上电命令;分别对每一个待测SSD的上电次数进行预定处理,结束所有启用的用于向待测SSD下发IO命令的进程,并继续执行步骤101,直到步骤101中的当前循环次数加1后大于最大循环次数。
[0054] 在一个示例性实例中,下发掉电命令的时机可以有很多种,具体的下发时机不用于限定本发明实施例的保护范围,例如,可以采用随机产生一个等待时间,在随机产生的等待时间超时时,执行掉电命令的下发。
[0055] 在一个示例性实例中,随机产生的等待时间在10秒(s)到60s的范围内。
[0056] 在一个示例性实例中,在向为每一个待测SSD供电的电源下发掉电命令和上电命令时,当测试指令中的掉电类型为交流掉电时,向为每一个待测SSD供电的程序控制电源下发掉电命令和上电命令;当测试指令中的掉电类型为直流掉电时,向为每一个待测SSD供电的外接SATA背板下发掉电命令和上电命令。
[0057] 在本发明另一个实施例中,该方法还包括:
[0058] 分别根据每一个待测SSD执行IO命令时生成的第二日志文件判断每一个待测SSD是否存在IO异常的情况,当判断出所有待测SSD均不存在IO异常的情况时,继续执行所述分别向为每一个待测SSD供电的电源下发掉电命令的步骤。
[0059] 在本发明另一个实施例中,当判断出至少一个待测SSD存在IO异常的情况,或向电源下发掉电命令失败,或向电源下发上电命令失败时,进行异常退出。
[0060] 在一个示例性实例中,当第二日志文件中某一个待测SSD存在错误(error)或失败(fail)时,确定该待测SSD存在IO异常的情况。
[0061] 在一个示例性实例中,不同待测SSD的第二日志文件可以是同一个,也可以是不同的第二日志文件,本发明实施例对此不作限定,也不用于限定本发明实施例的保护范围。
[0062] 在本发明另一个实施例中,该方法还包括:
[0063] 分别检测每一个待测SSD的Model号、容量信息和Smart信息是否正常,当所有待测SSD的Model号、容量信息和Smart信息均正常时,继续执行所述结束所有启用的用于向待测SSD下发IO命令的进程的步骤。
[0064] 在本发明另一个实施例中,当至少一个待测SSD的Model号、容量信息和Smart信息中的至少一项信息异常时,进行异常退出。
[0065] 本发明实施例通过在待测SSD执行IO命令过程中对待测SSD进行下电和上电操作,从而实现了对SSD进行异常掉电的测试。
[0066] 本发明另一个实施例提出了一种固态硬盘异常掉电的测试装置,包括处理器和计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令被所述处理器执行时,实现上述任一种固态硬盘异常掉电的测试方法。
[0067] 本发明另一个实施例提出了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种固态硬盘异常掉电的测试方法的步骤。
[0068] 例如,当要测试型号为DSS200-A480G的SSD时,可以在固态硬盘异常掉电的测试装置中安装CentOS或者RedHat Linux
操作系统,并获得Root权限,下载安装vdbench、Python以及相关库,执行用于实现本
申请的固态硬盘异常掉电的测试方法的测试脚本。
[0069] 用户输入命令:python脚本名–h,可以查看脚本的命令帮助。
[0070] -t表示掉电类型,1表示交流掉电(程控电源),2表示直流掉电(主机SATA背板);-n表示待测盘的数量,比如测试5个盘就是-n 5;-m表示待测盘的Model号,此Model可以通过lsscsi命令查看,并具备模糊匹配的功能;-s代表执行上下电的程控电源或者SATA背板的插槽号,all表示所有的插槽。
[0071] 以测试5个盘直流掉电为例,用户输入命令:
[0072] python脚本名–t 2–n 5–m DSS200–s all;
[0073] 执行命令后则进行上述步骤100-108的过程。
[0074] 参见图2,本发明另一个实施例提出了一种固态硬盘异常掉电的测试系统,包括:
[0075] 固态硬盘异常掉电的测试装置201,包括处理器和计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令被所述处理器执行时,实现上述任一种固态硬盘异常掉电的测试方法;
[0076] 电源202,与一个或多个待测SSD连接,用于为一个或多个待测SSD供电,在固态硬盘异常掉电的测试装置的控制下进行掉电和上电操作;
[0077] 一个或多个待测SSD203,与电源和固态硬盘异常掉电的测试装置中的处理器连接,用于接收处理器下发的IO命令并执行。
[0078] 参见图3,本发明另一个实施例提出了一种固态硬盘异常掉电的测试装置,包括:
[0079] 测试指令接收模块301,用于接收到测试指令;其中,所述测试指令包括:掉电类型、待测固态硬盘SSD的数量、每一个待测SSD的模型Model号、为待测SSD供电的电源的插槽号;
[0080] SSD信息记录模块302,用于当没有任何一个用于向SSD下发输入输出IO命令的进程启用时,将当前循环次数加1后进行预定处理;分别获取每一个待测SSD的Model号、容量信息和Smart信息并进行预定处理;其中,预定处理包括以下一个或多个的组合:打印;写入第一日志文件;
[0081] IO命令下发模块303,用于根据待测SSD的数量启用对应数量的用于向待测SSD下发IO命令的进程,通过启用的进程分别向每一个待测SSD下发IO命令;
[0082] 掉电上电命令下发模块304,用于分别在每一个待测SSD执行IO命令过程中向为每一个待测SSD供电的电源下发掉电命令,在下发掉电命令后的第一预设时间后向所述电源下发上电命令;分别对每一个待测SSD的上电次数进行预定处理,结束所有启用的用于向待测SSD下发IO命令的进程;继续执行所述将当前循环次数加1后进行预定处理的步骤,直到当前循环次数加1后大于最大循环次数。
[0083] 在一个示例性实例中,掉电类型可以是交流掉电,也可以是直流掉电。
[0084] 在一个示例性实例中,为待测SSD供电的电源可以是程序控制电源,也就是可以通过程序来控制上电和下电操作的电源;为待测SSD供电的电源也可以是外接的SATA背板。
[0085] 在一个示例性实例中,一个电源可以为一个或一个以上待测SSD供电,当一个电源为两个或两个以上待测SSD供电时,一个待测SSD对应电源的一个插槽。
[0086] 在一个示例性实例中,当前循环次数的初始值可以设置为0,当然,也可以设置为其他的值,本发明实施例对此不作限定。
[0087] 在一个示例性实例中,可以分别根据每一个待测SSD的Model号采用fdisk-1命令获取每一个待测SSD的容量信息。
[0088] 在一个示例性实例中,可以分别根据每一个待测SSD的Model号采用smartctl-a命令获取每一个待测SSD的Smart信息。
[0089] 在一个示例性实例中,用于向SSD下发IO命令的进程可以是Vdbench进程。
[0090] 在一个示例性实例中,在每一轮迭代开始时,预先获取每一个待测SSD的Model号、容量信息和Smart信息并进行预处理,以便及时检测待测SSD的Model号、容量信息和Smart信息是否出现异常。
[0091] 在一个示例性实例中,IO命令下发模块303具体用于采用以下方式实现通过启用的进程分别向每一个待测SSD下发IO命令:
[0092] 分别生成每一个待测SSD的配置文件,分别根据每一个待测SSD的配置文件通过启用的进程向每一个待测SSD下发IO命令。
[0093] 在一个示例性实例中,配置文件包括待测SSD的容量信息对应的范围内的逻辑区块地址(LBA,Logical Block Address)中用于执行IO命令的LBA、读写比例、IO块大小等。
[0094] 在一个示例性实例中,读写比例是指下发的IO命令中读命令所占的比例和写命令所占的比例。
[0095] 在一个示例性实例中,IO块大小是指读或写的最小单元。
[0096] 在一个示例性实例中,在向每一个待测SSD下发IO命令时,按照该待测SSD的配置文件中的读写比例来写法读命令和写命令。
[0097] 在一个示例性实例中,不同待测SSD的配置文件可以是同一个,也可以是不同的配置文件,本发明实施例对此不作限定,也不用于限定本发明实施例的保护范围。
[0098] 在一个示例性实例中,每一轮迭代生成的配置文件中的待测SSD的用于执行IO命令的LBA和读写比例是随机的,其他信息是固定不变的。
[0099] 在一个示例性实例中,下发掉电命令的时机可以有很多种,具体的下发时机不用于限定本发明实施例的保护范围,例如,可以采用随机产生一个等待时间,在随机产生的等待时间超时时,执行掉电命令的下发。
[0100] 在一个示例性实例中,随机产生的等待时间在10秒(s)到60s的范围内。
[0101] 在一个示例性实例中,掉电上电命令下发模块304在向为每一个待测SSD供电的电源下发掉电命令和上电命令时,当测试指令中的掉电类型为交流掉电时,向为每一个待测SSD供电的程序控制电源下发掉电命令和上电命令;当测试指令中的掉电类型为直流掉电时,向为每一个待测SSD供电的外接SATA背板下发掉电命令和上电命令。
[0102] 在本发明另一个实施例中,掉电上电命令下发模块304还用于:
[0103] 分别根据每一个待测SSD执行IO命令时生成的第二日志文件判断每一个待测SSD是否存在IO异常的情况,当判断出所有待测SSD均不存在IO异常的情况时,继续执行所述分别向为每一个待测SSD供电的电源下发掉电命令的步骤。
[0104] 在本发明另一个实施例中,掉电上电命令下发模块304还用于:
[0105] 当判断出至少一个待测SSD存在IO异常的情况,或向电源下发掉电命令失败,或向电源下发上电命令失败时,进行异常退出。
[0106] 在一个示例性实例中,当第二日志文件中某一个待测SSD存在错误(error)或失败(fail)时,确定该待测SSD存在IO异常的情况。
[0107] 在一个示例性实例中,不同待测SSD的第二日志文件可以是同一个,也可以是不同的第二日志文件,本发明实施例对此不作限定,也不用于限定本发明实施例的保护范围。
[0108] 在本发明另一个实施例中,IO命令下发模块303还用于:
[0109] 分别检测每一个待测SSD的Model号、容量信息和Smart信息是否正常,当所有待测SSD的Model号、容量信息和Smart信息均正常时,继续执行所述结束所有启用的用于向待测SSD下发IO命令的进程的步骤。
[0110] 在本发明另一个实施例中,IO命令下发模块303还用于:
[0111] 当至少一个待测SSD的Model号、容量信息和Smart信息中的至少一项信息异常时,进行异常退出。
[0112] 本发明实施例通过在待测SSD执行IO命令过程中对待测SSD进行下电和上电操作,从而实现了对SSD进行异常掉电的测试。
[0113] 本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为
软件、
固件、
硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字
信号处理器或
微处理器执行的软件,或者被实施为硬件,或者被实施为集成
电路,如
专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机
访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
[0114] 虽然本发明实施例所揭露的实施方式如上,但所述的内容仅为便于理解本发明实施例而采用的实施方式,并非用以限定本发明实施例。任何本发明实施例所属领域内的技术人员,在不脱离本发明实施例所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的
修改与变化,但本发明实施例的
专利保护范围,仍须以所附的权利要求书所界定的范围为准。