提高闪存可靠性的缓存管理方法、装置、设备和储存介质与流程

文档序号:32532873发布日期:2022-12-13 22:37阅读:48来源:国知局
提高闪存可靠性的缓存管理方法、装置、设备和储存介质与流程

1.本发明涉及计算机存储领域,尤其涉及提高闪存可靠性的缓存管理方法、装置、设备和储存介质。


背景技术:

2.随着设计和制造工艺的进步,闪存存储密度不断扩大,成本不断降低,使得基于闪存的固态盘已经逐渐取代传统的机械磁盘成为主流的计算机存储设备。在闪存存储密度不断提高的同时,其可靠性、耐用性和性能等指标受到了不同程度的影响,其中,闪存块错误发生率的增加成为了影响固态盘可靠性的主要因素。随着闪存块擦除次数逐渐增多,发生错误的可能性也随之增加,因此闪存可靠性也逐步降低。
3.导致闪存发生错误的原因主要包括三类:保留错误、编程/擦除周期时错误、读干扰错误。(1)保留错误是闪存单元编程后,随着数据在设备上的保留时间推移而产生的单元内电荷泄漏引起的,在所有类型的闪存错误中占据主导地位;(2)编程/擦除周期时错误通常有两种情况:(a)当主控制器发送擦除指令时,单元的状态未恢复至待编程状态;(b)当对单元执行编程操作时,未能将闪存单元设置为目标状态;(3)读干扰是指从某个闪存单元读取数据时,可能导致同一个块中其它未被读取单元的阈值电压向右偏移至更高的值。尽管单个阈值电压偏移很小,但这种偏移会随时间累积,最终变得足够大,足以更改某些单元的状态,从而产生读干扰错误。
4.另一方面,缓存是计算机系统中不可或缺的一部分,存在于计算机系统的各个层次中,主要用于缓存热点数据,提高存储系统的数据访问性能。目前,使用最广泛的缓存替换方法是最近最少使用算法(least recently used,简称lru),即挖掘数据访问的局部性,将最近最少使用的数据从缓存中删除从而为新数据提供空间。但是,现有的缓存管理方法都是通过提高缓存命中率、减少缺失代价、提高缓存命中时间等来提高数据访问性能,没有考虑闪存介质的可靠性。在面向闪存的缓存管理中,除了数据的访问性能外,闪存可靠性也是需要考虑的一个重要因素。例如,在缓存中长时间驻留的热点读数据,由于其在闪存中对应的闪存块数据长时间没有访问,进而引发保留错误,当系统重启再次从闪存中读取该闪存块数据时就会发生数据丢失的可能,严重降低了闪存可靠性。


技术实现要素:

5.针对现有技术的不足,本发明提供一种提高闪存可靠性的缓存管理方法、装置、设备和储存介质,同时考虑请求访问局部性和闪存介质可靠性的缓存数据管理方法和提升闪存的性能和可靠性。
6.本发明是采用以下技术方案来实现的:本发明的第一方面,一种提高闪存可靠性的缓存管理的方法,所述方法包括以下步骤:(1)初始化:主控模块查看闪存状态日志,判断历史缓存数据是否存在于闪存存储
中;然后读取保存在闪存中的历史缓存数据,并初始化缓存元数据表,再清空缓存数据,并重置缓存元数据表;(2)读缓存管理:经由第一步初始化后,当用户发起的请求类型是读请求,进入读缓存管理模块,该模块进行读缓存的管理工作并处理用户发起的读请求;(3)写缓存管理:经由第一步初始化后,当用户发起的请求类型是写请求,进入写缓存管理模块,该模块进行写缓存的管理工作并处理用户发起的写请求,所述是读缓存管理还是写缓存管理是由用户发起的请求类型决定;(4)结束步骤:当用户发出指令关闭闪存时,将可靠性记录表保存到闪存的预留空间中,将写缓存数据更新到闪存设备中,完成后关闭闪存设备,释放相关的资源。
7.进一步地,所述读缓存管理,具体为:(2.1)当有新读请求到达时,读缓存管理模块检查读缓存中是否有该读请求的数据,若是,转入过程(2.2),否则转入过程(2.5);(2.2)缓存管理模块从缓存中返回该读请求的数据块,同时查看可靠性记录表获取该数据块在缓存中的驻留时间,判断该驻留时间是否大于阈值,若是,则转入过程(2.3),否则转入过程(2.6);(2.3)从闪存中读取该数据块,并与缓存中的数据进行对比,判断两份数据是否相同,若是,则转入过程(2.6),否则转入过程(2.4);(2.4)将缓存中的数据块写入到闪存中,并更新闪存的映射表,转入过程(2.6);(2.5)从闪存中读取该读请求的数据,更新可靠性记录表中该数据块的驻留时间,转入过程(2.6);(2.6)将该数据块信息更新到lru链表的表头,转入过程(2.1)。
8.进一步地,所述写缓存管理,具体为:(3.1)当新请求不是读请求时,则是写请求,有新数据要写入缓存中,缓存管理模块检查读缓存中是否有要写入地址的数据,若是,则转入过程(3.2),否则转入过程(3.3);(3.2)更新读缓存中的数据块,转入过程(3.3);(3.3)缓存管理模块检查写缓存空间是否已满,若是,则转入过程(3.4),否则转入过程(3.8);(3.4)缓存管理模块从缓存lru链表中取出尾节点,转入过程(3.5);(3.5)查看该节点数据所属的闪存块并检索可靠性记录表,判断该闪存块的擦除次数是否大于阈值,若是,则转入过程(3.6),否则转入过程(3.7);(3.6)缓存管理模块从lru链表中取出当前节点的前一个节点数据,转入过程(3.5);(3.7)将该节点数据块写回闪存,转入过程(3.8);(3.8)将新数据写入缓存并插入到lru链表的表头,转入过程(3.1)。
9.具体地,所述阈值是一个能任意设置的值,阈值范围取闪存擦除寿命值的50%-100%。
10.具体地,所述读缓存管理或写缓存管理执行完会再次检查用户发送的请求类型,这样反复执行,直到用户发送关闭闪存系统命令时,才进入结束步骤。
11.本发明的第二方面,一种提高闪存可靠性的缓存管理装置,该装置包括:主控模
块、读缓存管理模块、写缓存管理模块和结束模块;主控模块:用于查看闪存状态日志,判断历史缓存数据是否存在于闪存存储中,如果存在于闪存存储中,则读取保存在闪存中的历史缓存数据,并初始化缓存元数据表;若没有存在于闪存存储中,则清空缓存数据,并重置缓存元数据表;读缓存管理模块:用于新读请求到达时检查读缓存中是否有该读请求的数据:a1) 如果有读请求的数据,则从缓存中返回该读请求的数据块,同时查看可靠性记录表获取该数据块在缓存中的驻留时间,判断该驻留时间是否大于阈值,b1)如果驻留时间大于阈值,则从闪存中读取该数据块,并与缓存中的数据进行对比,判断两份数据是否相同,c1)如果两份数据相同,则将该数据块信息更新到lru链表的表头,c2)如果两份数据不相同则将缓存中的数据块写入到闪存中,并更新闪存的映射表;b2)如果驻留时间小于阈值,则将该数据块信息更新到lru链表的表头;a2)如果没有该读请求的数据,则从闪存中读取该读请求的数据,更新可靠性记录表中该数据块的驻留时间,然后将该数据块信息更新到lru链表的表头;写缓存管理模块,用于有新数据要写入缓存时,写缓存管理模块首先检查读缓存中是否有要写入地址的数据:a1)如果有要写入地址的数据,则更新读缓存中的数据块,然后检查写缓存空间是否已满,b1)如果写缓存空间已满,则缓存管理模块从缓存lru链表中取出尾节点,查看该节点数据所属的闪存块并检索可靠性记录表,判断该闪存块的擦除次数是否大于阈值,c1)如果大于阈值,则缓存管理模块从lru链表中取出当前节点的前一个节点数据,然后将该节点数据块写回闪存,c2)如果小于阈值,则缓存管理模块将该节点数据块写回闪存,最后将新数据写入缓存并插入到lru链表的表头,b2) 如果写缓存空间不满,则将新数据写入缓存并插入到lru链表的表头,a2)如果没有要写入地址的数据,则不需要更新读缓存中的数据块;所述可靠性记录表用于记录数据块在缓存中的驻留时间c1)如果大于阈值,则缓存管理模块从lru链表中取出当前节点的前一个节点数据,然后将该节点数据块写回闪存,c2)如果小于阈值,则缓存管理模块将该节点数据块写回闪存,最后将新数据写入缓存并插入到lru链表的表头,b2) 如果写缓存空间不满,则将新数据写入缓存并插入到lru链表的表头,a2)如果没有要写入地址的数据,则不需要更新读缓存中的数据块;所述可靠性记录表用于记录数据块在缓存中的驻留时间,c1)如果大于阈值,则缓存管理模块从lru链表中取出当前节点的前一个节点数据,然后将该节点数据块写回闪存,c2)如果小于阈值,则缓存管理模块将该节点数据块写回闪存,最后将新数据写入缓存并插入到lru链表的表头,b2) 如果写缓存空间不满,则将新数据写入缓存并插入到lru链表的表头,a2)如果没有要写入地址的数据,则不需要更新读缓存中的数据块;所述可靠性记录表用于记录数据块在缓存中的驻留时间;结束模块:当用户发出指令关闭闪存时,将可靠性记录表保存到闪存的预留空间中,将写缓存数据更新到闪存设备中,完成后关闭闪存设备,释放相关的资源。
12.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令,所述处理器执行所述计算机可读指令时执行如上述任一项所述的方法的步骤。
13.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令被处理器执行时,使得所述处理器执行如上述任一项所述的方法的步
骤。
14.本发明的有益效果如下:本发明充分利用存储系统应用的数据访问时间局部性和空间局部性以及闪存存储的介质特性,通过在缓存管理中同时挖掘数据访问局部性和闪存介质的可靠性参数提高闪存存储系统的性能和可靠性。当热点读数据长期驻留在缓存中时,缓存管理模块通过检查读数据块的驻留时间,将驻留时间大于阈值的数据块从闪存中重新读入并进行比对,若比对结果不同则将读缓存中的数据块重新写入闪存中以降低闪存单元由于长期不访问而引起的驻留错误。同时,对于写缓存,则将那些属于接近擦除阈值的闪存块中的数据块赋予更高的优先级,更长时间地保留在缓存中,减轻闪存块由于接近擦除极限而导致的数据丢失问题,从而在保证闪存存储性能的同时提高了闪存存储的可靠性。
15.另外,本发明所述的提高闪存可靠性的缓存管理方法和装置能够和闪存转换层模块协同工作,并且可以被嵌入到现有的固态盘控制器中。适用于构造具有高性能和高可靠性的固态盘存储系统。
附图说明
16.图1为本发明实施例的装置示意图;图2为本发明的装置流程示意图;图3为本发明实施例的步骤组成示意图;图4为本发明实施例中的初始化步骤的过程示意图;图5为本发明实施例中的读缓存管理步骤的过程示意图;图6为本发明实施例中的写缓存管理步骤的过程示意图;图7为本发明实施例中的结束步骤的过程示意图。
具体实施方式
17.本实施例所述一种提高闪存可靠性的缓存管理方法和装置,在闪存设备中设置有主控模块、缓存管理模块和可靠性记录表;下面结合附图说明缓存管理方法的各步骤:参见图1,是一个经典的固态盘内部结构图,固态盘主要由主机接口控制器、arm处理器、缓存控制器、闪存控制器、dram缓存和闪存芯片等组成。用户请求通过主机接口控制器接收,arm处理器负责加载闪存转换层程序,实现如地址的映射、损耗均衡、垃圾回收、坏块管理等主要功能。缓存控制器存储用户热点读写数据和地址映射表。闪存控制器实现对后端闪存芯片的连接和控制等功能。本发明的一种提高闪存可靠性的缓存管理方法可应用在固态盘的缓存控制器中。
18.如图2所示,本发明的装置流程示意图,一种提高闪存可靠性的缓存管理装置,该装置包括:主控模块、读缓存管理模块、写缓存管理模块和结束模块;主控模块:用于查看闪存状态日志,判断历史缓存数据是否存在于闪存存储中,如果存在于闪存存储中,则读取保存在闪存中的历史缓存数据,并初始化缓存元数据表;若没有存在于闪存存储中,则清空缓存数据,并重置缓存元数据表;读缓存管理模块:用于新读请求到达时检查读缓存中是否有该读请求的数据:a1) 如果有读请求的数据,则从缓存中返回该读请求的数据块,同时查看可靠性记录表获取该
数据块在缓存中的驻留时间,判断该驻留时间是否大于阈值,b1)如果驻留时间大于阈值,则从闪存中读取该数据块,并与缓存中的数据进行对比,判断两份数据是否相同,c1)如果两份数据相同,则将该数据块信息更新到lru链表的表头,c2)如果两份数据不相同则将缓存中的数据块写入到闪存中,并更新闪存的映射表;b2)如果驻留时间小于阈值,则将该数据块信息更新到lru链表的表头;a2)如果没有该读请求的数据,则从闪存中读取该读请求的数据,更新可靠性记录表中该数据块的驻留时间,然后将该数据块信息更新到lru链表的表头;写缓存管理模块,用于有新数据要写入缓存时,写缓存管理模块首先检查读缓存中是否有要写入地址的数据:a1)如果有要写入地址的数据,则更新读缓存中的数据块,然后检查写缓存空间是否已满,b1)如果写缓存空间已满,则缓存管理模块从缓存lru链表中取出尾节点,查看该节点数据所属的闪存块并检索可靠性记录表,判断该闪存块的擦除次数是否大于阈值,c1)如果大于阈值,则缓存管理模块从lru链表中取出当前节点的前一个节点数据,然后将该节点数据块写回闪存,c2)如果小于阈值,则缓存管理模块将该节点数据块写回闪存,最后将新数据写入缓存并插入到lru链表的表头,b2) 如果写缓存空间不满,则将新数据写入缓存并插入到lru链表的表头,a2)如果没有要写入地址的数据,则不需要更新读缓存中的数据块;所述可靠性记录表用于记录数据块在缓存中的驻留时间;结束模块:当用户发出指令关闭闪存时,将可靠性记录表保存到闪存的预留空间中,将写缓存数据更新到闪存设备中,完成后关闭闪存设备,释放相关的资源。
19.参见图3,首先进行初始化:主控模块查看闪存状态日志,判断历史缓存数据是否存在于闪存存储中;然后读取保存在闪存中的历史缓存数据,并初始化缓存元数据表,再清空缓存数据,并重置缓存元数据表;初始化步骤完成后进入并行的读缓存管理步骤和写缓存管理步骤,当用户发出关闭指令时,进入结束步骤。
20.参见图4,根据用户指令,主控模块查看闪存状态日志,判断历史缓存数据是否存在于闪存存储中;若是,则读取保存在闪存中的历史缓存数据,并初始化缓存元数据表;若是否,则主控模块清空缓存数据,并重置缓存元数据表。
21.参见图5,经由第一步初始化后,当用户发起的请求类型是读请求,缓存管理模块首先检查读缓存中是否有该读请求的数据,若是则从缓存中返回该读请求的数据块,查看可靠性记录表获取该数据块在缓存中的驻留时间,判断该驻留时间是否大于阈值,若是则从闪存中读取该数据块,并与缓存中的数据进行对比,判断两份数据是否相同,若相同则将该数据块信息更新到lru链表的表头,否则将缓存中的数据块写入到闪存中,并更新闪存的映射表,然后将该数据块信息更新到lru链表的表头;若驻留时间不大于阈值,则将该数据块信息更新到lru链表的表头;若读缓存中没有该读请求的数据块,则从闪存中读取该读请求的数据,更新可靠性记录表中该数据块的驻留时间,然后将该数据块信息更新到lru链表的表头。
22.参见图6,经由第一步初始化后,当用户发起的请求类型是写请求,缓存管理模块首先检查读缓存中是否有要写入地址的数据,若有则更新读缓存中的数据块。然后缓存管理模块检查写缓存空间是否已满,若已满则缓存管理模块从缓存lru链表中取出尾节点,查看该节点数据所属的闪存块并检索可靠性记录表,判断该闪存块的擦除次数是否大于阈
值,若是则从lru链表上取出当前节点的前一个节点数据,以此类推,直到找到一个节点的数据所属闪存块的擦除次数小于阈值则将该节点数据块写回闪存,然后将新数据写入缓存并插入到lru链表的表头;若写缓存空间没有满,则直接将新数据写入缓存并插入到lru链表的表头。
23.参见图7,最后,主控模块将优先将可靠性记录表保存到闪存的预留空间中,将写缓存数据更新到闪存设备中,完成后关闭闪存设备,释放相关的资源。
24.虽然已经详细说明了本发明及其优点,但是应当理解在不超出由所附的权利要求所限定的本发明的精神和范围的情况下可以进行各种改变、替代和变换。而且,本技术的范围不仅限于说明书所描述的过程、设备、手段、方法和步骤的具体实施例。本领域内的普通技术人员从本发明的公开内容将容易理解,根据本发明可以使用执行与在此所述的相应实施例基本相同的功能或者获得与其基本相同的结果的、现有和将来要被开发的过程、设备、手段、方法或者步骤。因此,所附的权利要求旨在它们的范围内包括这样的过程、设备、手段、方法或者步骤。
25.以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1