一种固态盘阵列的数据布局方法转让专利

申请号 : CN201510540940.4

文献号 : CN105045540B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴素贞毛波杨伟健陈骁林燕萍

申请人 : 厦门大学

摘要 :

一种固态盘阵列的数据布局方法,涉及计算机存储领域。固态盘阵列上设置四个功能模块即主控模块、请求处理模块、数据映射模块、数据读写模块和一致性维护模块,并设置一个数据映射表和多分块存储区域。包括初始化步骤、请求处理步骤、数据映射步骤、数据读/写步骤、一致性维护步骤和结束步骤。充分利用固态盘阵列的多种不同分块大小在读写操作和请求大小上的优势,综合使用多个分块大小而非单一地使用某一种分块大小,以提高固态盘阵列的整体性能。能够和固态盘阵列功能模块协同工作,并且可以被嵌入到现有的固态盘阵列系统中,包括硬件和软件固态盘阵列系统。适用于构造具有高性能、高可用性和高可靠性的固态盘存储系统。

权利要求 :

1.一种固态盘阵列的数据布局方法,其特征在于包括以下步骤:

(1)初始化步骤,具体过程如下:

(1.1)主控模块打开已有的固态盘阵列或创建新的固态盘阵列,判断该固态盘阵列是否为新创建的固态盘阵列,若是,则转过程(1.2),否则转过程(1.3);

(1.2)主控模块根据用户指令,将新创建的固态盘阵列划分为3个分区,容量比例设置为2∶1∶1,分区号分别设置为0、1和2,按照4KB、8KB和32KB的分块大小对这3个分区重新进行固态盘阵列的条带化并新建数据映射表,转步骤(2);

(1.3)主控模块读取保存在固态盘阵列的成员固态盘超级块中的数据映射表和分区信息,转步骤(2);

(2)请求处理步骤,具体过程如下:

(2.1)请求处理模块判断固态盘阵列的请求等待队列中是否有请求,若有,则获取一个请求并转过程(2.2),否则转过程(2.3);

(2.2)请求处理模块获取该请求的偏移量、请求大小和请求类型,转步骤(3);

(2.3)记录超时时间,若超时时间低于系统设置的阈值时,则转过程(2.1),否则说明此时系统处于空闲状态,转步骤(5),所述阈值为10s;

(3)数据映射步骤,具体过程如下:

(3.1)数据映射模块判断该请求是否是读请求,若是,则转过程(3.5),否则转过程(3.2);

(3.2)数据映射模块根据请求的偏移量及请求大小,判断该请求的数据块是否在当前数据映射表中,若是,则转过程(3.4),否则,从分区大小为4KB的分区中获取一个内部块偏移,转过程(3.3);

(3.3)数据映射模块向数据映射表中写入新数据项,数据项中分区号置为0、时间戳设置为当前系统时间、计数器初始化为0;判断请求大小,若请求大小大于16KB,则将该数据项放入待维护队列;操作类型设置为“写入”,转步骤(4);

(3.4)数据映射模块根据请求偏移量检索数据映射表,获取对应的数据项,并设置操作类型为“更新”,转步骤(4);

(3.5)数据映射模块根据请求偏移量检索数据映射表,获取对应的数据项,并设置操作类型为“读取”,转步骤(4);

(4)数据读写步骤,具体过程如下:

(4.1)数据读写模块判断操作类型是否是“写入”,若是,则转过程(4.2),否则判断数据类型是否是“读取”,若是,则转过程(4.3),否则转过程(4.4);

(4.2)数据读写模块根据数据项中的“内部块偏移量”写入数据,转步骤(2);

(4.3)数据读写模块判断该数据项是否正在进行一致性维护,若是,则从缓冲区读出数据,否则根据该数据项所在分区的“内部块偏移量”从固态盘阵列读出数据,转步骤(2);

(4.4)数据读写模块判断该数据项是否正在进行一致性维护,若是,则更新缓冲区中大小为“请求大小”的数据为待写入的数据;否则根据该数据项所在分区的“内部块偏移量”向固态盘阵列写入数据,并判断该数据项的时间戳与当前系统时间的差值是否小于系统设置的超时时间,所述超时时间为2000ms,若是,则更新该数据项的计数器即递增1,否则将计数器重置为0;更新该数据项的时间戳为当前系统时间,转步骤(2);

(5)一致性维护步骤,具体过程如下:

(5.1)一致性维护模块判断一致性维护队列中是否有待维护的项目,若有,则从一致性维护队列中获取一个待维护项目,转过程(5.2),否则转步骤(2);

(5.2)一致性维护模块判断待维护项目的计数器值是否大于系统设置的阈值(如20),若是,则表明该项目近期被频繁更新,无需迁移至其他分块大小的区域,转过程(5.4),否则表明该项目为不经常更新的项,需要将以该项目的分区号下的“内部块偏移量”为起始地址、“请求大小”为长度的数据迁移至其他分块大小的区域,转过程(5.3);

(5.3)一致性维护模块把以该维护项目所在“分区号”的“内部块偏移量”为起始地址、“请求大小”为长度的数据写入缓冲区中,判断该项目的数据大小是否小于80KB,若是,则从

8KB大小的分区中获取一个内部块偏移并设置分区号为1,否则从32KB大小的分区中获取一个内部块偏移量并设置分区号为2;然后将该数据项对应的数据迁移到以“内部块偏移量”为起始地址的位置并更新数据映射表,转过程(5.1);

(5.4)一致性维护模块将该维护项目的计数器置为0,时间戳更新为当前系统时间,转过程(5.1);

(6)结束步骤,当用户发出指令关闭固态盘阵列时,具体过程如下:

主控模块将数据映射表保存到固态盘阵列的超级块中,关闭固态盘阵列设备,释放相关的资源。

2.如权利要求1所述一种固态盘阵列的数据布局方法,其特征在于在步骤(1)过程(1.1)中,所述固态盘阵列上设有主控模块、请求处理模块、数据映射模块、数据读写模块和一致性维护模块,并设置一个数据映射表和多分块存储区域。

3.如权利要求1所述一种固态盘阵列的数据布局方法,其特征在于在步骤(1)过程(1.2)中,所述数据映射表包括M条映射信息,每条映射信息由6个数据项构成,各数据项依次为请求偏移量rq_Offset、内部块偏移量in_Offset、请求大小Size、分区号md_Num、时间戳TS和计数器UC;M为大于等于0的自然数。

说明书 :

一种固态盘阵列的数据布局方法

技术领域

[0001] 本发明涉及计算机存储领域,尤其是涉及一种固态盘阵列的数据布局方法。

背景技术

[0002] 磁盘是目前主流的存储介质,广泛应用于个人电脑、互联网和企业级数据存储等领域,但是由于其机械特性的限制,读写性能无法进一步获得更高的提升,基于磁盘的存储设备逐步成为存储系统的性能瓶颈。近年来,固态盘由于其读写性能高、能耗低、防震性好以及日渐低廉的价格等优点,逐渐成为磁盘的有力替代品。与磁盘相比,基于闪存的固态盘没有机械部件(如磁头、转轴等),其内部由半导体器件组成,因此固态盘对外服务时无需寻道时间等由机械运动引发的延时,固态盘的性能相对于磁盘有极大的提升,具体表现为高随机读写性能、高可靠性和高能效。但是由于固态盘内部闪存芯片的特性,固态盘也存在着局限性,在写入数据时,若原数据页中存在着有效数据,无法在原位置中覆盖写入新数据。固态盘采取的是异地更新的策略,即首先将原数据置为无效,把待更新的数据写入其它空闲页中;当固态盘中无效页越来越多、空闲页数量低于系统所设置阈值时,会触发垃圾回收操作,将待擦除块中的有效数据拷贝到空闲页后擦除该闪存块,从而释放更多的空间来保存新的数据。然而,闪存芯片的擦除次数是有限的,影响了固态盘的使用寿命与可靠性,在企业级服务器的应用场景下将威胁到存储系统的可靠性。
[0003] 在企业级服务器的应用场景下,磁盘阵列技术被广泛用于提升磁盘存储系统的性能和可靠性。相应地,将磁盘阵列技术应用于固态盘,可以构建大容量、高性能、高可靠的固态盘存储系统。在固态盘阵列中,数据分布在不同固态盘上,实现了同步化的存取操作,增加了读写操作的并行性,提高了固态盘存储系统的性能;另外,由于固态盘阵列引入了数据冗余,也提高了固态盘存储系统的可靠性。而固态盘阵列的分块大小作为固态盘阵列性能的重要影响因素之一,决定着固态盘阵列中数据的分割粒度。目前,关于固态盘阵列中最优分块大小的研究尚处于探索阶段,如果直接采用基于磁盘阵列的最优分块大小,由于没有考虑到固态盘与磁盘内部结构的差异,固态盘阵列的性能将受到限制。
[0004] Farzaneh Rajaei Salmasi,Hossein Asadi,and Majid GhasemiGol.Impact of Stripe  Unit  Size  on  Performance and Endurance of SSD-Based RAID Arrays.Scientia Iranica,Transactions D,2013.20(6):1978-1998.

