实现大容量SSD在小内存机器上进行数据校验测试的方法技术

技术编号:29400284 阅读:30 留言:0更新日期:2021-07-23 22:37
本发明专利技术公开一种实现大容量SSD在小内存机器上进行数据校验测试的方法,本方法包括随机写数据和数据校验两部分,随机写数据时,根据命令参数中的mode参数,决定LBA序列的存储方式,mode=1时,遇到低配置测试机器,不记录LBA序列,mode=2时,在本地文件存储LBA序列,mode=3时,在内存中通过bitmap存储LBA序列;数据校验时,生成LBA序列,根据写数据时存储LBA序列的方式,采用不同的校验方式。本发明专利技术有效应对行业内容量不断增大的SSD设备数据一致性测试需求,对测试机器的要求低,提高了测试的效率和质量,有效降低了测试成本。

【技术实现步骤摘要】
实现大容量SSD在小内存机器上进行数据校验测试的方法
本专利技术涉及硬盘测试领域,具体是实现大容量SSD在小内存机器上进行数据校验测试的方法。
技术介绍
对SSD存储设备的数据一致性校验测试中,需对写入SSD设备的数据再读上来,进行校验,以验证SSD设备对数据的存储功能。在此测试场景中,目前行业内在用的主流测试工具fio,在应对容量不断增大的ssd设备在内存较小的普通pc机器上进行全盘数据校验时,存在缺陷。针对上述场景,行业内主流测试工具fio的实现方案及缺陷如下:fio通过verify_backlog参数,实现写入一定量的io,然后进行校验,再写入下一批io,这样循环写入、读校验,来完成全盘的数据一致性测试。这样的缺陷在于,在全盘随机写校验过程中,如果已写过并校验的数据发生垃圾回收(gc)错误,但本次循环写入、读校验正常,软件工具就不会发现这种错误。必须进行全盘数据校验,才能够发现。fio不设置verify_backlog参数,就需要先完整写入,再完整读出、校验,但此种方案,对内存较小、配置较低的测试机器,满足不了测试需求。
技术实现思路
针对现有技术的缺陷,本专利技术提出一种实现大容量SSD在小内存机器上进行数据校验测试的方法,代替fio完成全盘数据校验测试,对测试机器内存要求低,目前普通的pc机即可满足测试要求。为了解决所述技术问题,本专利技术采用的技术方案是:一种实现大容量SSD在小内存机器上进行数据校验测试的方法,大容量SSD是指容量大于或者等于8T的SSD,小内存机器是指内存小于或者等于1G的机器,本方法包括随机写数据和数据校验两部分,随机写数据时,根据命令参数中的mode参数,决定LBA序列的存储方式,mode=1时,遇到低配置测试机器,不记录LBA序列,mode=2时,在本地文件存储LBA序列,mode=3时,在内存中通过bitmap存储LBA序列;数据校验时,生成LBA序列,根据写数据时存储LBA序列的方式,采用不同的校验方式。mode=1时,写操作不记录LBA序列,直接对随机LBA地址进行读取,通过读取内容中的标示信息判断是否进行校验;mode=2时,在本地文件存储LBA序列,打开本地保存的LBA序列文件,判断LBA地址之前是否被写入,进而读取校验。mode=3时,通过比对在内存中保存的bitmap,判断是否对随机生成的lba地址进行读取校验。进一步的,写数据时,申请n个内存,在已申请的n个内存中,动态的寻找可用内存并还原清理内存,配合libaio库函数的功能,实现内存管理和数据写入。进一步的,写数据或者数据校验时,获取命令参数中的待写入总量、校验量和指定的IO包大小,规定写读轮数等于待写入总量除以校验量,提交次数等于校验量除以指定的IO包大小,以写读轮数作为外循环次数,提交次数作为内循环次数,直到完成循环,达到写入量。进一步的,写数据的具体过程为:S11)、解析命令参数,获取命令参数中的待写入总量、校验量和指定的IO包大小,令写读轮数等于待写入总量除以校验量,提交次数等于校验量除以指定的IO包大小;S12)、动态申请n个内存;S13)、在已申请的内存中寻找可用内存,根据rw参数,选择随机或者顺序生成LBA序列,准备IO消息体;根据命令参数中的mode参数,决定LBA随机序列的存储方式,mode=1时,遇到低配置测试机器,不记录LBA随机序列,mode=2时,在本地文件存储LBA随机序列,mode=3时,在内存中通过bitmap存储LBA随机序列;S14)、通过io_submit提交io结构体,在io_submit函数的执行结果的异常处理中,针对因可用资源不足而提交失败的io,进行重复提交,并计时,连续提交失败超30s,则异常退出,在30s内提交成功则继续进行;S15)、每次提交1个io结构体,通过io_getevents获取io执行结果,如果获取到执行结果,则清理占用的内存,并计数,如果未获取到,继续执行步骤S13;S16)、判断是否到达提交次数,如果是,循环结束,如果否,继续执行步骤S13;S17)、判断是否到达写读轮数,如果是,循环结束,如果否,继续执行步骤S12。进一步的,数据校验的具体过程为:S21)、解析命令参数,获取命令参数中的待写入总量、校验量和指定的IO包大小,令写读轮数等于待写入总量除以校验量,提交次数等于校验量除以指定的IO包大小;S22)、根据rw参数,选择随机或者顺序生成LBA序列,根据写数据时的mode参数,选择读LBA后的校验方式;读操作通过libaio库函数io_submit提交IO读消息结构体,通过io_getevents获取执行结果,来获取指定LBA地址的内容;当mode=1时,写操作不记录LBA随机序列,读操作获取到随机的LBA地址内容后,判断Verify_header部分中的magic和seed是否跟预期相同,如果不相同,则跳出继续下一个LBA的比较,如果相同,则继续比较Verify_header和data,mode=2时,在本地文件存储LBA随机序列,打开本地保存的LBA随机序列文件,判断LBA地址是否被写入,如果未被写入,则跳出继续下一个LBA的比较,如果被写入,则继续比较Verify_header和data;mode=3时,通过比对在内存中保存的bitmap,判断是否对随机生成的lba地址进行读取校验;其中Verify_header是IO消息结构体中的校验头部分,magic是魔法数,seed是时间种子,魔法数和时间种子,都是IO消息结构体的校验头部分的一部分数据,data是IO消息结构体中的数据部分,Verify_header和data组成IO消息结构体;S23)、判断是否到达提交次数,如果是,循环结束,如果否,继续执行步骤S22;S24)、判断是否到达写读轮数,如果是,循环结束,如果否,重新定义提交次数,并执行步骤S22。进一步的,rw=0时,选择随机方式生成LBA序列,随机方式下,通过时间种子生成LBA的随机序列;rw=1时,选择顺序方式生成LBA序列,顺序方式下,从LBA等于0开始,顺序生成LBA序列。本专利技术的有益效果:1、对测试环境要求低。实现方法对测试机器内存要求低,目前普通的pc机即可满足测试要求。mode0方式中基本无内存要求。mode1方式中对LBA随机序列已保存到本地,内存占用发生在本地文件的读取,一个bit代表一个LBA是否写过,与fio对比而言,对一个4k的LBA,fio需存储40byte的header内容,两者的内存占用比为40*8/1=320。mode3方式,同mode2。2、支持全盘数据校验。目前流行的NvmeSSD,容量按T为单位,本专利技术能有效支持全盘数据校验。3、对数据校验pattern可定制化设计。对每一个LBA的数据内容,分为verify_header和data两部分。verify_header可包含魔法数、时间本文档来自技高网...

【技术保护点】
1.实现大容量SSD在小内存机器上进行数据校验测试的方法,大容量SSD是指容量大于或者等于8T的SSD,小内存机器是指内存小于或者等于1G的机器,其特征在于:本方法包括随机写数据和数据校验两部分,随机写数据时,根据命令参数中的mode参数,决定LBA序列的存储方式,mode=1时,遇到低配置测试机器,不记录LBA序列,mode=2时,在本地文件存储LBA序列,mode=3时,在内存中通过bitmap存储LBA序列;/n数据校验时,生成LBA序列,根据写数据时存储LBA序列的方式,采用不同的校验方式,mode=1时,写操作未记录LBA序列,直接对随机LBA地址进行读取,通过读取内容中的标示信息判断是否进行校验;mode=2时,在本地文件存储LBA序列,打开本地保存的LBA序列文件,判断LBA地址之前是否被写入,进而读取校验,mode=3时,通过比对在内存中保存的bitmap,判断是否对随机生成的LBA地址进行读取校验。/n

【技术特征摘要】
1.实现大容量SSD在小内存机器上进行数据校验测试的方法,大容量SSD是指容量大于或者等于8T的SSD,小内存机器是指内存小于或者等于1G的机器,其特征在于:本方法包括随机写数据和数据校验两部分,随机写数据时,根据命令参数中的mode参数,决定LBA序列的存储方式,mode=1时,遇到低配置测试机器,不记录LBA序列,mode=2时,在本地文件存储LBA序列,mode=3时,在内存中通过bitmap存储LBA序列;
数据校验时,生成LBA序列,根据写数据时存储LBA序列的方式,采用不同的校验方式,mode=1时,写操作未记录LBA序列,直接对随机LBA地址进行读取,通过读取内容中的标示信息判断是否进行校验;mode=2时,在本地文件存储LBA序列,打开本地保存的LBA序列文件,判断LBA地址之前是否被写入,进而读取校验,mode=3时,通过比对在内存中保存的bitmap,判断是否对随机生成的LBA地址进行读取校验。


2.根据权利要求1所述的实现大容量SSD在小内存机器上进行数据校验测试的方法,其特征在于:写数据时,申请n个内存,在已申请的n个内存中,动态的寻找可用内存并还原清理内存,配合libaio库函数的功能,实现内存管理和数据写入。


3.根据权利要求1所述的实现大容量SSD在小内存机器上进行数据校验测试的方法,其特征在于:写数据或者数据校验时,获取命令参数中的待写入总量、校验量和指定的IO包大小,规定写读轮数等于待写入总量除以校验量,提交次数等于校验量除以指定的IO包大小,以写读轮数作为外循环次数,提交次数作为内循环次数,直到完成循环,达到写入量。


4.根据权利要求1所述的实现大容量SSD在小内存机器上进行数据校验测试的方法,其特征在于:写数据的具体过程为:
S11)、解析命令参数,获取命令参数中的待写入总量、校验量和指定的IO包大小,令写读轮数等于待写入总量除以校验量,提交次数等于校验量除以指定的IO包大小;
S12)、动态申请n个内存;
S13)、在已申请的内存中寻找可用内存,根据rw参数,选择随机或者顺序生成LBA序列,准备IO写消息体;根据命令参数中的mode参数,决定LBA随机序列的存储方式,mode=1时,遇到低配置测试机器,不记录LBA随机序列,mode=2时,在本地文件存储LBA随机序列,mode=3时,在内存中通过bitmap存储LBA随机序列;
S14)、通过io_submit提交IO结构体,在io_submit函数的执行结果的异常处理中,针对因可用资源不足而提交失败的IO,进行重复提交,并计时,连续提交失败超30s...

【专利技术属性】
技术研发人员:王璞刘正主李铁段好强
申请(专利权)人:山东华芯半导体有限公司
类型:发明
国别省市:山东;37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1