本发明涉及计算机存储领域,具体涉及一种基于重复数据删除的闪存性能和可靠性提升方法及系统。
背景技术:
1、在当今数字化时代,随着全球信息存储量的不断增加,对存储系统的需求也越来越高。因此,存储技术的发展变得尤为重要,尤其是闪存存储器(solid-state drive,ssd)技术,在计算机存储发展中极具重要性,已经产生了深远的影响,并在多个方面推动了存储技术的进步。闪存具备高存储密度,使得用户可以获得更大容量的存储空间,而且物理体积更小;具有更快的读写速度和更低的访问延迟,在计算机系统、处理大规模数据、运行复杂应用程序和启动操作系统方面表现尤为明显;不包含运动部件,具有较高的耐用性,较少受到震动和冲击的影响,因此更耐用,更不容易出现硬件故障,相对于机械硬盘而言寿命更长。所以闪存的存储设备已成为传统机械硬盘(hdd)强有力的替代品。闪存的应用场景非常广泛,不仅可以运用于日常的智能手机、平板电脑、便携式音频播放器、数字相机和摄像机等移动设备中,也可以运用于企业级服务器,计算机和人工智能等诸多领域。
2、存储市场上有许多不同类型的闪存芯片。早期的单级单元(slc)闪存芯片在每个单元(即单个浮栅晶体管)中存储一位数据。每个晶体管可以设置为固定电压范围内的特定阈值电压。通过对晶体管进行充电和放电操作来进行数据擦除及写入。slc闪存芯片将这个固定范围分为两个电压窗口,一个窗口代表位值0,另一个窗口代表位值1,也就是只有0、1两种电压变化。之后mlc闪存芯片将电压范围被分为四个电压窗口,分别代表每个可能的2位值(00、01、10和11)。依此类推,tlc闪存芯片可以存储3位值,qlc闪存芯片可以存储4位值。
3、从slc到qlc,闪存芯片不仅提供了更高的密度,也提供了更低的成本,但是代价是更低的性能和耐久性。因为随着密度增大的同时会导致不同电压状态变多且越难控制,需要实现对闪存设备的浮动门的精确分配电荷,所以会设置一个更复杂、更耗时的编程算法,写入所用的时间变长,读写延迟之间的差距越来越大。在读写混合的并行工作负载的条件下,当读请求正在执行中占用闪存资源的时候,会阻碍读请求访问数据,读写延迟的差距越大,读写干扰的问题就越严重,闪存性能下降,用户读取数据需要等待的时间就会越长。
4、另一方面,重复数据删除技术已经广泛应用于基于闪存存储的商品中,目的是通过删除冗余写数据来提高闪存的可靠性和空间效率。但是重复数据删除技术只保存唯一数据,当关键数据块产生错误或丢失,就无法恢复数据而造成系统错误。有研究表明,google数据中心6年生产使用中数百万种不同闪存型号,26-60%的闪存驱动器遇到无法纠正的错误,每1,000个驱动器日中有26个遇到不可纠正的错误。因此保障数据的可靠性是至关重要的。
技术实现思路
1、针对上述提到的技术问题,本技术的实施例的目的在于提出了一种基于重复数据删除的闪存性能和可靠性提升方法及系统,基于重复数据删除技术,建立闪存数据的元数据索引表存放数据的引用次数,通过重复数据删除技术删除计划外的冗余写请求,只保留引用技术较高的数据的冗余写请求,并且构建固态盘阵列,通过检查其余数据和奇偶校验信息,来重新创建丢失数据的信息,加强数据的可靠性。
2、本发明的技术方案如下。
3、一方面,一种基于重复数据删除的闪存性能和可靠性提升方法,包括:
4、请求类型判断步骤s1,获取请求数据,判断请求类型,如果是写请求,转入写请求处理步骤;如果是读请求,转入读请求处理步骤;如果是数据丢失或故障请求,转入数据丢失或故障请求处理步骤;
5、写请求处理步骤s2,查找指纹索引表判断是否是冗余的写请求数据,如果该写请求是初次写入,更新指纹索引表,使用静态分配和动态分配结合的方式给写请求分配物理地址,同时更新闪存地址映射表;如果该写请求数据的指纹能够在指纹索引表中找到,则判断引用次数是否等于阈值的倍数且倍数小于等于2,如果不是,删除该写请求,如果是,使用动态分配的方式给写请求分配物理地址,同时更新副本表和闪存地址映射表;最后写入闪存;
6、读请求处理步骤s3,根据读请求的逻辑地址号查找闪存地址映射表获取原数据物理地址号;判断读请求将要访问的闪存总线和闪存芯片是否正在服务写请求;如果是,则查看索引表是否存在副本数据,如果副本数据所在的闪存总线和闪存芯片处于空闲状态,修改读请求的物理地址为副本所在的物理地址,读请求转向访问副本数据;如果副本数据所在的闪存总线和芯片处于忙碌状态,比较原数据所处的通道请求队列和副本数据所处通道的请求队列的数量,将读请求的物理地址修改为请求数量较少的队列;最后等待进入闪存芯片,将数据从页中读取到平面中的数据寄存器中,将数据返回;
7、数据丢失或故障请求处理步骤s4,根据数据是否有冗余来确定恢复数据的方法;创建子读请求,根据读取到的数据恢复被损坏的数据。
8、优选的,所述写请求处理步骤s2,具体包括:
9、s20,通过写请求的指纹值,查看指纹索引表中对应的引用计数,如果引用计数大于1,转入s21;如果没有查找到对应指纹,转入s22;
10、s21,在指纹索引表中指纹对应的引用计数加1,转入s23;
11、s22,在指纹索引表中添加写请求的指纹值及逻辑地址号,对应的索引表引用计数设置为1,转入s24;
12、s23,查找索引表指纹对应的引用计数,判断写子请求的引用计数是不是阈值的倍数;如果是,转入s24;如果不是,转入s25;其中,阈值是一个平衡闪存空间和备份缓解读写冲突的阈值,且该倍数小于等于2;
13、s24,创建子写请求,对写请求的大小进行分割,分割大小与闪存芯片中页的大小相同,创建一个页大小的子写请求,每次写入一个页的数据信息,转入s26;
14、s25,删除写请求,将子写请求从请求队列中进行删除;
15、s26,判断子写请求是否冗余,如果不是冗余转入s27,如果是冗余转入s28;
16、s27,将固定大小的子写请求写入固态盘阵列的闪存芯片,写入的数据受奇偶校验保护;同时更新闪存地址映射表;
17、s28,将固定大小的子写请求写入闪存芯片中,写入的位置与第一次写入的相同数据的位置处于不同的通道;同时更新副本表和闪存地址映射表。
18、优选的,所述读请求处理步骤s3,具体包括:
19、s30,创建子读请求,对读请求进行分割,分割大小与闪存芯片中页的大小相同,创建一个页大小的子读请求,每次读取一个页的数据信息;
20、s31,判断读写请求冲突,获取子读请求需要访问的闪存芯片号,查看当前闪存芯片是否正在服务写请求,如果正在服务写请求,转入s32;如果不在服务写请求,转入s35;
21、s32,判断是否有备份数据,子读请求需要访问的闪存芯片号正在服务写请求,查找索引表中是否有相同数据的其他地址信息;如果存在其他可访问的地址信息,查找到索引表中存在备份数据的物理地址,转入s33,如果不存在其他可访问的地址信息,转入s34;
22、s33,有可访问的备份数据,从固态盘阵列闪存芯片中读取可访问的备份数据,返回给用户;
23、s34,没有可访问的备份数据,转入s31,等待原本访问的闪存芯片结束写请求的服务,或者等待有可访问的备份数据;
24、s35,如果访问的闪存芯片不处于写请求的服务中,直接访问固态盘阵列的闪存芯片,并读取数据,返回给用户。
25、优选的,所述数据丢失或故障请求处理步骤s4,具体包括:
26、s40,判断数据是否存在副本,没有冗余转入s41;有冗余,则转入s42;
27、s41,奇偶校验恢复数据,通过检查其余数据和奇偶校验信息,来重新创建丢失数据的信息,转入s43;
28、s42,查找索引表备份数据,根据损坏数据块的指纹查找索引表中备份的其他数据地址的信息,转入s43;
29、s43,创建子读请求:若使用奇偶校验恢复数据,需创建子读请求以读取奇偶校验组中的其他数据和校验信息;若使用备份数据恢复数据,需创建子读请求以读取备份数据,转入s44;
30、s44,判断读写请求冲突,获取子读请求需要访问的闪存芯片号,查看当前闪存芯片是否正在服务写请求,如果正在服务写请求,转入s45;如果不在服务写请求,转入s48;
31、s45,判断是否有备份数据,子读请求需要访问的闪存芯片号正在服务写请求,查找索引表中是否有相同数据的其他地址信息;如果存在其他可访问的地址信息,查找到索引表中存在备份数据的物理地址,转入s46,如果不存在其他可访问的地址信息,转入s47;
32、s46,有可访问的备份数据,从固态盘阵列闪存芯片中读取可访问的备份数据,转入s50;
33、s47,没有可访问的备份数据,转入s44,等待原本访问的闪存芯片结束写请求的服务,或者等待有可访问的备份数据;
34、s48,如果访问的闪存芯片不处于写请求的服务中,直接访问固态盘阵列的闪存芯片,并读取数据,转入s49;
35、s49,从备份数据或读取数据中获取被损坏的数据块的恢复信息,进行数据恢复。
36、另一方面,一种基于重复数据删除的闪存性能和可靠性提升系统,包括:
37、请求类型判断模块,用于获取请求数据,判断请求类型,如果是写请求,转入写请求处理模块;如果是读请求,转入读请求处理模块;如果是数据丢失或故障请求,转入数据丢失或故障请求处理模块;
38、写请求处理模块,用于查找指纹索引表判断是否是冗余的写请求数据,如果该写请求是初次写入,更新指纹索引表,使用静态分配和动态分配结合的方式给写请求分配物理地址,同时更新闪存地址映射表;如果该写请求数据的指纹能够在指纹索引表中找到,则判断引用次数是否等于阈值的倍数且倍数小于等于2,如果不是,删除该写请求,如果是,使用动态分配的方式给写请求分配物理地址,同时更新副本表和闪存地址映射表;最后写入闪存;
39、读请求处理模块,用于根据读请求的逻辑地址号查找闪存地址映射表获取原数据物理地址号;判断读请求将要访问的闪存总线和闪存芯片是否正在服务写请求;如果是,则查看索引表是否存在副本数据,如果副本数据所在的闪存总线和闪存芯片处于空闲状态,修改读请求的物理地址为副本所在的物理地址,读请求转向访问副本数据;如果副本数据所在的闪存总线和芯片处于忙碌状态,比较原数据所处的通道请求队列和副本数据所处通道的请求队列的数量,将读请求的物理地址修改为请求数量较少的队列;最后等待进入闪存芯片,将数据从页中读取到平面中的数据寄存器中,将数据返回;
40、数据丢失或故障请求处理模块,用于根据数据是否有冗余来确定恢复数据的方法;创建子读请求,根据读取到的数据恢复被损坏的数据。
41、相比于现有技术,本发明具有以下有益效果:
42、(1)本发明基于重复数据删除技术的方式缓解了闪存的读写请求相互干扰的问题。以往解决闪存读写干扰问题的研究中通常是在闪存中创建数据块副本存储在不同的闪存芯片中,当读请求访问数据块的时候,读请求需要的闪存资源正在被写请求占用的时候,通过访问数据副本的方式来获取数据,从而缓解读写冲突问题。这种解决方式不仅给闪存芯片引入了额外的存储成本,而且加快了闪存的使用寿命。本发明在维护数据副本的基础上,使用重复数据删除技术来缓解副本所造成的存储成本问题,通过重复数据删除技术来删除计划之外的冗余写操作,对产生冲突的读请求数据进行备份的方式来缓解读写冲突问题,有选择性地保留副本,强有力地减少了闪存地占用空间。
43、(2)本发明采用在闪存中构建固态盘阵列和备份数据的方式保障了数据的安全性,增强了闪存的可靠性。重复数据删除技术会删除冗余的数据,只保留唯一的数据块,但是当唯一数据块产生错误或丢失的时候,无法对数据进行恢复。综上,本发明使用两种方式来恢复被损坏的数据块。第一种方式是将闪存构建成raid5固态盘阵列,通过检查其余数据和奇偶校验信息,来重新创建丢失数据的信息,加强数据的可靠性。第二种方式是访问索引表中备份数据块的地址信息,通过备份数据对被损坏数据进行恢复。通过比较两种方式的成本来选择使用哪一种方式恢复数据,从而增强数据的可靠性。
1.一种基于重复数据删除的闪存性能和可靠性提升方法,其特征在于,包括:
2.根据权利要求1所述的基于重复数据删除的闪存性能和可靠性提升方法,其特征在于,所述写请求处理步骤s2,具体包括:
3.根据权利要求1所述的基于重复数据删除的闪存性能和可靠性提升方法,其特征在于,所述读请求处理步骤s3,具体包括:
4.根据权利要求1所述的基于重复数据删除的闪存性能和可靠性提升方法,其特征在于,所述数据丢失或故障请求处理步骤s4,具体包括:
5.一种基于重复数据删除的闪存性能和可靠性提升系统,其特征在于,包括:
