一种基于SSDRAID阵列的多级缓存及缓存方法与流程

文档序号:13512613阅读:977来源:国知局
一种基于SSD RAID阵列的多级缓存及缓存方法与流程

本发明属于固态硬盘存储技术领域,更具体地,涉及一种基于ssdraid阵列的多级缓存及缓存方法。



背景技术:

基于闪存的固态磁盘(solidstatedrives,ssd)以其优异的性能、非异失和低功耗等特点,已经在企业级存储广泛应用。但闪存存在寿命有限的缺陷,当闪存应用到大规模存储系统时存在可靠性问题。利用磁盘阵列(redundantarraysofindependentdisks,raid)技术构建大规模闪存阵列,既可以增大存储系统的容量,提高性能,又能保证可靠性。

但raid的引入会进一步缩短ssd的寿命。每次数据更新都伴随一次校验更新,频繁的更新会触发ssd中垃圾回收和数据块擦除,而ssd中数据块擦除次数是有限的。

目前针对ssdraid的延寿方法,要么只缓存数据页,不缓存校验页,因而存在数据丢失的风险;要么使用额外的log(日志)设备缓存数据页和校验页,因而存在映射表丢失的风险,同时使用额外大容量非易失性存储设备,而大容量伴随着更高的出错率。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种基于ssdraid阵列的多级缓存及缓存方法,其目的在于构建多级缓存,上层缓存由小容量nvram实现,负责压缩数据,并备份压缩数据到dram,接着把压缩后的数据及其元数据整合为页存储,然后以条带为单位调度数据到下层缓存;下层缓存从raid中分出一部分空间实现,负责缓存压缩数据,维护原数据和压缩数据映射表,还原压缩数据到raid,以及映射表掉电恢复。由此解决现有ssdraid的延寿技术存在的数据出错率增加的问题。

为实现上述目的,按照本发明的一个方面,提供了一种基于ssdraid阵列的多级缓存,所述多级缓存包括:

上层缓存,由小容量nvram实现,用于负责压缩数据,并备份压缩数据到内存,整合压缩后的数据及其元数据,以条带为单位调度数据到下层缓存;

下层缓存,由子raid实现,用于负责缓存压缩数据,维护原数据和压缩数据映射表,还原压缩数据到raid,以及映射表掉电恢复;

映射表,用于记录同一逻辑地址数据在raid中原始版本位置和多级缓存中最新压缩版本位置;

压缩元数据,用于管理压缩数据的元数据,映射表掉电丢失时,根据压缩元数据重构映射表。

进一步地,所述映射表的一个表项由六元组表示,该六元组包括:

重定位标识,用于标识条带中是否有数据在缓存中;

新条带号,用于记录最新压缩数据在子raid中的条带号;

新页号,用于记录最新压缩数据在条带中的数据页号;

新版本号,用于记录最新压缩数据的版本号;

页内偏移,用于记录压缩数据的页内起始位置;

数据长度,用于记录压缩数据的长度。

进一步地,所述压缩元数据由六元组表示,该六元组包括:

总长度,用于记录整个数据包的长度;

原条带号,用于记录raid中原始数据的条带号;

原页号,用于记录条带中的原始数据页号;

压缩数据长度,用于记录压缩数据的长度;

版本号,用于记录当前压缩数据的版本号;

压缩数据,用于记录压缩后的数据。

按照本发明的另一方面,提供了一种缓存方法,所述方法包括以下步骤:

(1)根据写请求计算写请求数据对应的条带号和页号;

(2)判断当前写模式,若是满写,进入步骤(3);若是大写,进入步骤(4);若是小写,进入步骤(5);

(3)根据新数据计算新校验,查看每个数据页的重定位标识是否在映射表中,是则将映射表中重定位标识更新为假;之后将新数据和新校验写入raid,向上层响应写操作完成;

(4)获取同一条带中的非请求页,根据所有数据页计算新校验,查看每个数据页的重定位标识是否在映射表中,是则将映射表中重定位标识更新为假;之后把新数据和新校验写入raid,向上层响应写操作完成;

(5)获取请求数据在raid中的原始数据和原条带校验;

(6)根据原条带号和原页号,查找映射表是否有对应表项,若没有,则新建映射表项,若有则重定位标识置为真;

(7)新数据和旧数据做异或运算,然后压缩异或值,判断压缩率是否大于压缩阈值th,若小于,则放弃压缩,直接将新数据与新校验写入raid,并更新映射表中对应表项,置重定位标识为假,向上层响应写操作完成;若大于,则进入步骤(8);其中,0<th<1,优选th=0.5;

(8)在内存备份压缩数据,同时更新映射表缓存指针,向上层响应写操作完成。

进一步地,所述方法中将新数据和新校验写入raid具体包括以下子步骤:

(11)在上层写缓存中,压缩数据及其元数据被整合成页存放;当数据调度到下层缓存时,进入步骤(12);当下层缓存垃圾回收时,进入步骤(13);当重建映射表时,进入步骤(15);

(12)以条带为单位,计算校验,把数据和校验一起写入下层缓存,同时上层缓存对应数据清空,更新映射表中新条带号、新页号、新版本号信息;

(13)选取有效数据最少的条带,依次读出每个页的压缩数据,对每个压缩数据,比较其版本号和映射表中的最新版本号,若不是最新版本号则丢弃;若是最新版本则执行步骤(14);

(14)获取数据页在raid中原数据,解压压缩数据,两者异或得到最新数据,把最新数据和校验写入raid,并更新映射表重定位标识为假;

(15)遍历多级缓存中每一个条带,根据压缩元数据查找是否有映射表表项,没有则新建;有则比较版本号,如果压缩数据的版本号更新,则更新映射表版本号为最新。

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

本发明根据新旧数据之间冗余大的特点,设计多级缓存管理和存储压缩数据,减少对缓存容量的需求,同时通过减少数据更新和延迟校验延长ssd寿命;降低成本和出错率;多级缓存设计提高系统可靠性,无论dram、nvram还是raid发生数据丢失或者出错,都能及时恢复。

附图说明

图1所示为本发明多级缓存的整体架构示意图;

图2所示为本发明多级缓存中映射表数据结构示意图;

图3所示为本发明多级缓存中压缩元数据结构示意图;

图4所示为本发明多级缓存方法的流程图;

图5所示为本发明中数据在多级缓存中执行流程示意图。

具体实施方式

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

本发明实施例中将会用到一些定义,其中的名词解释如下:

页:是本发明中上层缓存的基本单位,压缩后的数据及其元数据被整合层页存储;

条带:是本发明中从上层缓存向下层写数据的单位,包括数据页和校验页;

子raid:从ssdraid中分出一部分空间做下层缓存;

压缩数据:本发明中根据新旧数据冗余,对新旧数据做异或运算,再把异或值压缩存入多级缓存;

满写:一个条带内所有数据页均为请求的su数据页,且每个请求页中要写的数据都是整页;

大写:一个条带内请求页的数目大于所有数据页数量一半;

小写:一个条带内请求页的数目少于所有数据页数量一半;

如图1所示,本发明多级缓存包含一个可靠的存储系统架构和两个关键的数据结构,可靠存储系统架构主要由上层缓存和下层缓存构成:

上层缓存,由小容量nvram实现,用于负责压缩数据,并备份压缩数据到内存,整合压缩后的数据及其元数据,以条带为单位调度数据到下层缓存;

下层缓存,由子raid实现,用于负责缓存压缩数据,维护原数据和压缩数据映射表,还原压缩数据到raid,以及映射表掉电恢复;

两个关键的数据结构分别是映射表和压缩元数据:

映射表,用于记录同一逻辑地址数据在raid中原始版本位置和多级缓存中最新压缩版本位置;

如图2所示,映射表的一个表项由六元组表示,该六元组包括:

重定位标识,用于标识条带中是否有数据在缓存中;

新条带号,用于记录最新压缩数据在子raid中的条带号;

新页号,用于记录最新压缩数据在条带中的数据页号;

新版本号,用于记录最新压缩数据的版本号;

页内偏移,用于记录压缩数据的页内起始位置;

数据长度,用于记录压缩数据的长度。

压缩元数据,用于管理压缩数据的元数据,映射表掉电丢失时,根据压缩元数据重构映射表。

如图3所示,压缩元数据由六元组表示,该六元组包括:

总长度,用于记录整个数据包的长度;

原条带号,用于记录raid中原始数据的条带号;

原页号,用于记录条带中的原始数据页号;

压缩数据长度,用于记录压缩数据的长度;

版本号,用于记录当前压缩数据的版本号;

压缩数据,用于记录压缩后的数据。

如图4所示,一种基于ssdraid阵列的多级缓存方法包括以下步骤:

(1)根据写请求计算写请求数据对应的条带号和页号;

(2)判断当前写模式,若是满写,进入步骤(3);若是大写,进入步骤(4);若是小写,进入步骤(5);

(3)根据新数据计算新校验,查看每个数据页的重定位标识是否在映射表中,是则将映射表中重定位标识更新为假;之后将新数据和新校验写入raid,向上层响应写操作完成;

(4)获取同一条带中的非请求页,根据所有数据页计算新校验,查看每个数据页的重定位标识是否在映射表中,是则将映射表中重定位标识更新为假;之后把新数据和新校验写入raid,向上层响应写操作完成;

(5)获取请求数据在raid中的原始数据和原条带校验;

(6)根据原条带号和原页号,查找映射表是否有对应表项,若没有,则新建映射表项,若有则重定位标识置为真;

(7)新数据和旧数据做异或运算,然后压缩异或值,判断压缩率是否大于压缩阈值,若小于,则放弃压缩,直接将新数据与新校验写入raid,并更新映射表中对应表项,置重定位标识为假,向上层响应写操作完成;若大于,则进入步骤(8);

(8)在内存备份压缩数据,同时更新映射表缓存指针,向上层响应写操作完成。

如图5所示,所述缓存方法中将新数据和新校验写入raid具体包括以下子步骤:

(11)在上层写缓存中,压缩数据及其元数据被整合成页存放;当数据调度到下层缓存时,进入步骤(12);当下层缓存垃圾回收时,进入步骤(13);当重建映射表时,进入步骤(15);

(12)以条带为单位,计算校验,把数据和校验一起写入下层缓存,同时上层缓存对应数据清空,更新映射表中新条带号、新页号、新版本号信息;

(13)选取有效数据最少的条带,依次读出每个页的压缩数据,对每个压缩数据,比较其版本号和映射表中的最新版本号,若不是最新版本号则丢弃;若是最新版本则执行步骤(14);

(14)获取数据页在raid中原数据,解压压缩数据,两者异或得到最新数据,把最新数据和校验写入raid,并更新映射表重定位标识为假;

(15)遍历多级缓存中每一个条带,根据压缩元数据查找是否有映射表表项,没有则新建;有则比较版本号,如果压缩数据的版本号更新,则更新映射表版本号为最新。

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

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