CN105917303B - 一种控制器、识别数据块稳定性的方法和存储*** - Google Patents
一种控制器、识别数据块稳定性的方法和存储*** Download PDFInfo
- Publication number
- CN105917303B CN105917303B CN201480035916.9A CN201480035916A CN105917303B CN 105917303 B CN105917303 B CN 105917303B CN 201480035916 A CN201480035916 A CN 201480035916A CN 105917303 B CN105917303 B CN 105917303B
- Authority
- CN
- China
- Prior art keywords
- target
- logical address
- count value
- data block
- stability level
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种控制器,包括处理器和缓存,所述处理器,用于按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算,获得目标哈希值;根据所述目标哈希值确定所述哈希表中与所述目标逻辑地址对应的目标表项,所述目标表项中记录有目标计数值;根据所述目标计数值,和计数值与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别,所述稳定级别用于表示所述目标逻辑地址对应的数据块的稳定性;将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置。可以使得闪存装置将相同稳定级别的数据块进行集中存储。
Description
技术领域
本发明实施例涉及存储技术领域,特别是一种控制器、识别数据块稳定性的方法和存储***。
背景技术
Flash Memory(闪存)装置是一种非易失性存储器,其存储介质是NAND Flash,具有断电后数据不消失的特点,因此,被广泛的作为外部和内部存储器使用。以NAND Flash为存储介质的闪存装置可能是固态硬盘(全称:Solid State Device,简称:SSD),又名固态驱动器(全称:Solid State Drive,简称:SSD),还可能是其他存储器。
一个SSD通常由多个闪存芯片组成,每个闪存芯片包含若干个块(block)。由于NAND Flash具有擦除特性,保存在block中的数据不会像普通机械硬盘那样直接被修改。当需要对某个逻辑地址指向的数据进行修改时,需要查找一个空闲的block将修改后的数据写入该空闲的block,然后将所述逻辑地址指向新写入的数据,那么,原来的block中的数据则变为无效数据。对于SSD而言,有效数据是指block中保存的有逻辑地址指向的数据,这部分数据可能会被读取;无效数据是指block中保存的没有逻辑地址指向的数据,这部分数据不可能会被读取。
随着SSD中存储的数据越来越多,可利用的空闲的block越来越少,因此有必要对SSD进行垃圾回收以便产生可供利用的空闲的block。垃圾回收是指将block中的有效数据搬移到空闲的block中去,然后将旧的block进行擦除,经过擦除之后的block又可以作为空闲的block再次写入数据。通常情况下,SSD在进行垃圾回收时,会查找包含无效数据较多的block,因为包含无效数据较多的block包含的有效数据较少,那么需要搬移到空闲block的有效数据会较少。在SSD的寿命跟NAND Flash的擦除次数相关的情况下,垃圾回收时搬移的数据越少,SSD的写放大就越小。然而,在现有的存储***中,控制器无法获知该数据被修改的可能性,那么在将数据发送给SSD时,SSD只能按照现有的存储方式来存储数据,各个block中保存的数据被修改的可能性大致相当,因此每个block包含的无效数据的多少也无明显差别。
发明内容
本发明实施例第一方面提供了一种控制器,所述控制器包括处理器和缓存,所述缓存中保存有多个逻辑地址,并且所述缓存中还保存有哈希表,所述哈希表包括多个表项,每个表项对应一个逻辑地址,并且,每个表项中记录有计数值,所述计数值用于表示所述逻辑地址对应的数据块的修改次数。其中,所述处理器,用于按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算,获得目标哈希值。然后,根据所述目标哈希值确定所述哈希表中与所述目标逻辑地址对应的目标表项,所述目标表项中记录有目标计数值。再根据所述目标计数值,和计数值与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别,所述稳定级别用于表示所述目标逻辑地址对应的数据块的稳定性。最后,将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置。
在第一方面的第一种实施方式中,所述计数值与稳定级别的对应关系包括计数值区间与稳定级别的对应关系。所述处理器,具体用于根据所述目标计数值确定目标计数值区间,所述目标计数值位于所述目标计数值区间中。然后,根据所述目标计数值区间,和所述计数值区间与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别。
在第一方面的第二种实施方式中,所述处理器,还用于在所述按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算之前,获取所述目标逻辑地址。然后,根据所述目标逻辑地址以及所述哈希函数进行计算,获得所述目标哈希值。再根据所述目标哈希值确定所述目标表项,所述目标表项中记录有计数值,增加所述目标表项中记录的计数值,所述目标计数值等于所述增加后的所述目标表项中记录的计数值。
本发明实施例第二方面提供了一种识别数据块稳定性的方法,所述方法应用于控制器中,所述控制器包括处理器和缓存,所述缓存中保存有多个逻辑地址,并且所述缓存中还保存有哈希表,所述哈希表包括多个表项,每个表项对应一个逻辑地址,并且,每个表项中记录有计数值,所述计数值用于表示所述逻辑地址对应的数据块的修改次数。所述方法由所述处理器执行,包括如下步骤:按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算,获得目标哈希值。然后,根据所述目标哈希值确定所述哈希表中与所述目标逻辑地址对应的目标表项,所述目标表项中记录有目标计数值。再将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置。
在第二方面的第一种实施方式中,所述计数值与稳定级别的对应关系包括计数值区间与稳定级别的对应关系。所述根据所述目标计数值,和计数值与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别包括:根据所述目标计数值确定目标计数值区间,所述目标计数值位于所述目标计数值区间中。再根据所述目标计数值区间,和所述计数值区间与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别。
在第二方面的第二种实施方式中,在所述按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算之前,所述方法还包括:获取所述目标逻辑地址。然后,根据所述目标逻辑地址以及所述哈希函数进行计算,获得所述目标哈希值。再根据所述目标哈希值确定所述目标表项,所述目标表项中记录有计数值,增加所述目标表项中记录的计数值,所述目标计数值等于所述增加后的所述目标表项中记录的计数值。
本发明实施例第三方面提供了一种存储***,所述存储***包括第一方面至第一方面第二种实施方式中任意一种实施方式的控制器,以及闪存装置。所述闪存装置包括主控制器和闪存芯片,所述闪存芯片包括多个块,所述主控制器包括处理器。所述处理器,用于获取目标逻辑地址对应的稳定级别,所述稳定级别用于表示数据块的稳定性。然后,根据所述目标逻辑地址对应的稳定级别,将所述目标逻辑地址对应的数据块写入所述稳定级别对应的块中。
在第三方面的第一种实施方式中,所述方法还包括:在所述闪存芯片中查找包含无效数据最多的块,所述包含无效数据最多的块包括所述目标逻辑地址对应的数据块。
在第三方面的第二种实施方式中,所述方法还包括:在所述闪存芯片中查找最长时间内未被擦除的块,所述最长时间内未被擦除的块包括所述目标逻辑地址对应的数据块。
在第三方面的第三种实施方式中,所述主控制器还包括缓存。所述获取目标逻辑地址对应的稳定级别包括:确定所述缓存中保存的逻辑地址的个数达到预设阈值时,获取所述目标逻辑地址对应的稳定级别,其中,所述逻辑地址对应的稳定级别与所述目标逻辑地址对应的稳定级别相同。
本发明实施例第四方面提供了一种识别数据块稳定性的装置,所述装置位于控制器中。所述装置包括:存储模块,用于保存多个逻辑地址以及哈希表,所述哈希表包括多个表项,每个表项对应一个逻辑地址,并且,每个表项中记录有计数值,所述计数值用于表示所述逻辑地址对应的数据块的修改次数。计算模块,用于按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算,获得目标哈希值;根据所述目标哈希值确定所述哈希表中与所述目标逻辑地址对应的目标表项,所述目标表项中记录有目标计数值。确定模块,用于根据所述目标计数值,和计数值与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别,所述稳定级别用于表示所述目标逻辑地址对应的数据块的稳定性。发送模块,用于将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置。
在第四方面的第一种实施方式中,所述计数值与稳定级别的对应关系包括计数值区间与稳定级别的对应关系。所述确定模块,具体用于根据所述目标计数值确定目标计数值区间,所述目标计数值位于所述目标计数值区间中。然后,根据所述目标计数值区间,和所述计数值区间与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别。
本发明实施例第五方面提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行如第二方面至第二方面第二种实施方式中任意一种实施方式所述的方法。
在本实施例中,控制器可以根据逻辑地址计算获得哈希值,所述哈希值与哈希表中的一个表项对应,所述表项中记录有计数值,所述计数值用于表示所述逻辑地址对应的数据块的修改次数,因此可以根据计数值获得所述逻辑地址对应的数据块的稳定级别,所述稳定级别可以反映所述逻辑地址对应的数据块的稳定性,并且将所述数据块的稳定级别和逻辑地址发送给闪存装置,使得闪存装置将相同稳定级别的数据块进行集中存储,从而在进行后续的垃圾回收操作时搬移较少的有效数据,减小写放大。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对现有技术或实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的存储***的组成图;
图2是本发明实施例提供的控制器的结构示意图;
图3A是本发明实施例提供的闪存装置的存储介质的结构示意图;
图3B是本发明实施例提供的闪存装置的主控制器的结构示意图;
图4是本发明实施例提供的识别数据块稳定性的方法的流程示意图;
图5是本发明实施例提供的一种在闪存装置中存储数据的方法的流程示意图;
图6是本发明实施例提供的哈希表的示意图;
图7是本发明实施例提供的识别数据块稳定性的装置的结构示意图。
具体实施方式
本发明实施例提出了一种控制器、识别数据块稳定性的方法和存储***,用于控制器识别出逻辑地址对应的数据块的稳定级别,并且将所述逻辑地址和稳定级别发送给闪存装置,使得闪存装置能够将稳定级别相同的数据块集中存储,那么在进行后续的垃圾回收时选择到的块所包含的有效数据尽可能得少,从而减小闪存装置的写放大。
在描述本发明实施例之前,首先对下面将要出现的术语进行说明:
数据对象是指包含实际数据的对象,可以是块数据,也可以是文件或者其他形式的数据。
数据块是指由数据对象划分而成的数据单元。为了方便管理,一个数据对象可以被划分为若干个数据块,每个数据块的尺寸相同。
数据块的元数据是指用于描述数据块的信息,例如数据块的逻辑地址、数据块的物理地址、逻辑地址与物理地址之间的对应关系、数据块的写入时间等等。
稳定数据是指被修改的可能性相对较低的数据。
逻辑块地址,又称逻辑地址(英文全称:Logical Block Address,英文简称:LBA),是指数据块的存放地址,该地址并非数据块存储在SSD中的实际地址,而是对外呈现的可访问的地址。
物理块地址,又称物理地址(英文全称:Physical Block Address,英文简称:PBA)是指数据块存储在SSD中的实际地址。
SSD中的有效数据是指在SSD的block中有逻辑地址指向的数据块,也就是说其物理地址有对应的逻辑地址。
SSD中的无效数据通常是指在SSD的block中保存的没有逻辑地址指向的数据块,也就是说其物理地址没有对应的逻辑地址。
图1描绘了本发明实施例提供的存储***的组成图,图1所示的存储***包括控制器11和多个闪存装置22。其中,闪存装置22是以Flash颗粒为存储介质的存储装置,可以包括固态硬盘(全称:Solid State Device,简称:SSD),又名固态驱动器(全称:Solid StateDrive,简称:SSD),还可能包括其他存储器。本实施例中,闪存装置22以SSD为例说明。
图1仅是示例性说明,并不限定具体的组网方式,如:级联树形组网、环状组网都可以。只要控制器11和闪存装置22之间能够相互通信。
控制器11可以包括当前技术已知的任何计算设备,如服务器、台式计算机等等。控制器11可以接收主机(图1中未示出)发送的数据对象,并且向闪存装置22发送写数据请求,使得闪存装置22将写数据请求中携带的数据对象写入其闪存芯片中。
请参考图2,图2是本发明实施例控制器11的结构示意图。如图2所示,控制器11主要包括处理器(processor)118、缓存(cache)120、存储器(memory)122、通信总线(简称总线)126以及通信接口(Communication Interface)128。处理器118、缓存120、存储器122以及通信接口128通过通信总线126完成相互间的通信。
处理器118可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。在本发明实施例中,处理器118用于接收来自主机的数据对象,将所述数据对象经过一定的处理后再发送给闪存装置22。
通信接口128,用于与主机或闪存装置22通信。
存储器122,用于存放程序124,存储器122可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可以理解的是,存储器122可以为随机存储器(全称:Random-Access Memory,简称:RAM)、磁碟、硬盘、光盘、固态硬盘(全称:Solid State Disk,简称:SSD)或者非易失性存储器等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。
缓存120(Cache)用于暂时存放从主机接收的数据对象或从闪存装置22读取的数据对象。另外,由于Cache读写数据的速度较快,为了方便读取也可以将一些经常使用的信息存放在Cache中,例如数据块的逻辑地址。缓存120可以是RAM、储存级内存(全称:Storage-Class Memory,简称:SCM)、非易失存储(全称:Non-Volatile Memory,简称:NVM)、闪存(Flash memory)或固态硬盘(全称:Solid State Disk,简称:SSD)等各种可以存储数据的非短暂性的(non-transitory)机器可读介质,在此不做限定。
缓存120和存储器122可以合设或者分开设置,本发明实施例对此不做限定。
程序124可以包括程序代码,所述程序代码包括计算机操作指令。例如,程序代码可以包括稳定性判断模块,通过该模块可以判断每个LBA中保存的数据块被修改的次数,也就是说,判断LBA对应的数据块的稳定性。
下面简要地介绍稳定性判断模块的功能:
首先,为了完成此功能,需要在缓存120中保存一张哈希表(为了防止丢失,可以在闪存装置22中另存一份作为备份),所述哈希表包括多个表项,每个表项中记录有一个计数值。哈希表的表项的个数和图1所示的存储***的可用容量有关,假设所述存储***存储有N个数据块(N为正整数),每个数据块的大小为4KB,那么哈希表的表项可以有N的2-8倍个。
其次,当控制器11接收主机发送的数据对象之后,可以将所述数据对象划分为尺寸相同的若干个数据块。另外,控制器11在接收所述数据对象时,也会接收所述数据对象的地址信息,所述地址信息可以包括逻辑单元号(英文全称:Logical Unit Number,英文简称:LUN)的ID以及LUN的起始地址偏移量;或者文件的ID以及文件的起始地址偏移量等等;或者当存储***具有多个文件***时,所述地址信息可以包括文件***的ID、文件的ID以及文件的起始地址偏移量等等。在将所述数据对象划分为尺寸相同的若干个数据块之后,可以根据所述数据对象的地址信息以及多级映射表,获取每个数据块的逻辑地址。
所述稳定性判断模块包括哈希函数,对于一个LBA,可以根据所述哈希函数进行哈希运算,得到哈希值。所述哈希值用于指示上述哈希表中的一个表项的位置,因此根据所述哈希值可以找到该表项中记录的计数值,找到所述LBA对应的计数值之后,对计数值加1(或者其他使其递增的操作,在此不做限定)。依此类推,若后续控制器11接收待写入所述LBA的其他数据块时,所述LBA对应的计数值都会加1。因此,计数值可以用于表示与其对应的LBA中存储的数据块的修改次数。计数值越大,所述LBA中保存的数据块的修改次数越多,就越不稳定;反之,越稳定。
当任务(这里的任务是指控制器11识别每个LBA对应的数据块的稳定性的任务)触发时,处理器118可以依次扫描每个LBA,按照前面描述的哈希函数对LBA进行哈希计算,从而获得哈希值,再根据哈希值找到LBA对应的表项,所述表项中记录有计数值,并且根据计数值获得LBA的稳定级别。稳定级别是一个反映LBA对应的数据块的稳定性的数值,数值越大稳定性越低,反之越高。或者,也可以将稳定级别定义为数值越小稳定性越高,反之越低。
控制器11在获得LBA对应的数据块的稳定级别之后,可以将所述LBA与稳定级别发送给闪存装置22,使得闪存装置22将相同级别的数据块集中存储在一个或多个block中。
下面介绍闪存装置22的结构与功能。
请参考图3A,图3A是本发明实施例闪存装置22的结构示意图。本实施例中,闪存装置22以SSD为例说明。
如图3A所示,闪存装置22包括主控制器220和存储介质221。其中,主控制器220用于接收控制器11发送给闪存装置22的I/O请求,或者其他信息,例如数据块的逻辑地址和稳定级别,并且主控制器220还用于执行接收到的I/O请求,例如将I/O请求中携带的数据块写入存储介质221,或者从存储介质221中读取数据块并返回给控制器11。这里的主控制器220是SSD的主控制器。
存储介质221通常由若干个闪存(Flash)芯片组成。每个闪存芯片包括若干个块(block)。每个block包括若干个页(page),主控制器220在将数据块写入block中时是以page为单位写入的。
由于NAND Flash具有擦除特性,保存在block中的数据不会像普通机械硬盘那样直接被修改。当需要对某个block中的数据进行修改时,需要查找一个空闲的block将修改后的数据写入该空闲的block,那么,原来的block中的数据则变为无效数据。随着SSD中存储的数据越来越多,可利用的空闲的block越来越少,因此有必要对SSD进行垃圾回收以便产生可供利用的空闲的block。本实施例中,在进行垃圾回收时通常会依次选择包含无效数据最多的块进行回收。而垃圾回收的触发条件是所述闪存芯片中包含的空闲的块的数量低于第一阈值,所述第一阈值可以大于10并且小于100的整数。
另外,在闪存装置22内部还需要定期进行巡检,巡检是指为防止闪存芯片中某些block擦除时间过长导致数据丢失,周期性地对闪存芯片中存储的数据进行搬移的操作。对于NAND Flash来说,其保持数据的能力只能维持一定时间,因此需要定期将其中存储的数据重新搬移一次。本实施例中,在进行巡检时通常会依次选择最长时间内未被擦除的块,将所述块中的有效数据搬移到空闲的块中,再擦除原来的块。而巡检的触发条件可以是当预设的巡检周期到达。
由于SSD的寿命与NAND Flash的擦除次数相关,所以尽量较少SSD内部的数据搬移有利于减小写放大,从而延长SSD的寿命。在本实施例中,SSD内部的数据搬移主要是指垃圾回收或者巡检时对block中有效数据的搬移。可以理解的是,对于待回收的block来说,如果其包含的有效数据越少,需要搬移的数据也越少。因此本发明的目的主要在于控制器识别逻辑地址对应的数据块的稳定性,并且将反映数据块的稳定性的稳定级别发送给SSD,使得SSD中的数据块按照稳定级别来进行集中存储,那么在进行以后的垃圾回收操作时搬移的有效数据就会尽可能得少。
图3B是本发明实施例描述的闪存装置22中主控制器220的结构示意图。
主控制器220主要包括处理器(processor)218、内存(cache)230、通信总线(简称总线)226以及通信接口(Communication Interface)228。处理器218、缓存230以及通信接口228通过通信总线226完成相互间的通信。
处理器218可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。在本发明实施例中,处理器218可以用于接收来自控制器11的I/O请求、数据块的逻辑地址以及数据块的稳定级别等信息,另外,处理器218还用于执行I/O请求。
通信接口228,用于与控制器11及存储介质221通信。
缓存230(Cache)用于缓存从控制器11接收的信息,例如数据块的逻辑地址以及数据块的稳定级别等。缓存230可以是RAM、SCM、NVM等各种可以存储数据的非短暂性的(non-transitory)或者短暂性的(transitory)机器可读介质,在此不做限定。另外,在某些应用场景下,缓存230也可以置于主控制器220的外部。
在本实施例中,可以在缓存230中保存一张映射表,用于保存从控制器11接收的数据块的LBA与数据块的稳定级别之间的对应关系。通常情况下,缓存230中还保存有一张记录LBA与PBA之间映射关系的映射表,在本发明实施例中,可以在这张映射表的基础上,增加LBA与稳定级别之间的对应关系。
或者,在缓存230中保存多个数组,每个数组对应一个稳定级别,所述数组中可以保存对应所述稳定级别的多个数据块的逻辑地址。
或者,缓存230中也可以不保存映射表,而是将稳定级别相同的数据块的逻辑地址集中存储到缓存230的一块缓存空间中。例如,控制器11可以事先发送给闪存装置22缓存区域划分信息,所述缓存区域划分信息包括不同的稳定级别(例如,分别为1-10的10个稳定级别),闪存装置22接收到所述缓存区域划分信息后,按照10个稳定级别将缓存230划分为10个缓存区域,每个缓存区域对应一个稳定级别,专门用于存储对应所述稳定级别的数据块的逻辑地址。或者,控制器11也可以不事先发送给闪存装置22缓存区域划分信息,而是直接将数据块的逻辑地址与数据块的稳定级别发送给闪存装置22。闪存装置22根据所述数据块的稳定级别在缓存230中划分出一段缓存区域,将所述缓存区域与所述稳定级别对应(保存所述缓存区域与所述稳定级别之间的对应关系),之后,所述划分出的缓存区域可以专门用于保存对应所述稳定级别的数据块的逻辑地址。以上两种方式都可以实现将稳定级别相同的数据块的逻辑地址集中存储到缓存230的一块缓存空间中。
下面介绍本发明实施例一种识别数据块稳定性的方法,所述方法从控制器11的角度描述根据数据块的逻辑地址获得该数据块的稳定级别,并发送给闪存装置22的过程。请参考图4,图4是所述识别逻辑地址对应的数据块的稳定性的方法的流程示意图,所述方法可以应用在图1所示的存储***中以及图2所示的控制器11中,在控制器11的缓存120中保存有多个逻辑地址,另外,缓存120中还保存有哈希表,所述哈希表包括多个表项,每个表项对应一个逻辑地址,并且,每个表项中记录有计数值,所述计数值用于表示所述逻辑地址对应的数据块的修改次数;其执行主体是控制器11中的处理器118。所述方法包括:
步骤S102:按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算,获得目标哈希值。
具体地,控制器11可以依次从所述多个逻辑地址中获得每个数据块的逻辑地址,从而进行计算并获得哈希值。这里以目标逻辑地址为例进行说明。
另外,步骤S102的触发条件可以是控制器11接收的所有数据块的大小超过预设的容量阈值或者由定时器触发,所述预设的容量阈值可以等于图1所示的存储***对用户呈现的可用容量,或者所述可用容量的整数倍。
步骤S103:根据所述目标哈希值确定所述哈希表中与所述目标逻辑地址对应的目标表项,所述目标表项中记录有目标计数值。
具体地,所述哈希表可以包含多个表项,每个表项在所述哈希表中都具有一个位置(例如,可以用编号来表示每个表项的位置),在步骤102中计算获得的目标哈希值可以等于目标表项的编号,或者其他直接指向目标表项的编号的值。并且,由于所述哈希表的每个表项中都记录有一个计数值,因此可以根据目标哈希值获得目标计数值。
步骤S104:根据所述目标计数值,和计数值与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别,所述稳定级别用于表示所述目标逻辑地址对应的数据块的稳定性。
其中,控制器11可以预先设定稳定级别的个数。
可选的,一种实施方式是:将表项中记录的计数值划分为多个计数值区间,其中,每个计数值区间对应一个稳定级别。举例来说,假设预先设定10个稳定级别,那么计数值区间和稳定级别之间的对应关系可以如表1所示:
表1
那么,相应地,根据所述目标计数值,和计数值与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别具体可以是:根据所述目标计数值确定目标计数值区间,所述目标计数值位于所述目标计数值区间中;根据所述目标计数值区间,以及表1所示的对应关系确定所述目标逻辑地址对应的数据块的稳定级别。例如,目标计数值是3,那么其对应的稳定级别为2。
步骤S105:将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置。
具体地,控制器11可以每次发送一个逻辑地址和稳定级别给闪存装置22,也可以每次发送多个逻辑地址和稳定级别给闪存装置22。
在本实施例中,控制器11可以根据逻辑地址计算获得哈希值,所述哈希值与哈希表中的一个表项对应,所述表项中记录有计数值,所述计数值用于表示所述逻辑地址对应的数据块的修改次数,因此可以根据计数值获得所述逻辑地址对应的数据块的稳定级别,所述稳定级别可以反映所述逻辑地址对应的数据块的稳定性,并且将所述数据块的稳定级别和逻辑地址发送给闪存装置22,使得闪存装置22将相同稳定级别的数据块进行集中存储。
下面介绍本发明实施例另一种在闪存装置中存储数据的方法,请参考图5,图5识别数据块稳定性的流程示意图,所述方法可以应用在图1所示的存储***中。
在本实施例中,步骤S201-步骤S204描述的是写数据请求如何触发哈希表中的计数值更新的过程。步骤S201-步骤S204可以应用在图2所示的控制器11中,其执行主体是控制器11中的处理器118。
在步骤S201中,控制器11接收主机发送的写数据请求,所述写数据请求中包括数据对象以及所述数据对象的地址信息。
在步骤S202中,控制器11将所述数据对象划分为尺寸相同的多个数据块。
在本实施例中,以数据块的尺寸为4KB为例,当数据对象大于4KB时,需要将其拆分为多个数据块;当数据对象小于4KB时,则不需要拆分。
相应地,控制器11可以根据所述地址信息以及多级映射表获取每个数据块的逻辑地址,并且将将这些逻辑地址保存在缓存120中。
在步骤S203中,控制器11从所述多个逻辑地址中确定一个目标逻辑地址。
具体地,控制器11可以对所述多个逻辑地址进行扫描,依次读取每个逻辑地址。为了方便描述,在下面的步骤中以目标逻辑地址的处理方式为例来进行说明,可以理解的是,其他逻辑地址的处理方式和目标逻辑地址相同。
在步骤S204中,按照预设的哈希函数对所述目标逻辑地址进行计算,获得目标哈希值,所述目标哈希值指向所述哈希表中的一个表项,增加所述表项中记录的计数值。
在某些情况下,由于哈希表的表项有限,多个逻辑地址运用同一个哈希函数运算所生成的哈希值可能会指向同一个表项,那么逻辑地址与表项之间就不是一一对应的关系。在这种情况下,为了获得所述逻辑地址对应的数据块的修改次数,可以预设多个哈希(Hash)函数,运用所述多个哈希函数对所述逻辑地址进行计算,从而得到多个哈希值,然后对每个哈希值指向的表项中的计数值分别进行更新。如图6所示,可以利用四个哈希函数(分别为H1、H2、H3和H4)对逻辑地址(LBA)进行计算,获得的四个哈希值,每个哈希值分别指向哈希表的一个表项,从而对每个表项中记录的计数值加1。关于如何利用四个哈希值获得最准确的所述逻辑地址对应的数据块的修改次数,可以参考下面步骤S208的描述。
下面以一个具体的示例来说明如何根据LBA计算获得其对应表项中的计数值。
假设哈希表包含10000个表项,相当于一个含有10000个元素的一维数组。hash[x]表示哈希表第x个表项保存的值,其中,x是大于或等于1的整数。
假设LBA为100,在LBA为100的逻辑地址中写入一个数据块时,更新哈希表的计数值的操作如下:
首先,通过4个哈希函数计算得到4个哈希值,4个哈希函数分别是:
哈希值1=(LBA*11)%(哈希表中表项的个数);
哈希值2=(LBA*13)%(哈希表中表项的个数);
哈希值3=(LBA*15)%(哈希表中表项的个数);
哈希值4=(LBA*17)%(哈希表中表项的个数);
其中,“%”表示求余操作。由此,可以得知,哈希值1=1100;哈希值1=1300;哈希值3=1500;哈希值4=1700。
四个哈希值对应的表项分别是hash[1100]、hash[1300]、hash[1500]和hash[1700],然后分别对这些表项中的计数值加1。
按照步骤S201-步骤S204描述的方式,控制器11可以根据接收到的数据对象更新哈希表中的计数值。对于一个逻辑地址来说,接收的数据块越多,其对应的表项中的计数值也会依次递增。因此,一个表项中记录的计数值反映了其对应的逻辑地址中存储的数据块的稳定性。
步骤S205-步骤S209描述的是控制器11识别缓存120存储的每个逻辑地址对应的数据块的稳定级别,并发送给闪存装置22的过程。步骤S205-步骤S209可以应用在图2所示的控制器11中,其执行主体是控制器11中的处理器118。需要说明的是,所述稳定级别的识别过程与步骤S201-步骤S204描述的计数值更新的过程没有先后顺序之分。
在步骤S205中,任务触发时,控制器11从缓存120中读取所述多个逻辑地址。
这里的任务是指控制器11识别缓存120存储的每个逻辑地址存储的数据块的稳定级别的任务,其触发条件可以是预设的时间间隔到达,或者控制器11从主机接收的数据对象的总的大小超过预设阈值等。这两个条件也可以同时设置,当其中一个条件满足时,控制器11开始从缓存120中读取所述多个逻辑地址。
在步骤S206中,控制器11从所述多个逻辑地址中确定目标逻辑地址。
具体地,控制器11可以对所述多个逻辑地址进行扫描,依次读取每个逻辑地址。为了方便描述,在下面的步骤中以目标逻辑地址的处理方式为例来进行说明,可以理解的是,其他逻辑地址的处理方式和目标逻辑地址类似。需要说明的是,步骤S206中的目标逻辑地址可以和步骤S203-步骤S204中的目标逻辑地址相同,也可以不同。
在步骤S207中,控制器11按照预设的哈希函数对所述目标逻辑地址进行计算,获得目标哈希值。
具体地,预设的哈希函数是指步骤S204中的哈希函数。当哈希函数有多个时,计算获得的哈希值也有多个。
在步骤S208中,控制器11根据所述目标哈希值确定所述哈希表中与所述目标逻辑地址对应的目标表项,所述目标表项中记录有目标计数值。
仍然以LBA为100为例,运用上述四个哈希函数获得的哈希值包括:哈希值1=1100;哈希值1=1300;哈希值3=1500;哈希值4=1700。通过这四个哈希值可以从四个表项中得到四个计数值,从四个计数值中选择最小的计数值作为目标计数值。
可以理解的是,由于同一个计数值可能被多个LBA引用(这里的引用,是指LBA经过哈希函数计算出的哈希值指向所述计数值),因此计数值越小,代表其对应的表项越少被其他LBA引用,因此最小的计数值最准确,最能代表其对应的数据块的修改次数,在本实施例中目标计数值等于最小的计数值。
在步骤S209中,控制器11根据所述目标计数值获得所述目标逻辑地址对应的数据块的稳定级别。
其具体实施方式,可参考图4所示实施例的步骤S104,这里不再赘述。
在步骤S210中,控制器11将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置22。
其具体实施方式,可参考图4所示实施例的步骤S105,这里不再赘述。
可以理解的是,按照步骤S206-步骤S210描述的方式,控制器11可以将多个逻辑地址以及与所述逻辑地址对应的稳定级别发送给闪存装置22。
当控制器11处理完缓存120中保存的每个逻辑地址后,本次任务完成,可以将哈希表中记录的计数值均减去一个固定值,使得下次任务开始时,计数值可以以一个较小的基数开始递增。
步骤S211-步骤S213描述的是闪存装置22接收控制器11发送的多个逻辑地址和稳定级别之后,将稳定级别相同的数据块集中存储的过程。步骤S211-步骤S213可以应用在图3A、图3B所示的闪存装置(例如,SSD)中,其执行主体是闪存装置22中的处理器218。
在步骤S211中,闪存装置22保存所述多个数据块的逻辑地址,以及与所述逻辑地址对应的稳定级别。
可选的,一种保存方式是在闪存装置22的缓存230中建立一张映射表,用于保存从控制器11接收的数据块的逻辑地址与数据块的稳定级别之间的对应关系。
可选的,另一种保存方式是在缓存230中保存多个数组,每个数组对应一个稳定级别。所述多个数据块的逻辑地址分别保存在其对应的数组中。
可选的,再一种保存方式是预先将缓存230划分为若干个缓存区域,每个缓存区域对应一个稳定级别。将所述多个数据块的逻辑地址分别记录在其对应的缓存区域中。
在步骤S212中,闪存装置22获取目标逻辑地址对应的稳定级别,所述稳定级别用于表示数据块的稳定性。
所述目标逻辑地址是闪存装置22中保存的逻辑地址中的其中一个,这里以目标逻辑地址为例来说明。
在步骤S213中,闪存装置22根据所述目标逻辑地址对应的稳定级别,将所述目标逻辑地址对应的数据块写入所述稳定级别对应的块中。
在本实施例中,为了将相同稳定级别的数据块搬移到同样的block中,可以建立闪存芯片中的block与稳定级别的对应关系。按照这种对应关系,可以将目标逻辑地址对应的数据块从原来的block中读取出来,写入与其稳定级别对应的block中。所述闪存芯片中的block与稳定级别的对应关系可以是预先建立的,也可以是第一次将一个数据块或者多个稳定级别相同的数据块写入一个block后便记录所述稳定级别与block之间的对应关系。
对于将目标逻辑地址对应的数据块从原来的block中读取出来具体可以是:通常情况下,闪存装置22的缓存230或者闪存芯片中保存有一张映射表,所述映射表用于保存各个数据块的逻辑地址和物理地址之间的对应关系,所以可以根据逻辑地址和所述映射表,从对应的物理地址所在的存储空间中读取出所述数据块。
采用本实施例提供的方式,可以将相同稳定级别的数据块存储在一个block中。那么,对于存放稳定级别较高的数据块的block,其存储的数据块成为无效数据的可能性较小,整体来看,该block中不含无效数据或仅含少量的无效数据,这样的block属于利用率比较高的block,在对闪存装置22进行垃圾回收时不会回收这样的block;对于存放稳定级别较低的数据块的block,其存储的数据块成为无效数据的可能性较大,假设一个block中的大部分数据或者绝大部分数据都变成了无效数据,那么相应地,这个block中包含的有效数据较少,垃圾回收时需要迁移的数据也较少,减小了写放大。需要说明的是,本实施例的效果主要体现在之后的垃圾回收时搬移的有效数据会减少。由此可见,无论是存放稳定级别较高的数据块的block,还是存放稳定级别较低的数据块的block,都可以减小闪存装置22的写放大,因此在一定程度上延长了闪存装置22的寿命。
另外,一种较优的实施方式是:将上面描述的步骤S212-步骤S213与垃圾回收操作结合在一起,也就是说,当闪存装置22需要进行垃圾回收时,按照步骤S212-步骤S213描述的方式进行垃圾回收,具体的,确定所述闪存芯片中包含的空闲的块的数量低于第一阈值时,依次从闪存芯片中查找出包含无效数据最多的块,从这些块中获取待搬移的数据块的逻辑地址,然后根据所述逻辑地址,在所述逻辑地址与稳定级别的对应关系中查找,获取所述逻辑地址对应的稳定级别,再将所述逻辑地址对应的数据块写入对应的块中。
另一种较优的实施方式是:将上面描述的步骤S212-步骤S213与巡检操作结合在一起,也就是说,当闪存装置22需要进行巡检时,按照步骤S212-步骤S213描述的方式进行巡检,具体的,当预设的巡检周期到达时,依次从闪存芯片中查找出最长时间内未被擦除的块,从这些块中获取待搬移的数据块的逻辑地址,然后根据所述逻辑地址,在所述逻辑地址与稳定级别的对应关系中查找,获取所述逻辑地址对应的稳定级别,再将所述逻辑地址对应的数据块写入对应的块中。
按照上面提供的两种较优的实施方式,可以在闪存装置22进行垃圾回收或者巡检时实现将稳定级别相同的数据块集中存储,由于闪存装置22在进行垃圾回收或者巡检时原本会进行数据搬移,因此本实施例并没有额外的数据搬移操作,可以进一步减小写放大。
再一种较优的实施方式是步骤S212-步骤S213可以不和垃圾回收或者巡检操作结合,也就是说,在这种实施方式中,进行数据块搬移的触发条件和前面两种实施方式有所不同,其触发条件是缓存中保存的相同稳定级别对应的逻辑地址的个数达到预设阈值。
那么,对于如何判断是否有相同稳定级别对应的逻辑地址的个数达到预设阈值,可以有如下三种实施方式:
第一种实施方式是,根据缓存230中保存的映射表确定是否有相同稳定级别的逻辑地址的个数达到预设阈值。
第二种实施方式是判断缓存230中是否有一个数组中保存的逻辑地址的个数达到预设阈值。
第三种实施方式是判断缓存230中是否有一个缓存区域中保存的逻辑地址的个数达到预设阈值。
其中,可以将所述预设阈值设置成块的容量与数据块的尺寸之间的比值,按照这种实施方式,当逻辑地址的个数达到所述阈值后,所述多个逻辑地址对应的数据块正好将一个空闲的块填满。此时,步骤S213中的所述稳定级别对应的块则可以是一个空闲的块。
请参考图7,图7是本发明实施例提供的识别数据块稳定性的装置70,所述装置70位于控制器11中,包括:
存储模块701,用于保存多个逻辑地址以及哈希表,所述哈希表包括多个表项,每个表项对应一个逻辑地址,并且,每个表项中记录有计数值,所述计数值用于表示所述逻辑地址对应的数据块的修改次数。
计算模块702,用于按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算,获得目标哈希值;根据所述目标哈希值确定所述哈希表中与所述目标逻辑地址对应的目标表项,所述目标表项中记录有目标计数值。
确定模块703,用于根据所述目标计数值,和计数值与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别,所述稳定级别用于表示所述目标逻辑地址对应的数据块的稳定性;
发送模块704,用于将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置。
在本实施例中,可以根据逻辑地址计算获得哈希值,所述哈希值与哈希表中的一个表项对应,所述表项中记录有计数值,所述计数值用于表示所述逻辑地址对应的数据块的修改次数,因此可以根据计数值获得所述逻辑地址对应的数据块的稳定级别,所述稳定级别可以反映所述逻辑地址对应的数据块的稳定性,并且将所述数据块的稳定级别和逻辑地址发送给闪存装置22,使得闪存装置22将相同稳定级别的数据块进行集中存储。
可选的,在上述实施例中,所述计数值与稳定级别的对应关系包括计数值区间与稳定级别的对应关系;确定模块703,具体用于根据所述目标计数值确定目标计数值区间,所述目标计数值位于所述目标计数值区间中;根据所述目标计数值区间,和所述计数值区间与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别。
另外,在上述实施例中,所述计算模块702,还用于在所述按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算之前获取所述目标逻辑地址;根据所述目标逻辑地址以及所述哈希函数进行计算,获得所述目标哈希值;根据所述目标哈希值确定所述目标表项,所述目标表项中记录有计数值;增加所述目标表项中记录的计数值,所述目标计数值等于所述增加后的所述目标表项中记录的计数值。
可选的,所述计算模块702,还用于在所述将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置之后,将所述目标表项中记录的目标计数值减去固定值。
本发明实施例还提供一种数据处理的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述任意一个方法实施例所述的方法流程。
本领域普通技术人员可以理解,前述的存储介质包括:U盘、移动硬盘、磁碟、光盘、随机存储器(Random-Access Memory,RAM)、固态硬盘(Solid State Disk,SSD)或者非易失性存储器(non-volatile memory)等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制。
Claims (17)
1.一种控制器,其特征在于,所述控制器包括处理器和缓存,所述缓存中保存有多个逻辑地址,并且所述缓存中还保存有哈希表,所述哈希表包括多个表项,每个表项对应一个逻辑地址,并且,每个表项中记录有计数值,所述计数值用于表示所述逻辑地址对应的数据块的修改次数;
所述处理器,用于按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算,获得目标哈希值;
根据所述目标哈希值确定所述哈希表中与所述目标逻辑地址对应的目标表项,所述目标表项中记录有目标计数值;
根据所述目标计数值,和计数值与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别,所述稳定级别用于表示所述目标逻辑地址对应的数据块的稳定性;
将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置。
2.根据权利要求1所述的控制器,其特征在于,所述计数值与稳定级别的对应关系包括计数值区间与稳定级别的对应关系;
所述处理器,具体用于根据所述目标计数值确定目标计数值区间,所述目标计数值位于所述目标计数值区间中;
根据所述目标计数值区间,和所述计数值区间与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别。
3.根据权利要求1所述的控制器,其特征在于,
所述处理器,还用于在所述按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算之前,获取所述目标逻辑地址;
根据所述目标逻辑地址以及所述哈希函数进行计算,获得所述目标哈希值;
根据所述目标哈希值确定所述目标表项,所述目标表项中记录有计数值;
增加所述目标表项中记录的计数值,所述目标计数值等于所述增加后的所述目标表项中记录的计数值。
4.根据权利要求1所述的控制器,其特征在于,
所述处理器,还用于在所述将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置之后,将所述目标表项中记录的目标计数值减去固定值。
5.一种识别数据块稳定性的方法,其特征在于,所述方法应用于控制器中,所述控制器包括处理器和缓存,所述缓存中保存有多个逻辑地址,并且所述缓存中还保存有哈希表,所述哈希表包括多个表项,每个表项对应一个逻辑地址,并且,每个表项中记录有计数值,所述计数值用于表示所述逻辑地址对应的数据块的修改次数;所述方法由所述处理器执行,包括:
按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算,获得目标哈希值;
根据所述目标哈希值确定所述哈希表中与所述目标逻辑地址对应的目标表项,所述目标表项中记录有目标计数值;
根据所述目标计数值,和计数值与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别,所述稳定级别用于表示所述目标逻辑地址对应的数据块的稳定性;
将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置。
6.根据权利要求5所述的方法,其特征在于,所述计数值与稳定级别的对应关系包括计数值区间与稳定级别的对应关系;
所述根据所述目标计数值,和计数值与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别包括:
根据所述目标计数值确定目标计数值区间,所述目标计数值位于所述目标计数值区间中;
根据所述目标计数值区间,和所述计数值区间与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别。
7.根据权利要求5所述的方法,其特征在于,在所述按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算之前,所述方法还包括:
获取所述目标逻辑地址;
根据所述目标逻辑地址以及所述哈希函数进行计算,获得所述目标哈希值;
根据所述目标哈希值确定所述目标表项,所述目标表项中记录有计数值;
增加所述目标表项中记录的计数值,所述目标计数值等于所述增加后的所述目标表项中记录的计数值。
8.根据权利要求5所述的方法,其特征在于,在所述将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置之后,所述方法还包括:将所述目标表项中记录的目标计数值减去固定值。
9.一种存储***,其特征在于,包括如权利要求1-4任一所述的控制器以及闪存装置;所述闪存装置包括主控制器和闪存芯片,所述闪存芯片包括多个块,所述主控制器包括处理器;
所述处理器,用于获取目标逻辑地址对应的稳定级别,所述稳定级别用于表示数据块的稳定性;
根据所述目标逻辑地址对应的稳定级别,将所述目标逻辑地址对应的数据块写入所述稳定级别对应的块中。
10.根据权利要求9所述的存储***,其特征在于,所述存储***还包括:
在所述闪存芯片中查找包含无效数据最多的块,所述包含无效数据最多的块包括所述目标逻辑地址对应的数据块。
11.根据权利要求9所述的存储***,其特征在于,所述存储***还包括:
在所述闪存芯片中查找最长时间内未被擦除的块,所述最长时间内未被擦除的块包括所述目标逻辑地址对应的数据块。
12.根据权利要求9所述的存储***,其特征在于,所述主控制器还包括缓存;
所述获取目标逻辑地址对应的稳定级别包括:确定所述缓存中保存的逻辑地址的个数达到预设阈值时,获取所述目标逻辑地址对应的稳定级别,其中,所述逻辑地址对应的稳定级别与所述目标逻辑地址对应的稳定级别相同。
13.根据权利要求12所述的存储***,其特征在于,所述预设阈值等于块的容量除以数据块的尺寸所得的商。
14.一种识别数据块稳定性的装置,其特征在于,所述装置位于控制器中,包括:
存储模块,用于保存多个逻辑地址以及哈希表,所述哈希表包括多个表项,每个表项对应一个逻辑地址,并且,每个表项中记录有计数值,所述计数值用于表示所述逻辑地址对应的数据块的修改次数;
计算模块,用于按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算,获得目标哈希值;根据所述目标哈希值确定所述哈希表中与所述目标逻辑地址对应的目标表项,所述目标表项中记录有目标计数值;
确定模块,用于根据所述目标计数值,和计数值与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别,所述稳定级别用于表示所述目标逻辑地址对应的数据块的稳定性;
发送模块,用于将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置。
15.根据权利要求14所述的装置,其特征在于,所述计数值与稳定级别的对应关系包括计数值区间与稳定级别的对应关系;
所述确定模块,具体用于根据所述目标计数值确定目标计数值区间,所述目标计数值位于所述目标计数值区间中;根据所述目标计数值区间,和所述计数值区间与稳定级别的对应关系确定所述目标逻辑地址对应的数据块的稳定级别。
16.根据权利要求14所述的装置,其特征在于,
所述计算模块,还用于在所述按照预设的哈希函数对所述多个逻辑地址中的目标逻辑地址进行计算之前获取所述目标逻辑地址;
根据所述目标逻辑地址以及所述哈希函数进行计算,获得所述目标哈希值;
根据所述目标哈希值确定所述目标表项,所述目标表项中记录有计数值;
增加所述目标表项中记录的计数值,所述目标计数值等于所述增加后的所述目标表项中记录的计数值。
17.根据权利要求14所述的装置,其特征在于,
所述计算模块,还用于在所述将所述目标逻辑地址以及所述目标逻辑地址对应的数据块的稳定级别发送给闪存装置之后,将所述目标表项中记录的目标计数值减去固定值。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2014/094655 WO2016101145A1 (zh) | 2014-12-23 | 2014-12-23 | 一种控制器、识别数据块稳定性的方法和存储*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105917303A CN105917303A (zh) | 2016-08-31 |
CN105917303B true CN105917303B (zh) | 2019-12-06 |
Family
ID=56148884
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480035916.9A Active CN105917303B (zh) | 2014-12-23 | 2014-12-23 | 一种控制器、识别数据块稳定性的方法和存储*** |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN105917303B (zh) |
WO (1) | WO2016101145A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110286995B (zh) * | 2018-03-19 | 2022-02-25 | 北京兆易创新科技股份有限公司 | 一种数据读写方法和装置 |
CN108984124B (zh) * | 2018-07-13 | 2022-03-25 | 深圳忆联信息***有限公司 | 减少写放大的方法、装置、计算机设备及存储介质 |
CN108920108B (zh) * | 2018-07-13 | 2022-02-01 | 深圳忆联信息***有限公司 | 冷数据的筛选方法、装置、计算机设备及存储介质 |
CN110502451B (zh) * | 2019-07-10 | 2023-01-06 | 深圳市金泰克半导体有限公司 | 固态硬盘垃圾回收方法、装置、固态硬盘和存储介质 |
CN112328512B (zh) * | 2020-09-22 | 2023-07-28 | 北京计算机技术及应用研究所 | 一种应用于多控存储***的缓存同步***及方法 |
CN112732178B (zh) * | 2020-12-29 | 2024-02-13 | 北京浪潮数据技术有限公司 | 一种ssd的数据清除方法及相关装置 |
CN113342615B (zh) * | 2021-06-29 | 2022-08-26 | 海光信息技术股份有限公司 | 命令监控方法、装置、控制器、***、设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103135945A (zh) * | 2013-03-25 | 2013-06-05 | 中国人民解放军国防科学技术大学 | 用于ssd的多通道动态读写调度方法 |
CN103942010A (zh) * | 2013-01-22 | 2014-07-23 | Lsi公司 | 用于写入非易失性存储器的管理及区域选择 |
CN103942159A (zh) * | 2014-03-19 | 2014-07-23 | 华中科技大学 | 一种基于混合存储设备的数据读写方法与装置 |
CN103942148A (zh) * | 2013-01-21 | 2014-07-23 | 擎泰科技股份有限公司 | 非易失性存储器的损耗均衡***及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5715455A (en) * | 1995-05-18 | 1998-02-03 | International Business Machines Corporation | Apparatus and method for storing file allocation table efficiently in memory |
-
2014
- 2014-12-23 WO PCT/CN2014/094655 patent/WO2016101145A1/zh active Application Filing
- 2014-12-23 CN CN201480035916.9A patent/CN105917303B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942148A (zh) * | 2013-01-21 | 2014-07-23 | 擎泰科技股份有限公司 | 非易失性存储器的损耗均衡***及方法 |
CN103942010A (zh) * | 2013-01-22 | 2014-07-23 | Lsi公司 | 用于写入非易失性存储器的管理及区域选择 |
CN103135945A (zh) * | 2013-03-25 | 2013-06-05 | 中国人民解放军国防科学技术大学 | 用于ssd的多通道动态读写调度方法 |
CN103942159A (zh) * | 2014-03-19 | 2014-07-23 | 华中科技大学 | 一种基于混合存储设备的数据读写方法与装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2016101145A1 (zh) | 2016-06-30 |
CN105917303A (zh) | 2016-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105917303B (zh) | 一种控制器、识别数据块稳定性的方法和存储*** | |
US10713161B2 (en) | Memory system and method for controlling nonvolatile memory | |
US10789162B2 (en) | Memory system and method for controlling nonvolatile memory | |
US9772790B2 (en) | Controller, flash memory apparatus, method for identifying data block stability, and method for storing data in flash memory apparatus | |
US10761731B2 (en) | Array controller, solid state disk, and method for controlling solid state disk to write data | |
US10747666B2 (en) | Memory system | |
US9229876B2 (en) | Method and system for dynamic compression of address tables in a memory | |
KR102094236B1 (ko) | 스토리지 디바이스 및 컴퓨터 시스템 | |
KR20170009706A (ko) | 중복 데이터를 감소시키기 위한 저장 장치 및 그것의 동작 방법 | |
CN108475230B (zh) | 一种存储***和***垃圾回收方法 | |
CN108027764B (zh) | 可转换的叶的存储器映射 | |
US20140223075A1 (en) | Physical-to-logical address map to speed up a recycle operation in a solid state drive | |
JP2014220021A (ja) | 情報処理装置、制御回路、制御プログラム、および制御方法 | |
CN112306898A (zh) | 存储设备、其操作方法及包括其的电子设备 | |
US9575883B2 (en) | Control device, storage device, and storage control method | |
TW201624490A (zh) | 記憶體裝置及非暫態電腦可讀取記錄媒體 | |
CN110389706B (zh) | 一种指纹回收方法以及存储*** | |
KR101716348B1 (ko) | 메모리 시스템, 그것의 동작 방법, 그리고 그것을 포함하는 컴퓨팅 시스템 | |
US11941246B2 (en) | Memory system, data processing system including the same, and operating method thereof | |
US20240248644A1 (en) | Memory system | |
US20220050615A1 (en) | Memory system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |