一种基于固态盘的块级连续数据保护方法

文档序号:6514544阅读:290来源:国知局
一种基于固态盘的块级连续数据保护方法
【专利摘要】本发明公开了一种基于固态盘的块级连续数据保护方法,包括:在内存中创建一个空的写请求队列缓存,用于缓存来自用户的写请求,在固态盘的FTL层初始化一个内存空间CDP_store,用来记录FTL映射表的历史记录CDP_entry,接收来自于用户的请求,并判断该请求是对数据块的读写请求还是恢复请求,如果是对数据块的读写请求则判断该请求是读请求还是写请求,如果是写请求,则判断写请求队列缓存中是否有剩余的缓存空间,如果没有则将写请求队列缓存中的内容写回固态盘上。本发明结合固态盘本身的特性,利用固态盘内在的“异地更新”产生的“被覆盖”历史数据遗留在固态盘中的特征,来实现将固态盘回滚恢复至之前的历史时间点状态,从而实现基于SSD的连续数据保护的功能。
【专利说明】一种基于固态盘的块级连续数据保护方法
【技术领域】
[0001]本发明属于计算机数据存储和备份领域,更具体地,涉及一种基于固态盘的块级连续数据保护方法。
【背景技术】
[0002]连续数据保护技术是一种有效的数据灾备技术,它的提出就是为了解决传统备份技术需要停机进行备份、灾难发生时数据丢失量大等缺点。全球网络存储工业协会(Storage Networking Industry Association,简称 SNIA)给连续数据保护(ContinuousData Protection,简称⑶P)的定义是:连续数据保护是一套方法,它可以捕获或跟踪数据的变化,并将其在生产数据之外独立存放,以确保数据可以恢复到过去的任意时间点。连续数据保护就是持续地对存储系统进行安全保护,而不需要专门地对系统进行停机操作。它持续地跟踪和保存存储系统发生的状态变化,即它具有存储状态任意时间点的映像版本。因此与备份技术相比,它能够将存储系统状态恢复到与灾难发生点无限接近的时刻,而不只是有限个的备份时间点,数据丢失量大大减少。因此,企业通常采用备份与连续数据技术相结合的方式来保证数据可靠安全,即对数据进行周期的备份作为数据参照版本,而在两次备份点之间则采用连续数据保护技术以减少灾难发生时的数据丢失量。
[0003]固态盘内部具有一个重要的闪存转换层(File translation layer,简称FTL)中间软件,FTL内部有个逻辑地址到物理页面的映射表,它表示当前时刻固态盘的逻辑地址与物理页面之间的对应关系。随着逻辑地址被写入新的内容,与逻辑地址对应的物理页面也会随之而改变。由于FTL的存在,系统对同一逻辑地址进行写操作时,不需要先将页面擦除,而只需要将数据直接写到新分配的空闲页面,然后修改FTL映射表使得该逻辑地址对应数据写入的新地址。避免了擦除操作对写操作性能的影响。从上层的角度来看,SSD所呈现的存储状态是完全由FTL当前映射表的内容决定的,而与当前SSD磁盘的实际物理状态无关。对于同一磁盘的物理状态,FTL映射表的内容不同,则SSD的对外的状态也不同。这就是固态盘内在的“异地更新”产生的“被覆盖”历史数据遗留在固态盘中的特征,
[0004]然而,传统的连续数据保护技术实现都是基于硬盘驱动器(Hard disk drive,简称HDD)而提出的,它具有两方面的缺陷。首先,需要对每次数据写操作进行跟踪并保存数据,对系统具有持续性的影响,而且这种影响往往很大。其次,为了保证最小的影响,往往需要在当前的系统中预留一部分存储空间来存储捕获的数据,因而减少了运行系统的可用存储空间。

【发明内容】

[0005]针对现有技术的以上缺陷或改进需求,本发明提供了一种基于固态盘的块级连续数据保护方法和系统,其目的在于结合固态盘本身的特性,利用固态盘内在的“异地更新”产生的“被覆盖”历史数据遗留在固态盘中的特征,来实现将固态盘回滚恢复至之前的历史时间点状态,从而实现基于固态盘存储系统上的连续数据保护的功能。[0006]为实现上述目的,按照本发明的一个方面,提供了基于固态盘的块级连续数据保护方法,包括以下步骤:
[0007](I)在内存中创建一个空的写请求队列缓存,用于缓存来自用户的写请求,在固态盘的FTL层初始化一个内存空间raP_store,用来记录FTL映射表的历史记录raP_entry ;
[0008](2)接收来自于用户的请求,并判断该请求是对数据块的读写请求还是恢复请求,如果是对数据块的读写请求则转入步骤(3),如果是恢复请求则转入步骤(12);
[0009](3)判断该请求是读请求还是写请求,如果是读请求,则进入步骤(4),如果是写请求,则进入步骤(7);
[0010](4)检查写请求队列缓存中是否存在该读请求的逻辑页面对应的写请求记录,如果存在则进入步骤(5),否则进入步骤(6);
[0011](5)将读请求的逻辑页面对应的写请求记录返回给用户,然后过程结束;
[0012](6)在固态盘的FTL映射表中查找该读请求的逻辑页面对应的物理页面,并读取该物理页面,然后过程结束;
[0013](7)判断写请求队列缓存中是否有剩余的缓存空间,如果有则进入步骤(8),否则进入步骤(9);
[0014](8)直接将写请求添加到写请求队列缓存中,然后过程结束;
[0015](9 )将写请求队列缓存中的内容写回固态盘上,更新固态盘的FTL映射表以及FTL映射表的历史记录CDP_entry,并将该写请求添加到写请求队列缓存中;
[0016](10)判断当前固态盘内部可用的空闲页面率是否低于预先设定的最小可用阈值LOWgc,若低于L0We。,则转步骤(11),否则过程结束;
[0017](11)启动垃圾回收进程,并将固态盘的保护窗口向前滑动时间At,回收那些时间戳落在滑动过程经过的窗口中的物理页面,判断当前固态盘内部可用的空闲页面率是否高于预先设定的垃圾回收进程停止阈值HIGHe。,如果高于则垃圾回收结束,否则继续将保护窗口向前滑动时间At ;
[0018](12)判断该恢复请求的恢复时间点是否落在固态盘的保护窗口内,若落在保护窗口内,则转步骤(13),否则转入步骤(18);
[0019](13)顺序地扫描内存空间raP_Store中与每个逻辑页面对应的数组元素为表头的链表;
[0020](14)判断链表中时间点是等于或者最大小于(maximum less than)恢复时间点,还是大于恢复时间点,如果是等于或者最大小于,则获得该链表中该时间点对应的CDP_entry中记录的物理页面地址,然后转入步骤(15),如果是大于恢复时间点,则说明该页面在恢复后的状态中是不可见的,转入步骤(16);
[0021](15)将固态盘的FTL映射表中逻辑页面对应的映射项中的物理页面地址更新为该物理页面地址,然后过程结束;
[0022](16)将该链表中该时间点对应的raP_entry的逻辑页面对应的映射项置为空;
[0023](17)重复上述步骤(14)至(16),直至检查完所有的逻辑页面对应的物理页面地址为止,由此完成了恢复操作,然后过程结束;
[0024](18)向用户提示数据恢复出错,然后过程结束。
[0025]优选地,步骤(11)具体包括以下子步骤:[0026](11-1)启动垃圾回收进程,并将固态盘的保护窗口向前滑动时间Λ t,以增加固态盘的可用磁盘空间;
[0027](11-2)顺序扫描所有的FTL映射表的历史记录raP_entry,将那些时间戳落在滑动过程经过的窗口中的CDP_entry标识位置零,根据标识出的无效物理页面去回收相应的物理页面,更新系统中的状态信息;
[0028]( 11-3 )判断当前固态盘内部可用的空闲页面率是否高于预先设定的垃圾回收进程停止阈值HIGHc。,如果高于则过程结束,否则返回步骤(11-1);
[0029]优选地,垃圾回收进程停止阈值HIGHec的取值范围是30%至70%,并且大于最小可用阈值L0We。。[0030]按照本发明的另一方面,提供了一种基于固态盘的块级连续数据保护系统,包括:
[0031]第一模块,在内存中创建一个空的写请求队列缓存(Write request queuebuffer,简称WRQB),用于缓存来自用户的写请求,在固态盘的FTL层初始化一个内存空间Q)P_store,用来记录FTL映射表的历史记录Q)P_entry ;
[0032]第二模块,接收来自于用户的请求,并判断该请求是对数据块的读写请求还是恢复请求,如果是对数据块的读写请求则转入第三模块,如果是恢复请求则转入第十二模块;
[0033]第三模块,判断该请求是读请求还是写请求,如果是读请求,则进入第四模块,如果是写请求,则进入第七模块;
[0034]第四模块,检查写请求队列缓存中是否存在该读请求的逻辑页面对应的写请求记录,如果存在则进入第五模块,否则进入第六模块;
[0035]第五模块,将读请求的逻辑页面对应的写请求记录返回给用户,然后过程结束;
[0036]第六模块,在固态盘的FTL映射表中查找该读请求的逻辑页面对应的物理页面,并读取该物理页面,然后过程结束;
[0037]第七模块,判断写请求队列缓存中是否有剩余的缓存空间,如果有则进入第八模块,否则进入第九模块;
[0038]第八模块,,直接将写请求添加到写请求队列缓存中,然后过程结束;
[0039]第九模块,将写请求队列缓存中的内容写回固态盘上,更新固态盘的FTL映射表以及FTL映射表的历史记录CDP_entry,并将该写请求添加到写请求队列缓存中。
[0040]第十模块,判断当前固态盘内部可用的空闲页面率是否低于预先设定的最小可用阈值L0We。,若低于L0We。,则转第十一模块,否则过程结束;
[0041]第十一模块,启动垃圾回收进程,并将固态盘的保护窗口向前滑动时间At,回收那些时间戳落在滑动过程经过的窗口中的物理页面,判断当前固态盘内部可用的空闲页面率是否高于预先设定的垃圾回收进程停止阈值HIGHe。,如果高于则垃圾回收结束,否则继续将保护窗口向前滑动时间Λ t ;
[0042]第十二模块,判断该恢复请求的恢复时间点是否落在固态盘的保护窗口内,若落在保护窗口内,则转入第十三模块,否则转入第十八模块;
[0043]第十三模块,顺序地扫描内存空间rap_store中与每个逻辑页面对应的数组元素为表头的链表;[0044]第十四模块,判断链表中时间点是等于或者最大小于(maximum less than)恢复时间点,还是大于恢复时间点,如果是等于或者最大小于,则获得该链表中该时间点对应的raP_entry中记录的物理页面地址,然后转入第十五模块,如果是大于恢复时间点,则说明该页面在恢复后的状态中是不可见的,转入第十六模块;
[0045]第十五模块,将固态盘的FTL映射表中逻辑页面对应的映射项中的物理页面地址更新为该物理页面地址,然后过程结束。;
[0046]第十六模块,将该链表中该时间点对应的CDP_entry的逻辑页面对应的映射项置为空;
[0047]第十七模块,重复进入上述模块第十四至第十七,直至检查完所有的逻辑页面对应的物理页面地址为止,由此完成了恢复操作,然后过程结束;
[0048]第十八模块,向用户提示数据恢复出错,然后过程结束。
[0049]总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
[0050]1、由于采用了步骤(I)、步骤(7)和步骤(8),在对不太硬盘写入数据块时不需要对每次数据写操作进行跟踪并保存数据,因此对系统没有持续性的影响;
[0051]2、由于采用了步骤(11),保证了固态盘中可用空间一直高于预先设定的最低也用阈值,因此改进了运行系统的可用存储空间;
[0052]3、由于采用了步骤(I)、步骤(7 )和步骤(8 ),引入一个WRQB来暂时缓存到达的写请求,然后批量地刷新写到固态盘上以减少有效页面的分散程度。WRQB的缓存作用,使得“滑过窗口”期间的垃圾都比较集中地分散在了少量块中,减少垃圾回收过程的开销,同时也减小了直接写入固态盘的次数,延长了固态盘的有效寿命;
[0053]4、由于采用了步骤(I)、步骤(13)、步骤(14)和步骤(15),充分利用了固态盘内在的“异地更新”产生的“被覆盖”历史数据遗留在固态盘中的特性实现将固态盘回滚恢复至之前的历史时间点状态。实施连续数据保护功能以及进行恢复时只需要将FTL映射表的状态恢复到所请求的恢复时间点时刻的状态即可,都只涉及了 FTL映射表项的拷贝、存储操作,而没有涉及任何数据内容的读写操作。由于映射表项的大小要大大少于数据内容的大小,因此本发明引起的额外开销要比传统的连续数据保护方法小得多。
【专利附图】

【附图说明】
[0054]图1是本发明基于固态盘的块级连续数据保护方法的流程图。
[0055]图2是普通SSD的结构示意图和本发明基于固态盘的块级连续数据保护系统的结构对比示意图。
[0056]图3示出raP_entry结构对应的字段。
[0057]图4是CDP_entry的存储组织结构。
[0058]图5是本发明中滑动窗口和保护窗口。
[0059]图6是固态盘中垃圾回收开销示意图,其中上图表示回收时有效页面较均匀地分布在被选块中,下图表示有效页面较有序地分布在被选块中。
[0060]图7是本发明实现的系统运行过程中FTL映射表和raP_store内容变化以及恢复操作示意图。【具体实施方式】
[0061]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0062]以下首先对本发明中的技术术语进行解释和说明。
[0063]连续数据保护(O)P) Continuous Data Protection,是一套方法,它可以捕获或跟踪数据的变化,并将其在生产数据之外独立存放,以确保数据可以恢复到过去的任意时间点;
[0064]闪存转换层(FTL):在固态盘内部一个重要的中间软件,FTL内部有个逻辑地址到物理页面的映射表,它表示当前时刻固态盘的逻辑地址与物理页面之间的对应关系;
[0065]raP_store:用来记录FTL映射表的历史状态的部件,可以用一个数据库实现,raP_store还提供相应的管理和检索接口来管理FTL映射表的历史;
[0066]Q)P_entry:用来表示每个存储到Q)P_store表项,Q)P_entry表项由FTL映射表项与FTL映射表项被覆盖时刻构成;
[0067]保护窗口 -Protection Window,系统能够正确恢复到的任意时间点状态所对应的时间长度;
[0068]垃圾回收(GC):固态盘内部运行的一项重要活动,它将那些“被覆盖”了的物理页面进行擦除操作(erase),使其变成空闲页面以备将来再次使用;
[0069]写请求队列缓存(WRQB) =WRQB是一个具有可配置大小的缓存区,它可以缓存一定数量写页面请求;
[0070]异地更新:由于FTL的存在,系统对同一逻辑地址进行写操作时,不需要先将页面擦除,而只需要将数据直接写到新分配的空闲页面,然后修改FTL映射表使得该逻辑地址对应数据写入的新地址,避免了擦除操作对写操作性能的影响。
[0071]下面将结合本发明实施实例中的附图,对本发明实例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明的一部分实例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0072]本发明的总体思路是在原固态盘的FTL层增加了一个raP_store用来记录历史FTL映射表的历史状态,如图2所示,其余组织部件都与原固态盘的相同。raP_Store是一个具有存储数据记录功能的存储引擎,它可以用数据库(DB2,MySQL等)实现,也可以用专门设计的逻辑结构实现。CDP_store所存储的记录可以完全存储在固态盘内部的RAM中,以提高访问速度,也可以先写入到缓存区中然后写入到固态盘上指定的区域。在完成写操作后更新FTL映射表时,将与写逻辑地址对应的映射表项以及当前的时间组成一个记录项存储到raP_store中。恢复时,调用raP_store模块提供的恢复接口,并给定需要恢复到的历史时间点,CDP_store检索出所有逻辑地址在请求的恢复时间点所对应的映射关系,并将其作为当前有效的FTL映射表。本发明还设计了快照接口用来一次性释放更多的空间。做一次快照操作相当于对系统做一次全量备份,快照的内容可以看作是系统的起始状态。快照操作后,快照时间点之前所有的历史数据都将被释放,因此系统不能再恢复到快照时间点之前的任何状态,即快照时间点对应的数据保护窗口长度为O。图4中每个数组元素的数据类型中包含了一个64位时间(first_written_time)。该时间戳对应系统启动时间点或者系统执行快照后页面快照状态所对应的最后修改时间点。
[0073]如图1所示,本发明基于固态盘的块级连续数据保护方法包括以下步骤:
[0074](I)在内存中创建一个空的写请求队列缓存(Write request queue buffer,简称WRQB),用于缓存来自用户的写请求,在固态盘的FTL层初始化一个内存空间raP_Store,用来记录FTL映射表的历史记录raP_entry ;如图3所示。具体而言,内存空间raP_store是一个具有存储数据记录功能的存储引擎,它可以用数据库(诸如DB2,MySQL等)实现,也可以用专门设计的逻辑结构实现。内存空间CDP_store所存储的记录可以完全存储在固态盘内部的RAM中,以提高访问速度,也可以先写入到缓存区中然后写入到固态盘上指定的区域。CTP_entry是用来表示每个存储到⑶P_store中的FTL映射表的历史记录,CTP_entry的构成如图3所示,raP_entry表是由FTL映射表与FTL映射表被覆盖的时刻构成。
[0075]本步骤的优点在于,引入一个WRQB来暂时缓存到达的写请求,然后批量地刷新写到固态盘上以减少有效页面的分散程度。WRQB的缓存作用,使得“滑过窗口”期间的垃圾都比较集中地分散在了少量块中,减少垃圾回收过程的开销。
[0076](2)接收来自于用户的请求,并判断该请求是对数据块的读写请求还是恢复请求,如果是对数据块的读写请求则转入步骤(3),如果是恢复请求则转入步骤(12);具体而言,如果是对数据块的读写请求,则该请求中包括读写操作的逻辑地址,如果是对数据块的恢复请求,则该请求中包括请求恢复到的时间;
[0077](3)判断该请求是读请求还是写请求,如果是读请求,则进入步骤(4),如果是写请求,则进入步骤(7);
[0078](4)检查写请求队列缓存中是否存在该读请求的逻辑页面对应的写请求记录,如果存在则进入步骤(5),否则进入步骤(6);
[0079](5)将读请求的逻辑页面对应的写请求记录返回给用户,然后过程结束;
[0080](6)在固态盘的FTL映射表中查找该读请求的逻辑页面对应的物理页面,并读取该物理页面,然后过程结束;
[0081](7)判断写请求队列缓存中是否有剩余的缓存空间,如果有则进入步骤(8),否则进入步骤(9);具体而言,如图7所示,图中上半部分表示FTL映射表分别在T0、T1和T2时刻的存储状态,下半部分表示CDP_store的内容。每个写操作用一个包含逻辑页面(LP)、物理页面(PP)、写操作发生时刻的三元组来表示。比如,三元组(0,9,Tl)表示逻辑页面在Tl时刻被修改,并且新内容被写到了物理页面9上。图中顶部是用三元组表示到达固态盘的写请求序列。
[0082](8)直接将写请求添加到写请求队列缓存中,然后过程结束;
[0083](9 )将写请求队列缓存中的内容写回固态盘上,更新固态盘的FTL映射表以及FTL映射表的历史记录CDP_entry,并将该写请求添加到写请求队列缓存中。具体而言,如图7所示,在Tl时刻到达4个写请求,其中(0,9,Tl)和(I, 16,Tl)两个写操作是对逻辑页面O和I的覆盖写操作,而(3,20,Tl)和(4,8,Tl)是分别对逻辑页面3和4的首次写入。完成这四个写操作会产生(2,T0)和(7,T0)两个raP_entry,并且分别将他们插入到页面O和I的链表中。与此类似,完成了 T2时刻到达的3个写请求会产生另外三个CDP_entry,将分别插入到对应的逻辑页面链表中。
[0084](10)判断当前固态盘内部可用的空闲页面率是否低于预先设定的最小可用阈值LOWee,若低于LOWee,则转步骤(11 ),否则过程结束;最小可用阈值LOWee的取值范围是30%-70%,取值越小,则垃圾回收进程的频率会更高,则会消耗系统的CPU利用率,取值越大,则垃圾回收进程的频率会越低,会改进系统的CPU利用率;
[0085]本步骤的优点在于,设置更小的垃圾回收进程控制阈值(启动阈值LOWe。和停止阈值HIGHec),以尽可能地延长“被覆盖”的历史数据在固态盘中存留时间,达到延长保护窗口目的。在固态盘中,当剩余空闲页面数量低于某个预设阈值时,垃圾回收进程就会启动以释放空间。在普通的固态盘中,这个阈值通常是以单个芯片为单位,即若阈值设定为20%,当某个芯片内的空闲页面率小于该阈值时,垃圾回收进程会启动并释放该芯片内的“被覆盖”的历史页面,因此,即使其它芯片仍有很多空闲页面(比如空闲页面小于阈值的那个芯片可能在过去某段时间里对应应用的热点数据区,而其它页面对应冷数据区,则会导致对应热点数据区芯片中的剩余空闲页面很少,而对应冷点数据区芯片中的剩余空闲页面很多),该芯片上的历史数据也会被回收,因而无法提供恢复回滚功能。在本发明中,该阈值被设定为具有全局意义的数值,即只有当固态盘内总的剩余空闲页面占固态盘总页面数的比例低于阈值时,垃圾回收进程才会启动,这就避免了因局部芯片过度消耗而启动垃圾回收进程将历史数据提前擦除了,从而延长了保护窗口。
[0086](11)启动垃圾回收进程,并将固态盘的保护窗口向前滑动时间At,回收那些时间戳落在滑动过程经过的窗口中的物理页面,判断当前固态盘内部可用的空闲页面率是否高于预先设定的垃圾回收进程停止阈值HIGHe。,如果高于则垃圾回收结束,否则继续将保护窗口向前滑动时间Λ t ;本步骤具体包括以下子步骤:
[0087](11-1)启动垃圾回收进程,并将固态盘的保护窗口向前滑动时间Λ t,以增加固态盘的可用磁盘空间,如图5所示,Λ t的取值是由写操作所消耗的磁盘空间决定;
[0088](11-2)顺序扫描所有的FTL映射表的历史记录raP_entry,将那些时间戳落在滑动过程经过的窗口中的raP_entry标识位置零,表示其对应的物理页面可以被回收。根据标识出的无效物理页面去回收相应的物理页面,更新系统中的状态信息;
[0089]( 11-3 )判断当前固态盘内部可用的空闲页面率是否高于预先设定的垃圾回收进程停止阈值HIGHe。,如果高于则过程结束,否则返回步骤(11-1);垃圾回收进程停止阈值HIGHgc的取值范围是30%至70%,并且大于最小可用阈值L0Wec。
[0090]本步骤的优点在于,垃圾回收进程只能回收那些被覆盖时刻落在“滑过窗口”中的历史物理页面。计算块内页面利用率时需要同时包括当前正被FTL映射表映射项指向的物理页面和块内那些还没有被“滑过”的物理页面。“被覆盖”的历史数据是否仍有效在对应的CDP_entry中有相应标识位标记,这样尽可能地延长“被覆盖”的历史数据在固态盘中存留时间。
[0091](12)判断该恢复请求的恢复时间点是否落在固态盘的保护窗口内,若落在保护窗口内,则转步骤(13),否则转入步骤(18);
[0092](13)顺序地扫描内存空间raP_store中与每个逻辑页面对应的数组元素为表头的链表;[0093](14)判断链表中时间点是等于或者最大小于(maximum less than)恢复时间点,还是大于恢复时间点,如果是等于或者最大小于,则获得该链表中该时间点对应的CDP_entry中记录的物理页面地址,然后转入步骤(15),如果是大于恢复时间点,则说明该页面在恢复后的状态中是不可见的,转入步骤(16);如图7所示,假设在T时刻(T0,T2),用户请求将固态盘的状态恢复到之前的某时间点T’(T0CT〈Tl)。可以在逻辑页面0,1和6的链表中分别找到符合条件(Τ0是链表中最大小于Τ’的时间点)的CDP_entry。它们分别是(2, T0), (7,T0)和(11,T0)。而对于从来没有被写过的逻辑页面(页面5和页面7),则直接跳过,将其对应映射表项设为空;对于只被写过一次且其链表为空的逻辑页面,则判断其初始时间是否小于或等于所请求的恢复时间点(T’);
[0094](15)将固态盘的FTL映射表中逻辑页面对应的映射项中的物理页面地址更新为该物理页面地址,然后过程结束。如图7所示,若小于等于T’,则该逻辑页面恢复后的状态应为所记录的初始状态;
[0095]本步骤的优点在于,充分利用了固态盘内在的“异地更新”产生的“被覆盖”历史数据遗留在固态盘中的特性实现将固态盘回滚恢复至之前的历史时间点状态。实施连续数据保护功能以及进行恢复时只需要将FTL映射表的状态恢复到所请求的恢复时间点时刻的状态即可,都只涉及了 FTL映射表项的拷贝、存储操作,而没有涉及任何数据内容的读写操作。由于映射表项的大小要大大少于数据内容的大小,因此本发明引起的额外开销要比传统的连续数据保护方法小得多。本发明的恢复操作只需要将FTL映射表的状态恢复到所请求的恢复时间点时刻的状态即可。
[0096](16)将该链表中该时间点对应的raP_entry的逻辑页面对应的映射项置为空;
[0097](17)重复上述步骤(14)至(16),直至检查完所有的逻辑页面对应的物理页面地址为止,由此完成了恢复操作,然后过程结束。如图7所示,恢复后逻辑页面2对应的物理页面为5 (因为其初始时刻TO小于恢复时间点T’),而逻辑页面4的映射项为空(因为其初始时刻Tl大于恢复时间点T’)。综合起来,恢复后逻辑页面的映射表状态为(0,2),(1, 7),(2,5), (6,11);
[0098](18)向用户提示数据恢复出错,然后过程结束。
[0099]本发明基于固态盘的块级连续数据保护系统包括:
[0100]第一模块,在内存中创建一个空的写请求队列缓存(Write request queuebuffer,简称WRQB),用于缓存来自用户的写请求,在固态盘的FTL层初始化一个内存空间Q)P_store,用来记录FTL映射表的历史记录Q)P_entry ;
[0101]第二模块,接收来自于用户的请求,并判断该请求是对数据块的读写请求还是恢复请求,如果是对数据块的读写请求则转入第三模块,如果是恢复请求则转入第十二模块;
[0102]第三模块,判断该请求是读请求还是写请求,如果是读请求,则进入第四模块,如果是写请求,则进入第七模块;
[0103]第四模块,检查写请求队列缓存中是否存在该读请求的逻辑页面对应的写请求记录,如果存在则进入第五模块,否则进入第六模块;
[0104]第五模块,将读请求的逻辑页面对应的写请求记录返回给用户,然后过程结束;
[0105]第六模块,在固态盘的FTL映射表中查找该读请求的逻辑页面对应的物理页面,并读取该物理页面,然后过程结束;
[0106]第七模块,判断写请求队列缓存中是否有剩余的缓存空间,如果有则进入第八模块,否则进入第九模块;
[0107]第八模块,,直接将写请求添加到写请求队列缓存中,然后过程结束;
[0108]第九模块,将写请求队列缓存中的内容写回固态盘上,更新固态盘的FTL映射表以及FTL映射表的历史记录CDP_entry,并将该写请求添加到写请求队列缓存中。
[0109]第十模块,判断当前固态盘内部可用的空闲页面率是否低于预先设定的最小可用阈值L0We。,若低于L0We。,则转第十一模块,否则过程结束;
[0110]第十一模块,启动垃圾回收进程,并将固态盘的保护窗口向前滑动时间At,回收那些时间戳落在滑动过程经过的窗口中的物理页面,判断当前固态盘内部可用的空闲页面率是否高于预先设定的垃圾回收进程停止阈值HIGHe。,如果高于则垃圾回收结束,否则继续将保护窗口向前滑动时间Λ t ;
[0111]第十二模块,判断该恢复请求的恢复时间点是否落在固态盘的保护窗口内,若落在保护窗口内,则转入第十三模块,否则转入第十八模块;
[0112]第十三模块,顺序地扫描内存空间rap_store中与每个逻辑页面对应的数组元素为表头的链表;
[0113]第十四模块,判断链表中时间点是等于或者最大小于(maximum less than)恢复时间点,还是大于恢复时间点,如果是等于或者最大小于,则获得该链表中该时间点对应的raP_entry中记录的物理页面地址,然后转入第十五模块,如果是大于恢复时间点,则说明该页面在恢复后的状态中是不可见的,转入第十六模块;
[0114]第十五模块,将固态盘的FTL映射表中逻辑页面对应的映射项中的物理页面地址更新为该物理页面地址,然后过程结束。;
[0115]第十六模块,将该链表中该时间点对应的CDP_entry的逻辑页面对应的映射项置为空;
[0116]第十七模块,重复进入上述模块第十四至第十七,直至检查完所有的逻辑页面对应的物理页面地址为止,由此完成了恢复操作,然后过程结束。
[0117]第十八模块,向用户提示数据恢复出错,然后过程结束。
[0118]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种基于固态盘的块级连续数据保护方法,其特征在于,包括以下步骤: (1)在内存中创建一个空的写请求队列缓存,用于缓存来自用户的写请求,在固态盘的FTL层初始化一个内存空间CDP_store,用来记录FTL映射表的历史记录CDP_entry ; (2)接收来自于用户的请求,并判断该请求是对数据块的读写请求还是恢复请求,如果是对数据块的读写请求则转入步骤(3),如果是恢复请求则转入步骤(12); (3)判断该请求是读请求还是写请求,如果是读请求,则进入步骤(4),如果是写请求,则进入步骤(7); (4)检查写请求队列缓存中是否存在该读请求的逻辑页面对应的写请求记录,如果存在则进入步骤(5),否则进入步骤(6); (5)将读请求的逻辑页面对应的写请求记录返回给用户,然后过程结束; (6)在固态盘的FTL映射表中查找该读请求的逻辑页面对应的物理页面,并读取该物理页面,然后过程结束; (7)判断写请求 队列缓存中是否有剩余的缓存空间,如果有则进入步骤(8),否则进入步骤(9); (8)直接将写请求添加到写请求队列缓存中,然后过程结束; (9 )将写请求队列缓存中的内容写回固态盘上,更新固态盘的FTL映射表以及FTL映射表的历史记录CDP_entry,并将该写请求添加到写请求队列缓存中; (10)判断当前固态盘内部可用的空闲页面率是否低于预先设定的最小可用阈值LOWe。,若低于LOWe。,则转步骤(11),否则过程结束; (11)启动垃圾回收进程,并将固态盘的保护窗口向前滑动时间At,回收那些时间戳落在滑动过程经过的窗口中的物理页面,判断当前固态盘内部可用的空闲页面率是否高于预先设定的垃圾回收进程停止阈值HIGHe。,如果高于则垃圾回收结束,否则继续将保护窗口向前滑动时间Λ t ; (12)判断该恢复请求的恢复时间点是否落在固态盘的保护窗口内,若落在保护窗口内,则转步骤(13),否则转入步骤(18); (13)顺序地扫描内存空间CDP_store中与每个逻辑页面对应的数组元素为表头的链表; (14)判断链表中时间点是等于或者最大小于(maximumless than)恢复时间点,还是大于恢复时间点,如果是等于或者最大小于,则获得该链表中该时间点对应的CDP_entry中记录的物理页面地址,然后转入步骤(15),如果是大于恢复时间点,则说明该页面在恢复后的状态中是不可见的,转入步骤(16); (15)将固态盘的FTL映射表中逻辑页面对应的映射项中的物理页面地址更新为该物理页面地址,然后过程结束; (16)将该链表中该时间点对应的CDP_entry的逻辑页面对应的映射项置为空; (17)重复上述步骤(14)至(16),直至检查完所有的逻辑页面对应的物理页面地址为止,由此完成了恢复操作,然后过程结束; (18)向用户提示数据恢复出错,然后过程结束。
2.根据权利要求1所述的块级连续数据保护方法,其特征在于,步骤(11)具体包括以下子步骤:(11-1)启动垃圾回收进程,并将固态盘的保护窗口向前滑动时间At,以增加固态盘的可用磁盘空间; (11-2)顺序扫描所有的FTL映射表的历史记录raP_entry,将那些时间戳落在滑动过程经过的窗口中的CDP_entry标识位置零,根据标识出的无效物理页面去回收相应的物理页面,更新系统中的状态信息; (11-3)判断当前固态盘内部可用的空闲页面率是否高于预先设定的垃圾回收进程停止阈值HIGHc。,如果高于则过程结束,否则返回步骤(11-1 )。
3.根据权利要求2所述的块级连续数据保护方法,其特征在于,垃圾回收进程停止阈值HIGHee的取值范围是30%至70%,并且大于最小可用阈值LOWec。
4.一种基于固态盘的块级连续数据保护系统,其特征在于,包括: 第一模块,在内存中创建一个空的写请求队列缓存(Write request queue buffer,简称WRQB ),用于缓存来自用户的写请求,在固态盘的FTL层初始化一个内存空间OTP_store,用来记录FTL映射表的历史记录raP_entry ; 第二模块,接收来自于用户的请求,并判断该请求是对数据块的读写请求还是恢复请求,如果是对数据块的读写请求则转入第三模块,如果是恢复请求则转入第十二模块; 第三模块,判断该请求是读请求还是写请求,如果是读请求,则进入第四模块,如果是写请求,则进入第七模块; 第四模块,检查写请求队列缓存中是否存在该读请求的逻辑页面对应的写请求记录,如果存在则进入第五模块,否则进入第六模块; 第五模块,将读请求的逻辑页面对应的写请求记录返回给用户,然后过程结束; 第六模块,在固态盘的FTL映射表中查找该读请求的逻辑页面对应的物理页面,并读取该物理页面,然后过程结束; 第七模块,判断写请求队列缓存中是否有剩余的缓存空间,如果有则进入第八模块,否则进入第九模块; 第八模块,,直接将写请求添加到写请求队列缓存中,然后过程结束; 第九模块,将写请求队列缓存中的内容写回固态盘上,更新固态盘的FTL映射表以及FTL映射表的历史记录CDP_entry,并将该写请求添加到写请求队列缓存中。 第十模块,判断当前固态盘内部可用的空闲页面率是否低于预先设定的最小可用阈值LOWgc,若低于L0We。,则转第十一模块,否则过程结束; 第十一模块,启动垃圾回收进程,并将固态盘的保护窗口向前滑动时间Λ t,回收那些时间戳落在滑动过程经过的窗口中的物理页面,判断当前固态盘内部可用的空闲页面率是否高于预先设定的垃圾回收进程停止阈值HIGHe。,如果高于则垃圾回收结束,否则继续将保护窗口向前滑动时间At ; 第十二模块,判断该恢复请求的恢复时间点是否落在固态盘的保护窗口内,若落在保护窗口内,则转入第十三模块,否则转入第十八模块; 第十三模块,顺序地扫描内存空间rap_store中与每个逻辑页面对应的数组元素为表头的链表; 第十四模块,判断链表中时间点是等于或者最大小于(maximum less than)恢复时间点,还是大于恢复时间点,如果是等于或者最大小于,则获得该链表中该时间点对应的CDP_entry中记录的物理页面地址,然后转入第十五模块,如果是大于恢复时间点,则说明该页面在恢复后的状态中是不可见的,转入第十六模块; 第十五模块,将固态盘的FTL映射表中逻辑页面对应的映射项中的物理页面地址更新为该物理页面地址,然后过程结束。; 第十六模块,将该链表中该时间点对应的CDP_entry的逻辑页面对应的映射项置为空; 第十七模块,重复进入上述模块第十四至第十七,直至检查完所有的逻辑页面对应的物理页面地址为止,由此完成了恢复操作,然后过程结束; 第十八模块,向用户 提示数据恢复出错,然后过程结束。
【文档编号】G06F12/08GK103544110SQ201310463447
【公开日】2014年1月29日 申请日期:2013年10月8日 优先权日:2013年10月8日
【发明者】李春花, 周可, 万广平, 黄平, 王桦 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1