掌桥专利:专业的专利平台
掌桥专利
首页

基于FTL表的日志生成方法与装置

文献发布时间:2023-06-19 10:05:17


基于FTL表的日志生成方法与装置

技术领域

本申请涉及计算机技术领域,特别是涉及基于FTL表的日志生成方法与装置。

背景技术

随着科技的进步,对于电子设备的存储能力和反应速度提出了越来越高的要求,图1示出了现有技术中的固态存储设备(Solid Storage Device,SSD)的框图。存储设备102通过接口103同主机相耦合,主机可以是能够通过上述方式同存储设备102相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM(非易失存储器,Non-Volatile Memory)存储芯片105以及固件存储器110。接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SCSI、以太网、光纤通道等方式与主机交换数据。控制部件104用于控制在接口103、NVM存储芯片105以及固件存储器110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件104在运行时从固件存储器110加载固件。

在现有技术的固态存储设备中,例如图1所示出的存储设备102中,利用FTL(FlashTranslation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。

存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。固态存储设备的FTL表具有较大的尺寸,例如若干GB级。而在固态存储设备关闭时,需要完整地保存FTL表,在固态存储设备启动时,需要完成FTL完全加载。

现有技术中,在固态存储设备的每个物理页中附加地存储该物理页所对应的逻辑地址。在固态存储设备启动时,需要访问所有物理页,以获得每个物理页所对应的逻辑地址,并重建FTL表。然而这样的操作将需要大量时间,并导致固态存储设备启动过程耗时很长。

在中国专利申请(201510430174.6)中,提供了一种日志生成重建方法。

发明内容

有鉴于此,本申请提供一种日志更新方法与装置。

根据本发明的第一方面,提供了根据本发明的第一方面的第一基于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表的日志生成装置,包括:地址记录模块,用于记录操作请求对应的逻辑地址与物理地址;日志帧生成模块,用于依据操作请求所对应的逻辑地址与物理地址生成日志帧;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表的日志更新方法。

由以上技术方案可见,本发明提出的一种日志更新方法与装置,获得了以下技术效果:

1、本申请提出的日志更新方法,通过在日志帧过长时,对日志区的FTL块进行更新,减少对日志区存储空间的占用,并且有效提高日志恢复的速度。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1是现有技术中固态存储设备的结构示意图;

图2是根据本发明的一个实施例的固态硬盘日志的结构框图;

图3是是根据本发明的实施例的FTL表的结构框图;

图4是根据本发明的实施例的“写”日志的结构框图

图5是根据本发明的实施例的固态硬盘日志生成方法的流程图;

图6是根据本发明的另一个实施例的固态硬盘日志的结构框图;

图7是根据本发明的又一实施例的固态硬盘日志生成方法的流程图;

图8是根据本发明的实施例的利用日志重建FTL表方法的流程图;

图9是根据本发明实施例的固态硬盘的框图;

图10是根据本发明实施例的响应掉电事件而生成固态硬盘日志的示意图;

图11A是根据本发明又一实施例的FTL块更新的示意图;

图11B是根据本发明另一实施例的FTL块更新的示意图;

图12是根据本发明依然另一实施例的固态硬盘的框图;

图13是根据本发明的一个实施例的非易失RAM日志的结构框图;

图14是根据本发明的另一个实施例的非易失RAM日志的结构框图;

图15是根据本发明的又一实施例的固态硬盘日志生成方法的流程图;以及

图16是根据本发明的实施例的设备启动方法的流程图。

具体实施方式

本申请提出一种日志更新方法,通过在日志帧过长时,对日志区的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块。

本领域的技术人员应明白,本申请的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

相关技术
  • 基于FTL表的日志生成方法与装置
  • 基于跨表查询的数据表生成方法、装置、设备及存储介质
技术分类

06120112410269