发明内容

[0005] 本发明的目的在于提供可综合固态盘阵列的不同分块大小在读写操作和请求大小上的优势,以发挥固态盘阵列最优性能的一种固态盘阵列的数据布局方法。
[0006] 本发明包括以下步骤:
[0007] (1)初始化步骤,具体过程如下:
[0008] (1.1)主控模块打开已有的固态盘阵列或创建新的固态盘阵列,判断该固态盘阵列是否为新创建的固态盘阵列,若是,则转过程(1.2),否则转过程(1.3);
[0009] (1.2)主控模块根据用户指令,将新创建的固态盘阵列划分为3个分区,容量比例设置为2∶1∶1,分区号分别设置为0、1和2,按照4KB、8KB和32KB的分块大小对这3个分区重新进行固态盘阵列的条带化并新建数据映射表,转步骤(2);
[0010] (1.3)主控模块读取保存在固态盘阵列的成员固态盘超级块中的数据映射表和分区信息,转步骤(2);
[0011] (2)请求处理步骤,具体过程如下:
[0012] (2.1)请求处理模块判断固态盘阵列的请求等待队列中是否有请求,若有,则获取一个请求并转过程(2.2),否则转过程(2.3);
[0013] (2.2)请求处理模块获取该请求的偏移量、请求大小和请求类型,转步骤(3);
[0014] (2.3)记录超时时间,若超时时间低于系统设置的阈值(如10s)时,则转过程(2.1),否则说明此时系统处于空闲状态,转步骤(5);
[0015] (3)数据映射步骤,具体过程如下:
[0016] (3.1)数据映射模块判断该请求是否是读请求,若是,则转过程(3.5),否则转过程(3.2);
[0017] (3.2)数据映射模块根据请求的偏移量及请求大小,判断该请求的数据块是否在当前数据映射表中,若是,则转过程(3.4),否则,从分区大小为4KB的分区中获取一个内部块偏移,转过程(3.3);
[0018] (3.3)数据映射模块向数据映射表中写入新数据项,数据项中分区号置为0、时间戳设置为当前系统时间、计数器初始化为0;判断请求大小,若请求大小大于16KB,则将该数据项放入待维护队列;操作类型设置为“写入”,转步骤(4);
[0019] (3.4)数据映射模块根据请求偏移量检索数据映射表,获取对应的数据项,并设置操作类型为“更新”,转步骤(4);
[0020] (3.5)数据映射模块根据请求偏移量检索数据映射表,获取对应的数据项,并设置操作类型为“读取”,转步骤(4);
[0021] (4)数据读写步骤,具体过程如下:
[0022] (4.1)数据读写模块判断操作类型是否是“写入”,若是,则转过程(4.2),否则判断数据类型是否是“读取”,若是,则转过程(4.3),否则转过程(4.4);
[0023] (4.2)数据读写模块根据数据项中的“内部块偏移量”写入数据,转步骤(2);
[0024] (4.3)数据读写模块判断该数据项是否正在进行一致性维护,若是,则从缓冲区读出数据,否则根据该数据项所在分区的“内部块偏移量”从固态盘阵列读出数据,转步骤(2);
[0025] (4.4)数据读写模块判断该数据项是否正在进行一致性维护,若是,则更新缓冲区中大小为“请求大小”的数据为待写入的数据;否则根据该数据项所在分区的“内部块偏移量”向固态盘阵列写入数据,并判断该数据项的时间戳与当前系统时间的差值是否小于系统设置的超时时间(如2000ms),若是,则更新该数据项的计数器即递增1,否则将计数器重置为0;更新该数据项的时间戳为当前系统时间,转步骤(2);
[0026] (5)一致性维护步骤,具体过程如下:
[0027] (5.1)一致性维护模块判断一致性维护队列中是否有待维护的项目,若有,则从一致性维护队列中获取一个待维护项目,转过程(5.2),否则转步骤(2);
[0028] (5.2)一致性维护模块判断待维护项目的计数器值是否大于系统设置的阈值(如20),若是,则表明该项目近期被频繁更新,无需迁移至其他分块大小的区域,转过程(5.4),否则表明该项目为不经常更新的项,需要将以该项目的分区号下的“内部块偏移量”为起始地址、“请求大小”为长度的数据迁移至其他分块大小的区域,转过程(5.3);
[0029] (5.3)一致性维护模块把以该维护项目所在“分区号”的“内部块偏移量”为起始地址、“请求大小”为长度的数据写入缓冲区中,判断该项目的数据大小是否小于80KB,若是,则从8KB大小的分区中获取一个内部块偏移并设置分区号为1,否则从32KB大小的分区中获取一个内部块偏移量并设置分区号为2;然后将该数据项对应的数据迁移到以“内部块偏移量”为起始地址的位置并更新数据映射表,转过程(5.1);
[0030] (5.4)一致性维护模块将该维护项目的计数器置为0,时间戳更新为当前系统时间,转过程(5.1);
[0031] (6)结束步骤,当用户发出指令关闭固态盘阵列时,具体过程如下:
[0032] 主控模块将数据映射表保存到固态盘阵列的超级块中,关闭固态盘阵列设备,释放相关的资源。
[0033] 在步骤(1)过程(1.1)中,所述固态盘阵列上设有主控模块、请求处理模块、数据映射模块、数据读写模块和一致性维护模块,并设置一个数据映射表和多分块存储区域。
[0034] 在步骤(1)过程(1.2)中,所述数据映射表包括M条映射信息,每条映射信息由6个数据项构成,各数据项依次为请求偏移量rq_Offset、内部块偏移量in_Offset、请求大小Size、分区号md_Num、时间戳TS和计数器UC;M为大于等于0的自然数。
[0035] 本发明包括初始化步骤、请求处理步骤、数据映射步骤、数据读写步骤、一致性维护步骤和结束步骤。基于充分利用固态盘阵列的多种不同分块大小的优势,并根据读写请求实时特性的不同,将数据块布局于性能最优的存储区域。对于读请求而言,最优分块大小可以充分发挥固态盘阵列的最佳并行性,而对于写请求而言,最优分块大小可以在最大程度上减少写入请求引发的固态盘阵列的校验块更新。本发明综合了多个分块大小的优势而不是单一地使用一种分块大小,从而提高了固态盘阵列的性能。
[0036] 另外,本发明所述的一种固态盘阵列的数据布局方法能够和固态盘阵列功能模块协同工作,并且可以被嵌入到现有的固态盘阵列系统中,包括硬件和软件固态盘阵列系统。适用于构造具有高性能、高可用性和高可靠性的固态盘存储系统。

附图说明

[0037] 图1为本发明的示意图;
[0038] 图2为本发明的数据映射表中一条映射信息的数据项示意图;
[0039] 图3为本发明初始化步骤的过程示意图;
[0040] 图4为本发明请求处理步骤的过程示意图;
[0041] 图5为本发明数据映射步骤的过程示意图;
[0042] 图6为本发明数据读写步骤的过程示意图;
[0043] 图7为本发明一致性维护步骤的过程示意图;
[0044] 图8为本发明结束步骤的过程示意图。

具体实施方式

[0045] 下面以4块固态盘组成的阵列级别5为例,结合附图对本发明作进一步说明。
[0046] 图1为本发明的示意图:初始化步骤完成后进入请求处理步骤,然后进入顺序的数据映射步骤与数据读写步骤或者进入一致性维护步骤,当用户发出关闭指令时,进入结束步骤。
[0047] 图2为本发明的数据映射表中一条映射信息的数据项示意图:数据映射表中,每条映射信息由6个数据项构成,分别为请求偏移量rq_Offset、内部块偏移量in_Offset、请求大小Size、分区号md_Num、时间戳TS和计数器UC。
[0048] 图3为本发明初始化步骤的过程示意图:主控模块根据用户指令打开已有的固态盘阵列或者创建新的固态盘阵列,判断固态盘阵列是否是新创建的,若是,则主控模块根据用户指令,将新创建的固态盘阵列划分为3个分区,容量比例设置为2∶1∶1,分区号分别设置为0、1和2,按照4KB、8KB和32KB的分块大小对这3个分区重新进行固态盘阵列的条带化并新建数据映射表;否则读取保存在固态盘阵列的成员固态盘超级块中的数据映射表和分区信息。
[0049] 图4为本发明请求处理步骤的过程示意图:请求处理模块判断固态盘阵列的请求等待队列中是否有请求,若有则获取一个请求并获取该请求的偏移量、请求大小和请求类型,进入数据映射步骤;否则记录超时时间并判断超时时间是否低于系统设置的阈值(如10s),若是,则继续判断固态盘阵列的请求等待队列中是否有请求,否则说明此时系统处于空闲状态,进入一致性维护步骤;
[0050] 图5为本发明数据映射步骤的过程示意图:数据映射模块判断该请求是否是读请求,若是,则根据请求偏移量检索数据映射表,获取对应的数据项,并设置操作类型为“读取”,进入数据读写步骤;否则根据请求的偏移量及请求大小,判断该请求的数据块是否在当前数据映射表中,若是,则根据请求偏移量检索数据映射表获取对应的数据项,设置操作类型为“更新”,进入数据读写步骤;否则从分区大小为4KB的分区中获取一个内部块偏移,向数据映射表中写入新数据项,数据项中分区号置为0、时间戳设置为当前系统时间、计数器初始化为0;判断请求大小,若请求大小大于16KB,则将该数据项放入待维护队列;设置操作类型为“写入”,进入数据读写步骤;
[0051] 图6为本发明数据读写步骤的过程示意图:数据读写模块判断操作类型是否是“写入”,若是,则根据数据项中的“内部块偏移量”写入数据,返回请求处理步骤;否则判断数据类型是否是“读取”,若是,则判断该数据项是否正在进行一致性维护,若是,则从缓冲区读出数据,否则根据该数据项所在分区的“内部块偏移量”从固态盘阵列读出数据,返回请求处理步骤;否则若操作类型不是“读取”则判断该数据项是否正在进行一致性维护,若是,则更新缓冲区中大小为“请求大小”的数据为待写入的数据,否则根据该数据项所在分区的“内部块偏移量”向固态盘阵列写入数据,并判断该数据项的时间戳与当前系统时间的差值是否小于系统设置的超时时间(如2000ms),若是,则更新该数据项的计数器即递增1,否则将计数器重置为0;更新该数据项的时间戳为当前系统时间,返回请求处理步骤;
[0052] 图7为本发明一致性维护步骤的过程示意图:一致性维护模块判断一致性维护队列中是否有待维护的项目,若没有则返回请求处理步骤,否则从一致性维护队列中获取一个待维护项目,判断该项目的计数器值是否大于系统设置的阈值(如20),若是,则表明该项目近期被频繁更新,无需迁移至其他分块大小的区域,一致性维护模块将该维护项目的计数器置为0、时间戳更新为当前系统时间;否则表明该项目为不经常更新的项,需要将以该项目的分区号下的“内部块偏移量”为起始地址、“请求大小”为长度的数据迁移至其他分块大小的区域,一致性维护模块把以该维护项目所在“分区号”的“内部块偏移量”为起始地址、“请求大小”为长度的数据写入缓冲区中,判断该项目的数据大小是否小于80KB,若是,则从8KB大小的分区中获取一个内部块偏移并设置分区号为1,否则从32KB大小的分区中获取一个内部块偏移量并设置分区号为2;然后将该数据项对应的数据迁移到以“内部块偏移量”为起始地址的位置并更新数据映射表;
[0053] 图8为本发明结束步骤的过程示意图:主控模块将数据映射表保存到固态盘阵列各成员固态盘的超级块中,然后关闭该固态盘阵列设备,释放相关的资源。