【发明内容】
本发明要解决的技术问题是提供基于闪存的数据存储方法、装置以及闪存芯片,解决存储器平均响应时间慢、存储器性能低的问题。
本发明实施例的一个方面,提供一种基于闪存的数据存储方法,所述闪存包含多个物理块,所述方法包括:获取各空闲的所述物理块的健康状态;确定待存储数据的热度等级;根据所述待存储数据的热度等级,以及所述物理块的健康状态,将所述待存储数据存储至对应的物理块中。
可选地,所述物理块的健康状态具体是根据所述物理块最近一次被访问时的R/B信号等待时长来确定的。
可选地,所述物理块最近一次被访问包括:读操作或者写操作。
可选地,所述确定待存储数据的热度等级包括:根据数据在缓存中的访问频率的高低确定所述待存储数据的热度等级。
可选地,所述确定各空闲的所述物理块的健康状态之前,所述方法还包括:接收待存储数据对应的数据存储请求,所述数据存储请求包含至少一个逻辑号;根据所述数据存储请求,搜寻空闲的物理块;
所述根据所述待存储数据的热度等级,以及所述物理块的健康状态,将所述待存储数据存储至对应的物理块中之后,所述方法还包括:
将所述待存储数据所存储的物理块,以及所述待存储数据对应的数据存储请求所包含的逻辑号,建立映射。
本发明实施例的另一方面,提供一种基于闪存的数据存储装置,所述闪存包含多个物理块,所述装置包括:获取模块,用于获取各空闲的所述物理块的健康状态;确定模块,用于确定待存储数据的热度等级;存储模块,用于根据所述待存储数据的热度等级,以及所述物理块的健康状态,将所述待存储数据存储至对应的物理块中。
可选地,所述物理块的健康状态具体是根据所述物理块最近一次被访问时的R/B信号等待时长来确定的。
可选地,所述物理块最近一次被访问包括:读操作或者写操作。
可选地,所述确定模块具体用于:根据数据在缓存中的访问频率的高低确定所述待存储数据的热度等级。
可选地,所述装置还包括:接收模块,用于接收待存储数据对应的数据存储请求,所述数据存储请求包含至少一个逻辑号;搜寻模块,用于根据所述数据存储请求,搜寻空闲的物理块;建立模块,用于将所述待存储数据所存储的物理块,以及所述待存储数据对应的数据存储请求所包含的逻辑号,建立映射。
本发明实施例的又一方面,提供一种闪存芯片,所述闪存芯片包括:控制器;以及与所述控制器通信连接的存储器;其中,所述存储器存储有可被所述控制器执行的指令,所述指令被所述控制器执行,以使所述控制器能够执行如上所述的方法。
在本发明实施例中,通过获取空闲物理块的健康状态和待存储数据的热度等级,然后根据待存储数据的热度等级,以及物理块的健康状态来存储所述待存储数据。该实施方式能够将经常更新的数据(即热数据)存储至健康状态好的物理块中,将不经常更新的数据(即冷数据)存储至健康状态差的物理块中。一方面,使数据的读/写速度变快,缩短了存储器的平均响应时间,另一方面,避免了大量坏块的产生,提高了存储器的性能。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
目前,闪存设备主要由闪存介质和闪存控制器两部分构成,如图1所示,图1是本发明实施例提供的一种闪存设备的内部结构示意图。
闪存操作以页(page)为读写单元,以物理块(block)为擦除单元,设备内部的介质访问提供了通道、颗粒封装、颗粒闪存片等多个级别的并行。设备内部以多通道方式组织闪存颗粒封装,每个通道上可连接多个颗粒封装,多颗粒封装之间共享传输通道,但可独立执行指令。每个颗粒封装内部包含两个或多个颗粒,每个颗粒可被独立选中执行指令。颗粒内部可分为多个片,每个片含有一个页大小的寄存器缓存,用于暂存读写数据。
闪存控制器主要负责地址映射、垃圾回收和磨损均衡。闪存通过异地更新的方式缓解闪存单元写前擦除的延迟,由于闪存单元的擦除次数有限,闪存控制器通过磨损均衡算法来平衡设备内部物理块之间的擦除次数,同时垃圾回收算法尽量选择擦除效率高的物理块回收以控制写放大。
可以理解的是,上述闪存设备的闪存控制器能够将数据更新请求均匀地下发至各个物理块,以均衡各个物理块的使用频率,从而延长存储器的使用寿命。然而,在数据存储过程中,忽略了物理块本身的实际物理性能,即便每个物理块的访问次数相同,但其剩余的使用寿命也可能是不同的,同理其各自的响应时间也不同。如果一些频繁被访问的数据(这类数据被称为热数据)被分配到健康状态差的物理块中,致使数据的访问速度缓慢,延长了存储器的平均响应时间。另外,如果将热数据与很少被访问的数据(这类数据称为冷数据)混合存储在相同的存储区域,当闪存设备被触发垃圾回收机制时,将有大量的冷数据页需要被重新写到新的空白块中,这将极大地降低闪存设备的读写访问性能和使用寿命。因此,根据物理块的实际物理性能合理的利用存储介质,将能有效缩短存储器的平均响应时间,提升存储器的读写访问性能和使用寿命。
基于此,请参阅图2,图2是本发明实施例提供的一种基于闪存的数据存储方法的流程示意图。该闪存可具体是U盘(USB存盘,USB flash disk)和SSD等设备,闪存可具体由闪存控制器和闪存介质组成,闪存控制器的功能可具体由控制芯片实现,闪存介质的功能可具体由存储芯片实现,存储芯片为flash芯片,flash类型的芯片可具体为NAND flash芯片等。如图2所述,该方法包括:
S101、获取各空闲的所述物理块的健康状态。
该物理块即闪存介质上的存储数据的物理区域,物理块是数据在磁盘上的存储单位,是上层软件中操作文件时使用的最小操作单元。物理块由扇区组成,从硬件设备上读取一个物理块,实际是从硬件设备读取一个或多个扇区。物理块对应逻辑块,逻辑块与文件相对应。在本实施例中,预先确定每一物理块的健康状态,当有数据存储请求时,获取空闲物理块的健康状态。
物理块的健康状态一定程度上能够反映执行本方法的闪存设备的使用寿命的长短,以及闪存设备读数据/写数据时的工作性能。
其中,如图3所示,确定物理块的健康状态的具体过程包括:
S11、获取所述物理块的历史访问次数;
S12、当所述历史访问次数为大于或者等于预设次数时,获取所述物理块最近一次被访问时的R/B信号等待时长;
S13、根据所述R/B信号等待时长确定所述物理块的健康状态。
在本实施例中,每个物理块都有相应的区域记录历史访问次数。当历史访问次数大于或者等于预设次数时,检查R/B信号等待时长,根据该时长的长短来判断该物理块的健康状态,当该等待时长比较长时,说明物理块的健康状态比较差,当该等待时长比较短时,说明物理块的健康状态比较好。当物理块的历史访问次数较少,则说明该物理块比较新,其R/B信号等待时长之间的区别比较小,可以直接使用第一次访问该物理块时的R/B信号等待时长,以减少计算步骤。
其中,该R/B信号即表示“就绪/忙”,R/B的输出能够显示闪存芯片的状态,R/B处于低电平时,表示有编程、擦除或随机读操作正在进行,操作完成后,R/B会自动返回高电平。通过R/B信号可以判断编程、擦除或随机读操作是否完成,如果是“忙”,表示编程、擦除或随机读操作正在进行中,如果是“就绪”,表示操作完成。
其中,检查R/B信号等待时长,即检查物理块最近一次被访问时的R/B信号等待时长。
其中,最近一次的R/B信号等待时长包括:所述物理块被写入数据时的最近一次的R/B信号等待时长;或者,所述物理块被读取数据时的最近一次的R/B信号等待时长。也即是说,当该物理块最近一次的操作是读取数据,则检查读取数据过程中的R/B信号等待时长,当该物理块最近一次的操作是写入数据,则检查写入数据过程中的R/B信号等待时长。
其中,根据R/B信号等待时长确定物理块的健康状态,由于R/B信号等待时长越长,表示操作时间更长,随着闪存芯片写操作次数的增加,R/B信号等待时长就会增加,因此,物理块的健康状态就会变差。相反地,R/B信号等待时长越短,物理块的健康状态就会越好。
在本实施例中,可以结合一些数据(比如总容量、文件系统所占用的存储空间、系统开销占用的存储空间以及用户习惯等),根据获取的R/B信号等待时长,确定物理块的具体健康状态,并记录该R/B信号等待时长与物理块的具体健康状态的对应关系。例如,R/B信号等待时长为10个CPU时钟周期,其对应的物理块的健康状态为第一级别,R/B信号等待时长为7个CPU时钟周期,其对应的物理块的健康状态为第二级别,R/B信号等待时长为4个CPU时钟周期,其对应的物理块的健康状态为第三级别,等。其中,第一级别表示物理块的R/B信号等待时长大于物理块的初始R/B信号等待时长并且多余的时长在第一预设范围内,第二级别表示物理块的R/B信号等待时长大于物理块的初始R/B信号等待时长并且多余的时长在第二预设范围内,第三级别表示物理块的R/B信号等待时长大于物理块的初始R/B信号等待时长并且多余的时长在第三预设范围内。其中,第一预设范围的时长大于第二预设范围的时长,第二预设范围的时长大于第三预设范围的时长。
需要说明的是,由于是获取所述物理块最近一次被访问时的R/B信号等待时长,并用最近一次的R/B信号等待时长来判断物理块的健康状态,因此,该物理块的健康状态的确定结果是一个动态更新的过程,根据物理块的使用次数以及最近一次的R/B信号等待时长,动态的更新其健康状态。
S102、确定待存储数据的热度等级。
在本实施例中,可以根据数据在缓存中的访问频率的高低来确定待存储数据的热度等级,具体地,将在缓存中访问频率大于预设第一阈值的数据划分为热数据,将在缓存中访问频率小于预设第二阈值的数据划分为冷数据。其中,预设第一阈值大于预设第二阈值,并且预设第一阈值和预设第二阈值的大小可以根据经验值来确定,也可以通过多次实验后求取的平均值来确定。而在缓存中访问频率小于等于预设第一阈值,并且大于等于预设第二阈值的数据被划分为常规数据。在这里,进一步判断常规数据中哪些是热数据,哪些是冷数据。可以基于已划分出的热数据和冷数据,以及常规数据,分别进行特征提取,基于提取的数据特征,通过传统的聚类算法对数据进行相似性度量,从而将常规数据中的数据划分为热数据或者冷数据。
还可以基于最近最少使用(Least Recently Used,LRU)算法来确定待存储数据是热数据或者冷数据。LRU算法是内存页面置换算法中的一种,它是为虚拟页式存储管理服务的。LRU算法的提出基于著名的局部性原理:如果一个数据正在被访问,那么近期很可能再次被访问。因此,LRU算法的思想是,一个最近访问过的页面很可能再次被访问,所以当需要淘汰内存中某个页面时,先淘汰当前一段时间内最久未使用的页面。数据访问时间的局部性原理同样适用于热数据识别。一般的,如果一个数据最近一段时间内多次被访问,那么该数据可以判定为热数据。因此,可以通过LRU算法来识别热数据和冷数据。进一步地,以LRU为基础,还可以通过两级LRU算法或者LRU-K算法等其他算法来判断热数据和冷数据。
其中,两级LRU算法是维持两个固定长度的队列,一个队列用于存放访问次数较多的数据块,另一个队列用于存放访问频率相对较少的数据块,两个队列中的记录采用LRU算法进行淘汰。LRU-K算法是根据每个页面最近被访问的时间进行排序,离现在最晚的页面被淘汰,其根据使用频率近似表示概率的方式来预测未来的热点页面,优先淘汰非热点页面。
需要说明的是,本发明实施例还可以通过其他方法来确定待存储数据的热度等级,在此不做限定。
S103、根据所述待存储数据的热度等级,以及所述物理块的健康状态,将所述待存储数据存储至对应的物理块中。
在本实施例中,确定待存储数据为热数据或者冷数据,以及空闲物理块的健康状态之后,将热数据写入健康状态好的空闲物理块中,将冷数据写入健康状态差的空闲物理块中。
在一些实施例中,待存储数据明确划分为热数据和冷数据后,还可以进一步划分热数据的热度等级,以及冷数据的冷度等级。例如,将热数据划分为第一热度数据、第二热度数据以及第三热度数据,其中,第一热度数据被访问的频率高于第二热度数据,第二热度数据被访问的频率高于第三热度数据,此时,热数据在物理块中的存储方式为,第一热度数据存储在健康状态最好的物理块中,第二热度数据存储在健康状态良好的物理块中,第三热度数据存储在健康较好的物理块中。同理,冷数据也可以根据其划分的冷度等级对应不同健康状态的物理块。
需要说明的是,由于本实施例根据读数据时的R/B信号等待时间或者写数据时的R/B信号等待时间来动态的更新物理块的健康状态,因此,热数据和冷数据所存储的物理块并不是固定不变的,当热数据当前存储的物理块的健康状态不能匹配其热度等级时,调整该热数据所存储的物理块。
本发明实施例提供了一种基于闪存的数据存储方法,该方法通过获取空闲物理块的健康状态和待存储数据的热度等级,然后根据待存储数据的热度等级,以及物理块的健康状态来存储所述待存储数据。该实施方式能够将经常更新的数据(即热数据)存储至健康状态好的物理块中,将不经常更新的数据(即冷数据)存储至健康状态差的物理块中。一方面,使数据的读/写速度变快,缩短了存储器的平均响应时间,另一方面,避免了大量坏块的产生,提高了存储器的性能。
请参阅图4,图4是本发明另一实施例提供的一种基于闪存的数据存储方法的流程示意图。如图4所示,该方法包括:
S201、接收待存储数据对应的数据存储请求,所述数据存储请求包含至少一个逻辑号;
S202、根据所述数据存储请求,搜寻空闲的物理块;
S203、获取各空闲的所述物理块的健康状态;
S204、确定待存储数据的热度等级;
S205、根据所述待存储数据的热度等级,以及所述物理块的健康状态,将所述待存储数据存储至对应的物理块中;
S206、将所述待存储数据所存储的物理块,以及所述待存储数据对应的数据存储请求所包含的逻辑号,建立映射。
本实施例与上述实施例的主要区别在于,在根据待存储数据的热度等级,以及物理块的健康状态完成数据存储之后,还根据该存储结果,建立物理块与待存储数据的逻辑号之间的映射。该映射可以用于,当有读数据请求时,可以根据读数据请求携带的逻辑号,并结合物理块与逻辑号之间的映射关系,找到该逻辑号所对应的物理块,然后读取该物理块中的数据。
需要说明的是,在上述读取数据过程中,也可以根据读数据过程中的R/B信号等待时长来更新物理块的健康状态,当物理块健康状态更新,并且数据存储的位置变化了,相应地,对所述映射表进行更新。
其中,所述逻辑号即逻辑块对应的编号。具体文件系统管理的是一个逻辑空间,该逻辑空间即类似于一个大的数组,数组中每个元素就是文件系统操作的基本单位,也即是逻辑块,一般逻辑块从0开始编号,而且,逻辑块是连续的,与逻辑块对应的即物理块。
本发明实施例提供了一种基于闪存的数据存储方法,该方法通过获取空闲物理块的健康状态和待存储数据的热度等级,然后根据待存储数据的热度等级,以及物理块的健康状态来存储所述待存储数据,并且根据存储结果建立相应的映射。该实施方式在读数据时能够根据映射关系来获取相应的数据,由于数据存储时结合了数据本身被访问的频率以及存储数据的物理块的健康状态,从而使数据读取的速度更快,整体上提高了闪存设备的性能。
请参阅图5,图5是本发明实施例提供的一种基于闪存的数据存储装置的结构示意图。如图5所示,该装置30包括:获取模块33、确定模块34以及存储模块35。
其中,获取模块33,用于获取各空闲的所述物理块的健康状态;确定模块34,用于确定待存储数据的热度等级;存储模块35,用于根据所述待存储数据的热度等级,以及所述物理块的健康状态,将所述待存储数据存储至对应的物理块中。
在本实施例中,获取模块33和确定模块34分别连接存储模块,获取模块33将获取的各空闲物理块的健康状态发送至存储模块35,确定模块34将确定的待存储数据的热度等级发送至存储模块35,存储模块35根据物理块的健康状态和待存储数据的热度等级来存储待存储数据。
其中,所述物理块的健康状态具体是根据所述物理块最近一次被访问时的R/B信号等待时长来确定的。
其中,所述物理块最近一次被访问包括:读操作或者写操作。
其中,所述确定模块34具体用于:根据数据在缓存中的访问频率的高低确定所述待存储数据的热度等级。
在一些实施例中,请参阅图6,图6与图5的主要区别在于,所述装置30还包括:接收模块31、搜寻模块32以及建立模块36。
其中,接收模块31,用于接收待存储数据对应的数据存储请求,所述数据存储请求包含至少一个逻辑号;搜寻模块32,用于根据所述数据存储请求,搜寻空闲的物理块;建立模块36,用于将所述待存储数据所存储的物理块,以及所述待存储数据对应的数据存储请求所包含的逻辑号,建立映射。
需要说明的是,本发明实施例中的基于闪存的数据存储装置中的各个模块之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容同样适用于基于闪存的数据存储装置。本发明实施例中的各个模块能作为单独的硬件或软件来实现,并且可以根据需要使用单独的硬件或软件来实现各个单元的功能的组合。
本发明实施例提供了一种基于闪存的数据存储装置,该装置通过获取空闲物理块的健康状态和待存储数据的热度等级,然后根据待存储数据的热度等级,以及物理块的健康状态来存储所述待存储数据,并且根据存储结果建立相应的映射表。该实施方式能够根据物理块的健康状态将热数据和冷数据区分存储,使得数据的读/写速度变快,缩短了存储器的平均响应时间,并且该实施方式在读数据时能够根据映射关系来获取相应的数据,由于数据存储时结合了数据本身被访问的频率以及存储数据的物理块的健康状态,从而使数据读取的速度更快,提高了存储器的性能。
请参阅图7,图7是本发明实施例提供的一种闪存芯片的结构示意图。如图7所示,该闪存芯片40包括:控制器41和存储器42,控制器41和存储器42之间电性连接。
存储器42作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的基于闪存的数据存储方法对应的程序指令/模块(例如,附图5所示的获取模块33、确定模块34以及存储模块35)。控制器41通过运行存储在存储器42中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例基于闪存的数据存储方法。
存储器42可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据基于闪存的数据存储装置的使用所创建的数据等。
所述一个或者多个模块存储在所述存储器42中,当被所述一个或者多个控制器41执行时,执行上述任意方法实施例中基于闪存的数据存储方法,例如,执行以上描述的图2中的方法步骤S101至步骤S103,图3中的方法步骤S11至步骤S13,图4中的方法步骤S201至步骤S206,图5中的模块33-35,图6中的模块31-36的功能。
上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。
本发明实施例提供了一种非易失性计算机可读存储介质,所述非易失性计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被电子设备执行上述任意方法实施例中基于闪存的数据存储方法,例如,执行以上描述的图2中的方法步骤S101至步骤S103,图3中的方法步骤S11至步骤S13,图4中的方法步骤S201至步骤S206,图5中的模块33-35,图6中的模块31-36的功能。
本发明实施例提供了一种计算机程序产品,包括存储在非易失性计算机可读存储介质上的计算程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述任意方法实施例中基于闪存的数据存储方法,例如,执行以上描述的图2中的方法步骤S101至步骤S103,图3中的方法步骤S11至步骤S13,图4中的方法步骤S201至步骤S206,图5中的模块33-35,图6中的模块31-36的功能。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域普通技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。