一种写数据的方法、装置以及廉价冗余磁盘阵列的制作方法

文档序号:6579591阅读:153来源:国知局
专利名称:一种写数据的方法、装置以及廉价冗余磁盘阵列的制作方法
技术领域
本发明涉及通信技术领域,具体涉及一种写数据的方法、装置以及廉价冗余磁 盘阵列。
背景技术
存储系统中,固态硬盘(SSD,SolidStateDisk)由于其具有读写性能优越、功耗
小、安全性高等特点被越来越广泛的应用于存储界。SSD读写操作的基本单位为1个页, 擦除的基本单位为1个块,同时相对于传统磁盘,SSD盘内采用缓存技术对读写操作进行 加速。目前SSD可以支持的廉价冗余磁盘阵列(RAID,Redundant Arrays of Inexpensive Disks)包括RAIDO,RAIDl和RAIDlO等级别。需要说明的是,现有技术中,也将廉 价冗余磁盘阵列称为独立磁盘冗余阵列(RedundantArray of Independent Disks)。现有技术中,针对RAIDO和RAIDl等级别的SSD应用,一般采用缓存单元对 接收的数据进行缓存,然后对缓存的数据合并,并将合并后的数据写入SSD中。当缓存 单元的存储空间不足时,直接将接收的数据写入SSD中,即当缓存单元的存储空间不足 时,数据是随机写入SSD中的。在对现有技术的研究和实践过程中,发明人发现现有技术中,由于缓存单元的 存储空间很小,因此接收的大部分数据都需要随机写入SSD,而根据SSD的特性可知, SSD的随机写性能低于SSD的顺序写性能,从而影响了 SSD的写性能。

发明内容
本发明实施例在于提供一种写数据的方法、装置、以及廉价冗余磁盘阵列,能 够将接收的数据按顺序写入SSD,从而提升SSD的写性能。本发明实施例是通过以下技术方案实现的本发明实施例提供的一种写数据的方法,包括获取当前指针所指向的硬盘单元DU(DiskUnit);当待写入数据预占用的空间未超过预设的分条深度时,将待写入数据以页为单 位写入所述DU所属的固态硬盘SSD中;当待写入数据预占用的空间超过预设的分条深度时,将待写入数据以页为单位 写入所述DU所属的廉价冗余磁盘阵列RAID组中的至少两个SSD中。本发明实施例提供的一种写数据的装置,包括获取单元,用于获取当前指针所指向的硬盘单元DU;写操作单元,用于当待写入数据预占用的空间未超过预设的分条深度时,将待 写入数据以页为单位写入所述DU所属的固态硬盘SSD中;当待写入数据预占用的空间 超过预设的分条深度时,将待写入数据以页为单位写入所述DU所属的廉价冗余磁盘阵列 RAID组中的至少两个SSD中。本发明实施例提供的一种廉价冗余磁盘阵列RAID,包括至少两个SSD以及上述写数据的装置。本发明实施例在存储系统中写入数据时,获取维护的当前指针所指向的DU,当 待写入数据预占用的空间未超过预设的分条深度时,将待写入数据以页为单位写入获取 的DU所属的固态硬盘SSD中;当待写入数据预占用的空间超过预设的分条深度时,将 待写入数据以页为单位写入当前指针所指向的DU所属的RAID组中的至少两个SSD中。 可见,数据都是顺序写入SSD中的,相对于将数据随机写入SSD中,提高了 SSD的写性 能。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或 现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅 是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提 下,还可以根据这些附图获得其它的附图。图1是本发明实施一提供的写数据的方法流程图;图2是本发明实施二提供的写数据的方法流程图;图3是本发明实施三提供的写数据的方法流程图;图4是本发明实施例四提供的写数据的装置示意图;图5是本发明实施例五提供的写数据的装置示意图;图6是本发明实施例六提供的写数据的装置示意图;图7是本发明实施例八提供的写数据的装置示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、 完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施 例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得 的所有其它实施例,都属于本发明保护的范围。首先,为了使本领域技术人员更好的理解本发明,下面对本发明实施例中涉及 的概念进行简要介绍RAID组,由存储设备上的至少2个SSD组成,RAID组中的每个SSD包含有一 个空闲DU(Disk Unit,硬盘单元)队列,每个空闲DU队列中有一个空闲DU处于待接收 数据的状态,以使各SSD接收数据的机会均等。例如,RAID组中包括4个SSD,则需 维护4个空闲DU队列。分条深度,RAID组SSD上的分区可以进一步细分为更小的段,这些更小的段被 称为分块。假如分块属于一个分区,而分区又属于一个阵列,那么,分块的长度称为分 条深度。LUN (Logic Unit Number,逻辑单元号),是在RAID组中的基础上创建的,1个
RAID组对应至少1个LUN ( —般情况下1个RAID组对应1个LUN),LUN相对于存储
设备来讲是逻辑设备。当网络中的主机连接到存储设备时,就可以识别到LUN。本发 明实施例中,在将主机下发的写请求写入存储设备之前,将写请求主机下发的随机小写请求转化为顺序写操作,从而提高SSD写性能。全页日志结构管理模式,是指以页(每页容量为4K)为基本单位向SSD下发数 据。该模式下,每个LUN维护一张映射表,映射表里的每个表项对应一个页。映射表 用于实现从逻辑页(即主机可见空间页)到物理页的转换,假设LUN的容量为2T,那么 映射表里就有2T/4K= 512M个表项。每个表项具有两个域,其中一个域用于指向当前 逻辑页对应的物理页(即当前逻辑页具体存放在哪个物理页上);另一个域用于指向与当 前逻辑页页号相同的物理页被哪个逻辑页引用。垃圾回收,由于LUN的空间是有限的,为了实现垃圾回收,为每个LUN创建一 张垃圾回收表,该表中的每一项对应主机可见空间中的一个DU(例如为4M),也就是说 对于2T的LUN垃圾回收表里共有2T/4M = 512K个表项,每个表项有3个字段,第一 个字段是一个struct btree结构的变量,struct btree结构用于维护以DU中的无效页数为键 值的二叉查找树,其定义如下
struct btree
struct btree * father; struct btree *leftchild; struct btree *rightchild; unsigned int InvalidPage Sum;垃圾回收时取出二叉查找树中最右端的至少一个节点,回收这些节点对应的DU 即可。为了保证二叉查找树按序排列,DU中的无效页数一旦改变,需要调整二叉查找 树,所以这里记录了每个节点的左孩子节点(Ieftchild)、右孩子节点(rightchild)和父亲节 点(father);第2个字段是一个struct IistJiead结构的变量,该字段用于维护空闲DU队 列;第3个字段是DU中页的位图,DU中某个页一旦无效我们就置其在位图中对应的比 特位为1,若DU的大小为4M,则一个DU有1024个页,需要1024个比特即128个字节 构成位图,垃圾回收时可通过位图中的比特位确定DU中哪些页有效(位图中的比特位为 1),从而将有效页搬移,实现DU的回收。实施例一、参见图1,为本发明实施一提供的写数据的方法流程图,该方法包括SlOl 获取当前指针所指向的DU(硬盘单元)。例如,系统中有SSD0-SSDX (其中X为大于等于1的整数),按照预设大小(如 4MB)的DU对SSD进行等分,对构建的RAID组(如RAID0)中的每个SSD维护一个空 闲DU队列,用于接收待写入数据;同时还维护一个当前指针,用于指向待写入数据当 前时刻应该下发到哪一个待接收数据的DU中。若RAIDO包括4个SSD,每一时刻都会 有4个来自不同SSD的DU用于接收待写入数据,如4个来自不同SSD的包括DU0,DU4,DU8禾PDU12,当前指针指向DUO,则获取当前指针所指向的DUO。S102确定待写入数据预占用的空间是否超过预设的分条深度,当待写入数据 预占用的空间未超过预设的分条深度时,执行S103;否则,待写入数据预占用的空间超 过预设的分条深度时,执行S104。例如,预设的分条深度可以为16K;待写入数据为主机下发的写请求,一个写 请求为主机串口一次发送出的数据,当一个写请求所占空间大于16K时,确定该写请求 超过预设的分条深度,当一个写请求所占空间小于16K时,确定该写请求未超过一个分 条深度。S103当待写入数据预占用的空间未超过预设的分条深度时,将待写入数据以 页为单位写入当前指针所指向的DU所属的固态硬盘SSD中。例如,待写入数据所占空间大小未超过16K,当前指针所指向的DU为DU0,则 在DUO所属SSD (当前SSD)中以页为单位写入待写入数据。其中,SSD中待写入数据的具体的物理页由当前指针、维护的逻辑页与物理页 的映射表、以及DU号共同决定。S104当待写入数据预占用的空间超过预设的分条深度时,将待写入数据以页 为单位写入所述DU所属的廉价冗余磁盘阵列RAID组的至少两个SSD中。例如,待写入数据预占用空间大小超过16K,当前指针所指向的DU为DU0,则 在DUO所属SSD (当前SSD),以及当前SSD之后的一个SSD中以页为单位写入待写入数据。其中,RAID组中的每个SSD对应一个空闲DU队列,每一时刻每个SSD从对
应的空闲队列中提供一个待接收数据的空闲DU。其中,当前指针的指向采用轮循的方式,即当前指针指向的DU所属SSD被 写满,或者超过预设的阈值时,指针将指向RAID组中下一个SSD提供的待接收数据的 DU。本实施例中,在存储系统中写入数据时,获取维护的当前指针所指向的DU,当 待写入数据预占用的空间未超过预设的分条深度时,将待写入数据以页为单位写入DU所 属的固态硬盘SSD中;当待写入数据预占用的空间超过预设的分条深度时,将待写入数 据以页为单位写入当前指针所指向的DU所属的RAID组的至少两个SSD中。可见,数 据是按顺序写入SSD的,相对于将数据随机写入SSD,提高了 SSD的写性能。下面分别对待写入数据超过分条深度和未超过分条深度的情况进行详细说明。实施例二、参见图2,为本发明实施二提供的写数据的方法流程图,该方法包括S201 获取当前指针所指向的DU。例如,待接收数据的DU包括DUO、DU4、DU8和DU12,当前指针指向 DUO,则获取当前指针所指向的DUO。S202 若待写入数据预占用空间未超过预设的分条深度(如16K),确定当前指 针所指向的DU中剩余页的空间是否大于待写入数据预占用的空间,若是,执行S203; 否则,执行S204。S203 在当前指针所指向的DU中以页为单位写入待写入数据。
例如,待接收数据的DU包括DUO,DU4,DU8和DU12,当前指针指向 DUO,待写入数据未超过预设的分条深度,且DUO剩余页足够写入待写入数据,则以页 为单位将待写入数据写入DUO。S204在当前指针所指向的DU中以页为单位写入待写入数据,若当前指针所 指向的DU被写满时,从当前指针指向的DU所属SSD的空闲DU队列中重新分配一个 DU,在重新分配的DU中以页为单位写入剩余的待写入数据,且将当前指针所指的方向 移到RAID组中下一个SSD提供的DU。例如,待接收数据的DU包括DUO,DU4,DU8和DU12,当前指针指向 DUO,待写入数据未超过预设的分条深度,且DUO剩余页的空间小于待写入数据,则以 页为单位将待写入数据写入DU0,当DUO写满时,从维护的DUO所属SSD空闲队列中 重新分配一个DU1,在DUl中以页为单位写入剩余的待写入数据。至此,已完成了当待写入数据已超过分条深度时,将待写入数据写入SSD的过 程。在具体的实施过程中,S203或者S204之后,还可以包括获取写入待写入数据后的SSD中存放该待写入数据的当前逻辑页,更新维护该 逻辑页的映射表表项。具体包括如下过程(1)根据当前逻辑页映射表表项的第一个域(用于指向当前 逻辑页真实存放在哪个物理页上),获得原来存放当前逻辑页中数据的物理页页号(旧物 理页页号)。(2)若当前逻辑页映射表表项的第一个域为Oxffffffff,则将选中DU中用于 存放当前逻辑页的物理页页号赋给该域;若不为Oxffffffff,说明当前逻辑页曾经存放在其 它物理页上,此时先根据(1)中获得的旧物理页页号查找与该物理页页号相同的逻辑页 的映射表表项,并将该表项的第二个域(用于指向与当前逻辑页页号相同的物理页被哪 一个逻辑页引用)置为Oxffffffff,表明该物理页无效了,再根据旧物理页页号获得其所在 DU在垃圾回收表中的表项,更新该表项中二叉查找树节点的无效页计数值并调整其在树 中的位置,同时将表项的页位图中对应比特位置为1,最后将选中DU中用于存放当前逻 辑页的物理页页号赋给当前逻辑页映射表表项的第一个域。(3)根据选中DU中用于存放 当前逻辑页的物理页页号获得与其页号相同的逻辑页的映射表表项,并更新该表项的第 二个域(用于指向与当前逻辑页页号相同的物理页被哪一个逻辑页引用),将当前主机写 请求的逻辑页页号赋给该域。本实施例中,考虑到LUN的空间是有限的,为了使得数据写入各个SSD的机 会均等,可以预先定义SSD中已使用DU的阈值,如果系统在运行过程中,某一个SSD 已使用DU数超过上限阈值时,系统将启动后台垃圾回收线程,回收DU。在回收DU 时,回收线程将确定系统当前是否繁忙,如果繁忙,则回收线程只针对每个SSD回收一 个DU;如果系统空闲,则回收线程将对每个SSD进行连续回收直到每个SSD的已使用 DU数低于下限阈值。下面针对一个SSD的DU回收过程进行描述在对每个盘进行DU回收时,系 统首先从当前盘的二叉查找树中摘除最右端节点(通过一个struct btree类型的指针指向 该节点),也就是无效页计数值最大的节点,然后根据该节点father字段所在的内存地址 减去垃圾回收表的起始地址再除以每个垃圾回收表表项的尺寸(152B)即可确定出待回收 DU的序号,接着根据该DU的序号在映射表中找到与其覆盖的所有物理页具有相同页号的逻辑页的映射表表项,然后结合该DU垃圾回收表表项中的页位图,将该DU中有效的 页(位图中对应比特位为0)搬移到当前指针指向的待接收DU中(垃圾回收时将根据位 图每次搬移一个连续有效页段的数据),在对每个页搬移完成后,根据与待回收DU中当 前物理页页号相同的逻辑页的映射表表项的第二个域(用于指向与当前逻辑页页号相同 的物理页被哪一个逻辑页引用),找到引用该物理页的逻辑页,并将该逻辑页映射表表项 的第一个字段(用于指向当前逻辑页真实存放在哪一个物理页上)更新为当前指针指向的 待接收DU中当前写入数据的物理页的页号,最后将与待回收DU中当前物理页页号相同 的逻辑页的映射表表项的第二个域置为Oxffffffff。当待回收DU中的所有有效页都被成功 搬移后,就将其插入空闲DU队列的尾部,并将当前SSD的已使用DU计数值减1。本实施例实现了待写入数据预占用空间未超过预设的分条深度时,将待写入数 据写入SSD的过程,在整个过程中,由于数据是以页为单位顺序写入SSD的,相对于随 机小写,提高了 SSD的写性能。实施例三、参见图3,为本发明实施三提供的写数据的方法流程图,该方法包括S301 获取当前指针所指向的DU。例如,待接收数据的DU包括DUO、DU4、DU8和DU12,当前指针指向 DUO,则获取当前指针所指向的DUO。S302 若待写入数据预占用空间超过预设的分条深度(如16K),将待写入数据 划分为第一待写入数据和第二待写入数据,且确定当前指针所指向的DU中剩余页的空间 是否大于第一待写入数据预占用的空间,若是,执行S303;否则,执行S306。S303 当前指针所指向的DU中剩余页的空间大于第一待写入数据预占用的空 间时,进一步确定当前时刻下一个待接收数据的DU中剩余页的空间是否大于第二待写入 数据预占用的空间,若是,执行S304;否则,执行S305。S304将第一待写入数据以页为单位写入当前指针所指向的DU中,将第二待 写入数据以页为单位写入除当前指针所指向的DU外当前时刻下一个待接收数据的DU中。例如,待接收数据的DU包括DUO,DU4,DU8和DU12,当前指针指向
DUO,待写入数据预占用空间超过预设的分条深度,将待写入数据划分为第一待写入数 据和第二待写入数据,若DUO剩余的页足够写入第一待写入数据,DU4剩余的页足够写 入第二待写入数据,则以页为单位将第一待写入数据写入DU0,以页为单位将第二待写 入数据写入DU4。S305将第一待写入数据以页为单位写入当前指针所指向的DU中,将第二待 写入数据以页为单位写入除当前指针所指向的DU外当前时刻下一个待接收数据的DU 中,当接收第二待写入数据的DU被写满时,从该DU所属SSD的空闲队列中重新分配一 个DU,在重新分配的DU中以页为单位写入剩余的第二待写入数据。例如,待接收数据的DU包括DU0,DU4,DU8和DU12,当前指针指向 DU0,待写入数据预占用空间超过预设的分条深度,将待写入数据划分为第一待写入数 据和第二待写入数据,若DUO剩余的页足够写入第一待写入数据,DU4剩余的页不够写 入第二待写入数据,则以页为单位将第一待写入数据写入DU0,以页为单位将第二待写入数据写入DU4,当DU4中所有页都写满时,从维护的DU4所属SSD的空闲队列中重新分配一个DU5,用来接收第二待写入数据中剩余的部分。S306 当前指针所指向的DU中剩余页的空间小于第一待写入数据预占用的空 间时,进一步确定除当前指针指向的DU外,当前时刻下一个待接收数据的DU中剩余页 的空间是否大于第二待写入数据预占用的空间,若是,执行S307;否则,执行S308。S307将第一待写入数据以页为单位写入当前指针所指向的DU中,若当前指 针所指向的DU被写满时,从当前指针指向的DU所属SSD的空闲DU队列中重新分配一 个DU,将剩余的第一待写入数据以页为单位写入重新分配的DU中,且将当前指针所指 的方向移到RAID组中当前SSD之后,下一个SSD提供的DU;将第二待写入数据以页 为单位写入除当前指针所指向的DU外,当前时刻下一个待接收数据的DU中。例如,待接收数据的DU包括DUO,DU4,DU8和DU12,当前指针指向 DUO,待写入数据预占用空间超过预设的分条深度,将待写入数据划分为第一待写入数 据和第二待写入数据,若DUO剩余的页不够写入第一待写入数据,DU4剩余的页足够写 入第二待写入数据,则以页为单位将第一待写入数据写入DU0,当DUO写满时,从DUO 所属SSD的空闲队列中重新分配一个DU1,接收第一待写入数据中剩余的部分;以页为 单位将第二待写入数据写入DU4。S308将第一待写入数据以页为单位写入当前指针所指向的DU中,若当前指 针所指向的DU被写满,从当前指针所指向的DU所属SSD的空闲DU队列中重新分配一 个DU,将剩余的第一待写入数据以页为单位写入重新分配的DU中,将第二待写入数据 以页为单位写入除当前指针指向的DU外,当前时刻下一个待接收数据的DU中,当接收 第二待写入数据的DU被写满时,从该被写满DU所属的SSD的空闲队列中重新分配一个 DU,将剩余的第二待写入数据以页为单位写入重新分配的DU中。例如,待接收数据的DU包括DUO,DU4,DU8和DU12,当前指针指向 DUO,待写入数据预占用空间超过预设的分条深度,将待写入数据划分为第一待写入数 据和第二待写入数据,若DUO剩余页的不够写入第一待写入数据,且DU4剩余的页不 够写入第二待写入数据,则以页为单位将第一待写入数据写入DU0,当DUO写满时,从 DUO所属SSD的空闲队列中重新分配一个DU1,接收第一待写入数据中剩余的部分;以 页为单位将第二待写入数据写入DU4,当DU4写满时,从DU4所属SSD的空闲队列中 重新分配一个DU5,接收第二待写入数据中剩余的部分。本实施例描述了将第二待写入数据写入除当前指针指向的DU外,当前时刻下一 个待接收数据的DU中的情况,在具体的实施例过程中,还可以将第二待写入数据写入除 当前指针指向的DU外,至少2个当前时刻待接收数据的DU中,例如,将第一待写入数 据写入DU0,将第二待写入数据分发到DU4、DU8、和DU12中。可以理解的是,在S304、S305、以及S308具体的实施过程中,待写入数据还可 以有其它不同的划分方式,例如将待写入数据划分为第一待写入数据、第二待写入数 据、第三待写入数据和第四待写入数据。相应的,将划分后的数据写入DU的过程包括 以页为单位将第一待写入数据写入DUO;以页为单位将第二待写入数据写入DU4;以页 为单位将第三待写入数据写入DU8 ;以页为单位将第四待写入数据写入DU12。至此,已完成了当待写入数据未超过分条深度时,将待写入数据写入SSD的过程。在具体的实施过程中,S304、或者S305、或者S307、或者S308之后还可以包括获取写入待写入数据后的SSD中存放该待写入数据的当前逻辑页,更新维护的 该逻辑页的映射表表项。具体的,该映射表表项具有两个域一个域用于指向真实存放当前逻辑页的物 理页,另一个域用于指向引用与当前逻辑页页号相同的物理页被哪一个逻辑页引用。具 体的实施例过程可参考实施例二中的描述,此处不再赘述。本实施例中,考虑到LUN的空间是有限的,为了使得数据写入各个SSD的机会 均等,可以预先定义SSD中已使用DU的阈值,如果系统在运行过程中,某一个SSD已 使用DU数超过上限阈值时,系统将启动后台垃圾回收线程,回收DU。在回收时,回 收线程将确定系统当前是否繁忙,如果繁忙,则回收线程只针对每个SSD回收一个DU; 如果系统空闲,则回收线程将对每个SSD进行连续回收直到每个SSD的已使用DU数低 于下限阈值。关于针对一个SSD的DU回收过程的描述可参考实施例二,此处不再赘 述。本实施例实现了待写入数据预占用空间超过预设的分条深度时,将待写入数据 以页为单位写入SSD的过程,在此个过程中,由于数据是顺序写入SSD的,相对于随机 小写,提高了 SSD的写性能。下面对本发明实施例提供的基于全页日志结构管理模式的写数据的装置进行描 述。实施例四、参见图4,为本发明实施例四提供的一种写数据的装置示意图,该装置包括获取单元401,用于获取当前指针所指向的DU (硬盘单元)。例如,系统中有SSD0-SSDX (其中X为大于等于1的整数),按照预设大小(如 4MB)的DU对SSD进行等分,对构建的RAID组(如RAID0)中的每个SSD维护一个空 闲DU队列,用于接收待写入数据;同时还维护一个当前指针,用于指向待写入数据当 前时刻应该下发到哪一个待接收数据的DU中。若RAIDO包括4个SSD,每一时刻都会 有4个来自不同SSD的DU用于接收待写入数据,如4个来自不同SSD的包括DU0, DU4,DU8禾PDU12,当前指针指向DUO,则获取当前指针所指向的DUO。写操作单元402,用于当待写入数据预占用的空间未超过预设的分条深度时,将 待写入数据以页为单位写入所述DU所属的固态硬盘SSD中;当待写入数据预占用的空 间超过预设的分条深度时,将待写入数据以页为单位写入所述DU所属的廉价冗余磁盘阵 列RAID组中的至少两个SSD中。例如,预设的分条深度可以为16K;待写入数据为主机下发的写请求,一个写 请求为主机串口一次发送出的数据,当一个写请求所占空间大于16K时,即该写请求超 过预设的分条深度,将该待写入数据以页为单位写入所述DU所属的固态硬盘SSD中; 当一个写请求所占空间小于16K时,即该写请求未超过分条深度,将待写入数据以页为 单位写入所述DU所属的廉价冗余磁盘阵列RAID组中的至少两个SSD中。本实施例中,获取单元401获取当前指针所指向的DU,当待写入数据预占用的 空间未超过预设的分条深度时,写操作单元402将待写入数据以页为单位写入当前指针 所指向的DU所属的固态硬盘SSD中;当待写入数据预占用的空间超过预设的分条深度时,写操作单元402将待写入数据以页为单位写入获取单元401获取的DU所属的RAID 组的至少两个SSD中。由于数据是顺序写入SSD的,因此相对于将待写入数据随机写入 SSD,提高了 SSD的写性能。实施例五、参见图5,为本发明实施例五提供的一种写数据的装置示意图,该实施例相对于 实施例四,还包括维护单元501,用于对RAID组的每个SSD维护一个空闲DU队列,每个空闲 DU队列中有一个空闲DU处于待接收数据的状态。本发明实施例中的写操作单元402可以为第一写操作子单元502,用于确定待写 入数据预占用的空间未超过预设的分条深度时,在当前指针所指向的DU中以页为单位写 入待写入数据,若当前指针所指向的DU被写满,从当前指针所指向的DU所属SSD的 空闲DU队列中重新分配一个DU,在重新分配的DU中以页为单位写入剩余的待写入数 据。例如,待接收数据的DU包括DUO,DU4,DU8和DU12,当前指针指向 DUO,待写入数据未超过预设的分条深度,且DUO剩余页的空间小于待写入数据,则以 页为单位将待写入数据写入DU0,当DUO写满时,从维护的DUO所属SSD空闲队列中 重新分配一个DU1,在DUl中以页为单位写入剩余的数据。该实施例相对于实施例四,实现了待写入数据预占用的空间未超过预设的分条 深度,在当前指针所指向的DU中顺序写入待写入数据,以提高SSD写性能的过程。实施例六、参见图6,为本发明实施例六提供的一种写数据的装置示意图,该实施例相对于 实施例四,还包括维护单元501,用于对RAID组的每个SSD维护一个空闲DU队列,每个空闲 DU队列中有一个空闲DU处于待接收数据的状态。本发明实施例中的写操作单元402可以包括划分子单元601,用于确定待写入数据预占用的空间超过预设的分条深度时,将 待写入数据划分为第一待写入数据和第二待写入数据。第二写操作子单元602,用于将第一待写入数据以页为单位写入当前指针所指向 的DU中,若当前指针所指向的DU被写满,从当前指针所指向的DU所属SSD的空闲DU 队列中重新分配一个DU,将剩余的第一待写入数据以页为单位写入重新分配的DU中; 将第二待写入数据以页为单位写入除当前指针所指向的DU外至少一个当前时刻待接收数 据的DU中,若接收第二待写入数据的DU被写满时,从该被写满的DU所属的SSD的 空闲队列中重新分配一个DU,将剩余的第二待写入数据以页为单位写入重新分配的DU 中。例如,在当前指针所指向的DU中剩余页的空间大于第一待写入数据预占用的空 间,且维护单元501维护的待接收数据的DU中除当前指针指向的DU外,当前时刻下一 个待接收数据的DU中剩余页的空间大于第二待写入数据预占用的空间的情况下,第二写 操作子单元602在当前指针所指向的DU中以页为单位写入第一待写入数据,在维护单元 501维护的待接收数据的DU中除当前指针所指向的DU外,当前时刻下一个待接收数据的DU中以页为单位写入第二待写入数据;以及在当前指针所指向的DU中剩余页的空间大于第一待写入数据预占用的空间,且 维护单元501维护的待接收数据的DU中除当前指针指向的DU外,当前时刻下一个待接 收数据的DU中剩余页的空间小于第二待写入数据预占用的空间的情况下,第二写操作子 单元602在当前指针所指向的DU中以页位单位写入第一待写入数据,在维护单元501维 护的待接收数据的DU中除当前指针指向的DU外,当前时刻下一个待接收数据的DU中 以页为单位写入第二待写入数据,当接收第二待写入数据的DU被写满时,从该被写满的 DU所属的SSD的空闲队列中重新分配一个DU,在重新分配的DU中以页为单位写入剩 余的第二待写入数据;以及在当前指针所指向的DU中剩余页的空间小于第一待写入数据预占用的空间,且 维护单元501维护的待接收数据的DU中除当前指针指向的DU外,当前时刻下一个待接 收数据的DU中剩余页的空间大于第二待写入数据预占用的空间的情况下,第二写操作 子单元602在当前指针所指向的DU中以页为单位写入第一待写入数据,前指针所指向的 DU被写满后,从前指针所指向的DU所属SSD的空闲DU队列中重新分配一个DU,在 重新分配的DU中以页为单位写入剩余的第一待写入数据,在维护单元501维护的待接收 数据的DU中除当前指针所指向的DU外,当前时刻下一个待接收数据的DU中以页为单 位写入第二待写入数据;以及在当前指针所指向的DU中剩余页的空间小于第一待写入数据预占用的空间,且 维护单元501维护的待接收数据的DU中除当前指针指向的DU外,当前时刻下一个待接 收数据的DU中剩余页的空间小于第二待写入数据预占用的空间的情况下,第二写操作子 单元602在当前指针所指向的DU中以页为单位写入第一待写入数据,当前指针所指向的 DU被写满后,从当前指针所指向的DU所属SSD的空闲DU队列中重新分配一个DU, 在重新分配的DU中以页为单位写入剩余的第一待写入数据,在除当前指针所指向的DU 外,当前时刻下一个待接收数据的DU中以页为单位写入第二待写入数据,当接收第二待 写入数据的DU被写满时,从该被写满第二待写入数据的DU所属的SSD的空闲队列中重 新分配一个DU,在重新分配的DU中以页为单位写入剩余的第二待写入数据。本实施例描述了将第二待写入数据写入除当前指针指向的DU外,当前时刻下一 个待接收数据的DU中的情况,在具体的实施例过程中,还可以将第二待写入数据写入除 当前指针指向的DU外,至少2个当前时刻待接收数据的DU中,例如,将第一待写入数 据写入DU0,将第二待写入数据分发到DU4、DU8、和DU12中。该实施例相对于实施例四,实现了待写入数据预占用的空间超过预设分条深 度,在当前指针所指向的DU中按顺序写入待写入数据,以提高SSD写性能的过程。实施例七、本实施例相对于实施例四,包括实施例五或者实施例六中的维护单元501、实施 例五中的第一写操作子单元502、以及实施例六中的划分子单元601以及第二写操作子单 元602。各单元的具体实施过程此处不再赘述。该实施例相对于实施例四,实现了待写入数据预占用的空间未超过预设的分条 深度,在当前指针所指向的DU所属的固态硬盘SSD中顺序写入待写入数据,以提高SSD 写性能的过程;以及待写入数据预占用的空间超过预设的分条深度,在当前指针所指向的DU所属的廉价冗余磁盘阵列RAID组中的至少两个SSD中按顺序写入待写入数据,以 提高SSD写性能的过程。实施例八、参见图7,为本发明实施例八提供的写数据的装置示意图,相对于上述实施例四 至实施例七中的任意一个实施例,还包括回收单元701,用于在写操作单元402向SSD写数据的过程中,当RAID组中任 意一个SSD已使用DU数量超过预设的阈值时,根据维护的以DU中无效页数作为健值的 二叉查找树,选择待回收DU,并回收该DU。具体的实施过程可参考实施例二,此处不 再赘述。本实施例相对于实施例四,当RAID组中任意一个SSD已使用DU数量超过预设 的阈值时,将启动后台垃圾回收线程,回收DU,从而能够实现资源的充分利用。实施例九、该实施例提供了一种廉价冗余磁盘阵列RAID,该RAID包括至少两个SSD以及 实施例四至实施例八任意一个实施例所述的写数据的装置。通过该实施例,待写入数据可以顺序写入RAID中的SSD,从而提高RAID中
SSD的写性能。以上实施例可以看出,通过维护的当前指针,获取当前指针指向的DU,当确 定待写入数据预占用的空间未超过预设的分条深度时,将待写入数据以页为单位写入获 取的DU所属的固态硬盘SSD中;当确定待写入数据预占用的空间超过预设的分条深度 时,将待写入数据以页为单位写入当前指针所指向的DU所属的RAID组的至少两个SSD 中,可以看出数据是顺序写入SSD的,相对于将数据随机写入SSD中,提高了 SSD的写 性能;并且通过将待写入数据写入至少2个SSD中,实现了全页日志结构管理模式下数 据的并发;另外,当RAID组中任意一个SSD已使用DU数量超过预设的阈值时,将启 动后台垃圾回收线程,回收DU,从而使得数据写入各个SSD的机会均等。本领域普通技术人员可以理解实现上述方法实施例中的全部或部分步骤是可以 通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中。 上述提到的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随 机存储记忆体(RandomAccess Memory,RAM)等。以上对本发明实施例进行了详细介绍,本文中应用了具体个例对本发明的原理 及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思 想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范 围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种写数据的方法,其特征在于,包括获取当前指针所指向的硬盘单元DU ;当待写入数据预占用的空间未超过预设的分条深度时,将待写入数据以页为单位写 入所述DU所属的固态硬盘SSD中;当待写入数据预占用的空间超过预设的分条深度时,将待写入数据以页为单位写入 所述DU所属的廉价冗余磁盘阵列RAID组中的至少两个SSD中。
2.根据权利要求1所述的方法,其特征在于,所述RAID组中的每个SSD包含有一 个空闲DU队列,每个空闲DU队列中有一个空闲DU处于待接收数据的状态。
3.根据权利要求2所述的方法,其特征在于,当待写入数据预占用的空间未超过预设 的分条深度时,将待写入数据以页为单位写入所述DU所属的固态硬盘SSD中,包括当待写入数据预占用的空间未超过预设的分条深度时,在当前指针所指向的DU中以 页为单位写入待写入数据,若当前指针所指向的DU被写满,从当前指针所指向的DU所 属SSD的空闲DU队列中重新分配一个DU,在重新分配的DU中以页为单位写入剩余的 待写入数据。
4.根据权利要求2所述的方法,其特征在于,当待写入数据预占用的空间超过预设的 分条深度时,将待写入数据以页为单位写入所述DU所属的廉价冗余磁盘阵列RAID组的 至少两个SSD中,包括当待写入数据预占用的空间超过预设的分条深度时,将待写入数据划分为第一待写 入数据和第二待写入数据;将第一待写入数据以页为单位写入当前指针所指向的DU中,若当前指针所指向的 DU被写满,从当前指针所指向的DU所属SSD的空闲DU队列中重新分配一个DU,将 剩余的第一待写入数据以页为单位写入重新分配的DU中;将第二待写入数据以页为单位写入除当前指针所指向的DU外至少一个当前时刻待接 收数据的DU中,若接收第二待写入数据的DU被写满时,从该被写满的DU所属SSD的 空闲队列中重新分配一个DU,将剩余的第二待写入数据以页为单位写入重新分配的DU 中。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括当所述RAID组中任意一个SSD已使用DU数量超过预设的阈值时,根据维护的以 DU中无效页数作为健值的二叉查找树,选择待回收DU,并回收该DU。
6.—种写数据的装置,其特征在于,包括获取单元,用于获取当前指针所指向的硬盘单元DU;写操作单元,用于当待写入数据预占用的空间未超过预设的分条深度时,将待写入 数据以页为单位写入所述DU所属的固态硬盘SSD中;当待写入数据预占用的空间超 过预设的分条深度时,将待写入数据以页为单位写入所述DU所属的廉价冗余磁盘阵列 RAID组中的至少两个SSD中。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括维护单元,用于对所述RAID组中的每个SSD维护一个空闲DU队列,每个空闲DU 队列中有一个空闲DU处于待接收数据的状态。
8.根据权利要求7所述的装置,其特征在于,所述写操作单元包括第一写操作子单元,用于当待写入数据预占用的空间未超过预设的分条深度时,在 当前指针所指向的DU中以页为单位写入待写入数据,若当前指针所指向的DU被写满, 从当前指针所指向的DU所属SSD的空闲DU队列中重新分配一个DU,在重新分配的DU 中以页为单位写入剩余的待写入数据;划分子单元,用于当待写入数据预占用的空间超过预设的分条深度时,将待写入数 据划分为第一待写入数据和第二待写入数据;第二写操作子单元,用于将第一待写入数据以页为单位写入当前指针所指向的DU 中,若当前指针所指向的DU被写满,从当前指针所指向的DU所属SSD的空闲DU队列 中重新分配一个DU,将剩余的第一待写入数据以页为单位写入重新分配的DU中;将第 二待写入数据以页为单位写入除当前指针所指向的DU外至少一个当前时刻待接收数据的 DU中,若接收第二待写入数据的DU被写满时,从该被写满的DU所属的SSD的空闲队 列中重新分配一个DU,将剩余的第二待写入数据以页为单位写入重新分配的DU中。
9.根据权利要求6-8任意一项所述的装置,其特征在于,所述装置还包括回收单元,用于所述RAID组中任意一个SSD已使用DU数量超过预设的阈值时,根 据维护的以DU中无效页数作为健值的二叉查找树,选择待回收DU,并回收该DU。
10.一种廉价冗余磁盘阵列RAID,其特征在于,所述RAID包括至少两个SSD以及 如权利要求6-9任意一项所述的写数据的装置。
全文摘要
一种写数据的方法,包括获取当前指针所指向的硬盘单元DU;当待写入数据预占用的空间未超过预设的分条深度时,将待写入数据以页为单位写入所述DU所属的固态硬盘SSD中;当待写入数据预占用的空间超过预设的一个分条深度时,将待写入数据以页为单位写入所述DU所属的廉价冗余磁盘阵列RAID组中的至少两个SSD中。本发明实施例还提供相应的写数据的装置以及廉价冗余磁盘阵列。本发明技术方案由于数据是顺序写入SSD的,从而简化了控制器的处理流程,提高了SSD的写性能。
文档编号G06F3/06GK102023810SQ20091016196
公开日2011年4月20日 申请日期2009年9月10日 优先权日2009年9月10日
发明者张巍, 林宇 申请人:成都市华为赛门铁克科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1