CN116467224B - L2p映射表重建方法及固态硬盘 - Google Patents
L2p映射表重建方法及固态硬盘 Download PDFInfo
- Publication number
- CN116467224B CN116467224B CN202210033576.2A CN202210033576A CN116467224B CN 116467224 B CN116467224 B CN 116467224B CN 202210033576 A CN202210033576 A CN 202210033576A CN 116467224 B CN116467224 B CN 116467224B
- Authority
- CN
- China
- Prior art keywords
- data
- physical block
- write data
- mapping table
- mapping
- 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
- 238000013507 mapping Methods 0.000 title claims abstract description 422
- 238000000034 method Methods 0.000 title claims abstract description 60
- 239000007787 solid Substances 0.000 title claims abstract description 47
- 230000015654 memory Effects 0.000 claims abstract description 79
- 230000002159 abnormal effect Effects 0.000 claims abstract description 7
- 239000000872 buffer Substances 0.000 claims description 57
- 238000013500 data storage Methods 0.000 claims description 9
- 230000001960 triggered effect Effects 0.000 claims description 5
- 238000004364 calculation method Methods 0.000 claims description 2
- 238000010276 construction Methods 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 5
- 238000011084 recovery Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000013523 data management Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 101100127692 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) FAA4 gene Proteins 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0895—Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
公开了一种L2P映射表重建方法及固态硬盘,重建方法包括:异常断电再上电后,读取第一物理块中最后一个4K单元格,得到其中存储的映射信息,映射信息包括映射表和垃圾回收标志地址;从垃圾回收标志地址在第一物理块中所指示的4K单元格的下一个4K单元格开始,依次顺序读取每个4K单元格,得到多个映射表;依次读取第二物理块中的多个4K单元格,获取其中存储的多个写数据的逻辑地址,多个写数据在断电时未在第一物理块中存储映射关系;根据多个映射表以及多个写数据对应的逻辑地址和物理地址建立L2P映射表。据此方法恢复L2P映射表,能减少对存储器的读取次数,节省映射表的获取时间和建表时间,降低功耗,还能减小存储器占用空间,提高固态硬盘性能。
Description
技术领域
本发明涉及存储器技术领域,更具体地,涉及一种L2P映射表重建方法及固态硬盘。
背景技术
固态硬盘(SSD,Solid State Drive)是由控制器和存储芯片组成的非挥发性存储装置,因其具有体积小、质量轻、功耗低、读写速度快等优点,广泛应用于工控、视频监控、网络终端、导航等诸多领域。固态硬盘的存储芯片数据读写依赖于物理特性,文件系统不能直接访问或操作存储芯片,需采用缓存芯片例如SRAM或DRAM存储L2P映射表,将文件系统提供的逻辑地址转换成存储芯片的物理地址。每个L2P映射表通常包括:基逻辑区块地址(baseLogical Block Address,base LBA)和基存储芯片的物理地址(base Flash AccessAgent,base FAA),文件系统提供的逻辑区块地址对应着一个相应的逻辑分配单元的地址LAA(logic allocate unit address)。
固态硬盘在读写过程中异常掉电时,导致FTL(Flash Translation Layer,闪存转换层)未完全将L2P映射表存储下来。因此在上电时需要恢复所有L2P映射关系。通常,在运行时写数据时会将LAA同时存在闪存中,这样,当异常掉电再上电时,对每个物理块(block),FTL按照编程顺序依次读取每个物理页(page)和每个偏移量(frag)指向的4K单元格。每读取一个4K单元格,同时也获取了其中存储的LAA,就恢复了该单元格内的LAA与FAA的映射关系。当把所有的LAA与FAA的映射关系全部更新后,就能恢复掉电时刻的L2P映射表。但是这种方法需要对每一个物理块均依次读取其中的每个数据对应的4K单元格,会消耗大量的读闪存时间,且随着运行时写入的物理块变多,SSD上电建表消耗的时间就呈现线性增长趋势。
发明内容
鉴于上述问题,本发明的目的在于提供一种L2P映射表重建方法及固态硬盘,减少L2P映射表的上电恢复时间,以解决现有技术中的问题。
根据本发明的第一方面,提供了一种L2P映射表重建方法,应用于固态硬盘中,所述固态硬盘包括存储器,所述存储器包括第一物理块和第二物理块,所述第一物理块和所述第二物理块均包括多个4K单元格,所述重建方法包括:
在异常断电再上电的情况下,读取所述第一物理块中最后一个所述4K单元格,得到其中存储的映射信息,所述映射信息包括映射表和垃圾回收标志地址;
从所述垃圾回收标志地址在所述第一物理块中所指示的所述4K单元格的下一个4K单元格开始,依次顺序读取所述第一物理块中的每个所述4K单元格,获取其中存储的所述映射信息,得到多个映射表;
依次读取所述第二物理块中的多个所述4K单元格,获取其中存储的多个写数据的逻辑地址,所述多个写数据为断电时未在所述第一物理块中存储映射关系的写数据;
根据所述多个映射表以及所述多个写数据对应的逻辑地址和物理地址建立所述L2P映射表,
其中,所述第一物理块的多个所述4K单元格均用于存储写数据对应的所述映射信息,所述第二物理块的多个所述4K单元格均用于存储写数据,所述垃圾回收标志地址所指示的所述4K单元格为刚执行完垃圾回收的所述映射表所在的4K单元格。
可选地,所述映射表表征一个数据块中逻辑地址连续的多个写数据的地址映射关系,
每个所述映射表均包括对应所述数据块中首位写数据对应的物理地址和逻辑地址以及连续编程计数值,根据所述连续编程计数值和所述首位写数据对应的物理地址,利用预先存储的数组表计算以得到所述数据块中每个所述写数据的物理地址,其中,所述数组表表征所述写数据的编程顺序和物理地址之间的关联关系。
可选地,所述数组表包括第一数组和第二数组,所述第一数组具有多个第一元素,各个所述第一元素的编号表征所述数据的物理地址,各个所述第一元素存储的值表征所述数据的所述编程顺序;
将所述第一数组的所述编号和所述存储的值置换后得到的数组为所述第二数组,所述第二数组中各个第二元素的编号表征所述数据的所述编程顺序,各个所述第二元素存储的值表征所述数据的所述物理地址。
可选地,所述映射信息还包括垃圾回收指示数据,所述垃圾回收指示数据为0表示对应的所述映射表未进行垃圾回收,所述垃圾回收指示数据为1表示对应的所述映射表已执行垃圾回收。
可选地,依次读取所述第二物理块中的多个所述4K单元格,获取其中存储的多个写数据的逻辑地址包括:
倒序读取所述第一物理块中的所述4K单元格,直至读取到所述垃圾回收指示数据为0的所述4K单元格,获取其中存储的所述映射表;
根据所述映射表获取对应所述数据块中的最后一个所述写数据在所述第二物理块中的物理地址;
从所述最后一个所述写数据对应的所述物理地址开始,依次向后读取所述第二物理块中的多个所述4K单元格,获取所述多个写数据对应的逻辑地址。
可选地,依次读取所述第二物理块中的多个所述4K单元格,获取其中存储的多个写数据的逻辑地址包括:
根据所述多个映射表建立所述L2P映射表的第一部分;
根据所述第一部分获取断电时存储在所述映射表中的最后一个所述写数据在所述第二物理块中的物理地址;
从所述最后一个所述写数据对应的所述物理地址开始,依次向后读取所述第二物理块中的多个所述4K单元格,获取所述多个写数据对应的逻辑地址。
可选地,每个所述数据块中的所述多个写数据按照连续的编程顺序存储在所述第二物理块的多个所述4K单元格中,各所述4K单元格内还存有每个所述写数据对应的逻辑地址和计数值,所述连续编程计数值为所述数据块中最大的所述计数值。
可选地,依次读取所述第二物理块中的多个所述4K单元格,获取其中存储的多个写数据的逻辑地址包括:
读取所述第二物理块中的最后一个4K单元格,得到其中存储的末位写数据的逻辑地址和所述连续编程计数值;
根据所述连续编程计数值和所述末位写数据的物理地址,利用所述数组表计算得到所述首位写数据的物理地址;
根据所述首位写数据的逻辑地址和物理地址之间的对应关系建立所述第二物理块中的最后一个数据块对应的映射表;
依次倒序读取所述第二物理块中每个所述数据块对应的所述末位写数据所在的所述4K单元格,直至读取到断电时存储在所述第一物理块中的映射表中最后一个所述写数据在所述第二物理块中的物理地址。
可选地,每个所述数据块以及每个所述映射表通过下述存储方式存储:
接收写数据,所述写数据包括多个数据块,每个所述数据块中的多个写数据的逻辑地址连续;
将每个数据块中的所述多个写数据按照连续的编程顺序写入所述第二物理块的多个4K单元格中,同时存储每个所述写数据对应的逻辑地址和计数值,所述计数值按照所述编程顺序逐个累加,所述数据块中最大的所述计数值记为连续编程计数值;
根据每个所述数据块中所述首位写数据对应的物理地址和逻辑地址以及连续编程计数值建立每个所述数据块对应的所述映射表;
按照多个所述数据块写入所述存储器的时间顺序,将多个所述数据块对应的多个所述映射表及对应的所述垃圾回收标志地址依次存储在所述第一物理块的多个所述4K单元格中。
可选地,每个所述数据块中的多个所述写数据的编程顺序连续且逻辑地址连续,物理地址不完全连续。
可选地,所述存储方式还包括:
对所述第一物理块中的多个所述映射表依次执行垃圾回收,将有效的映射表及其对应的所述垃圾回收标志地址依次存储在所述第一物理块的多个所述4K单元格中;
按照先后顺序依次在所述第一物理块的多个所述4K单元格中存储所述数据块对应的所述映射信息和所述有效的映射表对应的所述映射信息。
可选地,按照多个所述数据块写入所述存储器的时间顺序,将多个所述数据块对应的多个所述映射表及对应的所述垃圾回收标志地址依次存储在所述第一物理块的多个所述4K单元格中的步骤包括:
按照多个所述数据块写入所述存储器的时间顺序,将多个所述数据块对应的多个所述映射表及对应的所述垃圾回收标志地址作为所述映射信息依次存储在所述固态硬盘的缓存区;
当所述缓存区的占用空间达到第一阈值时,将所述缓存区中的所述映射信息依次存储在所述第一物理块的多个所述4K单元格中。
可选地,当存储多个所述映射表的所述第一物理块的使用数量达到第二阈值时,触发垃圾回收,并开始将有效的垃圾回收标志地址存储在所述4K单元格内。
可选地,所述垃圾回收标志地址为空地址时表征所述映射表未进行垃圾回收,所述垃圾回收标志地址为非空地址时指示执行垃圾回收的所述映射表在所述第一物理块中的位置。
可选地,在所述垃圾回收标志地址为空地址的情况下,
所述从所述垃圾回收标志地址在所述第一物理块中所指示的所述4K单元格的下一个4K单元格开始,依次顺序读取所述第一物理块中的每个所述4K单元格,获取其中存储的所述映射信息,得到多个映射表的步骤包括:
按照存储顺序从所述第一物理块的第一个所述4K单元格开始,依次读取所述第一物理块中的每个所述4K单元格,获取其中存储的所述映射信息,得到多个映射表。
根据本发明的第二方面,提供一种固态硬盘,用于实现上述所述的L2P映射表重建方法,所述固态硬盘包括:
控制器,与主机连接,接收主机的写数据,所述写数据包括多个数据块,每个数据块包括多个写数据;
存储器,连接所述控制器,存储所述写数据,
其中,所述存储器包括第一物理块和第二物理块,所述第一物理块和所述第二物理块均包括多个4K单元格,
所述第一物理块的每个所述4K单元格内均包括映射表存储区和垃圾回收信息存储区,所述映射表存储区用于存储所述写数据对应的映射表,所述垃圾回收信息存储区用于存储垃圾回收标志地址和垃圾回收指示数据;
所述第二物理块的每个所述4K单元格内均包括数据存储区和计数值存储区,所述数据存储区用于存储所述写数据,所述计数值存储区用于存储所述写数据对应的计数值和逻辑地址。
可选地,所述控制器包括缓存芯片,所述缓存芯片为SRAM或DRAM,所述缓存芯片内开辟存储区域作为缓存区,用于存储所述映射信息,当所述缓存区的占用空间达到第一阈值时,将所述缓存区中的所述映射信息依次存储在所述第一物理块的多个所述4K单元格中。
可选地,所述控制器至少包括两个缓存区,两个所述缓存区切换使用。
本发明提供的L2P映射表重建方法及固态硬盘在存储写数据时,将写数据对应的多个映射表存储在存储器的第一物理块的多个4K单元格中,而将写数据存储在存储器的第二物理块的多个4K单元格中,并且在一定条件下对第一物理块中的映射表进行垃圾回收,将垃圾回收标志地址同对应的映射表共同作为映射信息更新在第一物理块中,从而在异常掉电再重新上电后能通过读取第一物理块的最后一个4K单元格获取到垃圾回收标志地址,定位到最新执行完垃圾回收的映射表所在的4K单元格,之后再顺序读取第一物理块中的各个4K单元格,获得映射表,以此恢复L2P映射表的一部分,通过读取第二物理块中的多个4K单元格,获取到未在第一物理块的映射表中存储映射关系的写数据,以此恢复L2P映射表的另一部分,从而恢复完整的L2P映射表。通过这样的重建方法,将映射表与写数据同时存储在存储器,且在映射表存储达到一定量时进行垃圾回收,减轻固态硬盘的存储压力,提升运行速度和性能,同时通过垃圾回收映射表也可以减少上电后对映射表所在4K单元格的读取次数,提升恢复L2P映射表的速度,不仅节省了上电建表的时间,还同时降低了上电功耗,提高了系统的数据管理效率和数据操作性能。
进一步地,通过设置垃圾回收指示数据并将其作为映射信息的一部分存储在第一物理块中,从而根据垃圾回收指示数据就可以得知对应的映射表是通过垃圾回收的有效映射表还是写数据存储时更新的映射表,以获取到断电时第一物理块中接收的最新的写数据存储时更新的映射表,通过数组表可以得到映射表中的最后一个写数据在第二物理块中的位置,向后读取第二物理块的各个4K单元格,就能获取到断电时未更新在映射表中的写数据,恢复L2P映射表,通过这样的方法减少对第二物理块的4K单元的读取次数,即减少对写数据的读取次数,只需要读取少部分写数据再结合映射表就可以快速建立L2P映射表。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示出了根据本发明实施例的将映射表存储在存储器中的示意图;
图2示出了根据本发明实施例的将映射表进行垃圾回收的示意图;
图3示出了根据本发明实施例的映射表及写数据的存储方式的流程图;
图4示出了根据本发明实施例的L2P映射表恢复方法的流程图;
图5a-图5c分别示出了三种实施例的图4中步骤S203的详细流程示意图;
图6示出了根据本发明实施例的写数据写入存储器的示意图;
图7a和图7b分别示出了根据本发明实施例的数组表中第一数组和第二数组的示意图;
图8示出了根据本发明实施例的固态硬盘的示意性框图。
具体实施方式
以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
附图中的流程图、框图图示了本发明实施例的系统、方法、装置的可能的体系框架、功能和操作,流程图和框图上的方框可以代表一个模块、程序段或仅仅是一段代码,所述模块、程序段和代码都是用来实现规定逻辑功能的可执行指令。也应当注意,所述实现规定逻辑功能的可执行指令可以重新组合,从而生成新的模块和程序段。因此附图的方框以及方框顺序只是用来更好的图示实施例的过程和步骤,而不应以此作为对发明本身的限制。
图1示出了根据本发明实施例的将映射表存储在存储器中的示意图。
如图1所示,固态硬盘接收主机发送的写命令,将写数据存储至存储器中,写数据包括多个数据块,每个数据块均包括多个逻辑地址连续且编程顺序连续的写数据,每个写数据均对应一个计数值,同一数据块中的多个写数据的计数值按照编程顺序累加,将最大的计数值作为连续编程计数值。根据编程连续,每个数据块可以对应建立一个映射表,按照图示的时间线,图1中存储了五个数据块,同时建立了五个映射表,每个映射表都包括表征对应数据块的映射关系的物理地址FAA、逻辑地址LAA和连续编程计数值seq_cnt。之后,在固态硬盘的缓存区(例如在SRAM中开辟一块存储区域作为缓存区)中依次存储多个映射表,系统运行过程中新增的映射表都存入该缓存区,当缓存区被映射表存满时,将缓存区的数据写入一个指定的物理块,这个物理块为存储器中的第一物理块,专门用于存储缓存区的数据。
参见图1,在SRAM中建立两个缓存区(缓存区A和缓存区B)用于存储映射表,将上述映射表和垃圾回收标志地址start_loc以及垃圾回收指示数据flag共同作为映射信息一同存储至缓存区中,当一个缓存区写满后,可以立即用另一个,在合适的时机将写满的缓存区中的数据写入第一物理块中。将上述5个映射表对应的映射信息依次存储在缓存区A的每个缓存单元中,当缓存区A被存储满时,切换到缓存区B继续存储,并将缓存区A中的映射信息全部存储至存储器的第一物理块的多个4K单元格108中,以闪存块1为第一物理块为示例,闪存块1中存储缓存区A中的映射信息。那么,第一物理块的每个4K单元格108和缓存区的每个缓存单元内均包括映射表存储区106和垃圾回收信息存储区107。映射表存储区106用于存储写数据对应的映射表,映射表存储区106包括三个区域,逻辑地址区域(LAA)101、物理地址区域(FAA)102和计数值区域(seq_cnt)103;垃圾回收信息存储区107包括两个区域:标志地址区域104和指示数据区域105,分别用于存储垃圾回收标志地址start_loc和垃圾回收指示数据flag。即缓存区的最小缓存单元内存储映射信息,映射信息由LAA/FAA/start_loc/seq_cnt/flag五个字段组成,其中LAA、FAA和start_loc各占4byte,而seq cnt和flag各占2byte。本实施例中,垃圾回收标志地址start_loc记录第一物理块在垃圾回收时当前正在读取第一物理块的位置,垃圾回收指示数据flag记录是否是垃圾回收数据。
进一步地,映射表表征一个数据块中逻辑地址连续的多个写数据的地址映射关系,每个映射表均包括对应数据块中首位写数据对应的物理地址和逻辑地址,以及连续编程计数值,根据连续编程计数值和首位写数据对应的物理地址,利用预先存储的数组表计算以得到数据块中每个写数据的物理地址,其中,连续编程计数值为数据块中最大的计数值,数组表表征写数据的编程顺序和物理地址之间的关联关系。因此,仅存储一个写数据(首位写数据)对应的物理地址和逻辑地址以及数据块中的连续编程计数值就可以表征数据块中多个写数据的映射关系,根据一个映射表就可以恢复整个数据块中所有写数据的L2P映射关系。
进一步地,垃圾回收标志地址start_loc为空地址0xff时表示第一物理块还未开始进行垃圾回收,垃圾回收指示数据flag为0表示对应的映射表未进行垃圾回收,垃圾回收指示数据为1表示对应的映射表已执行垃圾回收。
进一步地,存储器还包括第二物理块,以闪存块X作为第二物理块为例说明,第二物理块也包括多个4K单元格,用于存储多个写数据,第二物理块的4K单元格包括数据存储区20和计数值存储区30,数据存储区20用于存储写数据,计数值存储区30用于存储写数据对应的计数值和逻辑地址,在后续的图6中将会详细介绍。那么,存储器包括多个第一物理块和多个第二物理块,第一物理块的多个4K单元格用于存储映射信息,第二物理块的多个4K单元格用于存储写数据,第一物理块例如为4个,当固态硬盘接收到写数据并按照时间顺序将多个写数据存储至第二物理块中时,写数据对应的映射表及映射信息被存储至缓存区,之后更新至第一物理块中。
下面通过图2介绍本发明实施例的映射表执行垃圾回收的过程中缓存区和存储器中存储的数据的变化,以及垃圾回收标志地址start_loc和垃圾回收指示数据flag的具体作用。
图2示出了根据本发明实施例的将映射表进行垃圾回收的示意图。
如图2所示,随着时间推移,固态硬盘中写入的写数据数量增加,映射表存储数量增加,用于存储映射信息的第一物理块(例如闪存块1和闪存块2)的使用量增加,固态硬盘处理数据的压力增大,为了控制闪存块的使用量以及数据恢复时间,在使用到一定数量的闪存块后,开始进行垃圾回收。当需要对第一物理块进行垃圾回收时,先按照存储顺序将数据从第一物理块的各4K单元格中读出,根据图2,将闪存块1和闪存块2中的映射信息依次从4K单元格108内读出到缓存区C,解析映射信息得到映射表,查询映射表,若映射关系没有变更则映射表有效,否则映射表无效。将有效的映射表更新到缓存区A的缓存单元109中,同时将当前读取闪存块的位置存放在标志地址区域104中,垃圾回收标志地址start_loc指示正在执行垃圾回收的第一物理块中的4K单元格,则缓存区A中按照时间顺序缓存有效映射表的映射信息。
同时,写数据仍然在不断写入,新的写数据对应的新的映射表也在不断更新,映射表也按照时间顺序存储在缓存区A中,映射表在向缓存区A中存储的同时,也将当前正在执行垃圾回收的4K单元格的地址作为垃圾回收标志地址start_loc存储在缓存单元109中,因此不论是随时间运行更新的映射表还是垃圾回收的有效映射表都与垃圾回收标志地址一同作为映射信息存储至缓存区A中。进一步地,垃圾回收指示数据flag指示对应的映射表是否进行垃圾回收,对于随时间运行更新的映射表,垃圾回收指示数据flag为0,对于垃圾回收的有效映射表,垃圾回收指示数据flag为1。将映射表、垃圾回收标志地址和垃圾回收指示数据同时作为映射信息存储至缓存区A的缓存单元109中。当缓存区A中的缓存单元109存储满之后,开始切换缓存区B继续缓存,并且将缓存区A中的映射信息更新至第一物理块中(例如是存储至闪存块3中)。当某一第一物理块中的各个映射表均执行完垃圾回收时(例如闪存块1),就可以擦除对应的闪存块,用于存放新更新的映射信息。
进一步地,当缓存区的占用空间达到第一阈值时(例如缓存区A或缓存区B存储满),将缓存区中的映射信息依次存储在第一物理块的多个4K单元格中;当存储多个映射表的第一物理块的使用数量达到第二阈值时,触发垃圾回收,并开始将有效的垃圾回收标志地址存储在4K单元格内。图1中第一物理块未进行垃圾回收时,缓存区和第一物理块中存储的垃圾回收标志地址start_loc为空地址0xff,垃圾回收指示数据flag为0;图2中缓存区和第一物理块中存储的映射信息中的垃圾回收标志地址start_loc为非空地址,指示刚执行完垃圾回收的映射表所在的4K单元格,有效的映射表对应的回收指示数据flag为1。
按照图2的存储过程,即使异常断电也有一部分映射信息已经存储至第一物理块中,重新上电后通过读取第一物理块的最后一个存储数据的4K单元格就可以获取垃圾回收标志地址start_loc,从垃圾回收标志地址start_loc指示的4K单元格的下一个4K单元格开始,读取各个4K单元格,就可以获取多个映射表,从而恢复相对应的L2P映射关系。具体的实现方式在图4的流程图中进行介绍。
图3示出了根据本发明实施例的映射表及写数据的存储方式的流程图。
结合图1-图3,映射表及写数据写入固态硬盘的存储方式包括以下步骤:
在步骤S101中,接收写数据,写数据包括多个数据块,每个数据块中的多个写数据的逻辑地址连续。
本步骤中,固态硬盘接收到主机发送的写命令和写数据,写数据包括多个数据块,对接收到的每个数据块,将其中的多个逻辑地址连续的写数据存储。每个数据块中的多个写数据的编程顺序连续且逻辑地址连续,但物理地址不完全连续。
在步骤S102中,将每个数据块中的多个写数据按照连续的编程顺序写入第二物理块的多个4K单元格中,同时存储每个写数据对应的逻辑地址和计数值,计数值按照编程顺序逐个累加,数据块中最大的计数值记为连续编程计数值。
本步骤中,将写数据写入存储器,对接收到的写数据中的每个数据块,将其中的多个编程顺序连续且逻辑地址连续的数据按照连续的编程顺序存储在存储器的第二物理块的多个4KB单元格内。在存储写数据时,同时存储写数据对应的计数值和逻辑地址LAA,编程顺序连续且LAA连续的4KB单元格中存储的各写数据的计数值也按照编程顺序逐个累加,该数据块中最大的计数值记为连续编程计数值seq_cnt。
在步骤S103中,根据每个数据块中首位写数据对应的物理地址和逻辑地址以及连续编程计数值建立每个数据块对应的映射表。
本步骤中,参见图1,在写数据时,按照时间顺序将多个数据块的首位写数据对应的逻辑地址和物理地址的映射关系以及连续编程计数值seq_cnt分别存储在多个映射表中,每个数据块均对应一个映射表。连续编程计数值seq_cnt是指该数据块中写数据对应的连续编程的计数值,首位写数据即数据块中逻辑地址位于首位的写数据。
在步骤S104中,按照多个数据块写入存储器的时间顺序,将多个数据块对应的多个映射表及对应的垃圾回收标志地址依次存储在第一物理块的多个4K单元格中。
本步骤中,如图1所示,按照时间顺序,主机持续发送写数据,并产生了相应的多个映射信息。将多个数据块对应的多个映射表及对应的垃圾回收标志地址依次存储在第一物理块的多个4K单元格中,垃圾回收标志地址start_loc记录执行垃圾回收时第一物理块正在处理的位置,如果未执行垃圾回收,则此值为0xff。如果执行了L2P blk垃圾回收,start_loc记录最后垃圾回收的4K单元格的地址。
具体的,本步骤包括:按照多个数据块写入存储器的时间顺序,将多个数据块对应的多个映射表及对应的垃圾回收标志地址作为映射信息依次存储在固态硬盘的缓存区;当缓存区的占用空间达到第一阈值时,将缓存区中的映射信息依次存储在第一物理块的多个4K单元格中。例如先将多个映射表存储在固态硬盘的控制器的缓存区中,以SRAM为例,当SRAM的已占用缓存空间达到一定的阈值,例如缓存区A已被存储满时,再将多个映射表及对应的垃圾回收标志地址依次存入存储器的第一物理块的各个4K单元格内,存储映射表的4K单元格和存储写数据的物理块不相同。当然,缓存区也可以是DRAM,那么按照图2的描述,本步骤中,先在DRAM中开辟缓存区A与缓存区B,用于存储映射表,运行过程中以及垃圾回收过程中新增的映射表都存入缓存区,当缓存区A被映射表存满时,立即切换到缓存区B,这样主机写命令不会被打断。在系统空闲时,将缓存区A的数据写入第一物理块中,第一物理块专门用于存储缓存区的数据。
在步骤S105中,对第一物理块中的多个映射表依次执行垃圾回收,将有效的映射表及其对应的垃圾回收标志地址依次存储在第一物理块的多个4K单元格中。
本步骤中,当存储多个映射表的第一物理块的使用数量达到第二阈值时(例如已经有两个第一物理块缓存满映射信息时),触发垃圾回收,并开始将有效的垃圾回收标志地址存储在所述4K单元格内。参见图2,例如随着系统运行,已经写满了2个闪存块,此时触发第一物理块的垃圾回收。如果垃圾回收标志地址start 1oc为0xff表征所述映射表未进行垃圾回收,则从最早存储映射信息的位置开始读取4K单元格;如果垃圾回收标志地址start_loc非0xff时指示执行垃圾回收的映射表在第一物理块中的位置,则从垃圾回收标志地址start_loc指示的4K单元格的下一个4K单元格开始执行垃圾回收。然后对第一物理块中的多个映射表依次执行垃圾回收,将有效的映射表及其对应的垃圾回收标志地址依次存储在第一物理块的多个4K单元格中。
在步骤S106中,按照先后顺序依次在第一物理块的多个4K单元格中存储数据块对应的映射信息和有效的映射表对应的映射信息。
本步骤中,开始垃圾回收时,将读取的4K单元格内的数据放在缓存区C,然后依次从映射表中查询每个映射表单元中的每个映射关系是否有效,如果FAA一致,则有效。连续的映射关系还是存放在同一个映射表单元中,然后写入缓存区A或B。由于写数据仍然在不断写入固态硬盘中,映射表也在不断更新,按照图2示出的过程将有效的映射表和随时间运行更新的写数据的映射表均按照先后顺序存储在第一物理块中。
由此,当固态硬盘异常断电再上电后,先找到第一物理块最后写数据的位置,读取最后一个存储数据的4K单元格,查看其中记录的垃圾回收标志地址start_loc,然后从start_loc对应的下一4K单元格开始依次读取第一物理块中每个4K单元格,将所有的映射表单元恢复。掉电时刻映射表所反映的所有的L2P映射关系就恢复回来了。
在本公开实施例中,L2P映射表的重建方法在固态硬盘写数据的过程中,所有数据先缓存到映射表中,再将映射表全部按顺序写入一个闪存的物理块中,上电后按照顺序依次读取这个物理块中每个4K单元格,将4K单元格里所有的映射表单元恢复,那么所有存到闪存物理块中的L2P映射关系就有了。然后将未刷入物理块中L2P映射关系恢复回来,掉电时刻所有的L2P映射关系就建回来了。因此,本公开实施例提供的L2P映射表重建方法能减少4K单元格的读取次数,快速恢复上电后的L2P映射表,减小消耗时间和功耗。具体的L2P映射表恢复方法的流程图如图4。
图4示出了根据本发明实施例的L2P映射表恢复方法的流程图。
本发明实施例的L2P映射表重建方法应用于固态硬盘中,固态硬盘包括存储器,存储器包括第一物理块和第二物理块,第一物理块和第二物理块均包括多个4K单元格,重建方法包括如下步骤:
在步骤S201中,在异常断电再上电的情况下,读取第一物理块中最后一个4K单元格,得到其中存储的映射信息,映射信息包括映射表和垃圾回收标志地址。
结合图1-图4,本步骤中,固态硬盘在异常掉电再上电后,先找到第一物理块在断电时最后写入数据的位置,即读取第一物理块的最后一个写入数据的4K单元格,获取其中存储的映射信息,主要是获取映射信息中的start_loc,以获得最后垃圾回收的位置。垃圾回收标志地址start_loc表征第一物理块在断电时执行垃圾回收的映射表所在的4K单元格的物理地址,垃圾回收标志地址start_loc为空地址0xff表示还未开始垃圾回收。
在步骤S202中,从垃圾回收标志地址在第一物理块中所指示的4K单元格的下一个4K单元格开始,依次顺序读取第一物理块中的每个4K单元格,获取其中存储的映射信息,得到多个映射表。
本步骤中,根据上一步骤获取到垃圾回收标志地址start_loc,由其对应的4K单元格的下一4K单元格开始,依次读取第一物理块中的多个4K单元格,获取每个4K单元格中存储的映射信息,就可以获取到第一物理块中还未进行垃圾回收的多个映射表。
在垃圾回收标志地址为空地址的情况下,本步骤包括:按照存储顺序从第一物理块的第一个4K单元格开始,依次读取第一物理块中的每个4K单元格,获取其中存储的映射信息,得到多个映射表。即,若垃圾回收标志地址start_loc为0xff,则从第一物理块中最早存入数据的4K单元格开始,否则从start loc指示的4K单元格的下一4K单元格开始,按顺序依次读取这个闪存块的每个4K单元格,里面存储的都是映射表,根据映射表可以依次恢复L2P映射关系。
在步骤S203中,依次读取第二物理块中的多个4K单元格,获取其中存储的多个写数据的逻辑地址,多个写数据为断电时未在第一物理块中存储映射关系的写数据。
上一步骤中,获取了第一物理块中存储的多个映射表,根据映射表可以恢复对应的L2P映射关系,建立L2P映射表的第一部分,但是在断电时可能有一部分写数据已经存入了第二物理块,但其映射表却未来得及存储至第一物理块中,这部分写数据的L2P映射关系也需要恢复,这部分数据需要从闪存存储器中读取,然后再建立对应的L2P映射表的第二部分。因此,本步骤中,需要读取存储器中的多个未存储映射表的写数据,获取每个数据对应的逻辑地址和物理地址,据此建立L2P映射表的第二部分。
具体地,找到第一物理块中的映射表对应的写数据最后在第二物理块中存储的位置,根据其对应的物理地址FAA,往后依次读取写入写数据的第二物理块的多个4K单元格,获取其中存储的多个写数据的逻辑地址,结合各写数据的物理地址就可以恢复对应的L2P映射关系,这样对于没有来得及存储映射表的写数据对应的L2P映射关系就都恢复回来了。
在步骤S204中,根据多个映射表以及多个写数据对应的逻辑地址和物理地址建立L2P映射表。
本步骤中,根据多个映射表建立L2P映射表的第一部分,根据多个写数据对应的逻辑地址和物理地址建立L2P映射表的第二部分。在恢复L2P映射表时可以先由映射表恢复L2P映射表的第一部分,然后再读取第二物理块,恢复L2P映射表的第二部分,也可以全部完成读取之后,再依次建立L2P映射表的第一部分和第二部分。
进一步地,映射表表征一个数据块中逻辑地址连续的多个写数据的地址映射关系,每个映射表均包括对应数据块中首位写数据对应的物理地址和逻辑地址以及连续编程计数值,根据连续编程计数值和首位写数据对应的物理地址,利用预先存储的数组表计算以得到数据块中每个写数据的物理地址,数组表表征写数据的编程顺序和物理地址之间的关联关系。如何采用数组表和映射表获取映射表中任一写数据的映射关系在图7a-图7b中介绍。
本发明提供的L2P映射表重建方法在存储写数据时,将写数据对应的多个映射表存储在存储器的第一物理块的多个4K单元格中,而将写数据存储在存储器的第二物理块的多个4K单元格中,并且在一定条件下对第一物理块中的映射表进行垃圾回收,将垃圾回收标志地址同对应的映射表共同作为映射信息更新在第一物理块中,从而在异常掉电再重新上电后能通过读取第一物理块的最后一个4K单元格获取到垃圾回收标志地址,定位到最新执行完垃圾回收的映射表所在的4K单元格,之后再顺序读取第一物理块中的各个4K单元格,获得映射表,以此恢复L2P映射表的一部分,通过读取第二物理块中的多个4K单元格,获取到未在第一物理块的映射表中存储映射关系的写数据,以此恢复L2P映射表的另一部分,从而恢复完整的L2P映射表。通过这样的重建方法,将映射表与写数据同时存储在存储器,且在映射表存储达到一定量时进行垃圾回收,减轻固态硬盘的存储压力,提升运行速度和性能,同时通过垃圾回收映射表也可以减少上电后对映射表所在4K单元格的读取次数,提升恢复L2P映射表的速度,不仅节省了上电建表的时间,还同时降低了上电功耗,提高了系统的数据管理效率和数据操作性能。
在步骤S203中,读取第二物理块的多个4K单元格,可以获取到断电时未在第一物理块中存储映射关系的写数据的逻辑地址和物理地址,而如何定位到需要读取的位置将在图5a-图5c的实施例中进行介绍。如下:
图5a-图5c分别示出了三种实施例的图4中步骤S203的详细流程示意图。
如图5a所示,本实施例中,映射信息还包括垃圾回收指示数据flag,垃圾回收指示数据为0表示对应的映射表未进行垃圾回收,垃圾回收指示数据为1表示对应的映射表已执行垃圾回收。根据该垃圾回收指示数据来定位到断电时最后存储的映射表中最后一个写数据在第二物理块中的位置。具体地:
在步骤S2011中,倒序读取第一物理块中的4K单元格,直至读取到垃圾回收指示数据为0的4K单元格,获取其中存储的映射表。
本步骤中,由于垃圾回收指示数据为0的映射表未进行垃圾回收,是根据系统运行更新的写数据的映射表,而垃圾回收指示数据为1的映射表则是已执行垃圾回收的有效映射表,那么,通过倒序读取第一物理块的4K单元格,可以找到垃圾回收指示数据为0的映射表,该映射表中最后一个写数据在第二物理块中的位置就能找到,该位置之后的写数据的映射关系在断电时未存储在第一映射表中。
在步骤S2012中,根据映射表获取对应数据块中的最后一个写数据在第二物理块中的物理地址。
本步骤中,根据获取到的映射表,例如采用预先存储的数组表,可以获取到对应数据块中最后一个写数据对应的物理地址。
在步骤S2013中,从最后一个写数据对应的物理地址开始,依次向后读取第二物理块中的多个4K单元格,获取多个写数据对应的逻辑地址。
本步骤中,从上一步骤获取的物理地址的下一个物理地址开始,依次向后读取第二物理块中的多个4K单元格,获取多个写数据对应的逻辑地址,结合物理地址就可以恢复各写数据的L2P映射关系。
因此,本实施例中,通过设置垃圾回收指示数据flag,在L2P映射表恢复过程中记录最后的flag为0的映射表的最后一个写数据的FAA,根据这个FAA,往后依次读取写入用户数据的闪存块,根据从计数值存储区中获取的LAA,结合FAA,就可以恢复对应的L2P映射关系。
如图5b所示,本实施例根据恢复的L2P映射表的第一部分来获取断电时存储的映射表表征的最后一个写数据在第二物理块中的位置,具体地:
在步骤S2021中,根据多个映射表建立L2P映射表的第一部分。
本步骤中,先根据读取的映射表恢复L2P映射表的第一部分,将断电时存储了映射关系的写数据的L2P映射关系恢复。
在步骤S2022中,根据第一部分获取断电时存储在映射表中的最后一个写数据在第二物理块中的物理地址。
本步骤中,L2P映射表的第一部分已经建立,每个写数据的逻辑地址和物理地址的对应关系清晰可见,那么,根据L2P映射表就可以获取该映射表中的写数据在第二物理块中对应的最后一个物理地址。
在步骤S2023中,从最后一个写数据对应的物理地址开始,依次向后读取第二物理块中的多个4K单元格,获取多个写数据对应的逻辑地址。
本步骤中,从上一步骤中获取的物理地址开始,依次向后读取第二物理块中的多个4K单元格,就可以恢复这些写数据对应的L2P映射关系。
上述两个实施例都是顺序读取第二物理块的多4K单元格,获取写数据的映射关系,图5c的实施例介绍倒序读取第二物理块的各4K单元格,获取写数据的映射关系。
如图5c所示,本实施例中,通过倒序读取第二物理块的各4K单元格来恢复L2P映射关系,由于数组表和映射表的存在,可以减少4K单元格的读取次数,节约上电建表时间。每个数据块中的多个写数据按照连续的编程顺序存储在第二物理块的多个4K单元格中,各4K单元格内还存有每个写数据对应的逻辑地址和计数值,连续编程计数值为数据块中最大的连续编程的计数值,本实施例包括以下步骤:
在步骤S2031中,读取第二物理块中的最后一个4K单元格,得到其中存储的末位写数据的逻辑地址和连续编程计数值。
写数据在第二物理块中的存储方式参见图6,图6示出了根据本发明实施例的写数据写入存储器的示意图。
如图6所示,以NAND存储器为例,NAND包括多个第二物理块(block),每个第二物理块又包括多个物理页(page),图6中示例性的示出了将32个4KB数据按照编程顺序写入两个相邻的字线的图示,每个字线WL包括两个Page编程单元,每个Page编程单元包括具有不同逻辑单元号(LUN/DIE)的两个物理页10,每个物理页10包括四个4K单元格,每个4K单元格内的数字表征编程顺序,编程顺序表征写入物理地址的顺序。在该第二物理块中,所有的page编程单元采用相同的编程顺序。这些编程单元可以存储主机发送的一段连续数据(例如32个4KB数据)。page x上编程顺序为0x3的4K单元格与page x上编程顺序为0x8的4K单元格属于物理地址连续,但是编程顺序不连续;page x上编程顺序为0x3的4K单元格与page x+1上编程顺序为0x4的4K单元格属于编程顺序连续,但是物理地址不连续;page x+1上编程顺序为0xf的4K单元格与page x+2上编程顺序为0x0的4K单元格属于编程顺序连续,且物理地址连续。同时,在4K单元格内开辟两个存储区,数据存储区20和计数值存储区30,数据存储区20存储写数据,计数值存储区30存储写数据对应的逻辑地址LAA和计数值,各写数据的计数值按照编程顺序逐个累加,该计数值存储区30例如称为meta。计数值表示同一数据块中编程顺序连续且逻辑地址连续的数据的个数,将每个数据块中最大的计数值记为连续编程计数值seq_cnt。
本步骤中,通过读取第二物理块的最后一个4K单元格,可以获取到其中存储的计数值,该计数值为这一片逻辑地址连续的写数据对应的最大的计数值,通过该最大的计数值就可以知道逻辑地址连续的写数据的数量,即该数据块包含的逻辑地址连续的写数据的数量。若该数据块中写数据存储完整,则该最大的计数值就是连续编程计数值seq_cnt;若数据块中的写数据仅存储了一部分,那么该最大的计数值就是已经存储的写数据对应的最大的计数值,表征已经存储的编程顺序连续的写数据的数量。例如,通过读取图6中最后一个4K单元格,得到计数值1,那么该数据块包含两个写数据,LAA(z+1)和LAAz。通过读取倒数第三个4K单元格,获得计数值8,就可以知道这一数据块包含9个写数据,LAAy-LAA(y+8)。同理,当读取到4K单元格内的计数值为20,可知数据块包含21个写数据,LAAx-LAA(x+20)。
在步骤S2032中,根据连续编程计数值和末位写数据的物理地址,利用数组表计算得到首位写数据的物理地址。
本步骤中,通过上一步骤获取的最大的计数值,即连续编程计数值seq_cnt和末位写数据对应的物理地址,通过数组表可以得到该数据块中首位写数据对应的物理地址。从而只需要读取一个4K单元格就可以得到整个数据块对应的映射关系。
图7a和图7b分别示出了根据本发明实施例的数组表中第一数组和第二数组的示意图。图7a的虚线框内示出了第一数组,图7b的虚线框内示出了第二数组。
如图7a和图7b,数组表包括第一数组和第二数组,图7a中,第一数组具有多个第一元素,各个第一元素的编号表征数据的物理地址,各个第一元素存储的值表征数据的编程顺序;将第一数组的编号和存储的值置换后得到的数组为第二数组,第二数组中各个第二元素的编号表征数据的编程顺序,各个第二元素存储的值表征数据的物理地址。第一数组的编号表征数据在字线中的相对地址,该相对地址例如包括物理页位置(Page_idx,即该物理页在page编程单元内的第几个page)、逻辑单元号(LUN)和页偏移(Frag),在第一数组中,每个第一元素对应于一个4K单元格,将各个单元格按照相对地址从前到后的顺序排序,并将排序后的各个单元格对应的第一元素的编号设置为从小到大,每个第一元素存储的值为其对应的单元格在如图6所示的一个字线中的编程顺序。
例如,第一元素A[0x4]对应于在字线中的相对地址为0<<3|1<<2|0的数据,其编程顺序为0x8,即,A[0x4]=0x8。将第一数组转换为第二数组之后,得到了第二元素B[0x8]=0x4,第二元素的编号表征编程顺序,第二元素B[0x8]存储的数据0x4表征其在字线中的相对地址0<<3|1<<2|0。即,在第一数组中,按照逻辑地址顺序即可查询到该逻辑地址对应的编程顺序,在第二数组中,编程顺序对应于每个第二元素的编号,根据编程顺序即可查找到其在字线中的相对地址。
进一步地,根据数组表可以获取每个数据块的多个数据中任意一个数据对应的物理地址及逻辑地址。当需要查询该数据块中的任意一个数据时,根据数组表,可以获得整个数据块中任意一个数据的逻辑地址和物理地址。例如,首个数据FAA0对应的第一数据的编号(物理地址)为0x8,根据A[0x8]=0x4,得到首个数据所在字线的编程顺序为0x4,根据FAA4与FAA0的编程顺序连续,可以得到FAA4的编程顺序为0x4往后4个,即为0x8。基于如图7b所示的第二数组,根据逻辑地址LAA4对应的编程顺序0x8,得到其所在字线中的相对物理地址0x4。若LAA4对应的物理地址已知,根据数组表也可以获取到首位写数据LAA0对应的物理地址。
在步骤S2033中,根据首位写数据的逻辑地址和物理地址之间的对应关系建立第二物理块中的最后一个数据块对应的映射表。
本步骤中,通过图7a和图7b建立的数组表,只读取最后一个4K单元格,可以快速获取到其对应的数据块中首位写数据的逻辑地址和物理地址,从而建立相应的映射表,恢复L2P映射关系,而不用挨个读取每个4K单元格,减少数据的读取数量,从而减少读取消耗时间。
在步骤S2034中,依次倒序读取第二物理块中每个数据块对应的末位写数据所在的4K单元格,直至读取到断电时存储在第一物理块中的映射表中最后一个写数据在第二物理块中的物理地址。
本步骤中,根据数组表可以得到最后一个数据块对应的首个写数据的物理地址,再倒序读取前一4K单元格,可以获取到另一个数据块对应的最后一个写数据(末位写数据)的连续编程计数值和逻辑地址,根据数组表,按照上述步骤又可以恢复该数据块对应的L2P映射关系。依次倒序读取该第二物理块的多个4K单元格,可以建立多个数据块的L2P映射表。直至读取到第一物理块中存储的映射表对应的末位写数据所在的物理地址,此时第二物理块的4K单元格的读取过程结束。
通过上述几个步骤就可以获取到断电时未在第一物理块中存储映射关系的写数据的逻辑地址和物理地址,以此来重建L2P映射表,极大地节省了上电建表的时间。
图8示出了根据本发明实施例的固态硬盘的示意性框图。
如图8所示,计算机系统100包括主机110和固态硬盘,固态硬盘包括控制器120和存储器130,存储器130例如为闪存芯片阵列。控制器120连接主机110与存储器130,将主机110的写数据存入存储器130,写数据包括多个数据块,每个数据块包括多个逻辑地址连续的数据。控制器120用于执行图1-图7b实施例中的L2P映射表重建方法。
控制器120包括主机接口121、处理器123、缓存芯片(例如为SRAM或DRAM,内部开辟多个缓存区用于存储映射信息)124和存储器控制器128。控制系统120的主机接口121连接至主机110,以传输写数据和读写指令。处理器123与主机接口121、缓存芯片124和存储器控制器128相连接,处理器123例如用于建立数组表和执行上述实施例中的L2P映射表重建方法,缓存芯片124例如存储L2P映射表和上述提到的多个映射表及映射信息,存储器控制器128控制写数据的传输和存储。处理器123还用于实现存储器控制的核心软件层,即FTL(Flash Translation Layer,闪存转换层),使得操作系统和文件系统能够像访问硬盘一样访问存储器。该FTL还有例如支持坏块管理、损耗均衡、垃圾回收、断电恢复、写平衡技术等特点。
闪存存储器130包括闪存芯片阵列。为了提高数据读写性能,控制器120的存储器控制器128可以经由多个通道(例如CH0和CH2)对闪存存储器130的闪存芯片进行读写。每个通道连接一组闪存芯片。每个闪存芯片包括多个物理块,每个物理块包括多个物理页,每个物理页包括多个4K单元格,多个映射表存储在多个4K单元格中。进一步地,存储器130包括第一物理块和第二物理块,第一物理块和第二物理块均包括多个4K单元格,第一物理块的每个4K单元格内均包括映射表存储区和垃圾回收信息存储区,映射表存储区用于存储写数据对应的映射表,垃圾回收信息存储区用于存储垃圾回收标志地址和垃圾回收指示数据;第二物理块的每个4K单元格内均包括数据存储区和计数值存储区,数据存储区用于存储写数据,计数值存储区用于存储计数值和逻辑地址。例如将物理块131作为第一物理块,物理块132作为第二物理块。
缓存区例如为SRAM或DRAM中开辟的缓存区域,用于存储映射信息,当缓存区的占用空间达到第一阈值时,将缓存区中的映射信息依次存储在第一物理块的多个4K单元格中。控制器120至少包括两个缓存区,两个缓存区切换使用。写数据过程中建立好的映射表例如先存储缓存芯片124中,然后再存储进存储器130的物理块131中,从而在固态硬盘发生异常断电再重新上电后,可以读取存储器130的物理块131中的映射表,以及读取物理块132的4K单元格中存储的写数据的物理地址和逻辑地址,根据这两部分来重建L2P映射表。
本发明提供的L2P映射表重建方法及固态硬盘在存储写数据时,将写数据对应的多个映射表存储在存储器的第一物理块的多个4K单元格中,而将写数据存储在存储器的第二物理块的多个4K单元格中,并且在一定条件下对第一物理块中的映射表进行垃圾回收,将垃圾回收标志地址同对应的映射表共同作为映射信息更新在第一物理块中,从而在异常掉电再重新上电后能通过读取第一物理块的最后一个4K单元格获取到垃圾回收标志地址,定位到最新执行完垃圾回收的映射表所在的4K单元格,之后再顺序读取第一物理块中的各个4K单元格,获得映射表,以此恢复L2P映射表的一部分,通过读取第二物理块中的多个4K单元格,获取到未在第一物理块的映射表中存储映射关系的写数据,以此恢复L2P映射表的另一部分,从而恢复完整的L2P映射表。通过这样的重建方法,将映射表与写数据同时存储在存储器,且在映射表存储达到一定量时进行垃圾回收,减轻固态硬盘的存储压力,提升运行速度和性能,同时通过垃圾回收映射表也可以减少上电后对映射表所在4K单元格的读取次数,提升恢复L2P映射表的速度,不仅节省了上电建表的时间,还同时降低了上电功耗,提高了系统的数据管理效率和数据操作性能。
本领域技术人员可以理解,根据本发明的数据处理系统的各个模块或单元可以通过硬件、固件或软件实现。软件例如包括采用JAVA、C/C++/C#、SQL等各种编程语言形成的编码程序。虽然在方法以及方法图例中给出本发明实施例的步骤以及步骤的顺序,但是所述步骤实现规定的逻辑功能的可执行指令可以重新组合,从而生成新的步骤。所述步骤的顺序也不应该仅仅局限于所述方法以及方法图例中的步骤顺序,可以根据功能的需要随时进行调整。例如将其中的某些步骤并行或按照相反顺序执行。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
依照本发明的实施例如上文所述,这些实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施例。显然,根据以上描述,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地利用本发明以及在本发明基础上的修改使用。本发明仅受权利要求书及其全部范围和等效物的限制。
Claims (18)
1.一种L2P映射表重建方法,应用于固态硬盘中,所述固态硬盘包括存储器,所述存储器包括第一物理块和第二物理块,所述第一物理块和所述第二物理块均包括多个4K单元格,所述重建方法包括:
在异常断电再上电的情况下,读取所述第一物理块中最后一个所述4K单元格,得到其中存储的映射信息,所述映射信息包括映射表和垃圾回收标志地址;
从所述垃圾回收标志地址在所述第一物理块中所指示的所述4K单元格的下一个4K单元格开始,依次顺序读取所述第一物理块中的每个所述4K单元格,获取其中存储的所述映射信息,得到多个映射表;
依次读取所述第二物理块中的多个所述4K单元格,获取其中存储的多个写数据的逻辑地址,所述多个写数据为断电时未在所述第一物理块中存储映射关系的写数据;
根据所述多个映射表以及所述多个写数据对应的逻辑地址和物理地址建立所述L2P映射表,
其中,所述第一物理块的多个所述4K单元格均用于存储写数据对应的所述映射信息,所述第二物理块的多个所述4K单元格均用于存储写数据,所述垃圾回收标志地址所指示的所述4K单元格为刚执行完垃圾回收的所述映射表所在的4K单元格。
2.根据权利要求1所述的L2P映射表重建方法,其中,所述映射表表征一个数据块中逻辑地址连续的多个写数据的地址映射关系,
每个所述映射表均包括对应所述数据块中首位写数据对应的物理地址和逻辑地址以及连续编程计数值,根据所述连续编程计数值和所述首位写数据对应的物理地址,利用预先存储的数组表计算以得到所述数据块中每个所述写数据的物理地址,其中,所述数组表表征所述写数据的编程顺序和物理地址之间的关联关系。
3.根据权利要求2所述的L2P映射表重建方法,其中,所述数组表包括第一数组和第二数组,所述第一数组具有多个第一元素,各个所述第一元素的编号表征所述数据的物理地址,各个所述第一元素存储的值表征所述数据的所述编程顺序;
将所述第一数组的所述编号和所述存储的值置换后得到的数组为所述第二数组,所述第二数组中各个第二元素的编号表征所述数据的所述编程顺序,各个所述第二元素存储的值表征所述数据的所述物理地址。
4.根据权利要求2所述的L2P映射表重建方法,其中,所述映射信息还包括垃圾回收指示数据,所述垃圾回收指示数据为0表示对应的所述映射表未进行垃圾回收,所述垃圾回收指示数据为1表示对应的所述映射表已执行垃圾回收。
5.根据权利要求4所述的L2P映射表重建方法,其中,依次读取所述第二物理块中的多个所述4K单元格,获取其中存储的多个写数据的逻辑地址包括:
倒序读取所述第一物理块中的所述4K单元格,直至读取到所述垃圾回收指示数据为0的所述4K单元格,获取其中存储的所述映射表;
根据所述映射表获取对应所述数据块中的最后一个所述写数据在所述第二物理块中的物理地址;
从所述最后一个所述写数据对应的所述物理地址开始,依次向后读取所述第二物理块中的多个所述4K单元格,获取所述多个写数据对应的逻辑地址。
6.根据权利要求2所述的L2P映射表重建方法,其中,依次读取所述第二物理块中的多个所述4K单元格,获取其中存储的多个写数据的逻辑地址包括:
根据所述多个映射表建立所述L2P映射表的第一部分;
根据所述第一部分获取断电时存储在所述映射表中的最后一个所述写数据在所述第二物理块中的物理地址;
从所述最后一个所述写数据对应的所述物理地址开始,依次向后读取所述第二物理块中的多个所述4K单元格,获取所述多个写数据对应的逻辑地址。
7.根据权利要求2所述的L2P映射表重建方法,其中,每个所述数据块中的所述多个写数据按照连续的编程顺序存储在所述第二物理块的多个所述4K单元格中,各所述4K单元格内还存有每个所述写数据对应的逻辑地址和计数值,所述连续编程计数值为所述数据块中最大的所述计数值。
8.根据权利要求7所述的L2P映射表重建方法,其中,依次读取所述第二物理块中的多个所述4K单元格,获取其中存储的多个写数据的逻辑地址包括:
读取所述第二物理块中的最后一个4K单元格,得到其中存储的末位写数据的逻辑地址和所述连续编程计数值;
根据所述连续编程计数值和所述末位写数据的物理地址,利用所述数组表计算得到所述首位写数据的物理地址;
根据所述首位写数据的逻辑地址和物理地址之间的对应关系建立所述第二物理块中的最后一个数据块对应的映射表;
依次倒序读取所述第二物理块中每个所述数据块对应的所述末位写数据所在的所述4K单元格,直至读取到断电时存储在所述第一物理块中的映射表中最后一个所述写数据在所述第二物理块中的物理地址。
9.根据权利要求2所述的L2P映射表重建方法,其中,每个所述数据块以及每个所述映射表通过下述存储方式存储:
接收写数据,所述写数据包括多个数据块,每个所述数据块中的多个写数据的逻辑地址连续;
将每个数据块中的所述多个写数据按照连续的编程顺序写入所述第二物理块的多个4K单元格中,同时存储每个所述写数据对应的逻辑地址和计数值,所述计数值按照所述编程顺序逐个累加,所述数据块中最大的所述计数值记为连续编程计数值;
根据每个所述数据块中所述首位写数据对应的物理地址和逻辑地址以及连续编程计数值建立每个所述数据块对应的所述映射表;
按照多个所述数据块写入所述存储器的时间顺序,将多个所述数据块对应的多个所述映射表及对应的所述垃圾回收标志地址依次存储在所述第一物理块的多个所述4K单元格中。
10.根据权利要求9所述的L2P映射表重建方法,其中,每个所述数据块中的多个所述写数据的编程顺序连续且逻辑地址连续,物理地址不完全连续。
11.根据权利要求9所述的L2P映射表重建方法,其中,所述存储方式还包括:
对所述第一物理块中的多个所述映射表依次执行垃圾回收,将有效的映射表及其对应的所述垃圾回收标志地址依次存储在所述第一物理块的多个所述4K单元格中;
按照先后顺序依次在所述第一物理块的多个所述4K单元格中存储所述数据块对应的所述映射信息和所述有效的映射表对应的所述映射信息。
12.根据权利要求9所述的L2P映射表重建方法,其中,按照多个所述数据块写入所述存储器的时间顺序,将多个所述数据块对应的多个所述映射表及对应的所述垃圾回收标志地址依次存储在所述第一物理块的多个所述4K单元格中的步骤包括:
按照多个所述数据块写入所述存储器的时间顺序,将多个所述数据块对应的多个所述映射表及对应的所述垃圾回收标志地址作为所述映射信息依次存储在所述固态硬盘的缓存区;
当所述缓存区的占用空间达到第一阈值时,将所述缓存区中的所述映射信息依次存储在所述第一物理块的多个所述4K单元格中。
13.根据权利要求11所述的L2P映射表重建方法,其中,当存储多个所述映射表的所述第一物理块的使用数量达到第二阈值时,触发垃圾回收,并开始将有效的垃圾回收标志地址存储在所述4K单元格内。
14.根据权利要求1所述的L2P映射表重建方法,其中,所述垃圾回收标志地址为空地址时表征所述映射表未进行垃圾回收,所述垃圾回收标志地址为非空地址时指示执行垃圾回收的所述映射表在所述第一物理块中的位置。
15.根据权利要求14所述的L2P映射表重建方法,其中,在所述垃圾回收标志地址为空地址的情况下,
所述从所述垃圾回收标志地址在所述第一物理块中所指示的所述4K单元格的下一个4K单元格开始,依次顺序读取所述第一物理块中的每个所述4K单元格,获取其中存储的所述映射信息,得到多个映射表的步骤包括:
按照存储顺序从所述第一物理块的第一个所述4K单元格开始,依次读取所述第一物理块中的每个所述4K单元格,获取其中存储的所述映射信息,得到多个映射表。
16.一种固态硬盘,用于实现权利要求1-15中任一项所述的L2P映射表重建方法,所述固态硬盘包括:
控制器,与主机连接,接收主机的写数据,所述写数据包括多个数据块,每个数据块包括多个写数据;
存储器,连接所述控制器,存储所述写数据,
其中,所述存储器包括第一物理块和第二物理块,所述第一物理块和所述第二物理块均包括多个4K单元格,
所述第一物理块的每个所述4K单元格内均包括映射表存储区和垃圾回收信息存储区,所述映射表存储区用于存储所述写数据对应的映射表,所述垃圾回收信息存储区用于存储垃圾回收标志地址和垃圾回收指示数据;
所述第二物理块的每个所述4K单元格内均包括数据存储区和计数值存储区,所述数据存储区用于存储所述写数据,所述计数值存储区用于存储所述写数据对应的计数值和逻辑地址。
17.根据权利要求16所述的固态硬盘,其中,所述控制器包括缓存芯片,所述缓存芯片为SRAM或DRAM,所述缓存芯片内开辟存储区域作为缓存区,用于存储所述映射信息,当所述缓存区的占用空间达到第一阈值时,将所述缓存区中的所述映射信息依次存储在所述第一物理块的多个所述4K单元格中。
18.根据权利要求17所述的固态硬盘,其中,所述控制器至少包括两个缓存区,两个所述缓存区切换使用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210033576.2A CN116467224B (zh) | 2022-01-12 | 2022-01-12 | L2p映射表重建方法及固态硬盘 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210033576.2A CN116467224B (zh) | 2022-01-12 | 2022-01-12 | L2p映射表重建方法及固态硬盘 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116467224A CN116467224A (zh) | 2023-07-21 |
CN116467224B true CN116467224B (zh) | 2023-10-31 |
Family
ID=87172239
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210033576.2A Active CN116467224B (zh) | 2022-01-12 | 2022-01-12 | L2p映射表重建方法及固态硬盘 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116467224B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279366A (zh) * | 2013-04-24 | 2013-09-04 | 中国科学院苏州纳米技术与纳米仿生研究所 | 固态硬盘及掉电后基于固态硬盘快速开机的方法 |
CN107562644A (zh) * | 2017-08-11 | 2018-01-09 | 记忆科技(深圳)有限公司 | 一种固态硬盘映射表的压缩方法 |
CN109213690A (zh) * | 2018-09-21 | 2019-01-15 | 浪潮电子信息产业股份有限公司 | 一种l2p表的重建方法及相关装置 |
CN110704337A (zh) * | 2019-09-23 | 2020-01-17 | 深圳忆联信息系统有限公司 | 基于固态硬盘的映射表重建方法、装置和计算机设备 |
CN111722807A (zh) * | 2020-06-20 | 2020-09-29 | 苏州浪潮智能科技有限公司 | 固态硬盘垃圾回收方法、装置、计算机设备及存储介质 |
CN112379830A (zh) * | 2020-11-03 | 2021-02-19 | 成都佰维存储科技有限公司 | 有效数据位图的创建方法、装置、存储介质及电子设备 |
CN112860594A (zh) * | 2021-01-21 | 2021-05-28 | 华中科技大学 | 一种固态盘地址重映射方法、设备及固态盘 |
CN113296694A (zh) * | 2020-11-13 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 一种上电重建方法及装置和固态硬盘 |
CN113419675A (zh) * | 2021-06-11 | 2021-09-21 | 联芸科技(杭州)有限公司 | 用于存储器的写操作方法及读操作方法 |
CN113590502A (zh) * | 2021-07-23 | 2021-11-02 | 合肥康芯威存储技术有限公司 | 一种非挥发性记忆体存储设备的垃圾回收方法与垃圾回收系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6732684B2 (ja) * | 2017-03-15 | 2020-07-29 | キオクシア株式会社 | 情報処理装置、ストレージデバイスおよび情報処理システム |
TWI643066B (zh) * | 2018-01-15 | 2018-12-01 | 慧榮科技股份有限公司 | 用來於一記憶裝置中重新使用關於垃圾收集的一目的地區塊之方法、記憶裝置及其控制器以及電子裝置 |
US20210382828A1 (en) * | 2020-06-03 | 2021-12-09 | Alibaba Group Holding Limited | Method and system for facilitating acceleration of a mapping table reconstruction |
-
2022
- 2022-01-12 CN CN202210033576.2A patent/CN116467224B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279366A (zh) * | 2013-04-24 | 2013-09-04 | 中国科学院苏州纳米技术与纳米仿生研究所 | 固态硬盘及掉电后基于固态硬盘快速开机的方法 |
CN107562644A (zh) * | 2017-08-11 | 2018-01-09 | 记忆科技(深圳)有限公司 | 一种固态硬盘映射表的压缩方法 |
CN109213690A (zh) * | 2018-09-21 | 2019-01-15 | 浪潮电子信息产业股份有限公司 | 一种l2p表的重建方法及相关装置 |
CN110704337A (zh) * | 2019-09-23 | 2020-01-17 | 深圳忆联信息系统有限公司 | 基于固态硬盘的映射表重建方法、装置和计算机设备 |
CN111722807A (zh) * | 2020-06-20 | 2020-09-29 | 苏州浪潮智能科技有限公司 | 固态硬盘垃圾回收方法、装置、计算机设备及存储介质 |
CN112379830A (zh) * | 2020-11-03 | 2021-02-19 | 成都佰维存储科技有限公司 | 有效数据位图的创建方法、装置、存储介质及电子设备 |
CN113296694A (zh) * | 2020-11-13 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 一种上电重建方法及装置和固态硬盘 |
CN112860594A (zh) * | 2021-01-21 | 2021-05-28 | 华中科技大学 | 一种固态盘地址重映射方法、设备及固态盘 |
CN113419675A (zh) * | 2021-06-11 | 2021-09-21 | 联芸科技(杭州)有限公司 | 用于存储器的写操作方法及读操作方法 |
CN113590502A (zh) * | 2021-07-23 | 2021-11-02 | 合肥康芯威存储技术有限公司 | 一种非挥发性记忆体存储设备的垃圾回收方法与垃圾回收系统 |
Non-Patent Citations (2)
Title |
---|
Remap-SSD: Safely and Efficiently Exploiting SSD Address Remapping to Eliminate Duplicate Writes;You Zhou et al;the Proceedings of the 19th USENIX Conference on File and Storage Technologies;187-202 * |
基于软件定义的闪存存储系统构建及性能优化技术研究;张建权;中国博士学位论文全文数据库 信息科技辑;I137-7 * |
Also Published As
Publication number | Publication date |
---|---|
CN116467224A (zh) | 2023-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10909030B2 (en) | Enhanced trim command support for solid state drives | |
TWI424316B (zh) | 控制器、資料儲存裝置、及程式產品 | |
KR101965549B1 (ko) | 고체 상태 드라이브에서 자유 공간 어카운트와 함께 재구축되는 2 스테이지 파워 온 맵을 위한 방법들, 디바이스들, 및 시스템들 | |
CN108121503B (zh) | 一种NandFlash地址映射及块管理方法 | |
US9792067B2 (en) | Trim command processing in a solid state drive | |
US8037112B2 (en) | Efficient access of flash databases | |
CN102419735B (zh) | 存储器系统 | |
KR101257989B1 (ko) | 인덱스 페이지 복구 | |
US8041884B2 (en) | Controller for non-volatile memories and methods of operating the memory controller | |
KR100843543B1 (ko) | 플래시 메모리 장치를 포함하는 시스템 및 그것의 데이터복구 방법 | |
US8612692B2 (en) | Variable write back timing to nonvolatile semiconductor memory | |
US9489296B1 (en) | Methods, devices and systems for hardware-based garbage collection in solid state drives | |
TWI474167B (zh) | 以頁面為基礎管理快閃儲存裝置 | |
KR102252419B1 (ko) | 플래시 메모리 장치를 위한 주소변환 시스템 및 그 방법 | |
CN104268094A (zh) | 一种优化的闪存地址映射方法 | |
KR20070096429A (ko) | 빠른 마운팅을 지원하는 낸드 플래시 메모리에 적용되는파일시스템 | |
KR20100115090A (ko) | 버퍼를 고려한 가비지 컬렉션 기법 | |
CN109669889B (zh) | 一种轻量型Nor Flash闪存控制方法和装置 | |
US20240020240A1 (en) | Method for storing l2p table, system, device, and medium | |
CN113419675B (zh) | 用于存储器的写操作方法及读操作方法 | |
US20090193221A1 (en) | Method and apparatus for memory management in a non-volatile memory system using a block table | |
CN111966611A (zh) | 具有逻辑转物理地址架构的spi闪存控制芯片 | |
CN114036079B (zh) | 映射表压缩方法、系统、存储器控制器、固态硬盘及数据读取方法 | |
KR101077901B1 (ko) | 로그 블록 단위 매핑 기법을 이용한 플래시 메모리 관리 장치 및 방법 | |
CN116467224B (zh) | L2p映射表重建方法及固态硬盘 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |