一种基于条带版本的瓦记录RAID写顺序化方法及系统转让专利

申请号 : CN201710102277.9

文献号 : CN106970764B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张强刘振军董欢庆贾思懿马留英

申请人 : 中国科学院计算技术研究所

摘要 :

本发明提出一种基于条带版本的瓦记录RAID写顺序化方法及系统,涉及计算机存储技术领域,该方法包括设置高速持久缓存,用于接收所有非顺序写请求,当所述高速持久缓存被写到水位时触发下刷,其中以组为单位进行下刷,下刷时为要写入组中的各条带生成新版本;对于条带的每一个版本,计算一次校验,并将条带数据与校验顺序的写入带内。本发明避免了传统RAID5/6小写产生的RMW过程和瓦记录磁盘的RMW过程,提升了系统的整体性能。

权利要求 :

1.一种基于条带版本的瓦记录RAID写顺序化方法,其特征在于,包括:

步骤1,设置高速持久缓存,用于接收所有非顺序写请求,当所述高速持久缓存被写到水位时触发下刷,其中以组为单位进行下刷,下刷时为要写入组中的各条带生成新版本;

步骤2,对于条带的每一个版本,计算一次校验,并将条带数据与校验顺序的写入带内;

其中还包括通过自动去冗与版本合并,之后将当前带的尾指针前移,释放组内的历史版本所占用的空间。

2.如权利要求1所述的基于条带版本的瓦记录RAID写顺序化方法,其特征在于,所述步骤1中不同磁盘上具有相同带号的带组成一个组。

3.如权利要求1所述的基于条带版本的瓦记录RAID写顺序化方法,其特征在于,自动去冗包括先为条带生成版本位图,当版本位图上其余所有版本的每一列做逻辑或运算所得的值均大于或等于某一旧版本上相同列的值,则将所述某一旧版本中的数据与校验在进行版本合并时释放。

4.如权利要求3所述的基于条带版本的瓦记录RAID写顺序化方法,其特征在于,版本合并包括在组内数据块进行下刷之前,判断组内每个带是否都有足够空间进行下刷,如果都有,则直接生成新版本并写入对应的带,否则从没有足够空间下刷的带的尾指针向头指针进行数据块扫描,并读出扫描到的数据块所属条带在组内所有版本中的最新数据块,重新计算校验,生成所述条带的最新版本,写回阵列中,并将历史版本数据与校验占用的空间标记为无效,从而释放带上的空间。

5.一种基于条带版本的瓦记录RAID写顺序化系统,其特征在于,包括:

生成新版本模块,用于设置高速持久缓存,用于接收所有非顺序写请求,当所述高速持久缓存被写到水位时触发下刷,其中以组为单位进行下刷,下刷时为要写入组中的各条带生成新版本;

写入模块,用于对于条带的每一个版本,计算一次校验,并将条带数据与校验顺序的写入带内;

其中还包括通过自动去冗与版本合并,之后将当前带的尾指针前移,释放组内的历史版本所占用的空间。

6.如权利要求5所述的基于条带版本的瓦记录RAID写顺序化系统,其特征在于,所述生成新版本模块中不同磁盘上具有相同带号的带组成一个组。

7.如权利要求5所述的基于条带版本的瓦记录RAID写顺序化系统,其特征在于,自动去冗包括先为条带生成版本位图,当版本位图上其余所有版本的每一列做逻辑或运算所得的值均大于或等于某一旧版本上相同列的值,则将所述某一旧版本中的数据与校验在进行版本合并时释放。

8.如权利要求7所述的基于条带版本的瓦记录RAID写顺序化系统,其特征在于,版本合并包括在组内数据块进行下刷之前,判断组内每个带是否都有足够空间进行下刷,如果都有,则直接生成新版本并写入对应的带,否则从没有足够空间下刷的带的尾指针向头指针进行数据块扫描,并读出扫描到的数据块所属条带在组内所有版本中的最新数据块,重新计算校验,生成所述条带的最新版本,写回阵列中,并将历史版本数据与校验占用的空间标记为无效,从而释放带上的空间。

说明书 :

一种基于条带版本的瓦记录RAID写顺序化方法及系统

技术领域

[0001] 本发明涉及计算机存储技术领域,特别涉及一种基于条带版本的瓦记录RAID写顺序化方法及系统。

背景技术

