一种基于固态盘阵列的数据处理方法及系统与流程

文档序号:11773930阅读:241来源:国知局
一种基于固态盘阵列的数据处理方法及系统与流程

本发明属于计算机存储技术领域,更具体地,涉及一种基于固态盘阵列的数据处理方法及系统。



背景技术:

磁盘阵列(redundantarrayofindependentdisks,raid)可以给用户提供大容量、高性能和高可靠性服务。raid根据容错能力和数据布局的不同可以分为不同的阵列级别(raidlevels)。raid5是raidlevels中最常用的一种级别。随着固态盘技术越来越成熟,价格越来越低,更多的存储厂商使用raid技术,把多个固态盘组建成固态盘阵列(redundantarrayofindependentssds,rais)作为高端的存储产品。

阵列存储系统可以提供大容量、高性能和高可靠性服务,但是它的小写性能很差。针对这一问题,很多研究采用日志技术延迟校验块更新来提升阵列的小写性能。但是传统日志技术是针对磁盘的特性进行设计的,而固态盘有很多不同于磁盘的特性。固态盘采用异地更新策略写数据,因此固态盘中存在很多“无效”的数据块。传统日志技术并没有充分利用这些“无效”的数据块,需要预读取阵列中一些旧的数据块,将这些数据和要写入的新数据一起顺序地写到日志盘中,以便当存储器失效时根据预读数据计算对应的校验块用于数据恢复。这些预读操作带来的额外读请求会破坏访问负载原本的访问特性。



技术实现要素:

针对现有技术的缺陷,本发明的目的在于解决现有技术频繁的预读会破坏访问负载的原本访问特性的技术问题。

为实现上述目的,第一方面,本发明提供了一种基于固态盘阵列的数据处理方法,包括:接收写请求,指示固态盘阵列和日志盘写入所述写请求对应的数据;所述固态盘阵列包括n个成员盘,所述n个成员盘中任意两个成员盘的逻辑地址范围相同,所述n个成员盘采用异地更新策略写入数据,所述异地更新策略为前后两次写入的相同逻辑地址的数据的物理地址不同,n为正整数;通过哈希(hash)表指示所述日志盘中对应的每个成员盘中最后一次写入的数据;在空闲时间、所述日志盘失效、所述日志盘的剩余空间低于第一阈值或有成员盘的剩余空间低于第二阈值时,指示所述固态盘阵列根据每个逻辑地址对应的n-1个成员盘上的数据更新每个逻辑地址对应的校验信息,并将每个逻辑地址对应的校验信息写入对应逻辑地址的成员盘中;当有成员盘失效时,通过所述哈希表指示的日志盘中的数据恢复失效成员盘中最后一次写入的数据,以及通过未失效成员盘中的数据和对应逻辑地址的校验信息恢复失效成员盘中相应逻辑地址上的数据。

具体地,第一阈值可以为日志盘总空间的20%,第二阈值可以为成员盘总空间的20%。另外,第一阈值和第二阈值也可根据实际需要设置,本发明实施例不对此做任何限定。

本发明利用日志技术和固态盘的异地更新策略将更新的数据块同时写到日志盘和固态盘阵列中,由于固态盘采用异地更新,原始数据还保存在固态盘中,故可延迟校验块的更新,提升了固态盘的小写性能,减少对校验块的擦写次数,提升了访问负载的性能。

可选地,本发明实施例提供的数据处理方法还包括:接收读请求,在成员盘对应的数据页读取数据;根据所述成员盘中包括的数据页的读写请求信息,确定所述数据页为只读页、只写页或交叉页中的一种;当接收写请求时,若所述写请求访问的数据页为只写页,则使用低代价处理所述写请求;若所述写请求访问的数据页为交叉页,则使用中等代价处理所述写请求;当接收读请求时,若所述读请求访问的数据页为只读页,则确定对所述数据页的前一次读请求是否为低代价,当不是低代价的读时,在系统空闲且所述读请求处理之前在所述数据页插入一个高代价的写请求。

本发明在减少预读操作后,使得数据页为只写页的几率增加,在此基础上结合调节读写代价的技术,进一步提升固态盘阵列的读写性能。

