大幅提升固态硬盘服务时间的闪存的错误管理方法与流程

文档序号:11098121阅读:266来源:国知局
本发明涉及固态硬盘
技术领域
:,尤其涉及一种大幅提升固态硬盘服务时间的闪存的错误管理方法。
背景技术
::如图1所示,典型的固态硬盘(SSD)主要由固态硬盘控制器(SSDController)和闪存(NANDFlash)组成,且所述固态硬盘以所述固态硬盘控制器作为核心,采用所述闪存作为存储数据的介质。如图2所示,所述闪存内部由成千上万个块(Block)组成,块是由若干个字线(WordLine)和位线(BitLine)交叉组成网状结构,一个字线包含一个或多个页(Page),页由若干个位线(BitLine)组成(位线可被进一步划分为奇偶或者分组,所以一个字线可以包含多个页),8个位线组成1个字节(Column)。所述固态硬盘控制器具备纠错码(ErrorCorrectionCode)能力(一般由闪存控制器实现),能够纠正若干闪存页内的位翻转错误(0到1的翻转或1到0的翻转)。目前,所述固态硬盘控制器的做法是将闪存页划分为多个纠错单元,每个所述纠错单元包含用户数据、元数据、纠错码(包括但不限于BCH码或低密度奇偶检查码)和CRC。数据写入页时,所述固态硬盘控制器的纠错码模块会按照所述纠错单元的大小对每段用户数据添加纠错码(闪存页的大小有4KB、8KB、16KB等,所述纠错单元的大小有1KB、2KB、4KB。注:这里所说的nKB实际上不会刚好是1024个字节的整数倍。所述闪存页除了包含整数KB的容量外,还会包含一定数量的冗余字节来存放非用户数据;所述纠错单元除了整数KB的用户数据,还包含少量元数据、纠错码和CRC);从页读取数据时,所述固态硬盘控制器中的纠错码模块会按照所述纠错单元为单位进行解码。如果出现的位翻转的数量超过了纠错码的位纠错能力(可以纠正的位的数量),就会出现不可纠正的位错误;如果未翻转的数量未超过纠错码的位纠错能力,但是超过了预先设定好的阈值,我们称其为可纠正的位错误。不论出现不可纠正的位错误还是可纠正的位错误,现有所述固态硬盘控制器的做法是将该页或该页所在的块标记为失效,并不再使用。如图3所示,是现有的所述固态硬盘的闪存页中的数据的摆放方式。也就是说,现有固态硬盘控制器对闪存的错误管理以闪存的页或块为单位,当读取某个页出现不可纠正的位(Bit)错误(UncorrectableBitError)或可纠正的位错误(CorrectableBitError)超过设定的阈值时,会将整个页或该页所在的整个块标记为失效,并不再使用,导致固态硬盘的实际可用物理容量有所损失,而物理容量的下降意味着写入寿命的降低。如果发生此种失效的页或块过多,将导致固态硬盘的实际可用物理容量急剧下降,可服务时间减少甚至无法再继续服务。因此,有必要提供一种能够维持固态硬盘实际可用物理容量和延长固态硬盘的实际可服务时间的大幅提升固态硬盘服务时间的闪存的错误管理方法。技术实现要素:本发明主要解决的技术问题是提供一种能够维持固态硬盘实际可用物理容量和延长固态硬盘的实际可服务时间的大幅提升固态硬盘服务时间的闪存的错误管理方法。为解决上述技术问题,本发明提供一种大幅提升固态硬盘服务时间的闪存的错误管理方法包括如下步骤:建立固态硬盘的初始的闪存坏字节表;将待写入数据写入所述固态硬盘的闪存页时,查询所述闪存坏字节表,并按照所述闪存坏字节表标记的坏字节位置,跳过所述坏字节的位置以写入所述待写入数据;从所述固态硬盘的闪存页读取待读取数据时,查询所述闪存坏字节表,并按照所述闪存坏字节表标记的坏字节位置,跳过所述坏字节的位置以读取所述待读取数据。优选地,在建立固态硬盘的初始的闪存坏字节表步骤中,当所述固态硬盘初始化时,所述固态硬盘的控制器依次扫描闪存每个块的每个页,建立初始闪存坏字节表。优选地,所述固态硬盘的控制器依次扫描闪存每个块的每个页的扫描方法包括如下步骤:关闭纠错码纠错;擦除块,先对所述块中的每个页写入校验数据,再读取所述块中每个页的数据,与所述校验数据进行比对,并统计发生翻转的位,完成一个所述块的扫描过程;对每个所述块重复N次所述扫描过程,在所述块中每个页中,判定N次所述扫描过程中均发生翻转的位所在字节为坏字节,其中,N正整数;判断所述块内累计的坏字节数量是否超过M,如果是,则直接将所述块标记为失效,如果否,在所述闪存坏字节表更新所述块的坏字节位置,其中,M为正整数;判断所述闪存内所有的块是否都完成扫描,如果是,则将所述闪存坏字节表持久化存储于非易失性存储介质内,建立初始的所述闪存坏字节表,如果否,则返回块的扫描过程步骤,以对所述内存内的下一个块进行所述扫描过程。优选地,按照所述闪存坏字节表标记的坏字节位置,跳过所述坏字节的位置以写入所述待写入数据的步骤包括如下步骤:所述固态硬盘的控制器查询所述闪存坏字节表,并按照所述闪存坏字节表标记的坏字节个数生成纠错码;动态调整数据写入到所述闪存页中字节的位置,数据流的过程中进行零次或至少一次的下发改变写字节位置命令;动态插入dummy数据,数据流的过程中进行零次或至少一次的插入所述dummy数据,并不将其计入所述纠错码计算中。优选地,按照所述闪存坏字节表标记的坏字节位置,跳过所述坏字节的位置以读取所述待读取数据的步骤包括如下步骤:所述固态硬盘的控制器查询所述闪存坏字节表,按照所述闪存坏字节表标记的坏字节个数计算前次写入时生成的纠错单元的大小,并按照所述纠错单元进行纠错码解码;动态调整从所述闪存页中字节的位置读取数据,数据流的过程中进行零次或至少一次的下发改变读字节位置命令;动态剔除dummy数据,数据流的过程中进行零次或至少一次的剔除所述dummy数据,恢复本来的数据序列后再进行纠错码解码。优选地,在从所述固态硬盘的闪存页读取待读取数据步骤之后,还包括更新所述闪存坏字节表步骤:当读取所述闪存页发生不可纠正的位错误或可纠正的位错误时,判断所述闪存页中的坏字节,并更新所述闪存坏字节表,且将更新后的所述闪存坏字节表持久化地存储到非易失性存储介质中。优选地,更新所述闪存坏字节表的步骤具体包括如下步骤:搬移块上的有效数据;擦除块,先对所述块中的每个页写入校验数据,再读取所述块中每个页的数据,与所述校验数据进行比对,并统计发生翻转的位,完成一个所述块的扫描过程;在所述块的扫描过程中,判定所述块中每个页中发生翻转的位所在字节为坏字节;判断所述块内累计的坏字节数量是否超过M,其中,M为正整数;如果是,则直接将所述块标记为失效的坏块;如果否,在所述闪存坏字节表更新所述块的坏字节位置,并将更新后的所述闪存坏字节表持久化地存储到所述非易失性存储介质中。优选地,所述固态硬盘上电时,所述固态硬盘的控制器加载所述闪存坏字节表到所述固态硬盘控制器内部的RAM或外挂的DRAM中,以便后续读写操作时查询和更新所述闪存坏字节表。本发明提供大幅提升固态硬盘服务时间的闪存的错误管理方法避免了在闪存出现不可纠正的位错误或可纠正的位错误时过早的使页或块失效,而仅仅是剔除不稳定或已物理损坏的字节,这样极大延长了页或块的使用时间,维持住了固态硬盘的可用物理容量和写入寿命,提升了固态硬盘的可服务时间;而且,所述大幅提升固态硬盘服务时间的闪存的错误管理方法与闪存的制程和工艺无关,与闪存的生产制造厂商无关,任何固态硬盘控制器都可以采用本发明描述的闪存错误管理方法。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图,其中:图1是现有技术中固态硬盘的结构示意图;图2是图1所示固态硬盘中闪存的结构示意图;图3是图2所示闪存中数据摆放的示意图;图4是本发明实施例提供的大幅提升固态硬盘服务时间的闪存的错误管理方法的流程框图;图5是图4所示大幅提升固态硬盘服务时间的闪存的错误管理方法中建立初始化闪存坏字节表的流程示意图;图6是图4所示大幅提升固态硬盘服务时间的闪存的错误管理方法中动态调整数据写入闪存页的过程示意图;图7是图4所示大幅提升固态硬盘服务时间的闪存的错误管理方法中动态插入dummy数据的过程示意图;图8是图4所示大幅提升固态硬盘服务时间的闪存的错误管理方法中动态调整从所述闪存页的字节位置读取数据的过程示意图;图9是图4所示大幅提升固态硬盘服务时间的闪存的错误管理方法中动态剔除dummy数据的过程示意图;图10是图4所示大幅提升固态硬盘服务时间的闪存的错误管理方法中更新闪存坏字节表的流程示意图;图11是闪存坏字节表的格式示意图;图12是无坏字节时闪存页中数据的摆放示意图;图13是有两个坏字节的闪存页中数据的摆放示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。请参阅图4,所述大幅提升固态硬盘服务时间的闪存的错误管理方法100具体包括如下步骤:S1、建立固态硬盘的初始的闪存坏字节表。具体地,在步骤S1中,当所述固态硬盘初始化时,所述固态硬盘的控制器依次扫描闪存每个块的每个页,建立初始闪存坏字节表。其中,请参阅图5,所述固态硬盘的控制器依次扫描闪存每个块的每个页的扫描方法包括如下步骤:关闭纠错码纠错;擦除块,先对所述块中的每个页写入校验数据,再读取所述块中每个页的数据,与所述校验数据进行比对,并统计发生翻转的位,完成一个所述块的扫描过程;对每个所述块重复N次所述扫描过程,在所述块中每个页中,判定N次所述扫描过程中均发生翻转的位所在字节为坏字节,其中,N正整数;判断所述块内累计的坏字节数量是否超过坏字节个数阈值,如果是,则直接将所述块标记为失效,如果否,在所述闪存坏字节表更新所述块的坏字节位置;判断所述闪存内所有的块是否都完成扫描,如果是,则将所述闪存坏字节表持久化存储于非易失性存储介质内,建立初始的所述闪存坏字节表,如果否,则返回块的扫描过程步骤,以对所述内存内的下一个块进行所述扫描过程。而且,所述闪存坏字节表标记所述闪存页中坏字节的位置。所述闪存坏字节表坏字节表格式不限,可以是数组,也可以是树或其他格式。所述闪存坏字节表可以按照页对所述坏字节进行标记,也可以按照块对所述坏字节进行标记(即块中每个页的坏字节位置都是一样的),这取决于所述固态硬盘控制器内部资源和固件算法实现。在本实施例中,所述闪存坏字节表基于所述固态硬盘控制器的纠错码的纠错能力和所述闪存页的大小设定所述坏字节个数阈值,当某个页中的坏字节个数超过所述坏字节个数阈值时,直接标记页或块失效。S2、将待写入数据写入所述固态硬盘的闪存页时,查询所述闪存坏字节表,并按照所述闪存坏字节表标记的坏字节位置,跳过所述坏字节的位置以写入所述待写入数据。在本实施例中,当所述固态硬盘上电时,所述固态硬盘的控制器加载所述闪存坏字节表到所述固态硬盘控制器内部的RAM或外挂的DRAM中,以便后续读写操作时查询和更新所述闪存坏字节表。具体地,在步骤S2中,请同时参阅图6和图7,按照所述闪存坏字节表标记的坏字节位置,跳过所述坏字节的位置以写入所述待写入数据的步骤包括如下步骤:所述固态硬盘的控制器查询所述闪存坏字节表,并按照所述闪存坏字节表标记的坏字节个数生成纠错码;动态调整数据写入到所述闪存页中字节的位置,数据流的过程中进行零次或至少一次的下发改变写字节位置(CHANGEWRITECOLUMN)命令;动态插入dummy数据,数据流的过程中进行零次或至少一次的插入所述dummy数据,并不将其计入所述纠错码计算中。需要说明的是,所述改变写字节位置命令能在数据写入所述闪存页的流水的过程中动态调整数据写入所述闪存页后的实际字节的位置。而且,由于页中存在坏字节,所以页的实际容量比没有坏字节时要小,此时所述纠错单元的纠错码长度可能需要向下调整,具体取决于所述坏字节个数阈值大小和所述闪存页的冗余字节是否足够。S3、从所述固态硬盘的闪存页读取待读取数据时,查询所述闪存坏字节表,并按照所述闪存坏字节表标记的坏字节位置,跳过所述坏字节的位置以读取所述待读取数据。具体地,在步骤S3中,请同时参阅图8和图9,按照所述闪存坏字节表标记的坏字节位置,跳过所述坏字节的位置以读取所述待读取数据的步骤包括如下步骤:所述固态硬盘的控制器查询所述闪存坏字节表,按照所述闪存坏字节表标记的坏字节个数计算前次写入时生成的纠错单元的大小,并按照所述纠错单元进行纠错码解码;动态调整从所述闪存页中字节的位置读取数据,数据流的过程中进行零次或至少一次的下发改变读字节位置(CHANGEREADCOLUMN)命令;动态剔除dummy数据,数据流的过程中进行零次或至少一次的剔除所述dummy数据,恢复本来的数据序列后再进行纠错码解码。需要说明的是,所述改变读字节位置命令能在从所述闪存页读取数据的流水的过程中动态调整从所述闪存页的某个字节的位置读取数据。S4、更新所述闪存坏字节表,当读取所述闪存页发生不可纠正的位错误或可纠正的位错误时,判断所述闪存页中的坏字节,并更新所述闪存坏字节表,且将更新后的所述闪存坏字节表持久化地存储到非易失性存储介质中。具体地,请参阅图10,在步骤S4中,更新所述闪存坏字节表的步骤具体包括如下步骤:搬移块上的有效数据;擦除块,先对所述块中的每个页写入校验数据,再读取所述块中每个页的数据,与所述校验数据进行比对,并统计发生翻转的位,完成一个所述块的扫描过程;在所述块的扫描过程中,判定所述块中每个页中发生翻转的位所在字节为坏字节;判断所述块内累计的坏字节数量是否超过M,其中,M为正整数;如果是,则直接将所述块标记为失效的坏块;如果否,在所述闪存坏字节表更新所述块的坏字节位置,并将更新后的所述闪存坏字节表持久化地存储到所述非易失性存储介质中。以下结合具体实施例对所述大幅提升固态硬盘服务时间的闪存的错误管理方法100作进一步的描述。假设固态硬盘使用如下页大小的闪存颗粒:页大小:18,256字节(16,384+1872字节),则可用于纠错码的字节数为1872。假设所述固态硬盘控制器的纠错码为BCH码,纠错单元大小为1KB,标准纠错能力为每1KB纠错60位,那么每个纠错单元的纠错码长度为60×14/8=105个字节,一个页的所有纠错码长度为105×16=1680个字节。假设一个纠错单元的元数据+CRC码占据8个字节,则一个页的所有元数据占据8×16=128个字节。那么一个页剩余的字节数为1872–1680–128=64个字节。因此可设定坏字节个数阈值为64个字节,刚好与剩余字节数匹配,这样即使产生了所述坏字节也不用调整纠错码长度。为了节省所示固态硬盘运行时闪存坏字节表占用的DRAM空间,所述闪存坏字节表按照块为单位进行标记,采用简单的数组格式,每个块都有一个坏字节表项,其格式如图11所示。在图11中,字表示2个字节。对于坏字节的位置,有效时值为真实的闪存页内字节偏移位置,无效时为0xFFFF。所述固态硬盘初始化时,所述固态硬盘控制器依次扫描闪存每个块的每个页,建立初始闪存坏字节表。扫描的方法为:关闭纠错码纠错,先对块中的每个页写入校验数据,再读取块中的每个页的数据,与校验数据进行比对,检查哪些位发生了位翻转。对每个块重复3次。对3次均发生位翻转的位,判定该块中每个页的该位所在字节为坏字节,对累计坏字节超过64个的块直接标记其为失效,否则在所述闪存坏字节表中更新该块的坏字节位置。闪存扫描完成后,将啊啊闪存坏字节表持久化存储到闪存中。所述固态硬盘上电时,所述固态硬盘控制器从闪存中加载闪存坏字节表到所述固态硬盘控制器外挂的DRAM中,后续读写操作时会查询和更新该表。数据写入闪存页时,所述固态硬盘控制器查询闪存坏字节表,按照其标记的坏字节的位置在数据流的过程中零次或至少一次的下发CHANGEWRITECOLUMN命令。如图12和图13所示,数据在闪存页无坏字节和有坏字节(假设有2个坏字节)时写入闪存页后的摆放。从所述闪存页读取数据时,所述固态硬盘控制器查询所述闪存坏字节表,按照其标记的坏字节的位置在数据流程过程中零次或至少一次的下发CHANGEREADCOLUMN命令。当读取所述闪存页发生不可纠正的位错误或可纠正的位错误时,先搬移块上的有效数据,然后擦除块,对该页写入校验数据,然后关闭纠错码纠错,读取该页的数据,与校验数据进行比对,检查哪些位发生了位翻转。对发生位翻转的位,判定其所在字节为坏字节。如果该块累计坏字节超过64个则标记为失效,否则在闪存坏字节表中更新该块的坏字节位置,并持久化存储所述闪存坏字节表到闪存中。本实施方式中,所述校验数据为0X00;需要说明的是,其他合适的数据同理属于本发明的保护范围。本发明提供大幅提升固态硬盘服务时间的闪存的错误管理方法100避免了在闪存出现不可纠正的位错误或可纠正的位错误时过早的使页或块失效,而仅仅是剔除不稳定或已物理损坏的字节,这样极大延长了页或块的使用时间,维持住了固态硬盘的可用物理容量和写入寿命,提升了固态硬盘的可服务时间;而且,所述大幅提升固态硬盘服务时间的闪存的错误管理方法100与闪存的制程和工艺无关,与闪存的生产制造厂商无关,任何固态硬盘控制器都可以采用本发明描述的闪存错误管理方法。以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的
技术领域
:,均同理包括在本发明的专利保护范围内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1