本技术属于固态硬盘测试,具体地,涉及一种分布式zns ssd异常断电校验数据一致性的快速测试方法。
背景技术:
1、随着云计算、互联网技术的快速发展,日常工作生活中时时刻刻都会产生海量数据需要存储,数据存储技术得到相应的发展以满足爆炸式增长数据的现实存储需求,ssd(solid state drives,固态硬盘)为用固态电子存储芯片阵列制成的硬盘,由控制单元和固态存储单元组成。由于其稳定的性能,例如读写速度快、能耗较低,有效地克服了机械硬盘诸多缺点,而被广泛采用。但作为存储媒介的ssd在数据的稳定性上却逊色于机械硬盘,容易受到外部的干扰或者其他意外情形,如异常掉电等,发生数据错误或者丢失,这会造成不可预计损失。为了保证ssd经历突然掉电-正常上电后的数据的完整性,需要在设计ssd的阶段,对能否实现异常掉电时的数据的保护和恢复的性能做进一步的测试和验证,即进行断电测试。
2、断电测试是ssd测试中常见的场景,正常断电时系统会等待ssd完成io队列处理之后响应断电指令,正常情况下可以保证数据的完整性和一致性;但是异常断电时不会同步ssd的状态,ssd只能靠板载储能电容完成异常断电的流程,而没有储能电容的ssd只能在重新上电启动的过程中重建各种表项去完成数据恢复,但是无法保证数据的完整性和一致性。
3、针对ssd异常断电测试,通常的测试方法包括以下几种方法,1)人工手动操作,耗时较长、效率低下,且人工操作容易引入人为错误,测试结果可靠性差,不可重复运行;2)搭建测试环境,通过测试脚本进行测试。上述测试方法是为市面上通用ssd设计的,常规ssd在写入队列深度等于1,测试时仅需记录断电前写入的lba地址、数据长度以及数据格式等信息,保存的数据量少,掉电保护电容可以满足在发生异常掉点情形,及时对信息的保存。但针对zns ssd,将ssd namespace的整个lba(logical block address,逻辑区块地址)范围划分为若干个等长的区间,等长的lba区间成为一个zone,每个zone内必须以顺序的方式进行写入,每个zone有其独立的状态机进行管理,允许不同的zone同时进行写入。因此,断电前会记录大量的正在发生写入的zone的多条信息,这会导致掉电保护电容无法满足掉电保护需要的时间,而增设掉电电容会额外占用较多空间,增加了硬件成本。因此,常规ssd的测试方案并不适用于zns ssd。
4、目前,zns ssd异常断电测试一般是只验证异常断电再上电后的功能是否正常,不能检验断电前一刻的数据是否正确存储;也不能检验在不同断电模式数据的稳定性,如长时间断电或脉冲断电时,或者简单的全盘校验数据,耗费测试时间较长。如果需要快速和准确的测试异常断电时的数据完整性和一致性,需要定制断电开发板用于zns ssd断电,同时需要花比较多的时间和精力编写底层驱动以bitmap等方式记录断电前写入的lba地址、数据长度、数据格式等信息。断电开发板测试环境只适用于ssd设备断电,不适用于整机断电,无法正确评估整机断电时的场景。
5、现在需要一种简单可行的测试方案,适应各种场景的断电测试,而且能快速、准确的验证数据的完整性和一致性。
技术实现思路
1、基于以上的现有技术缺陷,本发明提出一种分布式zns ssd异常断电校验数据一致性的测试方法,其特征在于:包括如下步骤:
2、(1)控制端和测试端均安装fio和socket,依次启动控制端启动fio server功能和待测端启动fio client功能,并通过socket通知控制端准备完成以及当前测试端的处理器核心数量n;
3、(2)测试端获取zns ssd固态硬盘的zone的属性信息并传输给控制端;控制端提取所述属性信息并进行分类统计分析,根据分析结果通过数据产生单元生成多个大小相等的标准数据样本作为测试数据,控制端通过所述fio server功能,向所述测试端zns ssd的各个zone存储空间按照预定规则写入所述标准数据样本;同时记录并存储zns ssd中各个zone的每笔io的数据信息;
4、(3)控制端通过控制电源分配单元pdu执行断电操作使待测端异常断电;间隔一定时间后将待测端上电,待测端启动后通过socket通知控制端;
5、(4)数据处理单元读取最后多笔写入的io的所述数据信息,控制端通过所述数据信息生成测试数据地图;
6、(5)待测端启动fio client功能,通过socket通知控制端准备完成;
7、(6)控制端启动fio server功能,通知待测端运行所述测试数据地图并重新生成所述测试数据并进行数据校验,并向异常的zone内写入新数据进行数据修复,并向控制端返回修复结果;
8、(7)重复步骤(1)-(6),整理并输出测试报告。
9、进一步,所述属性信息至少包括zone的空间大小,所述数据信息至少包括逻辑区块地址lba,数据长度以及数据格式,其中所述数据格式至少包括系统元数据,数据库数据以及媒体数据;所述分类统计分析包括:以zone的空间大小为依据,统计相同的zone的数量,并将zone空间的大小按照数量进行排序;所述数据产生单元生成的标准数据样本的大小被配置为与所述数量最多的zone空间大小相同。
10、进一步,所述数据处理单元包括数据读取模块、多个数据缓存器,检测判断模块;其中数据读取模块用于读取所述特征信息中对应写入zone的测试数据并存储数据缓存器,检测判断模块用于判断读取的测试数据和写入的测试数据的一致性。
11、进一步,在重新生成测试数据数据前,在所述数据读取模块读取某一zone的所述测试数据前,所述检测判断模块获取当前被读取的zone的所述数据信息,至少包括段起始地址和结束结束地址,以及第一次写入的io的所述数据信息,最后一次写入的io的所述数据信息;并判断下述约束条件是否成立:
12、a.段结束地址与最一次写入的io的所述数据信息的lba相同;且段起始地址与第一次写入的io的所述数据信息的lba相同;
13、b.所述数据长度等于最一次和第一次的所述数据信息的lba的之差;
14、若条件a或者b成立,则判断为数据保持了一致性,不执行步骤(5)-(6);
15、若条件a和b不成立,则接着执行步骤(5)-(6)。
16、进一步,所述步骤(1)进一步包括:对所述zns ssd进行初始化步骤包括:1)重新创建数据格式类型不同的多个zone空间;2)按照数据格式类型,将多个zone空间的逻辑地址设置为至少包括第一组空间,第二组空间以及第三组空间,其中各组空间包括多个zone;其中各个zone大小可以相同,可以不同。
17、进一步,所述向所述测试端zns ssd的各个zone存储空间按照预定规则写入所述标准数据样本的步骤满足下述条件:
18、a.相同组空间的zone被写入的所述标准数据样本的数据类型相同;
19、b.不同组空间的zone被写入的所述标准数据样本的数据类型不同;
20、其中所述标准数据样本的数据类型至少包括系统元数据,数据库数据以及媒体数据三种数据类型。
21、进一步,所述测试端根据所述处理器数量配置有数据缓存器、数据生成单元以及数据校验单元,所述数据缓存器用于存储生成的所述测试数据,所述数据校验单元与测试端的处理器核心一一对应。
22、进一步,在处理器的每个核心中分别运行所述数据校验单元,在一个数据校验周期内,所述数据校验单元从所述测试数据地图中读取n个所述数据信息,重新生成待检测试数据并写入数据缓存器中;并将所述数据缓存器中的数据与写入的所述标准数据样本进行比对,判断数据是否保持一致性。
23、进一步,所述预定规则包括:预设写入模式和配置预定参数;所述预设写入模式包括:顺序写、随机写,循环写;所述预定参数包括:多个写入队列深度k,k为大于等于1的正整数。
24、进一步,所述断电操作包括长时间断电以及短脉冲式断电,通断电管理装置为quarch设备。
25、本发明的目的是提供一种分布式zns ssd异常断电校验数据一致性的快速测试方法,通过利用fio/socket并进行适当的参数配置,搭建适应zns ssd的测试方案。该测试方法具有如下优点:
26、1-对测试环境要求简单,配置方便,可以适配多种环境,同时支持一对多批量测试。
27、2-适用于各类zns ssd固体硬盘,同时简化测试环境,无需断电开发板,无需编写io驱动,节省开发成本,只需要两台pc在同一网络中就可以完成测试断电前后数据一致性校验。
28、3-根据不同的zns ssd的差异,实现定制化测试方案,充分将测试端的处理器计算资源和zns ssd性能相互匹配,并在测试端分布式重新生成待校验数据,每个zone区域待校验数据之间相互独立,并根据测试端处理器核心数量实现多线程并行数据一致性校验,减少了控制端与测试端之间的数据传输量和计算压力,大大测试的稳定性和效率
29、4-将标准测试数据大小与zone的存储空间大小进行匹配设计,利用zone空间的段地址进行数据一致性校验,最大程度的避免了读取全部zone空间内存储的数据,提高了系统执行效率,提高了数据校验的速度。