可选地,接收写请求,指示固态盘阵列和日志盘写入所述写请求对应的数据,包括:(a)将用户请求按照条带进行分解后,挂载到对应的条带上;用lba表示成员盘中的逻辑地址,log_lba表示日志盘中的逻辑地址;所述条带的编号对应lba;(b)对有请求的条带进行处理,如果是读请求,则执行步骤(f),否则执行步骤(c);(c)查找哈希表中是否有对应的条目,所述条目包括lba和log_lba信息,若哈希表中有对应的条目,则更改log_lba,若哈希表中没有对应的条目,则创建一个条目,将对应的lba和log_lba信息填充到所述创建的条目中;(d)判断所述写请求要写的数据页所属类型并作标记,将所述写请求克隆后,同时分发到成员盘和日志盘;(e)写请求到达成员盘时,根据所述写请求要写的数据页所属类型动态调节访问的代价,接着判断地址映射表中所述写请求对应的数据页的old_ppn是否为空,如果为空则将old_ppn的值设置为所述写请求对应的数据页的物理页号,所述地址映射表用于记录数据页的逻辑页号lpn、物理页号ppn以及该数据页对应的无效数据页的物理页号old_ppn;(f)读请求到达成员盘时,根据所述读请求要读的数据页所属类型动态调节访问的代价。

需要说明的是,条带(strip)是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法。简单的说,条带是一种将多个磁盘驱动器合并为一个卷的方法。一个条带上的数据块在不同磁盘(成员盘)的逻辑地址相同。

本发明通过修改地址映射表,通过old_ppn记录“无效”的数据块,去除预读操作,从而保证了真实负载的访问特性。

可选地,所述在空闲时间、所述日志盘失效、所述日志盘的剩余空间低于第一阈值或有成员盘的剩余空间低于第二阈值时,指示所述固态盘阵列根据每个逻辑地址对应的n-1个成员盘上的数据更新每个逻辑地址对应的校验信息,包括:依次取出所述哈希表的节点,确定对应的条带,读出成员盘中对应条带上所有的数据块,计算出对应的校验块并在成员盘对应条带写入所述校验块,删除该条带上被更新过的数据块在哈希表中的对应条目,重复计算校验块以及删除哈希表中对应的条目直到哈希表为空。

可选地,当有成员盘失效时,通过所述哈希表指示的日志盘中的数据恢复失效成员盘中最后一次写入的数据,以及通过未失效成员盘中的数据和对应逻辑地址的校验信息恢复失效成员盘中相应逻辑地址上的数据,包括:如果失效数据块在哈希表中有对应的条目,则直接从日志盘中读取对应的数据块作为恢复数据;如果失效数据块在哈希表中没有对应的条目,则使用未失效成员盘中对应逻辑地址的数据块和校验块的旧数据进行异或确定恢复数据,当未失效成员盘中对应逻辑地址的数据块或校验块被更新过的,通过地址映射表中old_ppn域所指的位置读取对应的旧数据。

可选地,处理写请求时,通过成员盘的异地更新策略和日志盘的日志技术延迟了校验块的更新,减少了为计算校验块所需的预读操作,保证了访问负载的原始特性。

第二方面,本发明实施例提供了一种基于固态盘阵列的数据处理系统,包括:固态盘阵列、日志盘、请求处理模块、数据记录模块、校验同步模块以及数据恢复模块;所述固态盘阵列包括n个成员盘,所述n个成员盘中任意两个成员盘的逻辑地址范围相同,所述n个成员盘采用异地更新策略写入数据,所述异地更新策略为前后两次写入的相同逻辑地址数据的物理地址不同,n为正整数;所述请求处理模块,用于接收写请求,指示所述固态盘阵列和日志盘写入所述写请求对应的数据;数据记录模块,用于通过哈希表指示所述日志盘中记录的每个成员盘中最后一次写入的数据;校验同步模块,用于在空闲时间、所述日志盘失效、所述日志盘的剩余空间低于第一阈值或有成员盘的剩余空间低于第二阈值时,指示所述固态盘阵列根据每个逻辑地址对应的n-1个成员盘上的数据更新每个逻辑地址对应的校验信息,并将每个逻辑地址对应的校验信息写入对应逻辑地址的成员盘中;数据恢复模块,用于当有成员盘失效时,通过所述哈希表恢复失效成员盘中最后一次写入的数据,以及通过未失效成员盘中的数据和对应逻辑地址的校验信息恢复失效成员盘中相应逻辑地址上的数据。

可选地,本发明实施例提供的数据处理系统还包括:鉴别模块和访问调节模块;所述鉴别模块,用于根据所述成员盘中包括的数据页的读写请求信息,确定所述数据页为只读页、只写页或交叉页中的一种;所述访问调节模块,用于当所述请求处理模块接收写请求时,若所述写请求访问的数据页为只写页,则使用低代价处理所述写请求;若所述写请求访问的数据页为交叉页,则使用中等代价处理所述写请求;当所述请求处理模块接收读请求时,若所述读请求访问的数据页为只读页,则确定对所述数据页的前一次读请求是否为低代价,当不是低代价的读时,在系统空闲且所述读请求处理之前在所述数据页插入一个高代价的写请求。

可选地,用lba表示成员盘中的逻辑地址,log_lba表示日志盘中的逻辑地址;所述请求处理模块,用于将请求按照条带进行分解后,挂载到对应的条带上,所述条带的编号对应lba;若所述请求为写请求,查找哈希表中是否有对应的条目,所述条目包括lba和log_lba信息,若哈希表中有对应的条目,则更改log_lba,若哈希表中没有对应的条目,则创建一个条目,将对应的lba和log_lba信息填充到所述创建的条目中;所述鉴别模块,用于判断所述写请求要写的数据页所属类型并作标记,所述请求处理模块,用于将所述写请求克隆后,同时分发到成员盘和日志盘;所述访问调节模块,用于当所述写请求到达成员盘时,根据所述写请求要写的数据页所属类型动态调节访问的代价。

可选地,校验同步模块,用于在空闲时间、所述日志盘失效、所述日志盘的剩余空间低于第一阈值或有成员盘的剩余空间低于第二阈值时,依次取出所述哈希表的节点,确定出对应的条带,读出成员盘中条带上所有的数据块,计算出对应的校验块并在成员盘对应条带写入所述校验块,删除该条带上被更新过的数据块在哈希表中的对应条目,重复计算校验块以及删除哈希表中对应的条目直到哈希表为空。

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

(1)本发明利用日志技术和固态盘的异地更新策略将更新的数据块同时写到日志盘和固态盘阵列中,通过延迟校验块更新提升小写性能,减少对校验块的擦写次数。

(2)本发明通过修改地址映射表,记录“无效”的数据块,减少了为计算校验块所需的预读操作,从而保证了真实负载的访问特性。

(3)本发明在减少预读操作后,使得数据页为只写页的几率增加,在此基础上结合调节读写代价的技术,进一步提升固态盘阵列的读写性能。

附图说明

图1为本发明实施例提供的基于固态盘阵列的数据处理方法流程示意图;

图2为本发明实施例提供的基于固态盘阵列的数据处理系统架构示意图;

图3为本发明实施例提供的用户请求处理流程示意图;

图4为本发明实施例提供的数据恢复流程示意图;

图5为本发明实施例提供的页的访问类型判断方法和调节页读写代价的实例图;

图6为本发明实施例提供的日志hash表数据结构示意图;

图7为本发明实施例提供的固态盘阵列成员盘的扩展地址映射表示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

图1为本发明实施例提供的基于固态盘阵列的数据处理方法流程示意图,如图1所示,包括步骤s10至步骤s40。

s10,接收写请求,指示固态盘阵列和日志盘写入所述写请求对应的数据;所述固态盘阵列包括n个成员盘,所述n个成员盘中任意两个成员盘的逻辑地址范围相同,所述n个成员盘采用异地更新策略写入数据,所述异地更新策略为前后两次写入的相同逻辑地址数据的物理地址不同,n为正整数。

s20,通过哈希表指示所述日志盘中对应的每个成员盘中最后一次写入的数据。

s30,在空闲时间、所述日志盘失效、所述日志盘的剩余空间低于第一阈值或有成员盘的剩余空间低于第二阈值时,指示所述固态盘阵列根据每个逻辑地址对应的n-1个成员盘上的数据更新每个逻辑地址对应的校验信息,并将每个逻辑地址对应的校验信息写入对应逻辑地址的成员盘中。

s40,当有成员盘失效时,通过所述哈希表指示的日志盘中的数据恢复失效成员盘中最后一次写入的数据,以及通过未失效成员盘中不同逻辑地址上的数据和对应逻辑地址的校验信息恢复失效成员盘中相应逻辑地址上的数据。

具体可参照下述图2-图7中的详细介绍,在此不做赘述。

图2是本发明实施例提供的基于固态盘阵列的数据处理系统架构示意图,如图2所示,存储系统由固态盘阵列210、日志盘220和功能模块100组成。固态盘阵列210由成员盘2101、2102、2013…210n组成raid5级别阵列,日志盘220包含一个固态盘2201,功能模块100包括管理模块110、监控模块120、鉴别模块130、数据恢复模块140、校验同步模块150、请求处理模块160和数据分发模块170,其中n为正整数。

管理模块110为系统管理员提供一个配置参数的接口,以便设置日志盘空间使用阈值和系统其它参数。监控模块120负责监控固态盘组200中各个固态盘空间使用情况,以及是否存在失效固态盘。鉴别模块130可以鉴别出用户访问的数据页属于只读页、只写页和交叉页中的哪一种类型。数据恢复模块140在固态盘阵列中出现固态盘失效时进行数据恢复处理。校验同步模块150在日志盘失效、或者使用空间达到阈值、或者系统空闲时对固态盘阵列进行校验同步处理。请求处理模块160负责处理用户的请求。数据分发模块170将请求发送到固态盘阵列和日志盘中。

数据恢复模块140、校验同步模块150和请求处理模块160都需要查询和更新hash表180。hash表180用来记录日志盘220中数据块与固态盘阵列210之间的位置映射关系,该hash表保存在非易失性内存中。

图2所示的数据处理系统还可包括更多或更少的部件,例如可包括访问调节模块和校验同步模块等其他部件,访问调节模块用于当所述请求处理模块接收写请求时,若所述写请求访问的数据页为只写页,则使用低代价处理所述写请求;若所述写请求访问的数据页为交叉页,则使用中等代价处理所述写请求;当所述请求处理模块接收读请求时,若所述读请求访问的数据页为只读页,则确定对所述数据页的前一次读请求是否为低代价,当不是低代价的读时,在系统空闲且所述读请求处理之前在所述数据页插入一个高代价的写请求。校验同步模块,用于在空闲时间、日志盘失效、日志盘的剩余空间低于第一阈值或有成员盘的剩余空间低于第二阈值时,依次取出哈希表的节点,确定出对应的条带,读出成员盘中条带上所有的数据块,计算出对应的校验块并在成员盘对应条带写入校验块,删除该条带上被更新过的数据块在哈希表中的对应条目,重复计算校验块以及删除哈希表中对应的条目直到哈希表为空。

如图3所示,本发明实施例提供的用户请求处理流程示意图,包括以下步骤:

(a)将用户请求按照条带进行分解后,挂载到对应的条带上。

(b)对有请求的条带进行处理,如果是读请求,则跳转到(f),否则继续步骤(c)。

(c)查找hash表180中是否有对应的条目,如果没有就创建一个新的条目,填充lba和log_lba后加入到hash表中,否则更改log_lba即可。

(d)判断要写的数据页所属类型并作标记,然后将写请求克隆后,同时分发到固态盘阵列210的成员盘和日志盘220。

(e)写请求到达成员盘时,首先通过鉴别模块130判断当前访问请求的类型,然后动态调节访问的代价,接着判断地址映射表230中对应条目的old_ppn是否为空,如果为空则需要记录被更新前的数据块的物理位置,即将old_ppn的值设置为该写请求对应的数据页的物理页号。

(f)读请求到达成员盘时,首先通过鉴别模块130判断当前访问请求的类型,然后动态调节访问的代价。

另外,检验同步操作可能发生在以下几种情况:日志盘220失效、日志盘220剩余空间达到阈值、固态盘阵列210的成员盘剩余空间达到阈值或系统空闲,本发明实施例提供的检验同步操作具体步骤如下:

(1.1)取出hash表180的头节点,计算出对应的条带。

(1.2)读出条带上所有的数据块,计算出新的校验块,然后写入新的校验块。

(1.3)删除该条带上被更新过的数据块在hash表180中的对应条目。

(1.4)跳至步骤(1.1),直到hash表为空。

另外,本发明实施例提供的固态盘阵列成员盘失效后的数据恢复步骤如图4所示,固态盘阵列210成员盘失效后的数据恢复步骤具体如下:

(2.1)对失效成员盘中的每个数据块进行恢复,直到所有数据恢复完成。

(2.2)如果失效数据块在hash表180中有对应的条目,则直接从日志盘中读取对应的数据块作为恢复数据。

(2.3)如果失效数据块在hash表180中没有对应的条目,则使用条带中其它数据块和校验块的旧数据进行异或获取。如果条带中其它数据块被更新过的,它们对应的旧数据可以通过地址映射表230中增加的old_ppn域所指的位置读取出来。

(2.4)跳至步骤(2.1)。

图5为本发明实施例提供的页的访问类型判断方法和调节页读写代价的一个实例250。

研究表明,微软研究院(microsoftresearch,msr)公开的很多真实负载都是由随机小写请求组成,并且这些负载还具有一些访问特性。如果我们规定超过95%的请求对一个页的访问都是读请求,那么这个页是只读页;超过95%的请求对一个页的访问都是写请求,那么这个页是只写页;如果一个页既不是只读页,也不是只写页,那么这个页是交叉页。统计结果显示,这些msr真实负载大部分请求访问的是只读页和只写页,只有小部分请求访问交叉页。组成固态盘的flash芯片读写代价(访问延迟)之间有一个相互关系,如果对一个页使用高代价(高延迟)进行写,那么随后对这个页的读延迟都是低代价;如果对一个页使用低代价(低延迟)进行写,那么随后对这个页的读延迟都是高代价;如果对一个页使用中等代价(中等延迟)进行写,那么随后对这个页的度延迟就是中等代价。有些研究结合访问负载上述特性调节flash芯片的读写代价来提升单个固态盘的读写性能。

实例250的窗口2501中当前访问请求为w(写请求),记录的前一个访问请求也为w,因此该页是一个只写页,用一个l代价(低延迟)的写来完成该请求。实例250的窗口2502中当前访问请求为r(写请求),记录的前一个访问请求也是r,因此该页是一个只读页,而且前一个读请求的延迟是l代价(低延迟),那么该读请求代价不需要进行调节,也是一个l代价。实例250中有一个加粗和加下划线的h代价和m代价(中等代价),表示的是该页是只读页,但是对应的读请求代价不是l(低代价),需要在系统空闲且这个读请求完成之前,插入并执行一个h代价(高代价)的写,这样可以使得随后只读页的读请求的代价都是l代价(低延迟)。实例250的窗口2503和窗口2504的当前请求和记录的请求不一致,可以判断出该页是交叉页,读写当前不需要进行调节。窗口2503中的页上次写请求是一个低延迟的写,随后的读请求就是高延迟。窗口2504中的页上次写请求是一个中等延迟的写,随后的读请求就是中等延迟。

图6为本发明实施例提供的日志hash表180数据结构示意图。日志hash表180由若干个条目1801、1802、1803…180n组成,每个条目指向一个数据块链表,以条目1801指向的第一个数据块(每个数据块大小为4kb)为例:lba18011表示数据块在固态盘阵列210中的逻辑块地址(logicalblockaddress,lba);log_lba18012表示数据块在日志盘220中的逻辑块地址;next18013指向下一个数据块。

图7所示为固态盘阵列210中的成员盘的地址映射表230主要数据结构示意图。地址映射表230主要由3个域lpn2301、ppn2302和old_ppn2303组成。lpn2301为数据页的逻辑页号(logicalpagenumber,lpn),ppn2302为数据页的物理页号(physicalpagenumber,ppn),old_ppn2303为该数据页对应的无效数据页的物理页号。

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

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