CN108536619B - 快速恢复ftl表的方法与装置 - Google Patents
快速恢复ftl表的方法与装置 Download PDFInfo
- Publication number
- CN108536619B CN108536619B CN201710126446.2A CN201710126446A CN108536619B CN 108536619 B CN108536619 B CN 108536619B CN 201710126446 A CN201710126446 A CN 201710126446A CN 108536619 B CN108536619 B CN 108536619B
- Authority
- CN
- China
- Prior art keywords
- ftl
- log
- block
- frame
- frames
- 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
Images
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/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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- 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/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/22—Employing cache memory using specific memory technology
- G06F2212/222—Non-volatile memory
- G06F2212/2228—Battery-backed RAM
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种快速恢复FTL表的方法与装置。所提供的快速恢复FTL表的方法包括:第一CPU获取属于第一FTL块的FTL帧,以及获取属于第一FTL块的日志帧,并将属于第一FTL块的FTL帧与目志帧分别存储到存储器的不同区域;第二CPU从所述存储器中获取属于第一FTL块的日志帧,并利用日志帧更新第一FTL块。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种快速恢复FTL表的方法与装置。
背景技术
随着科技的进步,对于电子设备的存储能力和反应速度提出了越来越高的要求。图1示出了现有技术中的固态存储设备(Solid Storage Device,SSD)的框图。
固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial AdvancedTechnology Attachment,串行高级技术附件)、SCSI(Small Computer System Interface,小型计算机***接口)、SAS(Serial Attached SCSI,串行连接SCSI)、IDE(IntegratedDrive Electronics,集成驱动器电子)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component Interconnect Express,PCIe,高速***组件互联)、NVMe(NVMExpress,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM(非易失存储器,Non-Volatile Memory)芯片105以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)110。NAND闪存、相变存储器、FeRAM、MRAM等是常见的NVM。接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。控制部件104用于控制在接口103、NVM芯片105以及固件存储器110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。可通过软件、硬件、固件或其组合的多种方式实现控制部件104。控制部件104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(Application Specific Integrated Circuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理主机IO命令。控制部件104还耦合到DRAM 110,并可访问DRAM 110的数据。在DRAM可存储FTL表和/或缓存的主机IO命令的数据。
控制部件104包括闪存接口控制器(或称为闪存通道控制器)。闪存接口控制器耦合到NVM芯片105,并以遵循NVM芯片105的接口协议的方式向NVM芯片105发出命令,以操作NVM芯片105,并接收从NVM芯片105输出的命令执行结果。NVM芯片105的接口协议包括“Toggle”、“ONFI”等公知的接口协议或标准。
存储器目标(Target)是NAND闪存封装内的共享芯片使能(CE,Chip Enable)信号的一个或多个逻辑单元(LUN,Logic UNit)。每个逻辑单元具有逻辑单元号(Logic UnitNumber)。NAND闪存封装内可包括一个或多个管芯(Die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(Plane)。逻辑单元内的多个平面可以并行存取,而NAND闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。在可从http:// www.micron.com/~/media/Documents/Products/Other%20Documents/ONFI3_ 0Gold.ashx获得的“Open NAND Flash Interface Specification(Revision 3.0)”中,提供了关于目标(target)、逻辑单元、LUN、平面(Plane)的含义,其为现有技术的一部分。
固态存储设备中包括多个NVM芯片。每个NVM芯片包括一个或多个管芯(DIE)或逻辑单元(LUN,Logic UNit)。管芯或逻辑单元之间可以并行响应读写操作。在同一管芯或逻辑单元上的多个读、写或擦除操作顺序执行。
存储介质上通常按页来存储和读取数据。而按块来擦除数据。块包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。物理页中可以包括多个数据帧(data frame),数据帧具有指定的尺寸,例如4096或4416字节。
在固态存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作***等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。固态存储设备的FTL表具有较大的尺寸,例如若干GB级。而在固态存储设备关闭时,需要完整地保存FTL表,在固态存储设备启动时,需要完成FTL完全加载。
FTL表包括多个FTL表条目(或称表项)。在一个实施例中,每个FTL表条目中记录了一个逻辑页地址与一个物理页的对应关系。在另一个例子中,每个FTL表条目中记录了连续的多个逻辑页地址与连续的多个物理页的对应关系。在又一个实施例中,每个FTL表条目中记录了逻辑块地址与物理块地址的对应关系。在依然又一个实施例中,FTL表中记录逻辑块地址与物理块地址的映射关系,和/或逻辑页地址与物理页地址的映射关系。
在处理来自主机的读命令时,固态存储设备利用读命令中携带的逻辑地址从FTL表中获得对应的物理地址,并依据物理地址向NVM芯片发出读请求,并接收NVM芯片响应于读请求输出的数据。在处理来自主机的写命令时,固态存储设备为写命令分配物理地址,在FTL表中记录写命令的逻辑地址与分配的物理地址的对应关系,并依据分配的物理地址向NVM芯片发出写请求。
现有技术中,在固态存储设备的每个物理页中附加地存储该物理页所对应的逻辑地址。在固态存储设备启动时,需要访问所有物理页,以获得每个物理页所对应的逻辑地址,并重建FTL表。然而这样的操作将需要大量时间,并导致固态存储设备启动过程耗时很长。
一些固态存储设备中还提供备用电源,当发生意外断电时,由备用电源向存储设备提供临时的电能,用于备份元数据以及处理尚未完成的命令。备用电源包括超级电容、铝电容、钽聚合物电容、锂电池等。
发明内容
有鉴于此,本申请提供一种快速恢复FTL表的方法与装置。
根据本发明的第一方面,提供了根据本发明的第一方面的第一基于FTL表的日志生成方法,包括:记录操作请求对应的逻辑地址与物理地址;依据操作请求所对应的逻辑地址与物理地址生成日志帧;使用第一FTL块的部分生成FTL帧,其中FTL表包括多个FTL块;在NVM上存储生成的FTL帧和日志帧,其中所述第一FTL块的多个日志帧组成日志帧链表而所述第一FTL块的多个FTL帧组成FTL帧链表。
根据本发明的第一方面的第一基于FTL表的日志生成方法,提供了根据本发明的第一方面的第二基于FTL表的日志生成方法,其中,为向NVM写入不同于FTL帧或日志帧的其他帧,依据不同帧的优先级来选择将FTL帧、日志帧与其他帧的存入顺序。
根据本发明的第一方面的第一、第二或第三基于FTL表的日志生成方法,提供了根据本发明的第一方面的第三基于FTL表的日志生成方法,其中,响应于识别到第二FTL块的更新频率高于第一FTL块的更新频率,优先向NVM写入属于第二FTL块的FTL帧与日志帧。
根据本发明的第一方面的第一基于FTL表的日志生成方法,提供了根据本发明的第一方面的第四基于FTL表的日志生成方法,其中,响应于识别到第二FTL块对应只读存储区,而不为第二FTL块生成FTL帧。
根据本发明的第一方面的第一至第四之一基于FTL表的日志生成方法,提供了根据本发明的第一方面的第五基于FTL表的日志生成方法,还包括:依据对坏块表的更新生成坏块表更新帧;使用坏块表块的部分生成坏块表数据帧,其中坏块表包括多个坏块表块;在NVM上存储生成的坏块表更新帧和坏块表数据帧,其中所述坏块表块的多个坏块表更新帧组成坏块表更新帧链表而所述坏块表块的多个坏块表数据帧组成坏块表数据帧链表;以及以比向NVM写入所述坏块表块的坏块表更新帧和坏块表数据帧高的优先级向NVM写入属于第二FTL块的FTL帧与日志帧。
根据本发明的第一方面的第一至第四之一基于FTL表的日志生成方法,提供了根据本发明的第一方面的第六基于FTL表的日志生成方法,还包括:依据对主机可访问的易失性存储区域的更新生成第一类帧;使用主机可访问的易失性存储区域块的部分生成第二类帧,其中易失性存储区域包括多个易失性存储区域块;在NVM上存储生成的第一类帧和第二类帧,其中所述易失性存储区域块的第一类帧组成第一类帧链表,而所述易失性存储区域块的第二类帧组成第二类帧链表。
根据本发明的第一方面的第六基于FTL表的日志生成方法,提供了根据本发明的第一方面的第七基于FTL表的日志生成方法,还包括:以比向NVM写入所述易失性存储区域块的第一类帧和第二类帧高的优先级向NVM写入属于第二FTL块的FTL帧与日志帧。
根据本发明的第二方面,提供了根据本发明的第二方面的第一提供非易失RAM的方法,包括:依据对主机可访问的易失性存储区域的更新生成第一类帧,其中所述易失性存储区域作为向主机提供的非易失RAM;使用主机可访问的易失性存储区域块的部分生成第二类帧,其中易失性存储区域包括多个易失性存储区域块;在NVM上存储生成的第一类帧和第二类帧,其中所述易失性存储区域块的第一类帧组成第一类帧链表,而所述易失性存储区域块的第二类帧组成第二类帧链表。
根据本发明的第三方面,提供了根据本发明的第三方面的第一重建非易失RAM的方法,包括:获取易失性存储区域块的第一类帧与第二类帧的存储位置;读取属于所述易失性存储区域块的多个第一类帧与多个第二类帧;利用所述多个第一类帧重建所述易失性存储区域块;以及利用所述多个第二类帧更新所述易失性存储区域块,其中,其中所述易失性存储区域作为向主机提供的非易失RAM,以及易失性存储区域包括多个易失性存储区域块。
根据本发明的第四方面,提供了根据本发明的第四方面的第一基于FTL表的日志更新方法,包括:确定更新第一FTL块,其中第一FTL块已被完整存储到NVM,并且属于第一FTL块的最后FTL帧的具有第一地址,而属于第一FTL块的最初日志帧具有第二地址;记录距当前时间最近的已被写入NVM的属于第一FTL块的日志帧的第三地址;使用第一FTL块的部分生成FTL帧;记录当前操作请求所对应的逻辑地址与物理地址生成日志帧;将FTL帧和日志帧写入NVM;响应于异常事件发生,在异常事件发生时,距当前时间最近的已被写入NVM的属于第一FTL块的日志帧的第五地址,若所述第一FTL块尚未被再次完整存储到NVM,在启动页中记录第一地址、第二地址与第五地址。
根据本发明的第四方面的第一基于FTL表的日志更新方法,提供了根据本发明的第四方面的第二基于FTL表的日志更新方法,其中,响应于异常事件发生,若所述第一FTL块已被再次完整存储到NVM,且属于被再次存储的第一FTL块的最后FTL帧的具有第四地址,属于被再次存储的第一FTL块的最后日志帧的具有第五地址,在启动页中记录第四地址、第三地址与第五地址。
根据本发明的第四方面的第一或第二基于FTL表的日志更新方法,提供了根据本发明的第四方面的第三基于FTL表的日志更新方法,其中,在属于第一FTL块的日志帧数量超过阈值,或者在预定时间周期,或者在日志存储区的空闲存储空间低于阈值,或者响应于用户的指示,确定更新第一FTL块。
根据本发明的第四方面的第一、第二或第三基于FTL表的日志更新方法,提供了根据本发明的第四方面的第四基于FTL表的日志更新方法,其中多个FTL块已被完整存储到NVM时,按照按照多个FTL块的优先级确定更新第一FTL块。
根据本发明的第五方面,提供了根据本发明第五方面的第一快速恢复FTL表的方法,包括:第一CPU获取属于第一FTL块的FTL帧,以及获取属于第一FTL块的日志帧,并将属于第一FTL块的FTL帧与日志帧分别存储到存储器的不同区域;第二CPU从所述存储器中获取属于第一FTL块的日志帧,并利用日志帧更新第一FTL块。
根据本发明的第五方面的第一快速恢复FTL表的方法,提供了根据本发明第五方面的第二快速恢复FTL表的方法,其中,在每个日志帧的元数据中记录有与该日志帧属于相同FTL块的前一日志帧的存储地址。
根据本发明的第五方面的第二快速恢复FTL表的方法,提供了根据本发明第五方面的第三快速恢复FTL表的方法,其中,第一CPU从指定存储地址中获取属于第一FTL块的最后生成的日志帧,并从该存储地址中读出日志帧;以及第一CPU从日志帧的元数据中获取与其属于相同FTL块的前一日志帧的第一存储地址,并从第一存储地址中读出前一日志帧;直到获取了属于该FTL块的所有日志帧。
根据本发明的第五方面的第一、第二或第三快速恢复FTL表的方法,提供了根据本发明第五方面的第四快速恢复FTL表的方法,还包括:响应于将属于第一FTL块的所有日志帧均存储到存储器中,向第一CPU发送属于第一FTL块的所有日志帧读取完成的消息。
根据本发明的第五方面的第一至第四任一项的快速恢复FTL表的方法,提供了根据本发明第五方面的第五快速恢复FTL表的方法,还包括:还包括:响应于将属于第一FTL块的所有FTL帧与所有日志帧均存储到存储器中,第一CPU指示由第二CPU更新第一FTL块。
根据本发明的第五方面的第一至第四任一项的快速恢复FTL表的方法,提供了根据本发明第五方面的第六快速恢复FTL表的方法,还包括:响应于将属于第一FTL块的所有日志帧均存储到存储器中,第一CPU指示由第二CPU更新第一FTL块。
根据本发明的第五方面的第五或第六快速恢复FTL表的方法,提供了根据本发明第五方面的第七快速恢复FTL表的方法,其中第二CPU对第一FTL块的更新包括:第二CPU从存储器中的属于第一FTL块的所有日志帧中依次提取日志条目;以及第二CPU根据每个日志条目中记录的逻辑地址,在存储器中的第一FTL块中确定与该逻辑地址对应的FTL表条目,并用日志条目中与该逻辑地址对应的物理地址更新所确定的FTL表条目中的物理地址。
根据本发明的第五方面的第七快速恢复FTL表的方法,提供了根据本发明第五方面的第八快速恢复FTL表的方法,其中对属于同一FTL块的多个日志帧的多个日志条目,第二CPU按照日志条目生成的顺序,从前向后或从后向前依次用每个日志条目更新FTL块。
根据本发明的第五方面的第七或第八快速恢复FTL表的方法,提供了根据本发明第五方面的第九快速恢复FTL表的方法,还包括:第二CPU还为每一个被更新的FTL条目设置标记。
根据本发明的第五方面的第九快速恢复FTL表的方法,提供了根据本发明第五方面的第十快速恢复FTL表的方法,当用所提取的日志条目依次更新FTL条目时,若待更新的FTL条目上存在标记,则第二CPU不使用所提取的日志条目来更新FTL块。
根据本发明的第五方面的第九或第十快速恢复FTL表的方法,提供了根据本发明第五方面的第十一快速恢复FTL表的方法,对第一FTL块的更新全部完成后,第二CPU清除第一FTL块的所有被设置的标记。
根据本发明的第五方面的第五或第六快速恢复FTL表的方法,提供了根据本发明第五方面的第十二快速恢复FTL表的方法,其中第二CPU对第一FTL块的更新包括:第二CPU从存储器中提取属于第一FTL块的日志条目;以及第二CPU根据日志条目中记录的逻辑地址,在存储器中的第一FTL块中确定与该逻辑地址对应的FTL表条目,并用日志条目中与该逻辑地址对应的物理地址更新所确定的FTL表条目中的物理地址。
根据本发明的第五方面的第十二快速恢复FTL表的方法,提供了根据本发明第五方面的第十三快速恢复FTL表的方法,还包括:第二CPU确定下一日志条目在存储器中的地址,从存储器中获取下一日志条目。
根据本发明的第五方面的第十三快速恢复FTL表的方法,提供了根据本发明第五方面的第十四快速恢复FTL表的方法,其中对属于同一FTL块的多个日志帧的多个日志条目,第二CPU按照日志条目生成的顺序,从前向后或从后向前依次用日志条目更新FTL块。
根据本发明的第五方面的第一至第十四任一项的快速恢复FTL表的方法,提供了根据本发明第五方面的第十五快速恢复FTL表的方法,还包括:响应于将属于第二FTL块的所有FTL帧与日志帧均存储到存储器中,第一CPU指示由第三CPU更新第二FTL块。
根据本发明的第五方面的第一至第十四任一项的快速恢复FTL表的方法,提供了根据本发明第五方面的第十六快速恢复FTL表的方法,还包括:响应于将属于第二FTL块的日志帧存储到存储器中,第一CPU指示由第三CPU更新第二FTL块。
根据本发明的第五方面的第十五或第十六快速恢复FTL表的方法,提供了根据本发明第五方面的第十七快速恢复FTL表的方法,第二CPU更新第一FTL块的操作与第三CPU更新第二FTL块的操作同时进行。
根据本发明的第五方面的第十五、第十六或第十七快速恢复FTL表的方法,提供了根据本发明第五方面的第十八快速恢复FTL表的方法,第二CPU更新第一FTL块的操作与第一CPU获取属于第二FTL块的FTL帧以及获取属于第二FTL块的日志帧的操作同时进行。
根据本发明的第五方面的第十二至第十八任一项的快速恢复FTL表的方法,提供了根据本发明第五方面的第十九快速恢复FTL表的方法,还包括:第二CPU就第一FTL块的更新完成通知第一CPU。
根据本发明的第五方面的第十二至第十八任一项的快速恢复FTL表的方法,提供了根据本发明第五方面的第二十快速恢复FTL表的方法,还包括:响应于收到来自第二CPU的第一FTL块更新完成通知,第一CPU释放存储器中第一FTL块的目志帧占据的空间,并在存储器中分配空间用于存储第三FTL块的日志帧,以及获取属于第三FTL块的日志帧。
根据本发明的第五方面的第一至第二十任一项的快速恢复FTL表的方法,提供了根据本发明第五方面的第二十一快速恢复FTL表的方法,其中,使用不同的CPU更新不同的FTL块。
根据本发明的第五方面的第一至第二十一任一项的快速恢复FTL表的方法,提供了根据本发明第五方面的第二十二快速恢复FTL表的方法,还包括:第一CPU确定待重建的FTL块。
根据本发明的第六方面,提供了根据本发明的第五方面的第一基于FTL表的日志生成装置,包括:地址记录模块,用于记录操作请求对应的逻辑地址与物理地址;日志帧生成模块,用于依据操作请求所对应的逻辑地址与物理地址生成日志帧;FTL帧生成模块,用于使用第一FTL块的部分生成FTL帧,其中FTL表包括多个FTL块;存储模块,用于在NVM上存储生成的FTL帧和日志帧,其中所述第一FTL块的多个日志帧组成日志帧链表而所述第一FTL块的多个FTL帧组成FTL帧链表。
根据本发明的第七方面,提供了根据本发明的第七方面的第一基于FTL表的日志更新装置,包括:FTL块确定模块,用于确定更新第一FTL块,其中第一FTL块已被完整存储到NVM,并且属于第一FTL块的最后FTL帧的具有第一地址,而属于第一FTL块的最初日志帧具有第二地址;记录距当前时间最近的已被写入NVM的属于第一FTL块的日志帧的第三地址;FTL帧生成模块,用于使用第一FTL块的部分生成FTL帧;日志帧生成模块,用于记录当前操作请求所对应的逻辑地址与物理地址生成日志帧;NVM写入模块,用于将FTL帧和日志帧写入NVM;异常处理模块,用于响应于异常事件发生,在异常事件发生时,距当前时间最近的已被写入NVM的属于第一FTL块的日志帧的第五地址,若所述第一FTL块尚未被再次完整存储到NVM,在启动页中记录第一地址、第二地址与第五地址。
根据本发明的第八方面,提供了根据本发明的第八方面的第一固态硬盘,包括控制器、NVM、随机访问存储器;控制器分别耦合到NVM与随机访问存储器;NVM中包括日志区与用户数据区;在日志区中存储固态硬盘日志;在用户数据区存储用户数据;其中在存储器中存储有FTL表,所述FTL表包括多个FTL块;其中所述控制器用于执行根据本发明的第一方面、第二方面、第三方面、第四方面或第五方面的方法。
根据本发明的第九方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序代码使所述存储设备执行根据本发明第一方面的基于FTL表的目志生成方法。
根据本发明的第十方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序代码使所述存储设备执行根据本发明第二方面的提供非易失RAM的方法。
根据本发明的第十一方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序代码使所述存储设备执行根据本发明第三方面的重建非易失RAM的方法。
根据本发明的第十二方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序代码使所述存储设备执行根据本发明第四方面的基于FTL表的日志更新方法。
根据本发明的第十三方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序代码使所述存储设备执行根据本发明第五方面的快速恢复FTL表的方法。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是现有技术中固态存储设备的框图;
图2是根据本发明的一个实施例的固态硬盘日志的结构框图;
图3是是根据本发明的实施例的FTL表的结构框图;
图4是根据本发明的实施例的“写”日志的结构框图
图5是根据本发明的实施例的固态硬盘日志生成方法的流程图;
图6是根据本发明的另一个实施例的固态硬盘日志的结构框图;
图7是根据本发明的又一实施例的固态硬盘日志生成方法的流程图;
图8是根据本发明的实施例的利用日志重建FTL表方法的流程图;
图9是根据本发明实施例的固态硬盘的框图;
图10是根据本发明实施例的响应掉电事件而生成固态硬盘日志的示意图;
图11A是根据本发明又一实施例的FTL块更新的示意图;
图11B是根据本发明另一实施例的FTL块更新的示意图;
图12是根据本发明依然另一实施例的固态硬盘的框图;
图13是根据本发明的一个实施例的非易失RAM日志的结构框图;
图14是根据本发明的另一个实施例的非易失RAM日志的结构框图;
图15是根据本发明的又一实施例的固态硬盘日志生成方法的流程图;
图16是根据本发明的实施例的设备启动方法的流程图;
图17是根据本发明的依然又一个实施例的固态硬盘的框图;
图18是根据本发明实施例的FTL表重建过程的示意图;
图19是根据本发明实施例的多个CPU协作重建FTL表的流程图;
图20是根据本发明的又一实施例的多个CPU协作重建FTL表的流程图。
具体实施方式
本申请提出一种日志更新方法,通过在日志帧过长时,对日志区的FTL块进行更新,减少对日志区存储空间的占用,并且有效提高日志恢复的速度。
当然,实施本申请的任一技术方案必不一定需要同时达到以上的所有优点。
为了使本领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请保护的范围。
下面结合本申请附图进一步说明本申请具体实现。
图2是根据本发明的一个实施例的固态硬盘日志的结构框图。为了在固态硬盘启动时,能够快速重建FTL表,并且减少不必要的FTL块写入操作,根据本发明的实施例提供固态硬盘日志210。固态硬盘日志210存储在非易失存储介质中。参看图2,固态硬盘日志210包括FTL帧1-1(220)、FTL帧1-2(221)……FTL帧2-3(225),固态硬盘日志210还包括日志帧230……日志帧235。FTL帧是FTL块的组成部分,在图2的例子中,FTL块1包括3个FTL帧,由FTL帧1-1、FTL帧1-2与FTL帧1-1组成。日志帧0-1(230)是用于FTL块0(图2中未示出)的第一个日志帧,日志帧1-1(231)是用于FTL块1的第一个日志帧,日志帧1-3(232)是用于FTL块1的第2个日志帧,日志帧1-3(235)是用于FTL块1的第3个日志帧,日志帧2-1(233)是FTL块2的第1个日志帧,日志帧4-1(234)是用于FTL块4的第一个日志帧。在日志帧的元数据中记录信息,以指示该日志帧所属的FTL块。以及可选地,在日志帧(例如,日志帧1-3(232))的元数据中还记录属于相同FTL块的日志帧中的前一日志帧(例如,日志帧1-3(232)与日志帧1-1(231)同属于FTL块1,且日志帧1-3(232)的前一日志帧为日志帧1-1(231))。在图2的实施例中,FTL块占据固态硬盘中连续的物理地址空间(可选地,跳过坏块)。可选地,在固态硬盘中以非易失性存储介质提供日志存储区,FTL块存储在日志存储区的连续地址空间中。FTL帧与日志帧占据非易失存储介质的物理页,从而可在一次写操作中,将FTL帧与日志帧的组合写入非易失存储介质。
在根据本发明的一个实施例中,非易失存储介质是MLC(Multi Level Cell,多级单元)或TLC(Triple Level Cell,三级单元)非易失存储介质,将固态硬盘目志存储到非易失存储介质的数据页时,使用pSLC(pseudo-SLC,伪SLC)模式或SLC(Single Level Cell,单级单元)模式访问非易失存储介质,或者仅在LSB(Least Significant Bit,最低有效位)页上存储固态硬盘日志,以加快固态硬盘日志存储过程并获得较高的数据可靠性。作为另一种实施方式,在SLC非易失存储介质中存储固态硬盘日志。在依然又一个实施例中,在MLC非易失存储介质的LSB页中存储固态硬盘日志。
对应于各个FTL块的日志帧的数量可以是不同的。参看图2,在一段时间内不存在对FTL块3的更新,因而在固态硬盘日志210中不存在对应于FTL块3的日志帧。而存在对FTL块1的多次更新,因而用3个日志帧(231、232、235)记录对FTL块1的所有更新操作。
在图2的实施例中,固态硬盘日志210中按FTL块在FTL表中的内存地址的顺序存储FTL块(例如,FTL块2在FTL块1之后存储),而按日志帧生成的顺序记录日志帧。每个日志帧属于且仅属于一个FTL块。在一个例子中,在内存中缓存属于各个FTL块的“写”日志条目。在属于某个FTL块的“写”日志条目填满一个日志帧时,将日志帧写入固态硬盘日志。
以此方式,FTL表在固态硬盘日志中可以仅需保存一份完整记录,并在固态硬盘日志中记录对FTL表项的每次更新。在不发生FTL表项更新时,无需再将FTL表记录在固态硬盘日志中,从而节省了***资源。在发生FTL表项更新时,仅将对FTL表项的修改记录在日志帧中,减少了固态硬盘日志的写入数据量。
利用固态硬盘日志210,能够重建FTL表。由于存储设备掉电等原因,内存中的FTL表消失,需要读取固态硬盘日志210并重建FTL表。为重建FTL表,在固态硬盘的非易失性存储介质中,还存储各个FTL块在固态硬盘中的存储地址(物理地址),以及属于各个FTL块的最后日志帧的物理地址(可选地,也存储属于各个FTL块的最早日志帧的物理地址)。
在重建FTL表时,作为举例,获取在非易失存储介质中存储的FTL块1的FTL帧在固态硬盘日志210中的物理地址,并读取固态硬盘日志210中的FTL块1(包括FTL帧1-1、FTL帧1-2与FTL帧1-3)。接下来,获取属于FTL块1的最后日志帧(参看图2,日志帧1-3(235))的物理地址,并按照日志帧1-3(235)中按地址排列的日志条目的逆序,以日志帧1-3(235)中记录的日志条目更新内存中的FTL块1中的对应FTL条目。作为举例,以日志条目更新FTL块的对应条目的含义包括,以日志条目的逻辑地址为索引访问FTL块,并用日志条目的物理地址替换FTL块中被索引的FTL条目的物理地址。由于按照日志帧1-3(235)的逆序更新FTL块1,而日志帧1-3(235)中位置在后的日志条目包含了对FTL条目的在后的更新,因而在重建FTL表的过程中,对每个FTL条目仅需更新一次。为此目的,进一步地,还标记被更新的该FTL条目,使得在重建FTL表的过程中,对被更新过的FTL条目不再进行更新。用日志帧1-3(235)更新FTL块1之后,获取与日志帧1-3(235)同属于FTL块1的前一日志帧(参看图2,日志帧1-2(232));直到将FTL块1的所有日志帧(FTL帧1-1(231)、FTL帧1-2(232)与FTL帧1-3(235))都更新到FTL块1,或者FTL块1的所有条目都被更新。作为举例,在日志帧1-3(235)中记录了同属于FTL块1的前一FTL帧1-2(232)的地址。
作为本发明的另一举例,为重建FTL表,获取在非易失存储介质中存储的FTL块1的FTL帧在固态硬盘日志210中的物理地址,并读取固态硬盘日志210中的FTL块1(包括FTL帧1-1、FTL帧1-2与FTL帧1-3)。接下来,获取属于FTL块1的第一日志帧(参看图2,日志帧1-1(231))的物理地址,并按照日志帧1-1(231)中按地址排列的日志条目的顺序,以日志帧1-1(231)中记录的日志条目更新内存中的FTL块1中的对应FTL条目。作为另一举例,以日志条目更新FTL块的对应条目的含义包括,以日志条目的逻辑地址为索引访问FTL块,并用日志条目的物理地址替换FTL块中被索引的FTL条目的物理地址。由于按照日志帧1-1(231)的顺序更新FTL块1,因而在重建FTL表的过程中,需用每个日志条目对FTL块进行更新。用日志帧1-1(231)更新FTL块1之后,获取与日志帧1-1(231)同属于FTL块1的后一日志帧(参看图2,日志帧1-2(232));直到将FTL块1的所有日志帧(FTL帧1-1(231)、FTL帧1-2(232)与FTL帧1-3(235))都更新到FTL块1。作为举例,在日志帧1-1(231)中记录了同属于FTL块1的下一FTL帧1-2(232)的地址。
图3是根据本发明的实施例的FTL表的结构框图。FTL表包括多个FTL表条目(或称表项)。在一个实施例中,每个FTL表条目中记录了一个逻辑页地址与一个物理页的对应关系。在又一个实施例中,每个FTL表条目中记录了逻辑块地址与物理块地址的对应关系。在依然又一个实施例中,FTL表中记录逻辑块地址与物理块地址的映射关系,和/或逻辑页地址与物理页地址的映射关系。在依然另一个实施例中,FTL表组织为树结构。
在依然又一个实施例中,在连续的内存地址空间中存储FTL表,每个FTL表条目中记录物理地址,而以每个FTL表条目自身的内存地址代表对应于物理地址的逻辑地址。FTL表条目的数量对应于固态存储设备逻辑地址空间的大小。
为了在非易失存储介质中存储FTL表的目的,将FTL表组织为数据帧。参看图3,FTL表(310)包括FTL帧1、FTL帧2、FTL帧3……FTL帧600。每个FTL帧,包括多个FTL表条目。每个FTL帧的大小同非易失存储介质的最小写入单位相对应(例如,页)。非易失存储介质的数据页大小通常为2KB、4KB、8KB或16KB。在一个实施例中,非易失存储介质的数据页大小为16KB,而FTL帧大小为2KB、4KB或8KB。在另一个实施例中,非易失存储介质的数据页大小为4KB,而FTL帧大小为512B、1KB或2KB。一般地,选择FTL帧大小,使得非易失存储介质的数据页大小是FTL帧大小的整数倍,以便于将多个FTL帧存储到为非易失存储介质的数据页。在一个例子中,FTL表包含的FTL帧1、FTL帧2、FTL帧3……FTL帧600在内存中按内存地址连续存储。
在根据本发明的实施例中,还将FTL表(310)组织为FTL块。FTL块包括多个FTL帧,优选地,包括内存地址连续的多个FTL帧。在图3的例子中,FTL块1(320)包括100个FTL帧(FTL帧1到FTL帧100),FTL块2(321)包括FTL帧101到FTL帧200,而FTL块6(325)包括FTL帧501到FTL帧600。作为举例,FTL帧大小为4KB,包括1K(1024)个FTL条目,而每个FTL条目对应了4KB逻辑/物理地址空间,因而每个FTL帧对应4MB逻辑/物理地址空间,而每个FTL块包括100个FTL帧,对应了400MB逻辑/物理地址空间。
在固态存储设备处理写请求时,为该写请求分配物理地址,并在FTL表中记录该写请求的逻辑地址与物理地址的对应关系。在另一个实施例中,由访问固态存储设备的主机维护FTL表,在需要向固态存储发出写请求时,为该写请求分配固态存储设备的物理地址,并在FTL表中记录该写请求的逻辑地址与物理地址的对应关系。
图4是根据本发明的实施例的“写”日志的结构框图。在固态存储设备处理写请求时,还生成“写”日志。在“写”日志中记录了写操作对应的逻辑地址与物理地址。对于每个FTL表项的更新请求,生成一条对应的“写”日志条目。
为了在非易失存储介质中存储“写”日志的目的,将“写”日志组织为日志帧410(参看图4)。每个日志帧410包括多个“写”日志条目(422、424、42n)(或称“表项”)。每个“写”日志条目(422、424或42n)包括一个逻辑地址以及与之相对应的物理地址。按照接收FTL表被更新的先后顺序生成并在日志帧中组织“写”日志条目。因而在“写”日志中,可能存在具有相同逻辑地址和/或物理地址的“写”日志条目。
每个日志帧410的大小同非易失存储介质的最小写入单位相对应(例如,页)。非易失存储介质的数据页大小通常为2KB、4KB、8KB或16KB。在一个实施例中,非易失存储介质的数据页大小为16KB,而日志帧大小为2KB、4KB、8KB或16KB。在另一个实施例中,非易失存储介质的数据页大小为4KB,而日志帧大小为512B、1KB或2KB或4KB。一般地,选择日志帧大小,使得非易失存储介质的数据页大小是日志帧大小的整数倍,以便于将一个或多个日志帧存储到非易失存储介质的数据页。在又一个实施例中,一个或多个FTL帧与一个或多个“写”日志数据帧构成非易失存储介质的一个数据页。
在根据本发明实施例的日志帧410中还包括元数据440,元数据440中指示了日志帧410属于FTL块1。目志帧410属于FTL块1,意味着日志帧410中的条目记录了对FTL块1的条目的更新,换句话说,日志帧410中的条目的逻辑地址均在FTL块1的逻辑地址范围内。
在一个例子中,提供队列来容纳“写”日志条目。在“写”日志被产生时,将日志条目***队列(队尾)。可选地,组合多个条目并在一次内存访问操作中***队列,所组合的多个条目的尺寸可以等于总线宽度或内存接口宽度。在从队列的队头取出日志条目中,按日志帧大小取出指定数目的日志条目。队列是先进先出的,从而使得在固态硬盘日志中能够容易识别日志条目的生成顺序。恰当选择队列的深度,使得在发生掉电时,在备用电源供电的有限时间内,能够将队列中的日志条目写入到固态硬盘日志。
在另一个例子中,提供日志帧缓冲区来容纳“写”日志条目。日志帧缓冲区具有对应于一个或多个日志帧的大小。恰当选择缓冲区的大小,使得在发生掉电时,在备用电源供电的有限时间内,能够将日志帧缓冲区中的日志条目写入到固态硬盘日志。当日志帧缓冲区积累了日志帧大小的数据时,将其内容写入到固态硬盘日志中。
在进一步的例子中,向队列或日志帧缓冲区添加“写”日志条目时,还检查队列或缓冲区中是否已存在具有相同逻辑地址的条目。若在队列或缓冲区中已经记录了具有相同逻辑地址的条目,则用要写入的日志条目更新队列或缓冲区中的已有条目,从而减少要写入固态硬盘日志的数据量。
如图5所示,是根据本发明的实施例的基于FTL表的固态硬盘日志生成方法的流程图。在更新FTL表时,记录被更新的FTL表项的逻辑地址与物理地址的对应关系(510)。可选地相应更新FTL表。缓存所记录的逻辑地址与物理地址的对应关系,每一条逻辑地址与物理地址的对应关系,构成一个“写”日志条目。一定数量“写”日志条目构成一个日志帧。在同一日志帧中的“写”日志条目记录的是对相同的FTL块的FTL条目的更新。当缓存的多条逻辑地址与物理地址的对应关系能够构成一个日志帧时,利用缓存的多条逻辑地址与物理地址的对应关系生成日志帧(520)。还选择内存中的FTL表的多个FTL块之一的部分生成FTL帧(530)。例如,所选择的FTL帧1-1是FTL块1的尚未被写入到非易失存储介质的部分。在优选实施例中,FTL帧1-1(220)与日志帧(230)的组合的大小对应于固态硬盘的非易失存储介质的数据页大小,从而可通过一次非易失存储介质的写操作将FTL帧1-1(220)与日志帧(230)的组合写入固态硬盘的非易失存储介质(540)。
根据本发明的又一个实施例,每接收到预定数量的写请求,生成一个日志帧,其中一个日志帧中能够容纳该预定数量的写请求所对应的逻辑地址与物理地址的映射关系。而每生成一个日志帧,则选择FTL表的部分生成FTL帧。根据本发明的依然又一个实施例,周期地利用所缓存的“写”日志条目生成日志帧。以及每生成一个日志帧,则选择FTL表的部分生成FTL帧。根据本发明的依然又一个实施例,日志帧的大小对应于非易失存储介质的数据页大小,FTL帧的大小也对应于非易失存储介质的数据页大小。
根据本发明的依然又一个实施例,生成FTL表的FTL帧时,按FTL块自身的内存地址而选择FTL块的部分来生成FTL帧。
例如,选择FTL块1内从地址0开始的长度为L的FTL块的部分,以构成FTL帧1-1。选择FTL块1内从地址L开始的长度为L的FTL块的部分,以构成FTL帧1-2。选择FTL块1内从地址(N-1)*L开始的长度为L的FTL块的部分,以构成FTL帧1-N。依次将FTL表的各个FTL块FTL帧并写入非易失存储介质,使得在固态硬盘日志中能够记录完整的FTL表。
以此方式,每次向固态硬盘存储一个物理页。即使固态硬盘掉电,也可在备用电源有限的工作时间内,完成FTL表的存储。
所属领域技术人员将意识到,某些情况下,固态硬盘日志中不包括完整的FTL表。例如,对于新的或者空白的固态硬盘,随着对固态硬盘的使用,3次选择FTL表的部分而生成FTL帧后发生掉电,此时,FTL表中仅FTL块1是有效的,固态硬盘日志中仅记录了FTL块1。通过在固态硬盘日志中标记已使用的数据块和/或未使用的数据块,而识别出在固态硬盘日志中的有效数据帧,从而重建固态硬盘掉电时的FTL表。
图6是根据本发明的另一个实施例的固态硬盘日志的结构框图。固态硬盘日志610存储在非易失存储介质中。参看图6,固态硬盘日志410包括多个物理页(物理页620、621、622……628、629)。物理页620中包括FTL帧1-1、FTL帧1-2、FTL帧1-3与日志帧0-1。FTL帧与日志帧具有相同的大小。FTL帧1-1、FTL帧1-2……FTL帧1-100容纳了FTL块1的所有FTL条目,日志帧1-1、日志帧1-2与日志帧1-3是属于FTL块1的日志帧。固态硬盘日志610还包括其他类型的帧(其他帧1、其他帧2与其他帧3)。
每个FTL帧还包括元数据,记录了该FTL帧所属的FTL块以及属于同一FTL块的前一个FTL帧的存储位置(物理地址)。从而属于同一FTL块的多个FTL帧被组织成链表。每个日志帧也包括元数据,记录了该日志帧所属的FTL块以及属于同一FTL块的前一个日志帧的存储位置(物理地址)。从而属于同一FTL块的多个日志帧被组织成链表。
在图6的例子中,FTL帧1-1是FTL块1的第一个FTL帧,FTL帧1-2是FTL块1的第2个FTL帧,以此类推,FTL帧1-100是FTL块1的最后一个FTL帧。属于同一FTL块的多个FTL帧可以在固态硬盘日志610中不连续的存储。在有高优先级的其他类型帧出现时,可以及时将其存储到固态硬盘日志。日志帧0-1是用于FTL块0(图6中未示出)的第一个日志帧,日志帧1-1是用于FTL块1的第一个日志帧,日志帧1-2是用于FTL块1的第2个日志帧,日志帧1-3是用于FTL块1的第3个日志帧。日志帧中的条目按生成的顺序排列。
图7是根据本发明的又一实施例的固态硬盘日志生成方法的流程图。根据图7的实施例,生成如图6所示的固态硬盘日志610。
在更新FTL表时,记录被更新的FTL表项的逻辑地址与物理地址的对应关系(710)。可选地相应更新FTL表。缓存所记录的逻辑地址与物理地址的对应关系,每一条逻辑地址与物理地址的对应关系,构成一个“写”日志条目。一定数量“写”日志条目构成一个日志帧。在同一日志帧中的“写”日志条目记录的是对相同的FTL块的FTL条目的更新。当缓存的多条逻辑地址与物理地址的对应关系能够构成一个日志帧时,利用缓存的多条“写”日志条目生成日志帧,并在日志帧中标记其所属的FTL块(720)(参看图6与图7,例如日志帧0-1)。可选地,在日志帧中还标记与该日志帧属于同一FTL块的前一个日志帧的存储位置。参看图6,日志帧0-1是FTL块0(图6中未示出)的第一个日志帧,在日志帧0-1中标记其前一个日志帧不存在。
还选择内存中的FTL表的多个FTL块之一(例如,FTL块1)来生成FTL帧(730)。将所生成的一个或多个FTL帧与日志帧一同写入非易失存储介质(740)。在图6的例子中,3个FTL帧与1个日志帧的组合占据非易失存储介质的一个物理页。重复执行步骤710-740,以随时将日志帧与FTL帧写入固态硬盘日志。
在一个例子中,选择FTL块之一(例如,FTL块1)生成FTL帧,并且在将FTL块1完全写入固态硬盘日志610之前,尽量避免向固态硬盘日志写入其他FTL块,以使FTL块尽量集中地在固态硬盘日志中分布。然而,由于FTL帧中包括指示前一个FTL帧的元数据,因而属于同一FTL块的FTL帧不必在固态硬盘日志中连续存储。可将其他类型的帧(例如,图6的其他帧1)或其他FTL块的FTL帧(例如,图6的FTL帧2-1)存储在FTL块1的多个FTL帧之间。
在存储设备上电时,可从固态硬盘日志610中读取FTL帧与日志帧,以重建FTL表。在一个例子中,通过读取完整的固态硬盘日志610,找到在固态硬盘日志610中记录的各个FTL块以及与其对应的日志帧,并确定在存储设备掉电前,FTL表的状态。在另一个例子中,为加快FTL表重建过程,还在非易失存储介质中记录各个FTL块的多个FTL帧的第一FTL帧和/或最后FTL帧的存储位置,以及记录各个FTL块的多个日志帧的第一日志帧和/或最后日志帧的存储位置。从而,在存储设备上电时,可以迅速定位各个FTL块的FTL帧与日志帧的存储位置,并恢复各个FTL块,而无需读取完整的固态硬盘日志610。
在一个实施方式中,响应于存储设备掉电,即使缓存的日志条目数量不足以形成日志帧,也填充缓存的日志条目以形成日志帧,并写入固态硬盘日志。并在非易失存储介质中记录各个FTL块的多个FTL帧的第一FTL帧和/或最后FTL帧的存储位置,以及记录各个FTL块的多个日志帧的第一日志帧和/或最后日志帧的存储位置。返回参看图6,在固态硬盘日志中,完整记录了FTL块1的100个FTL帧;因而,响应于存储设备掉电,在非易失存储介质中记录FTL帧1-1和/或FTL帧1-100的存储位置,与日志帧1-1和/或日志帧1-3的存储位置,以便从固态硬盘日志中恢复FTL块1。而作为举例,在掉电时,尚未完整记录FTL块2的100个FTL帧,但日志帧中完整记录了对FTL块2的更新,在此情况下,不使用固态硬盘日志610中记录的FTL帧2-1、FTL帧2-2、FTL帧2-3、FTL帧2-7、FTL帧2-8、FTL帧2-9来重建FTL块2,而是仅使用属于FTL块2的日志帧2-1来重建FTL块2,而在日志帧2-1中未被记录的FTL2的其他表项在重建时可标记为未分配。在另一个例子中,在固态硬盘日志610中记录了多份完整的FTL块2(每份FTL块2包括100个FTL帧)与未完整记录的FTL块2,响应于存储设备掉电,而在非易失存储介质中记录最新一份完整的FTL块2的第一FTL帧和/或最后FTL帧的存储位置,并用于FTL重建。
图8是根据本发明的实施例的设备启动方法的流程图。根据图8的实施例的方法可以由固态硬盘实施,也可以由访问固态硬盘的主机实施。在诸如固态硬盘的设备启动时,需要重建FTL表。
在根据本发明的实施例中,将FTL表分成多个FTL块,从固态硬盘日志中独立地重建各个FTL块。确定待重建的FTL块(800)。例如,从第一个FTL块开始重建。或者,估计存储***启动后将被首先访问的存储区域(例如,主机存储操作***的存储区域),并优先加载对应这部分存储区域的FTL块。或者,在固态硬盘中(例如,固态硬盘日志中)存储上一次或者先前的固态硬盘启动后被首先访问的逻辑地址或对应的FTL块,并作为选择优先重建的FTL块的依据。在固态硬盘上电时,获取所存储的逻辑地址(一个或多个)或FTL块。在固态硬盘上存储了之前启动后被首先访问的逻辑地址时,选择FTL块,使得所选的FTL块的逻辑地址范围包括该被首先访问的逻辑地址。
在另一个例子中,识别存储设备接收到的IO请求所对应的FTL块(包含所接收的IO请求所请求的逻辑地址的FTL块),并优先加载这部分FTL块。
依然在另一个例子中,设备启动后,按FTL块地址的顺序对FTL表进行重建。当重建到FTL块3时,接收到来自主机的访问对应FTL块5的逻辑地址的IO请求,则暂停对FTL块3的重建操作,开始对FTL块5的重建,在FTL块5重建完成后,响应该IO请求,而后再继续先前中断的FTL表顺序重建操作。
依然在又一个例子中,设备启动后,以预测的方式对FTL表进行重建,当预测到下一个将被访问的FTL块为FTL块2时,对FTL块2进行重建。这时若接收到来自主机的访问对应FTL块5的逻辑地址的IO请求,则暂停对FTL块2的重建操作,开始对FTL块5的重建,在FTL块5重建完成后,响应该IO请求,而后重新预测待重建的FTL块,并进行重建操作。
为重建FTL块,从非易失存储介质中的预定位置获取指定FTL块(例如FTL块1)的FTL帧和/或日志帧(若存在)在固态硬盘日志的存储位置(810)。根据本发明的一个实施例,非易失存储介质中记录FTL块1的最后1个FTL帧的存储位置,以及FTL块1的最后1个日志帧的存储位置。
从FTL块1的最后1个FTL帧的存储位置读取FTL帧,并从所读取的FTL帧中获取前1个FTL的存储位置,并读取该前1个FTL帧,以此方式,从固态硬盘日志中读取属于FTL块1的所有FTL帧(820)。以及若存在属于FTL块的日志帧,还从FTL块1的最后1个日志帧的存储位置读取日志帧,从所读取的日志帧中获取前1个日志帧的存储位置,以此方式从固态硬盘日志中读取属于FTL块1的所有日志帧。
将读取的每个FTL帧按其在FTL块1中位置写入内存来作为FTL块1的部分。将属于FTL块1的所有FTL帧放入内存,以形成FTL块1的基本内容(830)。接下来,若存在属于FTL块1的日志帧,还用日志帧来更新内存中的FTL块1,以完成对FTL块1的重建(840)。用日志帧更新FTL块1需要遵循指定的顺序。例如,按日志帧中的日志条目被生成顺序的逆序来更新FTL块1。首先,从固态硬盘日志中获得属于FTL块1的最后1个日志帧,将最后一个日志帧中的多个日志条目按从后向前的顺序更新到FTL块1。用日志条目更新FTL块的含义在于,用日志条目中的逻辑地址作为索引,替换FTL块1中的被索引条目的物理地址。接下来,获取属于FTL块1的倒数第二个日志帧,并用其中的日志条目更新FTL块1。
由于在日志条目中可能存在具有相同逻辑地址的多个条目,而这些条目中的最后条目记载了对应FTL条目的最新内容,在更新FTL块1时要避免由FTL条目的旧内容替换了新内容。为此目的,在重建FTL块1的过程中,对每一个被更新的FTL条目设置标记,在后续重建过程中,若待被日志条目更新的FTL条目上存在标记,则忽略该日志条目(即,不使用该日志条目来更新FTL块)。而当处理了FTL块1的所有日志帧后,清除FTL块1的所有被设置的标记。
作为本发明的又一实施例,按日志帧中的日志条目被生成顺序来更新FTL块1,首先,从固态硬盘日志中获得属于FTL块1的第一日志帧,将第一日志帧中的多个日志条目按从前向后的顺序更新到FTL块1。用日志条目更新FTL块的含义在于,用日志条目中的逻辑地址作为索引,替换FTL块1中的被索引条目的物理地址。接下来,获取属于FTL块1的第二日志帧,并用其中的日志条目更新FTL块1。
FTL块1的重建完成后,虽然尚未重建出完整的FTL表,但对FTL块1对应逻辑地址范围的IO请求已可得到响应。
接下来,判断是否还存在其他待重建的FTL块(850)。若已经重建了FTL表的所有FTL块,可以完成***启动(860)。若依然存在未重建的FTL块,继续步骤800并确定待重建的FTL块。
图9是根据本发明实施例的固态硬盘的框图。存储设备包括控制器、NAND闪存、DRAM与NOR闪存。控制器分别耦合到NAND闪存、NOR闪存与DRAM。在NAND闪存中包括启动页、日志区与用户数据区。在日志区中存储根据本发明实施例的固态硬盘日志,在用户数据区存储固态硬盘作为存储设备而保存的用户数据。固态硬盘日志中存储了来自多个FTL块的FTL帧与日志帧。
DRAM中存储了FTL表,图9中,由阴影所指示的FTL表的部分是已经被更新的FTL表部分(例如,对应于FTL帧1)。在日志区中存储的日志帧1-1与日志帧1-2记录了FTL表的更新。并且日志帧1-1还存储了其所对应的FTL帧1的地址,而日志帧1-2存储了同属于FTL帧1的前一个日志帧(日志帧1-2)的地址。从而通过在FTL帧1所指示的FTL表部分上重放日志帧1-1与日志帧1-2中记录的更新,能够获得由阴影所指示的FTL表部分。
在图9的例子中,NAND闪存的启动页中存储各个FTL块的FTL帧与日志帧的在日志区的地址。可选地,属于同一FTL块的FTL帧组织成链表,而属于同一FTL块的日志帧也组织为链表,在启动页中存储每个FTL块的FTL帧链表与日志帧链表在日志区的首地址与尾地址。或者在启动页中存储每个FTL块的FTL帧链表的头节点与尾节点在日志区的存储位置,以及日志帧链表的头节点与尾节点在日志区的存储位置。
在进一步的实施例中,NAND闪存中存储了多个启动页,用于提供启动页的备份或启动页的不同版本。还在NOR闪存中存储有效启动页的存储位置(在NAND闪存中的物理地址)。固态硬盘上电时,控制器从NOR闪存中获取有效启动页的地址,并依据该地址从NAND闪存中获取有效启动页,进而依据启动页指示的FTL帧地址和/或日志帧地址来在DRAM中重建FTL表。
图10展示了根据本发明实施例的响应掉电事件而生成固态硬盘日志的示意图。在图10的实施例中,固态硬盘日志1010包括物理页1020、物理页1021、物理页1022、……物理页1028与物理页1029。在发生掉电时,物理页1022已经被写入非易失存储介质。在掉电后,备用电源供电的时间有限,为在有限的时间内在非易失存储介质中存储FTL表的最新状态,改变写入物理页的FTL帧与日志帧的比例,增加日志帧的占比。在图10的例子中,掉电发生后,用日志帧完全填充物理页1028与1029,而不再写入FTL帧,从而将尽可能多的日志帧写入非易失存储介质。
在备用电源供电期间,即使完全写入日志帧不写入FTL帧,能够写入非易失存储介质的日志帧也是有限的。在根据本发明的一个实施例中,为确保对FTL表的更新能够被保存到非易失存储介质,依据在备用电源供电期间,能够写入非易失存储介质的日志帧的数量来确定缓存的日志条目的数量。例如,若备用电源能够支持将N个日志帧写入非易失存储介质,则缓存的日志条目的总量不超过N个日志帧所容纳的日志条目的数量。进一步地,由于日志帧同FTL块相对应,日志帧的数量不超过N。若已经在内存中的N个日志帧中添满了日志条目,在将这些日志帧的一个或多个写入非易失存储介质前,暂停新日志帧的生成,以及可选地,暂停对需要更新FTL表条目的操作(例如,写命令、擦除命令、Trim命令等)的响应。
在根据本发明的又一实施例中,不仅响应于掉电事件,还依据其他原因来调整FTL帧与日志帧的比例。例如,在写命令频繁出现时,内存中缓存了较多的日志条目,调整固态硬盘日志的物理页中FTL帧与日志帧的比例,以尽快将日志条目写入非易失存储介质。
其中,响应于异常事件发生,包括在NVM的启动页中存储每个FTL块的最后FTL表数据帧在NVM中的地址与最后日志帧在NVM中的地址或在NVM的启动页中存储每个FTL块的最后FTL表数据帧组在NVM中的物理页地址与最后日志帧组在NVM中的物理页地址,其中FTL表数据帧组是存储于相同NVM物理页上的多个FTL帧,以及日志帧组是存储于相同NVM物理页上的多个日志帧。
图11A与图11B是根据本发明又一实施例的FTL块更新的示意图。
参看图11A,固态硬盘日志1110包括多个物理页(物理页1120、1121、1122……1128、1129)。物理页1120中包括FTL帧1-1、FTL帧1-2、FTL帧1-3与日志帧1-1。FTL帧与日志帧具有相同的大小。FTL帧1-1、FTL帧1-2……FTL帧1-6容纳了FTL块1的所有FTL条目(6个FTL帧),日志帧1-1、日志帧1-2……日志帧1-10是属于FTL块1的日志帧。固态硬盘日志1110中还包括属于其他FTL块的帧(例如,属于FTL块2的FTL帧2,属于FTL块3的FTL帧3)。
在将物理页1128写入非易失存储设备后,又生成了日志帧1-10,并准备将日志帧1-10写入非易失存储设备(参看图11A,由“当前时刻”所指示)。此时需要选择从哪个FTL块中生成FTL帧(或其他需要持久化保存的数据)。在根据本发明的实施例中,比较属于各个FTL块的日志帧的数量。在图11A的例子中,在固态硬盘日志1110中,属于FTL块1的日志帧有9个,属于FTL块2的日志帧有1个。从拥有日志帧多的FTL块中生成FTL帧是有利的。在从固态硬盘日志中重建FTL块时,需要依据属于该FTL块的所有日志帧来更新FTL块。从而日志帧的数量增加会减慢FTL块重建的速度,并且日志帧数量的增加也会导致更大的固态硬盘日志存储空间。
返回图11A,在当前时刻,确定从FTL块1中生成FTL帧,以更新固态硬盘日志中的FTL块1。更新固态硬盘日志中的FTL块1,意味着在固态硬盘日志1110中已经存在包括完整FTL块1的FTL帧的情况下,向固态硬盘日志1110中写入新的FTL块1。当新的FTL块1被完整写入固态硬盘日志1110,可将旧的FTL块1从固态硬盘日志中删除。
为更新固态硬盘日志中的FTL块1,从内存中的FTL块1中生成属于FTL块1的FTL帧1-1、FTL帧1-2与FTL帧1-3,连同日志帧1-10,组成物理页1129,并写入到非易失存储介质。此时,若发生掉电而需要重建FTL块1,只能通过从固态硬盘日志1110中读取物理页1120与物理页1121来获得FTL帧1-1至FTL帧1-6,来恢复FTL块1,并根据日志帧1-1至日志帧1-10来更新FTL块1。因而,若在物理页1129被写入非易失存储器后发生掉电,还需要在非易失存储器中记录属于FTL块1的最后FTL帧的存储位置为物理页1121中的FTL1-6的位置,以及属于FTL块1的最后日志帧的存储位置为物理页1129中的日志帧1-10的存储位置。
类似地,若在图11A中的“当前时间”发生掉电,需要在非易失存储器中记录属于FTL块1的最后FTL帧的存储位置为物理页1121中的FTL1-6的位置,以及属于FTL块1的最后日志帧的存储位置为在物理页1128中的日志帧1-9的存储位置,以及属于FTL块1的第1日志帧的存储位置为在物理页1120中的日志帧1-1的存储位置。在另一个例子中,属于FTL块1的FTL帧的数量可以为已知(例如,6个),从而依据FTL块1的最后FTL帧(FTL1-6)向前追溯5个FTL帧来获得属于FTL块1的所有FTL帧,而无需记录FTL块1的第1个FTL帧的存储位置。
参看图11B,在物理页1129与物理页1130中已经存储了属于FTL块1的所有6个FTL帧。而日志帧1-11记录了写入物理页1130之前对FTL块1更新的最后日志。此时,若需要重建FTL块1,则仅需从物理页1129与物理页1130中读出FTL帧1至FTL帧6,以及获取在生成物理页1129与物理页1130期间,对FTL块1进行更新的日志,这些日志被记录在日志帧1-10与日志帧1-11中。从而若此时发生掉电,需要在非易失存储器中记录属于FTL块1的最后FTL帧的存储位置为物理页1130中的FTL1-6的位置,以及属于FTL块1的最后日志帧的存储位置为物理页1130中的日志帧1-11的存储位置。进一步地,还记录属于FTL块1的第1个FTL帧的存储位置为物理页1129中的FTL1-1的位置,以及属于FTL块1的第1个日志帧的存储位置为物理页1129中的日志帧1-10的存储位置。
此时,物理页1120与物理页1121中存储的FTL帧可以删除,以及日志帧1-1至日志帧1-9也可以删除。这些存储空间可以被擦除并用于存储其他数据。
为选择从哪个FTL块中生成FTL帧(或其他需要持久化保存的数据),可以有多种策略。FTL块对应于逻辑地址空间。在已知或识别出某些逻辑地址空间的写操作更频繁的情况下,可优选此类逻辑地址空间对应的FTL块进行更新,以减少用于这些FTL块的日志帧数量。或者已知或识别出某些逻辑地址空间的读操作更频繁或者是只读区域,可降低此类逻辑地址空间对应的FTL块的更新频率。除了FTL块外,还可以根据本发明实施例提供的方法来将其他类型的数据写入非易失存储设备,例如,存储设备中的坏块表。一般情况下,坏块表信息更新频率较低,以较低优先级为其生成要写入固态硬盘日志的数据帧。又例如,某些数据的可靠性需求不高,则可用最低优先级为其生成要写入固态硬盘日志的数据帧。
图12是根据本发明实施例的另一固态硬盘的框图。存储设备包括控制器、NAND闪存、DRAM与NOR闪存。控制器分别耦合到NAND闪存、NOR闪存与DRAM。在NAND闪存中包括启动页、日志区与用户数据区。在日志区中存储根据本发明实施例的固态硬盘日志,在用户数据区存储固态硬盘作为存储设备而保存的用户数据。固态硬盘日志中存储了来自多个FTL块的FTL帧与日志帧和来自多个NVRAM块的NVRAM块帧与NVRAM日志帧。
DRAM中存储了FTL表,以及由DRAM提供NVRAM。NVRAM是在固态硬盘的DRAM中的存储区;主机能够按访问内存的方式访问NVRAM(Non-Volatile RAM,非易失RAM)存储区;虽然由DRAM提供NVRAM存储区,但在主机看来NVRAM是非易失的;通过类似于记录FTL表的方式,存储设备将NVRAM块以及对NVRAM的更新记录到NVM中;从而即使发生掉电,也能从NVM中恢复NVRAM的内容,实现非易失的特性。在本发明中,NVRAM也分块,分块的策略与FTL表的分块策略相同。
图12中,由阴影所指示的NVRAM的部分是已经被更新的NVRAM部分(例如,对应于NVRAM块1)。在日志区中存储了NVRAM帧1、NVRAM帧2,以及(NVRAM)日志帧1-1、(NVRAM)日志帧1-2。NVRAM帧1与NVRAM帧2构成了NVRAM块1,日志帧1-1与日志帧1-2记录了对NVRAM的NVRAM块1的更新。可选地,NVRAM日志帧1-1还存储了其所对应的NVRAM块1的标识,而NVRAM日志帧1-2存储了同属于NVRAM块1的前一个NVRAM日志帧(NVRAM日志帧1-1)的地址。通过在NVRAM块1上重放NVRAM日志帧1-1与NVRAM日志帧1-2中记录的更新(或称为,用NVRAM日志帧1-1与NVRAM日志帧1-2更新NVRAM块1),能够获得由阴影所指示的NVRAM的部分。
在进一步的实施例中,NAND闪存中存储了多个启动页,用于提供启动页的备份或启动页的不同版本。还在NOR闪存中存储有效启动页的存储位置(在NAND闪存中的物理地址)。固态硬盘上电时,控制器从NOR闪存中获取有效启动页的地址,并依据该地址从NAND闪存中获取有效启动页,进而依据启动页指示的NVMRAM块的NVRAM帧地址和/或NVRAM日志帧地址来在DRAM中重建NVRAM。
图13是根据本发明的一个实施例的NVRAM的结构框图。固态硬盘日志1310存储在非易失存储介质中。参看图13,固态硬盘日志1310包括多个物理页(物理页1320、1321、1322……1328、1329)。物理页1320中包括NVRAM帧1-1、NVRAM帧1-2、NVRAM帧1-3与NVRAM日志帧0-1。NVRAM帧与NVRAM日志帧具有相同的大小。NVRAM帧1-1、NVRAM帧1-2……NVRAM帧1-100容纳了NVRAM块1的所有内容,NVRAM日志帧1-1、NVRAM日志帧1-2与NVRAM日志帧1-3是属于NVRAM块1的NVRAM日志帧。固态硬盘日志1310还包括其他类型的帧(其他帧1、其他帧2与其他帧3)。在图13的例子中,3个NVRAM帧与1个NVRAM日志帧的组合占据非易失存储介质的一个物理页。
可选地,每个NVRAM帧还包括元数据,记录了与该NVM帧属于同一NVRAM块的前一个NVRAM帧的存储位置(在非易失存储介质上的物理地址)。进一步地,元数据还包括该NVRAM帧所属的NVRAM块。从而属于同一NVRAM块的多个NVRAM帧被组织成链表。每个NVRAM日志帧也包括元数据,记录了该NVRAM日志帧所属的NVRAM块以及属于同一NVRAM块的前一个NVRAM日志帧的存储位置(物理地址)。从而属于同一NVRAM块的多个NVRAM日志帧被组织成链表。
在图13的例子中,NVRAM帧1-1是NVRAM块1的第一个NVRAM帧,NVRAM帧1-2是NVRAM块1的第2个NVRAM帧,以此类推,NVRAM帧1-100是NVRAM块1的最后一个NVRAM帧。属于同一NVRAM块的多个NVRAM帧可以在固态硬盘日志1310中不连续的存储。在有高优先级的其他类型帧出现时,可以及时将其他类型帧存储到固态硬盘日志中。NVRAM日志帧0-1是用于NVRAM块0(图13中未示出)的第一个NVRAM目志帧,NVRAM日志帧1-1是用于NVRAM块1的第一个NVRAM日志帧,NVRAM日志帧1-2是用于NVRAM块1的第2个NVRAM日志帧,NVRAM日志帧1-3是用于NVRAM块1的第3个NVRAM日志帧。日志帧中的条目按生成的顺序排列。
图14是根据本发明的另一个实施例的NVRAM的结构框图。NVRAM1410存储在非易失存储介质中。参看图14,固态硬盘日志1410包括多个物理页(物理页1420、1421、1422……1430、1431)。物理页1420中包括FTL帧1-1、FTL帧1-2、FTL帧1-3与日志帧0-1。FTL帧与日志帧具有相同的大小。物理页1421中包括NVRAM帧1-1、NVRAM帧1-2、NVRAM帧1-3与NVRAM日志帧0-1。NVRAM帧与NVRAM日志帧具有相同的大小。NVRAM帧1-1、NVRAM帧1-2……NVRAM帧1-100容纳了NVRAM块1的所有内容,NVRAM日志帧1-1、NVRAM日志帧1-2与NVRAM日志帧1-3是属于NVRAM块1的NVRAM日志帧。固态硬盘日志1410还包括其他类型的帧(例如,其他帧1、其他帧2与其他帧3)。
在图14的例子中,NVRAM帧1-1是NVRAM块1的第一个NVRAM帧,NVRAM帧1-2是NVRAM块1的第2个NVRAM帧,以此类推,NVRAM帧1-100是NVRAM块1的最后一个NVRAM帧。属于同一NVRAM块的多个NVRAM帧可以在固态硬盘目志1410中不连续的存储。在图14的例子中,FTL帧1-1是FTL块1的第一个FTL帧,FTL帧1-2是FTL块1的第2个FTL帧,FTL帧1-3是FTL块1的最后一个FTL帧。属于同一FTL块的多个FTL帧可以在固态硬盘日志1410中也不连续的存储。当NVRAM帧为高优先级时,将其优先存储到固态硬盘日志1410中,当FTL帧为高优先级时,将其优先存储到固态硬盘日志1410中,在有更高优先级的其他类型帧出现时,也可以按优先级顺序及时将其存储到固态硬盘日志。
图15是根据本发明的又一实施例的固态硬盘日志生成方法的流程图。根据图15的实施例,生成如图13所示的固态硬盘日志1310。
在更新NVRAM时,记录被更新的NVRAM存储单元的地址与存储单元内容(1510)。可选地相应更新NVRAM。NVRAM存储单元的地址可以是DRAM的物理地址或主机可见的NVRAM的地址。缓存所记录的地址与存储单元内容,每一对地址与存储单元内容,构成一个NVRAM日志条目。一定数量NVRAM日志条目构成一个NVRAM日志帧。在同一日志帧中的NVRAM日志条目记录的是对相同的NVRAM块的更新。当缓存的多对地址与存储单元内容能够构成一个NVRAM日志帧时,利用缓存的多条NVRAM日志条目生成NVRAM日志帧(1520)。可选地,在NVRAM日志帧中标记其所属的NVRAM块(参看图13,例如日志帧0-1)。可选地,在NVRAM日志帧中还标记与该NVRAM日志帧属于同一NVRAM块的前一个NVRAM日志帧的存储位置。参看图13,NVRAM日志帧0-1是NVRAM块0(图13中未示出)的第一个NVRAM日志帧,在NVRAM日志帧0-1中标记其前一个NVRAM日志帧不存在。
还选择内存中的NVRAM的多个NVRAM块之一(例如,NVRAM块1)来生成NVRAM帧(1520)。将所生成的一个或多个NVRAM帧与NVRAM日志帧一同写入非易失存储介质(1540)。重复执行步骤1510-1540,以随时将NVRAM日志帧与NVRAM帧写入固态硬盘日志。
在一个例子中,选择NVRAM块之一(例如,NVRAM块1)生成NVRAM帧,并且在将NVRAM块1完全写入固态硬盘日志1310(参见图13)之前,尽量避免向NVRAM写入其他NVRAM块的帧或其他块的帧,以使同一NVRAM块的NVRAM帧尽量集中地在固态硬盘日志1310中分布。然而,由于NVRAM帧中包括指示前一个NVRAM帧的元数据,因而属于同一NVRAM块的NVRAM帧不必在固态硬盘日志中连续存储。可将其他类型的帧(例如,图13的其他帧1或图14的FTL帧1-1)或其他NVRAM块的NVRAM帧(例如,图13的NVRAM帧2-1)存储在NVRAM块1的多个NVRAM帧之间。
在存储设备上电时,可从固态硬盘日志1310中读取NVRAM帧与NVRAM日志帧,以重建NVRAM。在一个例子中,通过读取完整的固态硬盘日志1310,找到在固态硬盘日志1310中记录的各个NVRAM帧以及与其对应的NVRAM日志帧,并确定在存储设备掉电前,NVRAM的状态。在另一个例子中,为加快NVRAM重建过程,还在非易失存储介质中记录各个NVRAM块的多个NVRAM帧的第一NVRAM帧和/或最后NVRAM帧的存储位置,以及记录各个NVRAM块的多个NVRAM日志帧的第一NVRAM日志帧和/或最后NVRAM日志帧的存储位置。从而,在存储设备上电时,可以迅速定位各个NVRAM块的NVRAM帧与NVRAM日志帧的存储位置,并恢复各个NVRAM块,而无需读取完整的固态硬盘日志1310。
在一个实施方式中,响应于存储设备掉电,即使缓存的NVRAM日志条目数量不足以形成NVRAM日志帧,也填充缓存的NVRAM日志条目以形成NVRAM日志帧,并写入固态硬盘日志。并在非易失存储介质中记录各个NVRAM块的多个NVRAM帧的第一NVRAM帧和/或最后NVRAM帧的存储位置,以及记录各个NVRAM块的多个NVRAM日志帧的第一NVRAM日志帧和/或最后NVRAM日志帧的存储位置。返回参看图13,在固态硬盘日志1310中,完整记录了NVRAM块1的100个NVRAM帧。因而,响应于存储设备掉电,在非易失存储介质中记录NVRAM帧1-1和/或NVRAM帧1-100的存储位置,与NVRAM日志帧1-1和/或NVRAM日志帧1-3的存储位置,以便从固态硬盘日志1310中恢复NVRAM块1。在另一个例子中,在掉电时,尚未完整记录NVRAM块2的100个NVRAM帧,但NVRAM日志帧中完整记录了对NVRAM块2的所有更新,在此情况下,不使用固态硬盘日志1310中记录的NVRAM帧2-1、NVRAM帧2-2、NVRAM帧2-3、NVRAM帧2-7、NVRAM帧2-8、NVRAM帧2-9来重建NVRAM块2,而是仅使用属于NVRAM块2的NVRAM日志帧2-1来重建NVRAM块2,而在NVRAM日志帧2-1中未被记录的NVRAM块2的其他部分内容在重建时可标记为未使用或设为初始值。在另一个例子中,在固态硬盘日志1310中记录了多份完整的NVRAM块2(每份NVRAM块2包括100个NVRAM帧)与未完整记录的NVRAM块2,响应于存储设备掉电,而在非易失存储介质中记录最新一份完整的NVRAM块2的第一NVRAM帧和/或最后NVRAM帧的存储位置,并用于NVRAM块2的重建。
图16是根据本发明的实施例的设备启动方法的流程图。根据图16的实施例的方法可以由固态硬盘实施,也可以由访问固态硬盘的主机实施。在诸如固态硬盘的设备启动时,需要重建NVRAM。
在根据本发明的实施例中,将NVRAM分成多个NVRAM块,从NVRAM中独立地重建各个NVRAM块。确定待重建的NVRAM块(1600)。例如,从第一个NVRAM块开始重建。或者,估计存储***启动后将NVRAM被首先访问的区域,并优先加载对应这部分区域的NVRAM块。在另一个例子中,识别存储设备接收到的NVRAM访问请求所对应的NVRAM块(具有所接收的访问请求所请求的地址的NVRAM块),并优先加载这部分NVRAM块。
接下来从非易失存储介质中的预定位置获取指定NVRAM块(例如NVRAM块1)的NVRAM帧和/或NVRAM日志帧(若存在)在固态硬盘日志中的存储位置(1610)。根据本发明的一个实施例,非易失存储介质中记录NVRAM块1的最后1个NVRAM帧的存储位置,以及NVRAM块1的最后1个NVRAM目志帧的存储位置。
从NVRAM块1的最后1个NVRAM帧的存储位置读取NVRAM帧,并从所读取的NVRAM帧中获取前1个NVRAM帧的存储位置,并读取该前1个NVRAM帧,以此方式,从固态硬盘日志中读取属于NVRAM块1的所有NVRAM帧(1620)。以及若存在属于NVRAM块1的NVRAM日志帧,还从NVRAM块1的最后1个NVRAM日志帧的存储位置读取NVRAM日志帧,从所读取的NVRAM日志帧中获取前1个NVRAM日志帧的存储位置,以此方式从固态硬盘日志中读取属于NVRAM块1的所有NVRAM日志帧。
将读取的每个NVRAM帧按其在NVRAM块1中位置写入内存来作为NVRAM块1的部分。将属于NVRAM块1的所有NVRAM帧放入内存,以形成NVRAM块1的基本内容(1630)。接下来,若存在属于NVRAM块1的NVRAM日志帧,还用NVRAM日志帧来更新内存中的NVRAM块1,以完成对NVRAM块1的重建(1640)。用NVRAM日志帧更新NVRAM块1需要遵循指定的顺序。在一个例子中,按NVRAM日志帧中的日志条目被生成顺序的逆序来更新NVRAM块1。首先,从固态硬盘日志中获得属于NVRAM块1的最后1个NVRAM日志帧,将最后一个NVRAM日志帧中的多个NVRAM日志条目按生成时间从后向前的顺序更新到NVRAM块1。用NVRAM日志条目更新NVRAM块的含义在于,用NVRAM日志条目中的地址作为索引,用NVRAM日志条目的存储单元内容替换NVRAM块1中的被索引存储单元的内容。接下来,获取属于NVRAM块1的倒数第二个NVRAM日志帧,并用其中的NVRAM日志条目更新NVRAM块1。
NVRAM块1的重建完成后,对NVRAM块1对应地址范围的NVRAM访问请求即可得到响应。
由于在NVRAM目志条目中可能存在具有相同地址的多个条目,而这些条目中的最后条目记载了对应NVRAM条目的最新内容,在更新NVRAM块1时要避免由NVRAM条目的旧内容替换了新内容。为此目的,在重建NVRAM块1的过程中,对每一个被更新的NVRAM存储单元设置标记,在后续重建过程中,若待被NVRAM日志条目更新的NVRAM存储单元上存在标记,则忽略该NVRAM日志条目(即,不使用该NVRAM日志条目来更新NVRAM块)。而当处理了NVRAM块1的所有日志帧后,清除NVRAM块1的所有被设置的标记。
接下来,判断是否还存在其他待重建的NVRAM块(1650)。若已经重建了NVRAM的所有NVRAM块,NVRAM的重建过程完成(1660)。若依然存在未重建的NVRAM块,继续步骤1600并确定待重建的NVRAM块。
图17是根据本申请的依然又一实施例的固态硬盘的框图。固态硬盘包括控制部件、NAND闪存与DRAM。控制部件分别耦合到NAND闪存与DRAM。在NAND闪存中包括日志区与用户数据区。在日志区中存储根据本申请实施例的固态硬盘日志,在用户数据区存储固态硬盘作为存储设备而保存的用户数据。固态硬盘日志中存储了来自多个FTL块的FTL帧与日志帧。控制部件包括多个CPU,图17中展示为CPU 0、CPU 1以及CPU 2。
固态硬盘日志包括FTL帧与日志帧。图17中,由“FTL帧a-b”指示FTL块a的第b个FTL帧。由“日志帧a-b”指示FTL块a的第b个日志帧。可选地,FTL帧与日志帧具有相同的大小。图17中,FTL帧1-1、FTL帧1-2……FTL帧1-6容纳了FTL块1的所有FTL帧,日志帧1-1与日志帧1-2是属于FTL块1的日志帧。FTL帧2-1到FTL帧2-6是FTL块2的所有FTL帧,日志帧2-1是属于FTL块2的日志帧。日志帧0-1是属于FTL块0(未示出)的日志帧。
可选地,在连续的物理页上存储属于相同FTL块的FTL帧,从而在多个物理页上的连续读操作获取属于同一FTL块的FTL帧。以及在物理页中可同时存储FTL帧与日志帧,并在物理页的指定地址范围存储FTL帧与日志帧。
可选地,每个FTL帧还包括元数据,记录了该FTL帧所属的FTL块以及属于同一FTL块的前一个FTL帧的存储位置(物理地址)。从而属于同一FTL块的多个FTL帧被组织成链表。每个日志帧也包括元数据,记录了该日志帧所属的FTL块以及属于同一FTL块的前一个日志帧的存储位置(物理地址)。从而属于同一FTL块的多个日志帧被组织成链表。
在图17的例子中,FTL帧1-1是FTL块1的第一个FTL帧,FTL帧1-2是FTL块1的第2个FTL帧,以此类推,FTL帧1-6是FTL块1的最后一个FTL帧。属于同一FTL块的多个FTL帧可以在固态硬盘日志中连续或不连续地存储。日志帧0-1是用于FTL块0(图17中未示出)的第一个日志帧,日志帧1-1是用于FTL块1的第一个日志帧,日志帧1-2是用于FTL块1的第2个日志帧。日志帧中的条目按生成的顺序排列。
为重建FTL表,在DRAM中存储从日志区获取的FTL块1与FTL块2。从NAND闪存的日志区读取属于FTL块1的所有FTL帧(例如,FTL帧1-1到FTL帧1-6),存储到DRAM,以形成FTL块1。从NAND闪存的日志区读取属于FTL块2的所有FTL帧(例如,FTL帧2-1到FTL帧2-6),存储到DRAM,以形成FTL块2。可以理解地,FTL表可被分成多个FTL块,并在日志区存储。以及在重建FTL表时,从目志区获取多个FTL块并存储到DRAM中。
用日志帧中记录的FTL条目更新DRAM中的FTL块。图17中,由阴影所指示的FTL块的部分已经被更新。日志帧中的日志条目记录了逻辑地址与对应的物理地址。依据日志条目的逻辑地址确定FTL块中的FTL条目,以及用日志条目的物理地址更新所确定的FTL条目。
图17中,在日志区中存储的日志帧1-1与日志帧1-2记录了FTL块1的更新。并且日志帧1-1还存储了其所对应的FTL块1的标识,而日志帧1-2存储了与其同属于FTL块1的前一个日志帧(日志帧1-1)的地址。从而通过在FTL块1上重放日志帧1-1与日志帧1-2中记录的更新,能够获得更新后的FTL块1。类似地,从日志区获取属于FTL块2的日志帧,按日志条目生成的顺序的逆序获取每个日志条目,并用日志条目更新FTL块2。
在根据本申请的实施例中,为加速对FTL表的重建过程,由控制部件的多个CPU协同且并行地实施对FTL表的重建。在FTL表重建过程中,针对每个FTL块,CPU 0从NAND闪存的日志区读出属于该FTL块的多个FTL帧,存储在DRAM中,形成在DRAM中的FTL块(例如,FTL块1),以及从NAND闪存的日志区读出属于该FTL块的多个日志帧,并存储在DRAM中,形成在DRAM中的日志缓存区(例如,参看图17,日志缓存区1)。在将用于FTL块之一(例如,FTL块1)的所有日志帧存储在日志缓存区后,CPU 0告知CPU1,并由CPU 1来处理该FTL块的更新。同时,CPU 0从NAND闪存中获取另一个FTL块(例如,参看图17,FTL块2)以及属于该另一个FTL块的所有日志帧,并存储到DRAM中(例如,参看图17,日志缓存2)。CPU 0与CPU 1可以并行执行,由CPU 0将NAND闪存中的一个FTL块(例如,FTL块2)的FTL帧与日志帧存储到DRAM中,而由CPU 1用DRAM中的另一个FTL块(例如,FTL块1)的日志帧来更新该另一个FTL块。对FTL块的更新完成后,形成了所重建的FTL表的部分。
可以理解地,在根据本申请的实施例中,控制部件还包括其他CPU(例如,CPU 2)。CPU 0将FTL块2及其日志帧存储到DRAM后,指示CPU 2处理对FTL块2的更新。以及控制部件还可包括更多的CPU,除CPU 0外,每个其他CPU处理对FTL块之一的更新。
在根据本申请的实施例中,由CPU 0处理将NAND闪存中的FTL帧与日志帧搬移到DRAM的过程,而由其他CPU处理根据日志帧的日志条目更新FTL块的过程。由于每个FTL块及其日志缓存位于DRAM的不同存储空间,多个其它CPU对FTL块的更新可并行处理,从而进一步加快FTL表的重建过程。
可选地,CPU 0获取日志帧时,基于当前日志帧的元数据确定下一日志帧的地址,从而在读日志帧时对闪存通道的带宽的占用较低。为提高带宽利用率,CPU 0同时获取N个FTL块的日志帧(N是正整数,例如,1-4,而FTL表可包括十几或几十个FTL块)。其他CPU更新FTL块时,从DRAM中访问属于FTL块的多个日志条目,并根据日志条目更新FTL块,此过程存在大量的小尺寸DRAM访问,对CPU的DRAM访问资源有较大的占用。因而将FTL表分为多个FTL块,每个CPU处理对FTL块之一的更新。以此方式,在控件部件的各部分间合理分布重建FTL表的任务,减少资源冲突造成的等待时间,加快FTL表的重建过程。
进一步地,在其他CPU更新FTL块的过程中,CPU 0可同时将NAND闪存中其他FTL块的FTL帧与日志帧搬移到DRAM。从而进一步提升FTL表的重建过程的并行性。
通过由多个CPU协同处理重建FTL表的任务,加快了FTL表的重建过程,减少了固态硬盘启动后用户的等待时间。
图18是根据本申请实施例的FTL表重建过程的示意图。对于每个FTL块,CPU 0(也参看图17)从NAND闪存中读出构成同一FTL块(例如,FTL块2)的FTL帧,并存储在DRAM 1620中。CPU 0还从NAND闪存中读出属于FTL块2的日志帧(在图18的例子中,NAND闪存中存储的日志帧2-1到日志帧2-M是属于FTL块的所有日志帧),并将这些日志帧存储在DRAM 1610中。在将FTL块2以及属于FTL块2的日志帧都存储在DRAM后,CPU 0指示CPU 1(也参看图17)用属于FTL块2的日志帧更新FTL块2。接下来CPU0可从NAND闪存中读出另一FTL块(例如,FTL块3,未示出),并将FTL块3以及属于FTL块3的目志帧存储到DRAM后,指示CPU2用属于FTL块3的日志帧更新FTL块3。
为获取属于FTL块(例如,FTL块2)的日志帧,CPU0从NAND闪存的指定地址(1602)获取属于FTL块2的最后生成的日志帧(日志帧2-M)(1)。在每个日志帧的元数据中,记录了同该日志帧属于相同FTL块的前一日志帧在NAND闪存中的存储地址。CPU 0从最后日志帧2-M中获得FTL块2的倒数第二个日志帧2-(M-1)在NAND闪存中的存储地址(1604)(2),并从NAND闪存的位置(1604)读出日志帧2-(M-1)(3)。类似地,CPU 0从日志帧2-(M-1)中获取同属于FTL块2的前一日志帧的存储地址(4),并从该存储地址读出日志帧,直到CPU 0从NAND闪存中读取了属于FTL块2的所有日志帧(5-7)。CPU0将所读取的属于FTL块2的日志帧存储在DRAM 1610中。随后,CPU 0指示CPU 1开始处理FTL块2的日志帧。
响应于收到CPU 0的指示,CPU 1访问DRAM 1610中属于FTL块2的日志帧。CPU 1从属于FTL块2的所有日志帧中的第一个日志帧(最早生成的日志帧2-1)开始,从日志帧2-1中提取每个日志条目中记录的逻辑地址(例如,LBA z)与物理地址(PBA)(8),依据逻辑地址找到FTL块2中的FTL表条目,并用日志条目中记录的物理地址(PBA)更新DRAM 1620中对应于逻辑地址LBA z的FTL表条目中物理地址(PBA)(9)。对于FTL块2的所有日志帧,CPU1按照日志帧生成的顺序,从前向后依次用每个日志条目更新FTL块2中的FTL条目(10-13)。
可选地,对属于同一FTL块的多个日志帧的多个日志条目按从后向前的顺序更新FTL块。由于在日志条目中可能存在具有相同逻辑地址的多个条目,而这些条目中的最后条目记载了对应FTL条目的最新内容,在更新FTL块时要避免由FTL条目的旧内容替换了新内容。为此目的,在重建FTL块的过程中,对每一个被更新的FTL条目设置标记,在后续重建过程中,若待被日志条目更新的FTL条目上存在标记,则忽略该日志条目(即,不使用该日志条目来更新FTL块)。而当处理了FTL块的所有日志帧后,清除FTL块的所有被设置的标记。
图18中,箭头中的数字指示了由箭头所指示的操作发生的顺序。响应于完成了用日志条目对FTL块2(作为举例)的完整更新,CPU 1(作为举例)通知CPU 0。从而CPU 0可释放用于FTL块2的日志缓存2。并可用FTL块2响应IO命令。
可选地,控制部件的每个CPU可包括SRAM或Cache。为利用日志条目更新FTL块,CPU1或CPU 2从DRAM中的日志缓存将日志条目加载到属于自己的SRAM或Cache,并识别日志条目所指示的逻辑地址与物理地址,并利用逻辑地址与物理地址更新DRAM中的FTL块的FTL条目。SRAM或Cache具有比DRAM高的访问速度(更低的延迟),将日志条目加载到SRAM或Cache中有利于加快用日志条目更新FTL块的过程。
图19是根据本申请实施例的多个CPU协作重建FTL表的流程图。根据图19的实施例的方法可以由固态硬盘的控制部件实施,也可以在访问固态硬盘的主机的控制下实施。在诸如固态硬盘的设备启动时,需要重建FTL表。
在根据本发明的实施例中,将FTL表分成多个FTL块,从固态硬盘日志中独立地重建各个FTL块。由CPU 0确定待重建的FTL块(1910)。例如,从第一个FTL块开始重建。或者,估计存储***启动后将被首先访问的存储区域(例如,主机存储操作***的存储区域),并优先加载对应这部分存储区域的FTL块。或者,在固态硬盘中(例如,固态硬盘日志中)存储上一次或者先前的固态硬盘启动后被首先访问的逻辑地址或对应的FTL块,并作为选择优先重建的FTL块的依据。在固态硬盘上电时,获取所存储的逻辑地址(一个或多个)或FTL块。在固态硬盘上存储了之前启动后被首先访问的逻辑地址时,选择FTL块,使得所选的FTL块的逻辑地址范围包括该被首先访问的逻辑地址。
为重建FTL块,CPU 0从非易失存储介质中的预定位置获取指定FTL块(例如FTL块1)的FTL帧在固态硬盘日志的存储位置。根据本发明的一个实施例,非易失存储介质中记录FTL块1的最后1个FTL帧的存储位置。CPU 0从FTL块1的最后1个FTL帧的存储位置读取FTL帧,并从所读取的FTL帧中获取前1个FTL的存储位置,并读取该前1个FTL帧,以此方式,从固态硬盘日志中读取属于FTL块1的所有FTL帧(1912)。
接下来,CPU 0还从非易失存储介质中的预定位置获取指定FTL块(例如FTL块1)的日志帧在固态硬盘日志的存储位置。根据本发明的一个实施例,非易失存储介质中记录FTL块1的最后1个日志帧的存储位置。CPU 0从FTL块1的最后1个日志帧的存储位置读取日志帧,从所读取的日志帧中获取前1个日志帧的存储位置,以此方式从固态硬盘日志中读取属于FTL块1的所有日志帧(1914),以及将所读取的属于FTL块1的所有日志帧存储到DRAM中。
在将FTL块1以及属于FTL块1的日志帧都存储在DRAM后,为了重建FTL块1,CPU 0指示由CPU 1处理对FTL块1的重建。CPU 1从DRAM获取属于FTL块1的日志条目(1920),并用所获取的日志条目更新FTL块1(1922)。例如,按日志帧中的日志条目被生成顺序的逆序来更新FTL块1。首先,从固态硬盘日志中获得属于FTL块1的最后1个日志帧,将最后一个日志帧中的多个日志条目按从后向前的顺序更新到FTL块1。用日志条目更新FTL块的含义在于,用日志条目中的逻辑地址作为索引,替换FTL块1中的被索引条目的物理地址。接下来,获取属于FTL块1的下一个日志帧,并用其中的日志条目更新FTL块1。
接下来,判断FTL块1是否更新完成(1924),若FTL块1已经更新完成,则完成FTL块1的重建(1926)。若FTL块1未更新完成,则继续步骤1920并获取属于FTL块1的其他日志帧,并用其中的日志条目更新FTL块1。
在根据本发明的实施例中,为提升FTL表重建过程的并行性,在CPU 1重建FTL块1的同时,CPU 0还将NAND闪存的其他FTL块(例如FTL块2)的FTL帧和日志帧搬移到DRAM。
在其他CPU更新FTL块的过程中(例如CPU 1更新FTL块1),为加快FTL表的重建过程,CPU 0指示由CPU 2处理对FTL块2的重建任务,从而减少固态硬盘启动后用户等待的时间。
CPU 2从DRAM获取属于FTL块2的日志条目(1930),并用所获取的日志条目更新FTL块2(1932)。例如,按日志帧中的日志条目被生成顺序的逆序来更新FTL块2。
接下来,判断FTL块2是否更新完成(1934),若FTL块2已经更新完成,则完成FTL块2的重建(1936)。若FTL块2未更新完成,则继续步骤1930,并获取属于FTL块2的其他日志帧,并用其中的日志条目更新FTL块2。
图20是根据本申请又一实施例的多个CPU协作重建FTL表的流程图。
在根据本发明的实施例中,将FTL表分成多个FTL块,从固态硬盘日志中独立地重建各个FTL块。由CPU 0确定待重建的FTL块(2010)。
为重建FTL块,CPU 0从非易失存储介质中的预定位置获取指定FTL块(例如FTL块1)的FTL帧在固态硬盘日志的存储位置。根据本发明的一个实施例,非易失存储介质中记录FTL块1的最后1个FTL帧的存储位置。CPU 0从FTL块1的最后1个FTL帧的存储位置读取FTL帧,并从所读取的FTL帧中获取前1个FTL的存储位置,并读取该前1个FTL帧,以此方式,从固态硬盘日志中读取属于FTL块1的所有FTL帧(2012)。
接下来,CPU 0在DRAM中分配存储空间(2016),作为日志缓存区,用以容纳所重建的FTL块1的日志帧,并请求从非易失存储介质的预定位置读取属于FTL块1的日志帧(2014)。由于每个FTL块包括多个日志帧,需要按照一定顺序对多个日志帧进行读取。根据本发明的一个实施例,为读取属于FTL块1的日志帧,CPU 0从非易失存储介质中的预定位置获取FTL块1的日志帧在固态硬盘日志的存储位置。其中,非易失存储介质中记录FTL块1的最后1个日志帧的存储位置。CPU 0从FTL块1的最后1个日志帧的存储位置读取日志帧,从所读取的日志帧中获取前1个日志帧的存储位置,以此方式,从固态硬盘日志中读取属于FTL块1的所有日志帧。
在图20的例子中,请求读取日志帧的操作(2014)是异步的。在从闪存中读到了日志帧后,CPU 0将收到日志帧读取完成消息(2018)。响应于收到日志帧读取完成消息,CPU 0将所读取的日志帧存储到DRAM中(2020)。可选地,步骤2010到步骤2014可同时为多个FTL块读取FTL帧与日志帧。特别地,步骤2014所占用的闪存带宽较低,通过为多个FTL块在DRAM中分配存储空间,并发出多个读取日志帧的请求(多次执行步骤2014)来提高闪存带宽利用率。
接下来,CPU 0判断是否已获取了属于FTL块1的所有日志帧(2022)。若已获取了属于FTL块1的所有日志帧,则CPU 0向CPU 1发送消息来通知CPU 1对FTL块1进行更新。若尚未获取属于FTL块1的所有日志帧(2022),则依据所读取的日志帧中记录的地址,请求读取属于FTL块1的下一日志帧(2024)。以及类似于步骤2014,步骤2024也是异步的。步骤2024处理完成后,由步骤2018作为响应来接收日志帧读取完成消息。在步骤2022,CPU0判断是否已获取了属于FTL块1的所有日志帧,若已获取了属于FTL块1的所有日志帧,向CPU1发送消息,指示CPU 1用日志帧来更新FTL块1。
响应于收到CPU 0的通知(2026),为更新FTL表,CPU 1从DRAM中获取属于FTL块1的日志条目(2028)。并用所获取的日志条目更新FTL块1(2030)。可选地,若CPU 0同时为多个FTL块读取FTL帧与日志帧,在步骤2022,对于已经获取了所有日志帧的FTL块,CPU 0选择多个CPU之一,并指示所选择的CPU来更新FTL块,从而,多个CPU可同时更新各自的FTL块。
接下来,判断FTL块1的更新是否完成(2032),若FTL块1已经更新完成,则通知CPU0,从而CPU 0可释放为FTL块1的日志帧所分配的日志缓存区,并将日志缓存区分配用于存储其他FTL块的日志帧。若FTL块1未更新完成(2032),则确定下一日志条目在DRAM中的存储位置(2034),并继续步骤2028获取属于FTL块1的其他日志条目以更新FTL块1。在步骤2034,在同一日志帧内,日志条目按生成顺序排列,下一日志条目的存储位置紧邻当前日志条目;若当前日志条目是日志帧内的最后日志条目,则获取下一日志帧,并从下一日志帧中获取当前日志条目的下一日志条目。
本领域的技术人员应明白,本申请的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.快速恢复FTL表的方法,其特征在于,包括:
第一CPU获取属于第一FTL块的FTL帧,以及获取属于第一FTL块的日志帧,并将属于第一FTL块的FTL帧与日志帧分别存储到存储器的不同区域;
第二CPU从所述存储器中获取属于第一FTL块的日志帧,并利用日志帧更新第一FTL块;
其中,FTL块是FTL表的部分,FTL块包括多个FTL帧,每个日志帧属于且仅属于一个FTL块。
2.根据权利要求1所述的方法,其特征在于,还包括:响应于将属于第一FTL块的所有日志帧均存储到存储器中,向第一CPU发送属于第一FTL块的所有日志帧读取完成的消息。
3.根据权利要求1所述的方法,其特征在于,还包括:响应于将属于第一FTL块的所有FTL帧与所有日志帧均存储到存储器中,第一CPU指示由第二CPU更新第一FTL块。
4.根据权利要求1所述的方法,其特征在于,还包括:响应于将属于第一FTL块的所有日志帧均存储到存储器中,第一CPU指示由第二CPU更新第一FTL块。
5.根据权利要求3或4所述的方法,其特征在于,第二CPU对第一FTL块的更新包括:
第二CPU从存储器中的属于第一FTL块的所有日志帧中依次提取日志条目;以及
第二CPU根据每个日志条目中记录的逻辑地址,在存储器中的第一FTL块中确定与该逻辑地址对应的FTL表条目,并用日志条目中与该逻辑地址对应的物理地址更新所确定的FTL表条目中的物理地址。
6.根据权利要求3或4所述的方法,其特征在于,第二CPU对第一FTL块的更新包括:
第二CPU从存储器中提取属于第一FTL块的日志条目;以及
第二CPU根据日志条目中记录的逻辑地址,在存储器中的第一FTL块中确定与该逻辑地址对应的FTL表条目,并用日志条目中与该逻辑地址对应的物理地址更新所确定的FTL表条目中的物理地址。
7.根据权利要求3所述的方法,其特征在于,还包括:响应于将属于第二FTL块的所有FTL帧与日志帧均存储到存储器中,第一CPU指示由第三CPU更新第二FTL块。
8.根据权利要求4所述的方法,其特征在于,还包括:响应于将属于第二FTL块的日志帧存储到存储器中,第一CPU指示由第三CPU更新第二FTL块。
9.根据权利要求7或8所述的方法,其特征在于,第二CPU更新第一FTL块的操作与第三CPU更新第二FTL块的操作同时进行。
10.一种固态存储设备,其特征在于,包括控制部件、NVM芯片与存储器,控制部件分别耦合到NVM芯片与存储器,在控制部件中包括多个CPU,在NVM芯片中的日志区中存储多个FTL块的FTL帧与日志帧;
固态存储设备上电时,所述多个CPU中的第一CPU用于,从NVM芯片中获取属于第一FTL块的FTL帧,以及从NVM芯片中的日志区中获取属于第一FTL块的日志帧,并将属于第一FTL块的FTL帧与日志帧分别存储到存储器的不同区域;
所述多个CPU中的第二CPU用于,从所述存储器中获取属于第一FTL块的日志帧,并利用日志帧更新第一FTL块;
其中,FTL块是FTL表的部分,FTL块包括多个FTL帧,每个日志帧属于且仅属于一个FTL块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710126446.2A CN108536619B (zh) | 2017-03-03 | 2017-03-03 | 快速恢复ftl表的方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710126446.2A CN108536619B (zh) | 2017-03-03 | 2017-03-03 | 快速恢复ftl表的方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108536619A CN108536619A (zh) | 2018-09-14 |
CN108536619B true CN108536619B (zh) | 2021-12-14 |
Family
ID=63489194
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710126446.2A Active CN108536619B (zh) | 2017-03-03 | 2017-03-03 | 快速恢复ftl表的方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108536619B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111367830B (zh) * | 2018-12-06 | 2023-11-14 | 北京忆恒创源科技股份有限公司 | 主机参与的重建ftl表的方法及其存储设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101495980A (zh) * | 2006-07-28 | 2009-07-29 | 日本电气株式会社 | Cpu连接电路、数据处理装置、算术处理设备、使用这些模块的便携式通信终端及数据传送方法 |
CN102760161A (zh) * | 2012-06-12 | 2012-10-31 | 天津神舟通用数据技术有限公司 | 一种基于事务聚集的日志组织结构及实现其相应的恢复协议的方法 |
CN103136116A (zh) * | 2011-12-05 | 2013-06-05 | 财团法人工业技术研究院 | 存储器存储***及其中控装置、管理方法与断电恢复方法 |
CN103201725A (zh) * | 2010-11-25 | 2013-07-10 | 国际商业机器公司 | 用于在多个处理器之间共享的存储器的存储器访问设备及其访问方法 |
WO2016069192A1 (en) * | 2014-10-27 | 2016-05-06 | Sandisk Enterprise Ip Llc | Tracking intermix of writes and un-map commands across power cycles |
CN105988726A (zh) * | 2014-10-31 | 2016-10-05 | 株式会社东芝 | 存储装置及用于利用电源无效信号的方法 |
CN106354615A (zh) * | 2015-07-21 | 2017-01-25 | 北京忆恒创源科技有限公司 | 固态硬盘日志生成方法及其装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043727B (zh) * | 2009-10-10 | 2014-04-02 | 成都市华为赛门铁克科技有限公司 | 恢复固态硬盘映射表的方法及其装置 |
CN102955742A (zh) * | 2012-10-31 | 2013-03-06 | 浪潮集团有限公司 | 一种***上电后固态硬盘地址映射表的快速重建方法 |
WO2014155525A1 (ja) * | 2013-03-26 | 2014-10-02 | 株式会社日立製作所 | ストレージシステム及び制御方法 |
-
2017
- 2017-03-03 CN CN201710126446.2A patent/CN108536619B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101495980A (zh) * | 2006-07-28 | 2009-07-29 | 日本电气株式会社 | Cpu连接电路、数据处理装置、算术处理设备、使用这些模块的便携式通信终端及数据传送方法 |
CN103201725A (zh) * | 2010-11-25 | 2013-07-10 | 国际商业机器公司 | 用于在多个处理器之间共享的存储器的存储器访问设备及其访问方法 |
CN103136116A (zh) * | 2011-12-05 | 2013-06-05 | 财团法人工业技术研究院 | 存储器存储***及其中控装置、管理方法与断电恢复方法 |
CN102760161A (zh) * | 2012-06-12 | 2012-10-31 | 天津神舟通用数据技术有限公司 | 一种基于事务聚集的日志组织结构及实现其相应的恢复协议的方法 |
WO2016069192A1 (en) * | 2014-10-27 | 2016-05-06 | Sandisk Enterprise Ip Llc | Tracking intermix of writes and un-map commands across power cycles |
CN105988726A (zh) * | 2014-10-31 | 2016-10-05 | 株式会社东芝 | 存储装置及用于利用电源无效信号的方法 |
CN106354615A (zh) * | 2015-07-21 | 2017-01-25 | 北京忆恒创源科技有限公司 | 固态硬盘日志生成方法及其装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108536619A (zh) | 2018-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11768632B2 (en) | Memory system and method of controlling nonvolatile memory | |
US11669444B2 (en) | Computing system and method for controlling storage device | |
US11467955B2 (en) | Memory system and method for controlling nonvolatile memory | |
EP3726364B1 (en) | Data write-in method and solid-state drive array | |
CN106354615B (zh) | 固态硬盘日志生成方法及其装置 | |
US11947837B2 (en) | Memory system and method for controlling nonvolatile memory | |
CN106874211B (zh) | 存储器***及非易失性存储器的控制方法 | |
JP6224253B2 (ja) | フラッシュメモリ内に記憶されたデータの推測的プリフェッチ | |
US10468077B2 (en) | Adaptive object buffering and meta-data indexing using persistent memory to improve flash memory durability in tiered storage | |
US11762591B2 (en) | Memory system and method of controlling nonvolatile memory by controlling the writing of data to and reading of data from a plurality of blocks in the nonvolatile memory | |
US11321231B2 (en) | Memory system and method of controlling nonvolatile memory with a write buffer | |
US20200364145A1 (en) | Information processing apparatus and method for controlling storage device | |
US12014090B2 (en) | Memory system and method of controlling nonvolatile memory and for reducing a buffer size | |
US20220058116A1 (en) | Controller, memory system and data processing system | |
US11163493B2 (en) | Memory system and method of controlling nonvolatile memory with checking a total size indicative of a sum of data length specified by a write command | |
CN107544912B (zh) | 一种日志记录方法、加载方法及其装置 | |
CN113986773A (zh) | 基于固态硬盘的写放大优化方法、装置及计算机设备 | |
CN108536619B (zh) | 快速恢复ftl表的方法与装置 | |
CN107544866B (zh) | 一种日志更新方法与装置 | |
CN107544913B (zh) | 一种ftl表快速重建方法与装置 | |
CN109002265B (zh) | 一种数据处理的方法以及相关装置 |
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 | ||
CB02 | Change of applicant information |
Address after: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing Applicant after: Beijing yihengchuangyuan Technology Co.,Ltd. Address before: 100192 Room 302, 3 / F, building B-2, Dongsheng Science Park, 66 xixiaokou Road, Haidian District, Beijing Applicant before: BEIJING MEMBLAZE TECHNOLOGY Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |