一种基于批量写校验的独立磁盘冗余阵列方法与流程

文档序号:12363248阅读:193来源:国知局
一种基于批量写校验的独立磁盘冗余阵列方法与流程

本发明属于数据储存领域,更具体地,涉及一种基于批量写校验的独立磁盘冗余阵列方法。



背景技术:

独立磁盘冗余阵列(Redundant array of independent disk,简称RAID)技术是由帕特森等人于1988年提出的一种存储系统架构。其基本思想是将多个磁盘组合起来,通过条带化技术提高并发访问性能。按照数据组织方式的不同,RAID又被分为多种级别,分别通过不同的方式保存冗余数据以保证存储系统的可靠性。比如RAID1使用数据镜像,RAID5/6采用保存校验数据的方式保证数据可靠性。

在不同的RAID等级中,基于校验的RAID5/6具有高存储率、高可靠、以及高性价比等优点,因而使得其在存储服务端得到广泛的应用。然而RAID5/6的随机写性能较低,也就是所谓的小写问题。以N盘的RAID5为例,如图1所示,每个条带是由N-1个数据块和1个校验块构成。当更新其中一个数据块时,需要先将旧数据块和校验块从磁盘中读出来(2个读I/O),然后和新的数据进行异或得到新的校验数据,最后将新的数据块和校验块全部写入相应的磁盘(2个写I/O)。一个更新操作将产生4个I/O操作,因此对于有着大量随机小写I/O的负载,会造成较高的I/O时延,对应用产生不利的影响。

近些年,随着固态盘(Solid-state Drive,SSD)的飞速发展,其在工业界和学术界都受到了广泛的关注。与磁盘相比,固态盘具有高性能,低功耗,抗震性好等特点。由于固态盘的价格仍然高于磁盘,因此一种普遍的做法是将固态盘设备作为缓存设备,以加速基于磁盘的后端存储系统的访问速度。然而,固态盘也有其本身的局限性,其中最为严峻问题之一就是固态盘的寿命问题。固态盘一般是用闪存作为存储介质的,而闪存单元的擦除/编程次数是有限的。当写入量超过一定量时,固态盘将无法再可靠的存储数据。一方面,随着固态盘存储密度的不断提高,闪存单元的擦除次数越来越少。另一方面,作为缓存设备,固态盘具有更多的写入操作,这更加快了固态盘的磨损。近年来的一些研究指出,数据中心的典型负载可以在几个月之内耗尽固态缓存盘设备的寿命。

传统的缓存管理策略包括直写法和写回法。其中写回法将数据写入固态缓存盘即可返回,因此可以提升RAID写性能。但是当固态缓存盘设备发生故障时,写回法将造成数据丢失,大大降低了存储系统可靠性。另一方面,直写法策略保证所有写入操作会将数据写入后端存储之后才会返回,因此不会降低存储系统可靠性,然而直写法无法有效提升基于校验的RAID系统的随机写性能。近年来,研究人员先后提出了一些固态缓存盘管理策略,但是这些方法要么没有解决RAID的小写问题,要么忽略了固态缓存盘的寿命问题,使得现有算法无法很好地应用在使用固态盘作为基于校验的磁盘阵列的应用场景下。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种基于批量写校验的独立磁盘冗余阵列方法,其目的在于将将固态盘作为RAID5/6的缓存设备,将NVRAM(非易失性随机访问存储器)作为RAID5/6的内存设备,将校验压缩打包储存在固态缓存盘中,在批量写入磁盘阵列中,由此解决基于校验的独立磁盘冗余阵列技术的随机写性能较低、固态缓存盘寿命不长的技术问题。

为实现上述目的,提供了一种基于批量写校验的独立磁盘冗余阵列方法,该方法包括以下步骤:

(1)请求判断步骤;判断若是写请求则进入步骤(2),否则进入步骤(3);

(2)上层应用写请求步骤;若固态缓存盘没有命中写请求数据块,则将该数据块写入磁盘阵列并更新校验块;否则将写数据块写入磁盘阵列但不更新校验块,将固态缓存盘中对应的数据块与内存中写请求数据块进行异或计算并对结果进行压缩得到差量编码;将差量编码存储至固态缓存盘,待回收固态缓存盘数据缓存块时再将差量编码批量转换为校验块写入磁盘阵列,请求结束;

(3)上层应用读请求步骤;若固态盘缓存盘没有命中读请求数据块,则从磁盘阵列中读取对应数据块,并将数据块写入到固态缓存盘中;否则从固态缓存盘中读取对应数据块,并判断是否有关联的差量编码,若没有则直接返回数据块,否则读取差量编码解压缩并与数据块进行异或得到所需数据返回,请求结束。

进一步地,所述上层应用写请求块步骤包含以下子步骤:

(11)查找固态缓存盘,若命中写请求数据块则转入步骤(12),否则转入步骤(18);

(12)将写请求数据块写入磁盘阵列但不更新校验块,同时将固态缓存盘中对应的数据缓存块读入内存,与写请求的数据块进行异或计算并对计算结果进行压缩得到差量编码;若存在对应的旧版本的差量编码,则将之删除;

(13)检查NVRAM缓存中是否有足够的空间保存新产生的差量编码,若没有则转入步骤(14),否则跳转到步骤(17);

(14)检查固态缓存盘中是否有空闲缓存块,若没有则转入步骤(15),否则转入步骤(16);

(15)触发固态缓存盘缓存空间回收线程,并等待缓存空闲块的数量超过阈值;

(16)从固态缓存盘中分配一个空闲缓存块,将NVRAM缓存中已有的差量编码打包写入,并将此缓存块定义为差量缓存块,之后清空NVRAM缓存;

(17)将新的差量编码写入到NVRAM缓存,写请求处理结束。

(18)检查固态缓存盘中是否有空闲缓存块,若没有则转入步骤(19),否则跳转到步骤(110);

(19)触发固态缓存盘缓存空间回收线程,并等待空闲缓存块的数量超过一定阈值;

(110)将写请求数据块写入磁盘阵列并更新校验块,同时将该数据块写入固态盘缓存;等所有写入完成,写请求处理结束。

进一步地,所述上层应用读请求块步骤包含以下子步骤:

(21)查找固态缓存盘,若没有命中读请求数据块则转入步骤(22),否则转入步骤(25);

(22)从磁盘阵列读取相应的数据块,检查固态缓存盘是否有空闲缓存块,若没有则转入步骤(23),否则跳转到步骤(24);

(23)触发固态缓存盘缓存空间回收线程,并等待空闲缓存块的数量超过阈值;

(24)在固态盘缓存上分配空闲缓存块,将(22)步读取的数据块写入到空闲缓存块中,读请求结束;

(25)从固态缓存盘读取相应的数据缓存块;检查是否存在该数据缓存块对应的差量编码,若存在则转入步骤(26),否则读请求结束;

(26)读取差量编码并解压缩得到差量,然后与(25)步读取的数据缓存块进行异或计算得到需要读取的数据,读请求结束。

进一步地,所述固态缓存盘空间回收包含以下步骤:

(31)采用缓存替换算法,选取要回收的数据缓存块;

(32)在固态缓存盘的差量缓存块中检查是否存在与该数据缓存块相关联的差量编码,若存在则转入步骤(33),否则跳转到步骤(36);

(33)读取该差量编码并解压得到差量,在磁盘阵列中读取和数据缓存块对应的校验块,根据得到的差量和读取的校验块重新计算新的校验块并写回磁盘阵列,之后删除该差量编码;计算新的校验块:对于RAID5,将差量和读取的校验块数据异或即可得到新的校验块;对于RAID6,将差量和读取的校验块P数据异或即可得到新的校验块P,将差量乘以相应的系数,然后将得到的结果与校验块Q异或即可得到新的校验块Q;

(34)判断该差量编码所在的差量缓存块中是否还有其它差量编码,若没有则转入步骤(35),否则跳转到步骤(36);

(35)将该差量缓存块标记为空闲缓存块;

(36)将该数据缓存块标记为空闲缓存块,如果固态缓存盘中的空闲缓存块超过阈值,则转入步骤(37),否则跳转到步骤(31);

(37)唤醒所有等待固态缓存盘缓存块分配的线程,该过程结束。

进一步地,所述现有缓存替换算法为LRU(最久未使用)、LFU(最不经常使用)、ARC(自适应缓存替换算法)、FIFO(先进先出算法)中的任意一种。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下技术特征及有益效果:

(1)本发明减少了独立磁盘冗余阵列的小写开销:当写命中时,通过保存差量编码块而延迟磁盘阵列中的校验更新,从而降低了因为校验更新而带来的额外的I/O操作,从而降低平均响应时间。

(2)本发明提升了固态缓存盘的寿命:由于本发明利用负载的内容局部性以及差量压缩技术,相比于现有缓存管理技术而言,大大减少了固态盘的数据写入量,从而显著提升了固态盘缓存的寿命。

附图说明

图1是独立磁盘冗余阵列RAID5的小写问题示意图;

图2是本发明的整体流程图;

图3是本发明的写操作流程图;

图4是本发明的读操作流程图;

图5是本发明的固态缓存盘缓存空间回收操作流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

首先给出本发明相关概念的定义:

条带:在RAID5/6中,条带是可以独立地恢复出失效数据的信息集合。

条带单元:一个条带信息与一个磁盘的交点。

数据块:指RAID5/6中用来存放数据信息的条带单元。

校验块:指RAID5/6中用来存放校验信息的条带单元。

差量:指新的更新数据块与旧的缓存块进行异或得到的结果。

差量编码:指对差量进一步采用增量压缩技术得到的编码。

数据缓存块:指固态缓存盘中存放数据的缓存块。

差量编码缓存块:指固态缓存盘中存放若干差量编码的缓存块。

图2是本发明的整体流程图,主要步骤包括:

(1)请求判断步骤;判断若是写请求则进入步骤(2),否则进入步骤(3);

(2)上层应用写请求步骤;若固态缓存盘没有命中写请求数据块,则将该数据块写入磁盘阵列并更新校验块;否则将写数据块写入磁盘阵列但不更新校验块,将固态缓存盘中对应的数据块与内存中写请求数据块进行异或计算并对结果进行压缩得到差量编码;将差量编码存储至固态缓存盘,待回收固态缓存盘数据缓存块时再将差量编码批量转换为校验块写入磁盘阵列,请求结束;

(3)上层应用读请求步骤;若固态盘缓存盘没有命中读请求数据块,则从磁盘阵列中读取对应数据块,并将数据块写入到固态缓存盘中;否则从固态缓存盘中读取对应数据块,并判断是否有关联的差量编码,若没有则直接返回数据块,否则读取差量编码解压缩并与数据块进行异或得到所需数据返回,请求结束。

图3是本发明的写操作流程图,主要步骤包括:

(11)查找固态缓存盘,若命中写请求数据块则转入步骤(12),否则转入步骤(18);

(12)将写请求数据块写入磁盘阵列但不更新校验块,同时将固态缓存盘中对应的数据缓存块读入内存,与写请求的数据块进行异或计算并对计算结果进行压缩得到差量编码;若存在对应的旧版本的差量编码,则将之删除;

(13)检查NVRAM(非易失性随机访问存储器)缓存中是否有足够的空间保存新产生的差量编码,若没有则转入步骤(14),否则跳转到步骤(17);

(14)检查固态缓存盘中是否有空闲缓存块,若没有则转入步骤(15),否则转入步骤(16);

(15)触发固态缓存盘缓存空间回收线程,并等待缓存空闲块的数量超过阈值;

(16)从固态缓存盘中分配一个空闲缓存块,将NVRAM缓存中已有的差量编码打包写入,并将此缓存块定义为差量缓存块,之后清空NVRAM缓存;

(17)将新的差量编码写入到NVRAM缓存,写请求处理结束。

(18)检查固态缓存盘中是否有空闲缓存块,若没有则转入步骤(19),否则跳转到步骤(110);

(19)触发固态缓存盘缓存空间回收线程,并等待空闲缓存块的数量超过一定阈值;

(110)将写请求数据块写入磁盘阵列并更新校验块,同时将该数据块写入固态盘缓存;等所有写入完成,写请求处理结束。

图4是本发明的读操作流程图,主要步骤包括:

(21)查找固态缓存盘,若没有命中读请求数据块则转入步骤(22),否则转入步骤(25);

(22)从磁盘阵列读取相应的数据块,检查固态缓存盘是否有空闲缓存块,若没有则转入步骤(23),否则跳转到步骤(24);

(23)触发固态缓存盘缓存空间回收线程,并等待空闲缓存块的数量超过阈值;

(24)在固态盘缓存上分配空闲缓存块,将(22)步读取的数据块写入到空闲缓存块中,读请求结束;

(25)从固态缓存盘读取相应的数据缓存块;检查是否存在该数据缓存块对应的差量编码,若存在则转入步骤(26),否则读请求结束;

(26)读取差量编码并解压缩得到差量,然后与(25)步读取的数据缓存块进行异或计算得到需要读取的数据,读请求结束。

图5是本发明的固态缓存盘缓存空间回收操作流程图,主要步骤包括:

(31)采用LRU、LFU、ARC、FIFO中的任意一种缓存替换算法,优选LRU算法,选取要回收的数据缓存块;

(32)在固态缓存盘的差量缓存块中检查是否存在与该数据缓存块相关联的差量编码,若存在则转入步骤(33),否则跳转到步骤(36);

(33)读取该差量编码并解压得到差量,在磁盘阵列中读取和数据缓存块对应的校验块,根据得到的差量和读取的校验块重新计算新的校验块并写回磁盘阵列,之后删除该差量编码;计算新的校验块:对于RAID5,将差量和读取的校验块数据异或即可得到新的校验块;对于RAID6,将差量和读取的校验块P数据异或即可得到新的校验块P,将差量乘以相应的系数,然后将得到的结果与校验块Q异或即可得到新的校验块Q;

(34)判断该差量编码所在的差量缓存块中是否还有其它差量编码,若没有则转入步骤(35),否则跳转到步骤(36);

(35)将该差量缓存块标记为空闲缓存块;

(36)将该数据缓存块标记为空闲缓存块,如果固态缓存盘中的空闲缓存块超过阈值,则转入步骤(37),否则跳转到步骤(31);

(37)唤醒所有等待固态缓存盘缓存块分配的线程,该过程结束。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1