一种存储数据的动态回收处理方法及存储装置
技术领域
本发明涉及存储器技术领域,尤其涉及一种存储数据的动态回收处理方法及存储装置。
背景技术
现有的TLC FLASH存储产品,一般会将部分TLC块使用SLC模式来缓存数据,当数据写到一定程度后,会将SLC块中缓存的有效数据转移到TLC块中,此时SLC块的数量会大量减少,只保留少量SLC块用于缓存数据,一般为128块,由于SLC块较少,导致数据的回收次数增加,产品性能下降。
发明内容
本发明的目的在于针对上述现有技术中的由于数据回收次数多导致的产品性能下降的问题,提出一种存储数据的动态回收处理方法及存储装置,能够有效提高产品性能。
一种存储数据的动态回收处理方法,包括:
接收数据写入命令,并获取所述数据写入命令中的逻辑地址;
根据预先建立的映射表,判断所述逻辑地址是否存在对应的存储单元;
如果所述逻辑地址不存在对应的存储单元,则将有效逻辑容量加1,并更新所述映射表;
根据所述映射表计算有效逻辑容量;
根据有效逻辑容量的大小,动态使用SLC块以及TLC块存储数据;
根据所述有效逻辑容量的大小以及SLC空块的数量,动态使用SLC块内部回收数据和/或TLC块回收数据。
进一步地,所述有效逻辑容量为所述映射表中所有逻辑地址对应的存储单元的总容量;
根据有效逻辑容量的大小,动态使用SLC块以及TLC块存储数据,包括:
检测所述有效逻辑容量是否小于或等于第一容量阈值,如果是,则全部采用SLC块存储数据。
进一步地,根据有效逻辑容量的大小,动态使用SLC块以及TLC块存储数据,还包括:
检测所述有效逻辑容量是否大于第一容量阈值且小于或等于第二容量阈值,如果是,则部分采用SLC块存储数据,另一部分采用TLC块存储数据,且SLC块的数量多于所述TLC块的数量。
进一步地,根据有效逻辑容量的大小,动态使用SLC块以及TLC块存储数据,还包括:
检测所述有效逻辑容量是否大于第二容量阈值且小于或等于第三容量阈值,如果是,则部分采用SLC块存储数据,另一部分采用TLC块存储数据,且SLC块的数量少于所述TLC块的数量。
进一步地,根据所述有效逻辑容量的大小以及SLC空块的数量,动态使用SLC块内部回收数据和/或TLC块回收数据,包括:
如果所述有效逻辑容量大于所述第三容量阈值,且所述SLC空块的数量少于第三数量阈值,则将所述SLC块中的存储数据转移至所述TLC块中。
进一步地,如果所述有效逻辑容量大于所述第二容量阈值且小于或等于第三容量阈值,且所述SLC空块的数量少于第二数量阈值,则将所述SLC块中的存储数据转移至对应的TLC块中,剩余的SLC块内部回收数据。
进一步地,如果所述有效逻辑容量大于所述第一容量阈值且小于或等于所述第二容量阈值,且所述SLC空块的数量少于第一数量阈值,则全部使用SLC块内部回收数据。
进一步地,所述第一容量阈值为***容量的1/3,所述第二容量阈值为***容量的1/2,所述第三容量阈值为***容量的2/3。
进一步地,第一数量阈值为有效逻辑容量小于或等于第一容量阈值时SLC块总数量的90%;
所述第二数量阈值为有效逻辑容量大于第一容量阈值且小于或等于第二容量阈值时SLC块数量的90%;
第三数量阈值为128。
一种存储装置,包括主控单元和存储模块,所述存储模块用于存储多条指令,所述主控单元用于读取所述指令并执行:
接收数据写入命令,并获取所述数据写入命令中的逻辑地址;
根据预先建立的映射表,判断所述逻辑地址是否存在对应的存储单元;
如果所述逻辑地址不存在对应的存储单元,则将有效逻辑容量加1,并更新所述映射表;
根据所述映射表计算有效逻辑容量;
根据有效逻辑容量的大小,动态使用SLC块以及TLC块存储数据;
根据所述有效逻辑容量的大小以及SLC空块的数量,动态使用SLC块内部回收数据和/或TLC块回收数据。
本发明提供的存储数据的动态回收处理方法及存储装置,根据有效逻辑容量的大小,采用不同的回收模式动态回收数据,能够有效减少回收次数,提高产品性能以及稳定性。
附图说明
图1为本发明提供的存储数据的动态回收处理方法一种实施例的流程图。
图2为本发明提供的存储数据的动态回收处理方法另一种实施例的流程图。
图3为本发明提供的存储装置一种实施例的结构示意图。
具体实施方式
为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
实施例一
参考图1,本实施例提供一种存储数据的动态回收处理方法,包括:
步骤S101,接收数据写入命令,并获取所述数据写入命令中的逻辑地址;
步骤S102,根据预先建立的映射表,判断所述逻辑地址是否存在对应的存储单元;
步骤S103,如果所述逻辑地址不存在对应的存储单元,则将有效逻辑容量加1,并更新所述映射表;
步骤S104,根据所述映射表计算有效逻辑容量;
步骤S105,根据有效逻辑容量的大小,动态使用SLC块以及TLC块存储数据;
步骤S106,根据所述有效逻辑容量的大小以及SLC空块的数量,动态使用SLC块内部回收数据和/或TLC块回收数据。
具体地,执行步骤S101,检测是否接收到用户的数据写入命令,如果是,则获取数据写入命令中的逻辑地址。
进一步地,执行步骤S102,根据预先建立的映射表,判断该逻辑地址是否存在对应的存储单元,所述映射表用于存储逻辑地址和存储单元的映射关系。
进一步地,执行步骤S103,判断逻辑地址是否存在对应的存储单元,即逻辑地址是否有映射记录,如果所述逻辑地址不存在对应的存储单元,则将有效逻辑容量加1,并更新所述映射表,如果逻辑地址存在对应的存储单元,则有效逻辑容量不加。
进一步地,执行步骤S104,根据映射表计算有效逻辑容量,所述有效逻辑容量为所述映射表中所有逻辑地址对应的存储单元的总容量。
进一步地,执行步骤S105,根据有效逻辑容量的大小,动态使用SLC块以及TLC块存储数据,具体包括:
检测所述有效逻辑容量是否小于或等于第一容量阈值,如果是,则全部采用SLC块存储数据。
作为一种优选的实施方式,第一容量阈值为***容量的1/3,***容量为存储装置上报***的总容量,当有效逻辑容量小于***容量的1/3时,此时全部采用SLC块存储数据,此时的性能最优。
更进一步地,根据有效逻辑容量的大小,动态使用SLC块以及TLC块存储数据,还包括:
检测所述有效逻辑容量是否大于第一容量阈值且小于或等于第二容量阈值,如果是,则部分采用SLC块存储数据,另一部分采用TLC块存储数据,且SLC块的数量多于所述TLC块的数量。
作为一种优选的实施方式,第二容量阈值为***容量的1/2,当有效逻辑容量大于***容量的1/3且小于或等于***容量的1/2时,此时主要采用SLC块存储数据,同时有少部分TLC块存储数据,即SLC块的数量多于TLC块的数量。
更进一步地,根据有效逻辑容量的大小,动态使用SLC块以及TLC块存储数据,还包括:
检测所述有效逻辑容量是否大于第二容量阈值且小于或等于第三容量阈值,如果是,则部分采用SLC块存储数据,另一部分采用TLC块存储数据,且SLC块的数量少于所述TLC块的数量。
作为一种优选的实施方式,第三容量阈值为***容量的2/3,如果有效逻辑容量小于1/2***容量且小于或等于2/3***容量,则主要采用TLC块存储数据,同时有少部分SLC块存储数据,即TLC块的数量多于SLC块的数量。
进一步地,执行步骤S106,参考图2,根据所述有效逻辑容量的大小以及SLC空块的数量,动态使用SLC块内部回收数据和/或TLC块回收数据,具体包括:
如果所述有效逻辑容量大于所述第三容量阈值,且所述SLC空块的数量少于第三数量阈值,则将所述SLC块中的存储数据转移至所述TLC块中。
作为一种优选的实施方式,第三数量阈值为常规设计中SLC块的最少数量,一般为128块,当有效逻辑容量大于2/3***容量时,检测SLC空块的数量,如果SLC空块的数量少于第一数量阈值,则进行数据回收,此时由于数据主要存储在TLC块中,少部分存储在SLC块中,TLC块的数量多于SLC块数量,因此将全部SLC块中的数据转移至TLC块中,只保留部分SLC块作为热数据缓冲。
进一步地,如果所述有效逻辑容量大于所述第二容量阈值且小于或等于第三容量阈值,且所述SLC空块的数量少于第二数量阈值,则将所述SLC块中的存储数据转移至对应的TLC块中,剩余的SLC块内部回收数据。
作为一种优选的实施方式,如果有效逻辑容量大于1/2***容量且小于或等于2/3***容量,检测SLC空块的数量是否少于第二数量阈值,第二数量阈值为当前SLC块总数量的90%,如果SLC空块数量少于第二数量阈值,即少于总量的90%,则需要进行数据回收,此时数据主要存储在SLC块中,少部分存储在TLC块中,SLC块的数量多于TLC块数量,将部分SLC块的存储数据转移至对应的TLC块中,剩余部分SLC块数据在SLC块内部进行回收,回收无效数据并释放SLC块。
进一步地,如果所述有效逻辑容量大于所述第一容量阈值且小于或等于所述第二容量阈值,且所述SLC空块的数量少于第一数量阈值,则全部使用SLA块内部回收数据。
作为一种优选的实施方式,如果有效逻辑容量大于所述第一容量阈值且小于或等于所述第二容量阈值,则检测SLC空块的数量是否少于第一数量阈值,第一数量阈值为当前SLC块总数量的90%,如果SLC空块的数量少于第一数量阈值,即少于总量的90%,则进行数据回收,由于此时没有TLC块,全部采用SLC块存储数据,此时性能最优,因此数据在SLC块内部回收,不需要转移至TLC块中。
SLC(Single-Level Cell,单层单元),用于临时保存数据,容量小、速度快。
TLC(Triple-Level Cell,三层单元),用于长期保存数据,容量大、数量多。
SLC块和TLC块可以相互切换。
本实施例提供的存储数据的动态回收处理方法,根据有效逻辑容量的大小,采用不同的回收模式动态回收数据,能够有效减少回收次数,提高产品性能以及稳定性。
实施例二
参考图3,本实施例提供一种存储装置,包括主控单元201和存储模块202,存储模块202用于存储多条指令,主控单元201用于读取所述指令并执行:
接收数据写入命令,并获取所述数据写入命令中的逻辑地址;
根据预先建立的映射表,判断所述逻辑地址是否存在对应的存储单元;
如果所述逻辑地址不存在对应的存储单元,则将有效逻辑容量加1,并更新所述映射表;
根据所述映射表计算有效逻辑容量;
根据有效逻辑容量的大小,动态使用SLC块以及TLC块存储数据;
根据所述有效逻辑容量的大小以及SLC空块的数量,动态使用SLC块内部回收数据和/或TLC块回收数据。
作为一种优选的实施方式,所述有效逻辑容量为所述映射表中所有逻辑地址对应的存储单元的总容量。
进一步地,主控单元201还用于执行:
检测所述有效逻辑容量是否小于或等于第一容量阈值,如果是,则全部采用SLC块存储数据。
进一步地,主控单元201还用于执行:
检测所述有效逻辑容量是否大于第一容量阈值且小于或等于第二容量阈值,如果是,则部分采用SLC块存储数据,另一部分采用TLC块存储数据,且SLC块的数量多于所述TLC块的数量。
进一步地,主控单元201还用于执行:
检测所述有效逻辑容量是否大于第二容量阈值且小于或等于第三容量阈值,如果是,则部分采用SLC块存储数据,另一部分采用TLC块存储数据,且SLC块的数量少于所述TLC块的数量。
进一步地,主控单元201还用于执行:
如果所述有效逻辑容量大于所述第三容量阈值,且所述SLC空块的数量少于第三数量阈值,则将所述SLC块中的存储数据转移至所述TLC块中。
进一步地,主控单元201还用于执行:
如果所述有效逻辑容量大于所述第二容量阈值且小于或等于第三容量阈值,且所述SLC空块的数量少于第二数量阈值,则将所述SLC块中的存储数据转移至对应的TLC块中,剩余的SLC块内部回收数据。
进一步地,主控单元201还用于执行:
如果所述有效逻辑容量大于所述第一容量阈值且小于或等于所述第二容量阈值,且所述SLC空块的数量少于第一数量阈值,则全部使用SLC块内部回收数据。
作为一种优选的实施方式,所述第一容量阈值为***容量的1/3,所述第二容量阈值为***容量的1/2,所述第三容量阈值为***容量的2/3。
作为一种优选的实施方式,所述第一数量阈值为有效逻辑容量小于或等于第一容量阈值时SLC块总数量的90%;
所述第二数量阈值为有效逻辑容量大于第一容量阈值且小于或等于第二容量阈值时SLC块数量的90%;
第三数量阈值为128。
本实施例提供的存储装置,能够根据有效逻辑容量的大小,采用不同的回收模式动态回收数据,能够有效减少回收次数,产品性能以及稳定性较高。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。