一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

存储日志帧以及日志条目的固态硬盘的制作方法

2021-11-03 14:41:00 来源:中国专利 TAG:


1.本技术涉及固态硬盘,特别是涉及固态硬盘日志的生成与使用。


背景技术:

2.随着科技的进步,对于电子设备的存储能力和反应速度提出了越来越高的要求,图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加载固件。
3.在现有技术的固态存储设备中,例如图1所示出的存储设备102中,利用ftl(flash translation layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
4.存储了从逻辑地址到物理地址的映射信息的表结构被称为ftl表。ftl表是固态存储设备中的重要元数据。通常ftl表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。固态存储设备的ftl表具有较大的尺寸,例如若干gb级。而在固态存储设备关闭时,需要完整地保存ftl表,在固态存储设备启动时,需要完成ftl完全加载。
5.现有技术中,在固态存储设备的每个物理页中附加地存储该物理页所对应的逻辑地址。在固态存储设备启动时,需要访问所有物理页,以获得每个物理页所对应的逻辑地址,并重建ftl表。然而这样的操作将需要大量时间,并导致固态存储设备启动过程耗时很长。
6.在中国专利申请(201510430174.6)中,提供了基于日志的ftl表存储与加载方法。这种基于日志的ftl表存储与加载方法ftl帧采用轮转的写入方式,并且ftl帧与日志帧按固定比例写入日志,在异常事件发生时,依然写入ftl帧。


技术实现要素:

7.有鉴于此,本技术提供一种日志记录方法、加载方法及其装置。
8.根据本发明的第一方面,提供了根据本发明第一方面的第一基于ftl表的日志生成方法,包括:记录操作请求对应的逻辑地址与物理地址作为日志条目;用日志条目生成日志帧;使用ftl块的部分生成ftl帧,其中ftl表包括多个ftl块;在nvm上存储生成的ftl帧和
第一日志帧。
9.根据本发明第一方面的第一基于ftl表的日志生成方法,提供了根据本发明第一方面的第二基于ftl表的日志生成方法,其中,所述ftl帧与日志帧的组合的大小对应于nvm物理页的大小。
10.根据本发明第一方面的第一或第二基于ftl表的日志生成方法,提供了根据本发明第一方面的第三基于ftl表的日志生成方法,其中,所述ftl块的部分来自所述ftl块尚未被写入非易失存储介质中的部分。
11.根据本发明第一方面的第一、第二或第三基于ftl表的日志生成方法,提供了根据本发明第一方面的第四基于ftl表的日志生成方法,其中组合一个或多个ftl帧与一个或多个日志帧并写入nvm的(一个)物理页。
12.根据本发明第一方面的第一至第四之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第五基于ftl表的日志生成方法,还包括,响应于异常事件发生,将多个日志帧写入nvm的物理页,使得所述物理页中不包括ftl帧。
13.根据本发明第一方面的第一至第四之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第六基于ftl表的日志生成方法,还包括,响应于异常事件发生,按照优先级高低改变nvm上存储的ftl帧和日志帧的比例。
14.根据本发明第一方面的第一至第四之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第七基于ftl表的日志生成方法,其中,响应于异常事件发生,还包括:在nvm的启动页中存储每个ftl块的最后ftl帧在nvm中的地址与最后日志帧在nvm中的地址。
15.根据本发明第一方面的第一至第四之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第八基于ftl表的日志生成方法,其中,响应于异常事件发生,还包括:在nvm的启动页中存储每个ftl块的最后ftl帧组在nvm中的物理页地址与最后日志帧组在nvm中的物理页地址,其中ftl帧组是存储于相同nvm物理页上的多个ftl帧,以及日志帧组是存储于相同nvm物理页上的多个日志帧。
16.根据本发明第一方面的第一至第八之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第九基于ftl表的日志生成方法,其中,按照ftl表的内存地址将所述ftl表分成多个ftl块。
17.根据本发明第一方面的第一至第九之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第十基于ftl表的日志生成方法,其中,所述多个ftl块来自所述ftl表的不同部分。
18.根据本发明第一方面的第一至第十之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第十一基于ftl表的日志生成方法,其中,按照ftl块的地址的顺序将ftl帧写入nvm中。
19.根据本发明第一方面的第一至第十一之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第十二基于ftl表的日志生成方法,其中,所述ftl帧包括元数据,记录了与该ftl帧属于同一ftl块的前一个ftl帧在nvm上的存储位置。
20.根据本发明第一方面的第一至第十二之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第十三基于ftl表的日志生成方法,还包括,使用第二ftl块的部分生成第二ftl帧;在nvm上存储生成的第二ftl帧和第二日志帧;其中,第二ftl帧包括第二指
针,所述第二指针记录了属于第二ftl块的前一个ftl帧在nvm上的存储位置。
21.根据本发明第一方面的第一至第十三之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第十四基于ftl表的日志生成方法,其中所述第二日志帧包括指针,记录了所述第一日志帧在nvm的存储位置,其中所述第一日志帧与所述第二日志帧的逻辑地址属于相同的ftl块。
22.根据本发明第一方面的第一至第十四之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第十五基于ftl表的日志生成方法,,其中,所述日志帧包括元数据,记录了与该日志帧属于同一ftl块的前一个日志帧的存储位置。
23.根据本发明第一方面的第一至第十四之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第十六基于ftl表的日志生成方法,其中第一日志帧包括指针,所述指针记录了在nvm上存储第三日志帧的地址,所述第一日志帧与所述第三日志帧的逻辑地址属于相同的ftl块。
24.根据本发明第一方面的第一至第十六之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第十七基于ftl表的日志生成方法,其中所述用日志条目生成日志帧包括:判断日志条目数量,如果日志条目的数量达到生成日志帧标准,则生成日志帧。
25.根据本发明第一方面的第一十七基于ftl表的日志生成方法,提供了根据本发明第一方面的第十八基于ftl表的日志生成方法,其中,生成日志条目的同时生成填充数据,在判断日志条目数量时,加入填充数据后,再进行判断是否达到生成日志帧标准。
26.根据本发明第一方面的第十七或第十八基于ftl表的日志生成方法,提供了根据本发明第一方面的第十九基于ftl表的日志生成方法,其中,所述日志帧的大小对应于nvm的物理页的大小。
27.根据本发明第一方面的第十七至第十九之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第二十基于ftl表的日志生成方法,其中,nvm的物理页的大小为所述日志帧的大小的整数倍。
28.根据本发明第一方面的第十七至第二十之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第二十一基于ftl表的日志生成方法,其中,所述日志帧还包括元数据;元数据指示所述日志帧所属的ftl块。
29.根据本发明第一方面的第二十一基于ftl表的日志生成方法,提供了根据本发明第一方面的第二十二基于ftl表的日志生成方法,其中,元数据中还记录属于相同ftl块的前一日志帧。
30.根据本发明第一方面的第一至第二十二之一基于ftl表的日志生成方法,提供了根据本发明第一方面的第二十三基于ftl表的日志生成方法,其中,每个日志帧包括前一个日志帧生成后向固态硬盘发出的多个写请求或者对ftl表的更新所对应的逻辑地址与物理地址。
31.根据本发明的第二方面,提供了根据本发明第二方面的第一利用日志重建ftl表的方法,包括:获取ftl块的ftl帧与日志帧的存储位置;读取属于所述ftl块的多个ftl帧与多个日志帧;利用所述多个ftl帧重建ftl块;以及利用日志帧更新ftl块;其中ftl块是ftl表的部分。
32.根据本发明第二方面的第一利用日志重建ftl表的方法,提供了根据本发明第二
方面的第二利用日志重建ftl表的方法,其中确定待重建的ftl块为从第一ftl块开始重建。
33.根据本发明第二方面的第一或第二利用日志重建ftl表的方法,提供了根据本发明第二方面的第三利用日志重建ftl表的方法,其中所述获取ftl块的ftl帧与日志帧的存储位置包括:从非易失存储介质中获取第一ftl块的最后ftl帧的存储位置,以及第一ftl块的最后日志帧的存储位置。
34.根据本发明第二方面的第一至第三之一利用日志重建ftl表的方法,提供了根据本发明第二方面的第四利用日志重建ftl表的方法,其中所述利用日志帧更新ftl块,包括按日志帧中的日志条目被生成顺序来更新ftl块或按日志帧中的日志条目被生成顺序的逆序来更新ftl块。
35.根据本发明第二方面的第四利用日志重建ftl表的方法,提供了根据本发明第二方面的第五利用日志重建ftl表的方法,其中按日志帧中的日志条目被生成顺序的逆序来更新ftl块,包括:获得属于第一ftl块的第一日志帧;将第一日志帧中的多个日志条目按从后向前的顺序更新到该ftl块;对被更新的ftl条目设置标记;若待被日志条目更新的ftl条目上存在标记,则忽略该日志条目;将所有属于第一ftl块的日志帧都更新到第一ftl块后,或者第一ftl块的所有ftl条目都存在标记后,将当前ftl块的ftl条目的标记清除。
36.根据本发明第二方面的第五利用日志重建ftl表的方法,提供了根据本发明第二方面的第六利用日志重建ftl表的方法,还包括:从所述第一日志帧中获取第二日志帧的地址并获取第二日志帧,并按所述第二日志帧中的日志条目被生成的顺序的逆序来更新第一ftl块,其中所述第一日志帧与所述第二日志帧属于相同的ftl块。
37.根据本发明第二方面的第六利用日志重建ftl表的方法,提供了根据本发明第二方面的第七利用日志重建ftl表的方法,其中所述第一日志帧是第一ftl块的最后日志帧;以及所述第二日志帧是按生成顺序在所述第一日志帧的紧邻前一个日志帧。
38.根据本发明第二方面的第四利用日志重建ftl表的方法,提供了根据本发明第二方面的第八利用日志重建ftl表的方法,其中按日志帧中的日志条目被生成顺序来更新ftl块,包括:获得属于第一ftl块的第一日志帧;将第一日志帧中的多个日志条目按从前向后的顺序更新到该ftl块;重复上述步骤以将所有属于第一ftl块的日志帧都更新到第一ftl块。
39.根据本发明第二方面的第八利用日志重建ftl表的方法,提供了根据本发明第二方面的第九利用日志重建ftl表的方法,还包括:从所述第一日志帧中获取第二日志帧的地址并获取第二日志帧,并按所述第二日志帧中的日志条目被生成的顺序来更新第一ftl块,其中所述第一日志帧与所述第二日志帧属于相同的ftl块。
40.根据本发明第二方面的第九利用日志重建ftl表的方法,提供了根据本发明第二方面的第十利用日志重建ftl表的方法,其中所述第一日志帧是第一ftl块的最早的日志帧;以及所述第二日志帧是按生成顺序在所述第一日志帧的紧邻后一个日志帧。
41.根据本发明第二方面的第一至第十利用日志重建ftl表的方法,提供了根据本发明第二方面的第十一利用日志重建ftl表的方法,其中ftl帧包括元数据,记录了与该ftl帧属于同一ftl块的前一个ftl帧的存储位置。
42.根据本发明第二方面的第一至第十一利用日志重建ftl表的方法,提供了根据本发明第二方面的第十二利用日志重建ftl表的方法,其中日志帧包括元数据,记录了与该日
志帧属于同一ftl块的前一个日志帧的存储位置。
43.根据本发明的第三方面,提供了根据本发明第三方面的第一存储日志帧以及日志条目的固态硬盘,包括:包括多个物理页的非易失存储介质;其中每个物理页包括一个或多个ftl帧和/或一个或多个日志帧;其中每个ftl帧包括多个ftl表条目与记录了与该ftl帧属于同一ftl块的前一个ftl帧的存储位置的元数据,每个日志帧包括多个操作日志条目与记录了与该日志帧帧属于同一ftl块的前一个日志帧帧的存储位置,每个操作日志条目包括一个逻辑地址以及与之相对应的物理地址,以及ftl块是ftl表的部分。
44.根据本发明第三方面的第一存储日志帧以及日志条目的固态硬盘,提供了根据本发明第三方面的第二存储日志帧以及日志条目的固态硬盘,还包括:在nvm的启动页中存储每个ftl块的最后ftl帧在nvm中的地址与最后日志帧在nvm中的地址。
45.根据本发明第三方面的第一存储日志帧以及日志条目的固态硬盘,提供了根据本发明第三方面的第三存储日志帧以及日志条目的固态硬盘,还包括:在nvm的启动页中存储每个ftl块的最后ftl帧组在nvm中的物理页地址与最后日志帧组在nvm中的物理页地址,其中ftl帧组是存储于相同nvm物理页上的多个ftl帧,以及日志帧组是存储于相同nvm物理页上的多个日志帧。
46.根据本发明第三方面的第一存储日志帧以及日志条目的固态硬盘,提供了根据本发明第三方面的第四存储日志帧以及日志条目的固态硬盘,其中日志帧包括元数据,元数据指示该日志帧所属的ftl块。
47.根据本发明第三方面的第一存储日志帧以及日志条目的固态硬盘,提供了根据本发明第三方面的第五存储日志帧以及日志条目的固态硬盘,其中属于同一ftl块的多个ftl帧占据固态硬盘中连续的物理地址空间。
48.根据本发明第三方面的第五存储日志帧以及日志条目的固态硬盘,提供了根据本发明第三方面的第六存储日志帧以及日志条目的固态硬盘,其中所述多个ftl帧占据固态硬盘中连续的物理地址空间不包括坏块空间。
49.根据本发明第三方面的第一存储日志帧以及日志条目的固态硬盘,提供了根据本发明第三方面的第七存储日志帧以及日志条目的固态硬盘,其中非易失存储介质是mlc(multi level cell,多级单元)或tlc(triple level cell,三级单元)非易失存储介质。
50.根据本发明第三方面的第一存储日志帧以及日志条目的固态硬盘,提供了根据本发明第三方面的第八存储日志帧以及日志条目的固态硬盘,其中,使用pslc(pseudo

slc,伪slc)模式或slc(single level cell,单级单元)模式访问所述多个物理页。
51.根据本发明的第四方面,提供了根据本发明第四方面的第一固态硬盘,其特征在于,包括控制器、nvm、随机访问存储器;控制器分别耦合到nvm与随机访问存储器;nvm中包括日志区与用户数据区;在日志区中存储固态硬盘日志;在用户数据区存储用户数据;其中在存储器中存储有ftl表,所述ftl表包括多个ftl块;其中所述控制器用于执行根据本发明第一方面的第一至第二十三之一基于ftl表的日志生成方法。
52.根据本发明第四方面的第一固态硬盘,提供了根据本发明第四方面的第二固态硬盘,其中在dram中存储了ftl表,在日志区中存储的日志帧记录了所述ftl表的更新;日志帧中还存储了与该日志帧属于相同ftl块的前一个日志帧的地址。
53.根据本发明第四方面的第一固态硬盘,提供了根据本发明第四方面的第三固态硬
盘,其中nvm的启动页中存储各个ftl块的ftl帧与日志帧的在日志区的地址。
54.根据本发明第四方面的第一固态硬盘,提供了根据本发明第四方面的第四固态硬盘,其中属于同一ftl块的ftl帧组织成链表,而属于同一ftl块的日志帧也组织为链表;在启动页中存储每个ftl块的ftl帧链表与日志帧链表在日志区的首地址与尾地址。
55.根据本发明第四方面的第一固态硬盘,提供了根据本发明第四方面的第五固态硬盘,其中在启动页中存储每个ftl块的ftl帧链表的头节点与尾节点在日志区的存储位置,以及日志帧链表的头节点与尾节点在日志区的存储位置。
56.根据本发明第四方面的第一固态硬盘,提供了根据本发明第四方面的第六固态硬盘,还包括nor闪存,以及在nand闪存中存储了多个启动页,用于提供启动页的备份或启动页的不同版本;在nor闪存中存储有效启动页的存储位置。
57.根据本发明的第五方面,提供了根据本发明第五方面的第一固态硬盘,包括控制器、nvm、随机访问存储器;控制器分别耦合到nvm与随机访问;nvm中包括日志区与用户数据区;在日志区中存储固态硬盘日志;在用户数据区存储用户数据;其中在存储器中存储有ftl表,所述ftl表包括多个ftl块;在所述固态硬盘启动时所述控制器执行根据本发明第二方面的第一至第十二利用日志重建ftl表的方法。
58.根据本发明的第六方面,提供了根据本发明第六方面的第一基于ftl表的日志生成装置,包括:日志条目生成模块,用于记录操作请求对应的逻辑地址与物理地址作为日志条目;日志帧生成模块,用于通过日志条目生成模块生成的日志条目来生成日志帧;ftl帧生成模块,用于使用ftl块的部分生成ftl帧,其中ftl表包括多个ftl块;存储模块,用于在nvm上存储生成的ftl帧和第一日志帧。
59.根据本发明的第七方面,提供了根据本发明第七方面的第一利用日志重建ftl表装置,包括:存储位置获取模块,用于获取ftl块的ftl帧与日志帧的存储位置;帧读取模块,用于读取属于所述ftl块的多个ftl帧与多个日志帧;ftl块重建模块,用于利用所述多个ftl帧重建ftl块,其中ftl块是ftl表的部分;ftl块更新模块,利用日志帧更新ftl块,其中ftl块是ftl表的部分。
60.根据本发明的第八方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序代码使所述存储设备执行根据本发明第一方面的基于ftl表的日志生成方法。
61.根据本发明的第九方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序代码使所述存储设备执行根据本发明第二方面的利用日志重建ftl表的方法。
62.在根据本发明的实施例中,将ftl表拆分成多个ftl块,每个ftl块对应了相应的ftl帧与日志帧,属于同一个ftl块的ftl帧与日志帧分别组成链表,使得重建ftl表时,可以减少数据写入量,提高恢复速度,在异常事件发生时,通过改变日志中日志帧的存储比例使得能尽可能的减少数据损失,并在重建恢复时,通过链表的设置,可以很快地恢复ftl表的数据,同时在重建恢复时,通过逆序来更新ftl表,可以使得固态硬盘在异常事件发生时恢复速度更快。
附图说明
63.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
64.图1是现有技术中固态存储设备的结构示意图;
65.图2是根据本发明的一个实施例的固态硬盘日志的结构框图;
66.图3是是根据本发明的实施例的ftl表的结构框图;
67.图4是根据本发明的实施例的“写”日志的结构框图
68.图5是根据本发明的实施例的固态硬盘日志生成方法的流程图;
69.图6是根据本发明的另一个实施例的固态硬盘日志的结构框图;
70.图7是根据本发明的又一实施例的固态硬盘日志生成方法的流程图;
71.图8是根据本发明的实施例的利用日志重建ftl表方法的流程图;
72.图9是根据本发明实施例的固态硬盘的框图;以及
73.图10是根据本发明实施例的响应掉电事件而生成固态硬盘日志的示意图。
具体实施方式
74.本技术提出了一种日志记录方法、加载方法及其装置,将ftl表拆分成多个ftl块,每个ftl块对应了相应的ftl帧与日志帧,属于同一个ftl块的ftl帧与日志帧分别组成链表,使得重建ftl表时,可以减少数据写入量,提高恢复速度。在异常事件发生时,通过改变日志中日志帧的存储比例使得能尽可能的提升日志使用效率,并在重建ftl表时,通过链表的设置,可以很快地恢复ftl表的数据,同时在重建ftl表时,通过逆序来更新ftl表,可以使在异常事件发生时ftl表的恢复速度更快。
75.当然,实施本技术的任一技术方案必不一定需要同时达到以上的所有优点。
76.为了使本领域的人员更好地理解本技术中的技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本技术保护的范围。
77.下面结合本技术附图进一步说明本技术具体实施方式。
78.图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帧与日志帧的组合写入非易失存储介质。
79.在根据本发明的一个实施例中,非易失存储介质是mlc(multi level cell,多级单元)或tlc(triple level cell,三级单元)非易失存储介质,将固态硬盘日志存储到非易失存储介质的数据页时,使用pslc(pseudo

slc,伪slc)模式或slc(single level cell,单级单元)模式访问非易失存储介质,以加快固态硬盘日志存储过程并获得较高的数据可靠性。作为另一种实施方式,在slc非易失存储介质中存储固态硬盘日志。在依然又一个实施例中,在mlc非易失存储介质的lsb页中存储固态硬盘日志。
80.对应于各个ftl块的日志帧的数量可以是不同的。参看图2,在一段时间内不存在对ftl块3的更新,因而在固态硬盘日志210中不存在对应于ftl块3的日志帧。而存在对ftl块1的多次更新,因而用3个日志帧(231、232、235)记录对ftl块1的所有更新操作。
81.在图2的实施例中,固态硬盘日志210中按ftl块在ftl表中的内存地址的顺序存储ftl块(例如,ftl块2在ftl块1之后存储),而按日志帧生成的顺序记录日志帧。每个日志帧属于且仅属于一个ftl块。在一个例子中,在内存中缓存属于各个ftl块的“写”日志条目。在属于某个ftl块的“写”日志条目填满一个日志帧时,将日志帧写入固态硬盘日志。
82.以此方式,ftl表在固态硬盘日志中可以仅需保存一份完整记录,并在固态硬盘日志中记录对ftl表项的每次更新。在不发生ftl表项更新时,无需再将ftl表记录在固态硬盘日志中,从而节省了系统资源。在发生ftl表项更新时,仅将对ftl表项的修改记录在日志帧中,减少了固态硬盘日志的写入数据量。
83.利用固态硬盘日志210,能够重建ftl表。由于存储设备掉电等原因,内存中的ftl表消失,需要读取固态硬盘日志210并重建ftl表。为重建ftl表,在固态硬盘的非易失性存储介质中,还存储各个ftl块在固态硬盘中的存储地址(物理地址),以及属于各个ftl块的最后日志帧的物理地址(可选地,也存储属于各个ftl块的最早日志帧的物理地址)。
84.在重建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)的地址。
85.作为本发明的另一举例,为重建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)的地址。
86.图3是根据本发明的实施例的ftl表的结构框图。ftl表包括多个ftl表条目(或称表项)。在一个实施例中,每个ftl表条目中记录了一个逻辑页地址与一个物理页的对应关系。在又一个实施例中,每个ftl表条目中记录了逻辑块地址与物理块地址的对应关系。在依然又一个实施例中,ftl表中记录逻辑块地址与物理块地址的映射关系,和/或逻辑页地址与物理页地址的映射关系。在依然另一个实施例中,ftl表组织为树结构。
87.在依然又一个实施例中,在连续的内存地址空间中存储ftl表,每个ftl表条目中记录物理地址,而以每个ftl表条目自身的内存地址代表对应于物理地址的逻辑地址。ftl表条目的数量对应于固态存储设备逻辑地址空间的大小。
88.为了在非易失存储介质中存储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在内存中按内存地址连续存储。
89.在根据本发明的实施例中,还将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逻辑/物理地址空间。
90.在固态存储设备处理写请求时,为该写请求分配物理地址,并在ftl表中记录该写请求的逻辑地址与物理地址的对应关系。在另一个实施例中,由访问固态存储设备的主机
维护ftl表,在需要向固态存储发出写请求时,为该写请求分配固态存储设备的物理地址,并在ftl表中记录该写请求的逻辑地址与物理地址的对应关系。
91.图4是根据本发明的实施例的“写”日志的结构框图。在固态存储设备处理写请求时,还生成“写”日志。在“写”日志中记录了写操作对应的逻辑地址与物理地址。对于每个ftl表项的更新请求,生成一条对应的“写”日志条目。
92.为了在非易失存储介质中存储“写”日志的目的,将“写”日志组织为日志帧410(参看图4)。每个日志帧410包括多个“写”日志条目(422、424、42n)(或称“表项”)。每个“写”日志条目(422、424或42n)包括一个逻辑地址以及与之相对应的物理地址。按照接收ftl表被更新的先后顺序生成并在日志帧中组织“写”日志条目。因而在“写”日志中,可能存在具有相同逻辑地址和/或物理地址的“写”日志条目。
93.每个日志帧410的大小同非易失存储介质的最小写入单位相对应(例如,页)。非易失存储介质的数据页大小通常为2kb、4kb、8kb或16kb。在一个实施例中,非易失存储介质的数据页大小为16kb,而日志帧大小为2kb、4kb、8kb或16kb。在另一个实施例中,非易失存储介质的数据页大小为4kb,而日志帧大小为512b、1kb或2kb或4kb。一般地,选择日志帧大小,使得非易失存储介质的数据页大小是日志帧大小的整数倍,以便于将一个或多个日志帧存储到非易失存储介质的数据页。在又一个实施例中,一个或多个ftl帧与一个或多个“写”日志数据帧构成非易失存储介质的一个数据页。
94.在根据本发明实施例的日志帧410中还包括元数据440,元数据440中指示了日志帧410属于ftl块1。日志帧410属于ftl块1,意味着日志帧410中的条目记录了对ftl块1的条目的更新,换句话说,日志帧410中的条目的逻辑地址均在ftl块1的逻辑地址范围内。
95.在一个例子中,提供队列来容纳“写”日志条目。在“写”日志被产生时,将日志条目插入队列(队尾)。可选地,组合多个条目并在一次内存访问操作中插入队列,所组合的多个条目的尺寸可以等于总线宽度或内存接口宽度。在从队列的队头取出日志条目中,按日志帧大小取出指定数目的日志条目。队列是先进先出的,从而使得在固态硬盘日志中能够容易识别日志条目的生成顺序。恰当选择队列的深度,使得在发生掉电时,在备用电源供电的有限时间内,能够将队列中的日志条目写入到固态硬盘日志。
96.在另一个例子中,提供日志帧缓冲区来容纳“写”日志条目。日志帧缓冲区具有对应于一个或多个日志帧的大小。恰当选择缓冲区的大小,使得在发生掉电时,在备用电源供电的有限时间内,能够将日志帧缓冲区中的日志条目写入到固态硬盘日志。当日志帧缓冲区积累了日志帧大小的数据时,将其内容写入到固态硬盘日志中。
97.在进一步的例子中,向队列或日志帧缓冲区添加“写”日志条目时,还检查队列或缓冲区中是否已存在具有相同逻辑地址的条目。若在队列或缓冲区中已经记录了具有相同逻辑地址的条目,则用要写入的日志条目更新队列或缓冲区中的已有条目,从而减少要写入固态硬盘日志的数据量。
98.如图5所示,是根据本发明的实施例的基于ftl表的固态硬盘日志生成方法的流程图。在更新ftl表时,记录被更新的ftl表项的逻辑地址与物理地址的对应关系(510)。可选地相应更新ftl表。缓存所记录的逻辑地址与物理地址的对应关系,每一条逻辑地址与物理地址的对应关系,构成一个“写”日志条目。一定数量“写”日志条目构成一个日志帧。在同一日志帧中的“写”日志条目记录的是对相同的ftl块的ftl条目的更新。当缓存的多条逻辑地
址与物理地址的对应关系能够构成一个日志帧时,利用缓存的多条逻辑地址与物理地址的对应关系生成日志帧(520)。还选择内存中的ftl表的多个ftl块之一的部分生成ftl帧(530)。例如,所选择的ftl块的部分是ftl块1的尚未被写入到非易失存储介质的部分。在优选实施例中,ftl帧1

1(220)与日志帧(230)的组合的大小对应于固态硬盘的非易失存储介质的数据页大小,从而可通过一次非易失存储介质的写操作将ftl帧1

1(220)与日志帧(230)的组合写入固态硬盘的非易失存储介质(540)。
99.根据本发明的又一个实施例,每接收到预定数量的写请求,生成一个日志帧,其中一个日志帧中能够容纳该预定数量的写请求所对应的逻辑地址与物理地址的映射关系。而每生成一个日志帧,则选择ftl表的部分生成ftl帧。根据本发明的依然又一个实施例,周期地利用所缓存的“写”日志条目生成日志帧。以及每生成一个日志帧,则选择ftl表的部分生成ftl帧。根据本发明的依然又一个实施例,日志帧的大小对应于非易失存储介质的数据页大小,ftl帧的大小也对应于非易失存储介质的数据页大小。
100.根据本发明的依然又一个实施例,生成ftl表的ftl帧时,按ftl块自身的内存地址而选择ftl块的部分来生成ftl帧。
101.例如,选择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表。
102.以此方式,每次向固态硬盘存储一个物理页。即使固态硬盘掉电,也可在备用电源有限的工作时间内,完成ftl表的存储。
103.所属领域技术人员将意识到,某些情况下,固态硬盘日志中不包括完整的ftl表。例如,对于新的或者空白的固态硬盘,随着对固态硬盘的使用,3次选择ftl表的部分而生成ftl帧后发生掉电,此时,ftl表中仅ftl块1是有效的,固态硬盘日志中仅记录了ftl块1。通过在固态硬盘日志中标记已使用的数据块和/或未使用的数据块,而识别出在固态硬盘日志中的有效数据帧,从而重建固态硬盘掉电时的ftl表。
104.图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)。
105.每个ftl帧还包括元数据,记录了该ftl帧所属的ftl块以及属于同一ftl块的前一个ftl帧的存储位置(物理地址)。从而属于同一ftl块的多个ftl帧被组织成链表。每个日志帧也包括元数据,记录了该日志帧所属的ftl块以及属于同一ftl块的前一个日志帧的存储位置(物理地址)。从而属于同一ftl块的多个日志帧被组织成链表。
106.在图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个日志帧。日志帧中的条目按生成的顺序排列。
107.图7是根据本发明的又一实施例的固态硬盘日志生成方法的流程图。根据图7的实施例,生成如图6所示的固态硬盘日志610。
108.在更新ftl表时,记录被更新的ftl表项的逻辑地址与物理地址的对应关系(710)。可选地相应更新ftl表。缓存所记录的逻辑地址与物理地址的对应关系,每一条逻辑地址与物理地址的对应关系,构成一个“写”日志条目。一定数量“写”日志条目构成一个日志帧。在同一日志帧中的“写”日志条目记录的是对相同的ftl块的ftl条目的更新。当缓存的多条逻辑地址与物理地址的对应关系能够构成一个日志帧时,利用缓存的多条“写”日志条目生成日志帧,并在日志帧中标记其所属的ftl块(720)(参看图6与图7,例如日志帧0

1)。可选地,在日志帧中还标记与该日志帧属于同一ftl块的前一个日志帧的存储位置。参看图6,日志帧0

1是ftl块0(图6中未示出)的第一个日志帧,在日志帧0

1中标记其前一个日志帧不存在。
109.还选择内存中的ftl表的多个ftl块之一(例如,ftl块1)来生成ftl帧(730)。将所生成的一个或多个ftl帧与日志帧一同写入非易失存储介质(740)。在图6的例子中,3个ftl帧与1个日志帧的组合占据非易失存储介质的一个物理页。重复执行步骤710

740,以随时将日志帧与ftl帧写入固态硬盘日志。
110.在一个例子中,选择ftl块之一(例如,ftl块1)生成ftl帧,并且在将ftl块1完全写入固态硬盘日志610之前,尽量避免向固态硬盘日志写入其他ftl块,以使ftl块尽量集中地在固态硬盘日志中分布。然而,由于ftl帧中包括指示前一个ftl帧的元数据,因而属于同一ftl块的ftl帧不必在固态硬盘日志中连续存储。可将其他类型的帧(例如,图6的其他帧1)或其他ftl块的ftl帧(例如,图6的ftl帧2

1)存储在ftl块1的多个ftl帧之间。
111.在存储设备上电时,可从固态硬盘日志610中读取ftl帧与日志帧,以重建ftl表。在一个例子中,通过读取完整的固态硬盘日志610,找到在固态硬盘日志610中记录的各个ftl块以及与其对应的日志帧,并确定在存储设备掉电前,ftl表的状态。在另一个例子中,为加快ftl表重建过程,还在非易失存储介质中记录各个ftl块的多个ftl帧的第一ftl帧和/或最后ftl帧的存储位置,以及记录各个ftl块的多个日志帧的第一日志帧和/或最后日志帧的存储位置。从而,在存储设备上电时,可以迅速定位各个ftl块的ftl帧与日志帧的存储位置,并恢复各个ftl块,而无需读取完整的固态硬盘日志610。
112.在一个实施方式中,响应于存储设备掉电,即使缓存的日志条目数量不足以形成日志帧,也填充缓存的日志条目以形成日志帧,并写入固态硬盘日志。并在非易失存储介质中记录各个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重建。
113.图8是根据本发明的实施例的设备启动方法的流程图。根据图8的实施例的方法可以由固态硬盘实施,也可以由访问固态硬盘的主机实施。在诸如固态硬盘的设备启动时,需要重建ftl表。
114.在根据本发明的实施例中,将ftl表分成多个ftl块,从固态硬盘日志中独立地重建各个ftl块。确定待重建的ftl块(800)。例如,从第一个ftl块开始重建。或者,估计存储系统启动后将被首先访问的存储区域(例如,主机存储操作系统的存储区域),并优先加载对应这部分存储区域的ftl块。或者,在固态硬盘中(例如,固态硬盘日志中)存储上一次或者先前的固态硬盘启动后被首先访问的逻辑地址或对应的ftl块,并作为选择优先重建的ftl块的依据。在固态硬盘上电时,获取所存储的逻辑地址(一个或多个)或ftl块。在固态硬盘上存储了之前启动后被首先访问的逻辑地址时,选择ftl块,使得所选的ftl块的逻辑地址范围包括该被首先访问的逻辑地址。
115.在另一个例子中,识别存储设备接收到的io请求所对应的ftl块(包含所接收的io请求所请求的逻辑地址的ftl块),并优先加载这部分ftl块。
116.依然在另一个例子中,设备启动后,按ftl块地址的顺序对ftl表进行重建。当重建到ftl块3时,接收到来自主机的访问对应ftl块5的逻辑地址的io请求,则暂停对ftl块3的重建操作,开始对ftl块5的重建,在ftl块5重建完成后,响应该io请求,而后再继续先前中断的ftl表顺序重建操作。
117.依然在又一个例子中,设备启动后,以预测的方式对ftl表进行重建,当预测到下一个将被访问的ftl块为ftl块2时,对ftl块2进行重建。这时若接收到来自主机的访问对应ftl块5的逻辑地址的io请求,则暂停对ftl块2的重建操作,开始对ftl块5的重建,在ftl块5重建完成后,响应该io请求,而后重新预测待重建的ftl块,并进行重建操作。
118.为重建ftl块,从非易失存储介质中的预定位置获取指定ftl块(例如ftl块1)的ftl帧和/或日志帧(若存在)在固态硬盘日志的存储位置(810)。根据本发明的一个实施例,非易失存储介质中记录ftl块1的最后1个ftl帧的存储位置,以及ftl块1的最后1个日志帧的存储位置。
119.从ftl块1的最后1个ftl帧的存储位置读取ftl帧,并从所读取的ftl帧中获取前1个ftl的存储位置,并读取该前1个ftl帧,以此方式,从固态硬盘日志中读取属于ftl块1的所有ftl帧(820)。以及若存在属于ftl块的日志帧,还从ftl块1的最后1个日志帧的存储位置读取日志帧,从所读取的日志帧中获取前1个日志帧的存储位置,以此方式从固态硬盘日志中读取属于ftl块1的所有日志帧。
120.将读取的每个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。
121.由于在日志条目中可能存在具有相同逻辑地址的多个条目,而这些条目中的最后条目记载了对应ftl条目的最新内容,在更新ftl块1时要避免由ftl条目的旧内容替换了新内容。为此目的,在重建ftl块1的过程中,对每一个被更新的ftl条目设置标记,在后续重建过程中,若待被日志条目更新的ftl条目上存在标记,则忽略该日志条目(即,不使用该日志条目来更新ftl块)。而当处理了ftl块1的所有日志帧后,清除ftl块1的所有被设置的标记。
122.作为本发明的又一实施例,按日志帧中的日志条目被生成顺序来更新ftl块1,首先,从固态硬盘日志中获得属于ftl块1的第一日志帧,将第一日志帧中的多个日志条目按从前向后的顺序更新到ftl块1。用日志条目更新ftl块的含义在于,用日志条目中的逻辑地址作为索引,替换ftl块1中的被索引条目的物理地址。接下来,获取属于ftl块1的第二日志帧,并用其中的日志条目更新ftl块1。
123.ftl块1的重建完成后,虽然尚未重建出完整的ftl表,但对ftl块1对应逻辑地址范围的io请求已可得到响应。
124.接下来,判断是否还存在其他待重建的ftl块(850)。若已经重建了ftl表的所有ftl块,可以完成系统启动(860)。若依然存在未重建的ftl块,继续步骤800并确定待重建的ftl块。
125.图9是根据本发明实施例的固态硬盘的框图。存储设备包括控制器、nand闪存、dram与nor闪存。控制器分别耦合到nand闪存、nor闪存与dram。在nand闪存中包括启动页、日志区与用户数据区。在日志区中存储根据本发明实施例的固态硬盘日志,在用户数据区存储固态硬盘作为存储设备而保存的用户数据。固态硬盘日志中存储了来自多个ftl块的ftl帧与日志帧。
126.dram中存储了ftl表,图9中,由阴影所指示的ftl表的部分是已经被更新的ftl表部分(例如,对应于ftl块1)。在日志区中存储的日志帧1

1与日志帧1

2记录了ftl表的ftl块1的更新。并且日志帧1

1还存储了其所对应的ftl帧1的地址,而日志帧1

2存储了同属于ftl帧1的前一个日志帧(日志帧1

2)的地址。通过在ftl块1所对应的ftl表部分上重放日志帧1

1与日志帧1

2中记录的更新(或称为,用日志帧1

1与日志帧1

2更新ftl表),能够获得由阴影所指示的ftl表部分。
127.在图9的例子中,nand闪存的启动页中存储各个ftl块的ftl帧与日志帧的在日志区的地址。可选地,属于同一ftl块的ftl帧组织成链表,而属于同一ftl块的日志帧也组织为链表,在启动页中存储每个ftl块的ftl帧链表与日志帧链表在日志区的首地址与尾地址。或者在启动页中存储每个ftl块的ftl帧链表的头节点与尾节点在日志区的存储位置,以及日志帧链表的头节点与尾节点在日志区的存储位置。
128.在进一步的实施例中,nand闪存中存储了多个启动页,用于提供启动页的备份或启动页的不同版本。还在nor闪存中存储有效启动页的存储位置(在nand闪存中的物理地址)。固态硬盘上电时,控制器从nor闪存中获取有效启动页的地址,并依据该地址从nand闪存中获取有效启动页,进而依据启动页指示的ftl帧地址和/或日志帧地址来在dram中重建ftl表。
129.图10展示了根据本发明实施例的响应掉电事件而生成固态硬盘日志的示意图。在图10的实施例中,固态硬盘日志1010包括物理页1020、物理页1021、物理页1022、
……
物理页1028与物理页1029。在发生掉电时,物理页1022已经被写入非易失存储介质。在掉电后,备用电源供电的时间有限,为在有限的时间内在非易失存储介质中存储ftl表的最新状态,改变写入物理页的ftl帧与日志帧的优先级或比例,增加日志帧的占比。在图10的例子中,掉电发生后,用日志帧完全填充物理页1028与1029,而不再写入ftl帧,从而将尽可能多的日志帧写入非易失存储介质。
130.在备用电源供电期间,即使完全写入日志帧不写入ftl帧,能够写入非易失存储介质的日志帧也是有限的。在根据本发明的一个实施例中,为确保对ftl表的更新能够被保存到非易失存储介质,依据在备用电源供电期间,能够写入非易失存储介质的日志帧的数量来确定缓存的日志条目的数量。例如,若备用电源能够支持将n个日志帧写入非易失存储介质,则缓存的日志条目的总量不超过n个日志帧所容纳的日志条目的数量。进一步地,由于日志帧同ftl块相对应,日志帧的数量不超过n。若已经在内存中的n个日志帧中添满了日志条目,在将这些日志帧的一个或多个写入非易失存储介质前,暂停新日志帧的生成,以及可选地,暂停对需要更新ftl表条目的操作(例如,写命令、擦除命令、trim命令等)的响应。
131.在根据本发明的又一实施例中,不仅响应于掉电事件,还依据其他原因来调整ftl帧与日志帧的比例。例如,在写命令频繁出现时,内存中缓存了较多的日志条目,调整固态硬盘日志的物理页中ftl帧与日志帧的比例,以尽快将日志条目写入非易失存储介质。
132.其中,响应于异常事件发生,包括在nvm的启动页中存储每个ftl块的最后ftl帧在nvm中的地址与最后日志帧在nvm中的地址或在nvm的启动页中存储每个ftl块的最后ftl帧组在nvm中的物理页地址与最后日志帧组在nvm中的物理页地址,其中ftl帧组是存储于相同nvm物理页上的多个ftl帧,以及日志帧组是存储于相同nvm物理页上的多个日志帧。
133.本领域的技术人员应明白,本技术的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd

rom、光学存储器等)上实施的计算机程序产品的形式。
134.本技术是参照根据本技术实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
135.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
136.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或
其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
137.尽管已描述了本技术的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本技术范围的所有变更和修改。显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献