[0002] 作为主要存储介质的传统磁盘的面密度很快将要接近1TB/In2极限,也就意味着单盘的存储空间已经很难再有大幅度的提升。为了解决这一问题,近几年,一种新的磁盘技术被业内提出,即瓦记录技术。其采用部分叠加相邻磁道的方式进一步提升磁盘的存储密度,然而,这种叠加磁道的方式在增大了磁盘存储容量的同时却使得磁盘无法直接原地更新,因为更新写一条磁道上的数据会覆盖其相邻磁道上的数据。为避免相邻磁道数据的损坏,需要做读修改写(Read-Modify-Write,RMW)。正如名字描述的那样,首先从磁盘上读出部分数据,然后修改其中的一部分数据,最后再将修改后的和未修改的数据一起写回磁盘。其中读出的部分数据要保证在写回时不会覆盖磁盘上其他位置的有效数据。因此,最坏的情况下,如果磁盘存满有效数据,一次RMW可能需要操作整个磁盘,导致严重的写放大,极大的降低磁盘的非顺序写性能。为了减小写放大,将RMW控制在一定范围内,减小写性能开销,可以将磁盘划分为连续的区域,即带(Band),如图1所示(假设写一条磁道(Track)最远只会覆盖下一条磁道上的数据,即覆盖率K=2,每个带由两条磁道组成),带之间的编址是连续的,但是带之间需预留一定空间(Gap),确保写带1上的任意位置都不会覆盖到带2上的任何数据。这样,就可以将写放大控制在一条带的范围内,因此写放大程度取决于带的大小(Band Size)。由于以带划分磁盘需要在相邻带间预留空间,浪费了磁盘存储容量,为减小磁盘容量浪费,带大小不能太小,因为带大小越小,磁盘上带的数量就越多,磁盘空间浪费就越严重。但即使带大小设置为几十MB左右,用户的每个写请求都可能会引发RMW,在最坏的情况下需要将整个带上的数据都读出,修改完再写回,性能也会大幅下降。
[0003] 对于RAID5/6或者更高维基于条带的带校验的RAID系统,在非顺序写场景下,由于小写的存在,在磁盘的每一个带上都会引入频繁的非顺序读写操作,由于瓦记录磁盘非顺序写性能很差,RAID系统整体的非顺序写性能会收到严重的影响。

发明内容

[0004] 为解决以上技术问题,本发明对瓦记录磁盘的带采用了循环日志的结构进行管理,如图2,写请求写入头指针位置,并将头指针前移,黑色区域为有效数据块,阴影区域是由于更新操作产生的无效数据块,由于瓦记录技术不支持原地更新,无效数据块只能通过回收操作才能重新被利用。回收是从尾指针处向头指针方向顺序读取有效数据,略过无效数据块,并将有效数据块写入头指针位置,从而释放出无效数据块占用的空间,来实现带内空间的释放。带内循环日志结构确保写是顺序化的,避免瓦记录磁盘的RMW操作。本方法避免了传统RAID5/6的小写流程,通过对条带做版本,用临时增加条带冗余的方法,避免了小写过程中的随机读操作,并将非顺序写转换成了带内顺序写从而提升了瓦记录RAID系统非顺序写性能,本发明提出一种基于条带版本的瓦记录RAID写顺序化方法及系统。
[0005] 本发明提出一种基于条带版本的瓦记录RAID写顺序化方法,
[0006] 步骤1,设置高速持久缓存,用于接收所有非顺序写请求,当所述高速持久缓存被写到水位时触发下刷,其中以组为单位进行下刷,下刷时为要写入组中的各条带生成新版本;
[0007] 步骤2,对于条带的每一个版本,计算一次校验,并将条带数据与校验顺序的写入带内。
[0008] 所述步骤1中不同磁盘上具有相同带号的带组成一个组。
[0009] 还包括通过自动去冗与版本合并,去除历史版本中已经无效的数据和校验。
[0010] 自动去冗包括先为条带生成版本位图,当版本位图上其余所有版本的每一列做逻辑或运算所得的值均大于或等于某一旧版本上相同列的值,则将所述某一旧版本中的数据与校验进行释放,否则进行版本合并。
[0011] 版本合并包括在组内数据块进行下刷之前,判断组内每个带是否都有足够空间进行下刷,如果都有,则直接生成新版本并写入对应的带,否则从没有足够空间下刷的带的尾指针向头指针进行数据块扫描,并读出扫描到的数据块所属条带在组内所有版本中的最新数据块,重新计算校验,生成所述条带的最新版本,写回阵列中,并将历史版本数据与校验占用的空间标记为无效,从而释放带上的空间。
[0012] 本发明还提出一种基于条带版本的瓦记录RAID写顺序化系统,
[0013] 生成新版本模块,用于设置高速持久缓存,用于接收所有非顺序写请求,当所述高速持久缓存被写到水位时触发下刷,其中以组为单位进行下刷,下刷时为要写入组中的各条带生成新版本;
[0014] 写入模块,用于对于条带的每一个版本,计算一次校验,并将条带数据与校验顺序的写入带内。
[0015] 所述生成新版本模块中不同磁盘上具有相同带号的带组成一个组。
[0016] 还包括通过自动去冗与版本合并,去除历史版本中已经无效的数据和校验。
[0017] 自动去冗包括先为条带生成版本位图,当版本位图上其余所有版本的每一列做逻辑或运算所得的值均大于或等于某一旧版本上相同列的值,则将所述某一旧版本中的数据与校验进行释放,否则进行版本合并。
[0018] 版本合并包括在组内数据块进行下刷之前,判断组内每个带是否都有足够空间进行下刷,如果都有,则直接生成新版本并写入对应的带,否则从没有足够空间下刷的带的尾指针向头指针进行数据块扫描,并读出扫描到的数据块所属条带在组内所有版本中的最新数据块,重新计算校验,生成所述条带的最新版本,写回阵列中,并将历史版本数据与校验占用的空间标记为无效,从而释放带上的空间。
[0019] 由以上方案可知,本发明的优点在于:
[0020] 通过高速持久缓存聚集非顺序写请求,在下刷前为要下刷的数据和校验生成条带版本,并做版本自动去冗和版本合并,在下刷时为条带建立版本并实现顺序写盘。本发明避免了传统RAID5/6小写产生的RMW过程和瓦记录磁盘的RMW过程,提升了系统的整体性能。

附图说明

[0021] 图1是盘片空间按带划分图;
[0022] 图2是带内循环日志结构图;
[0023] 图3是系统架构图;
[0024] 图4是条带版本图;
[0025] 图5是条带版本位图;
[0026] 图6是版本自动去冗图;
[0027] 图7是条带版本合并图。

具体实施方式

[0028] 本发明在传统RAID之上加入了一层高速持久缓存(如:SSD),用来接收所有非顺序写请求,当缓存被写到水位时触发下刷,如图3,下刷是以组为单位进行的(图3中虚线框中不同磁盘上具有相同带号的带组成一个组),下刷时组之间不会相互产生写覆盖,组内非整条带写不会触发小写过程,而是为要写入的条带生成新的版本,如图4所示组0:条带0的4个版本。其中0号版本包含数据D00(左侧的0表示版本号,右侧的0表示盘号)和对应的校验P0(0表示条带版本号),1号版本包含数据D11和对应的校验P1,2号版本包含数据D22和D23以及对应的校验P2,3号版本包含数据D30、D31、D33和校验P3。对于条带的每一个版本,都需计算一次校验,并将新版本的条带数据和校验顺序的写入对应的带内,从而避免了RAID5/6系统的小写过程,也避免了瓦记录磁盘的RWM过程。由于条带的不同版本会引入数据的冗余和校验的冗余,因此,本发明提出两种版本去冗的方法,即自动去冗和版本合并,用于去除历史版本中已经无效的数据和校验。自动去冗之前先为条带生成版本位图,如图5,条带版本中有数据的位置标记1,没有数据的位置标记0。对于条带版本位图中的每一个历史版本,可自动释放的原则为版本位图上其余所有版本的每一列做逻辑或运算所得的值均大于或等于待释放版本上相同列的值,如图6,当条带0:V3要下刷时,V0和V1都可以自动释放,此时将V0和V1已经写入带内的数据和校验标记为洞,即无效,等待回收,即版本合并。由于自动去冗并不能做到完全去除所有冗余数据和校验,因此需要结合版本合并方法来实现版本的完全去冗,即在组的下刷之前,需要判断组内每个带是否都有足够空间下刷,即带上头尾指针之间是否有足够多的空间下刷,如果都有,则直接生成新版本写入,否则需要启动版本合并,即从没有足够空间下刷的带的尾指针向头指针进行数据块扫描,并读出扫描到的数据块所属条带在组内所有版本中的最新的数据块,重新计算校验,生成该条带的最新版本,并将历史版本数据和校验占用的空间标记为洞,从而释放带上的空间,如图7。这种基于条带版本的RAID写顺序化方法既避免了传统RAID5/6小写的多次随机读写磁盘,又避免了瓦记录磁盘的RMW开销,实现了RAID系统在单盘上的写顺序化。
[0029] 下面给出本发明的具体实施方式,结合附图对本发明做出了详细描述。本发明包括非顺序写请求聚集和基于条带版本的写顺序化两个部分。
[0030] (一)非顺序写请求聚集
[0031] 如图3所示,D表示要下刷的数据块,P表示数据块所在条带对应的校验块。将所有非顺序写写入高速持久缓存中(如SSD)。当持久缓存被写入一定水位(water level)后,触发下刷操作。下刷时以组为单位选择要下刷的数据块并计算其校验,确保每个组内的每个带内在一轮下刷时的写为顺序写。由于SSD聚集了大量带内的非顺序写请求,因此做带内写顺序化时可以将更多的非顺序写顺序化,从而最大化下刷带宽。
[0032] (二)基于条带版本的写顺序化
[0033] 如图4,以条带0为例,Dxy表示版本号x的条带中的第y号数据块,Px表示版本号x的条带的校验块。假设条带0已经有3个版本存在于磁盘中,分别是V0、V1和V2,V3版本的数据D30、D31、D33是SSD中聚集的本轮需要下刷的数据块,其对应的校验为P3。在V3下刷之前先做条带的自动去冗,如图5和图6,先为条带0生成版本位图,并做版本去冗,去冗原则:版本位图上其余所有版本的每一列做逻辑或运算所得的值均大于或等于待释放版本上相同列的值。在V3下刷前V0和V1都可以被自动去冗,并可将其占用的空间标记为洞,等待版本合并操作释放其占用的空间。
[0034] 版本自动去冗完成后,在V3下刷之前,需要判断组内每个带上是否都有足够空间写入,如果空间不够,则需要启动版本合并,从没有足够空间下刷的带的尾指针开始向头指针遍历,假设当前尾指针指向的位置是条带0中的数据块,则将组内所有带中包含条带0的历史版本中的最新的数据读出,重新计算校验,并将最新的数据和校验随同要下刷的数据和校验在下刷时顺序写入带中。如图7,通过自动去冗消除v0和v1,通过版本合并消除v2,然后用每个带上条带0的最新数据构造新的版本v0,等待下刷时写入组内对应的磁盘。一轮版本合并做完以后将当前带的尾指针前移,从而释放出磁盘空间,重复此过程,直到当前带上有足够多的空间完成下刷。通过自动去冗和版本合并,可以释放组内的历史版本占用的空间,从而确保下刷能够正常写入,避免了RAID5/6系统小写的RMW过程和瓦记录磁盘非顺序写时的RMW过程。
[0035] 本发明还提出一种基于条带版本的瓦记录RAID写顺序化系统,包括:
[0036] 生成新版本模块,用于设置高速持久缓存,用于接收所有非顺序写请求,当所述高速持久缓存被写到水位时触发下刷,其中以组为单位进行下刷,下刷时为要写入组内的各条带生成新版本;
[0037] 写入模块,用于对于条带的每一个版本,计算一次校验,并将条带数据与校验顺序的写入带内。
[0038] 所述生成新版本模块中不同磁盘上具有相同带号的带组成一个组。
[0039] 还包括通过自动去冗与版本合并,去除历史版本中已经无效的数据和校验。
[0040] 自动去冗包括先为条带生成版本位图,当版本位图上其余所有版本的每一列做逻辑或运算所得的值均大于或等于某一旧版本上相同列的值,则将所述某一旧版本中的数据与校验进行释放,否则进行版本合并。
[0041] 版本合并包括在组进行下刷之前,判断组内每个带是否都有足够空间进行下刷,如果都有,则直接生成新版本并写入对应的带,否则从没有足够空间下刷的带的尾指针向头指针进行数据块扫描,并读出扫描到的数据块所属条带在组内所有版本中的最新数据块,重新计算校验,生成该条带的最新版本,并将历史版本数据与校验占用的空间标记为无效,从而释放带上的空间。