具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种混合分级阵列的实现方法,如图1所示,包括:
步骤S101、将混合分级阵列中的SSD物理空间与传统磁盘物理空间按照RAID5格式划分为两个物理条带池。
步骤S102、建立虚拟LUN中的逻辑条带与两个物理条带池中的物理条带的映射表表项。
其中,虚拟LUN中的逻辑条带的使用状态包括未使用态、RAID1态和RAID5态。
对应上述的三种使用状态,映射表表项的内容也存在相应的区别,具体说明如下:
(1)逻辑条带的使用状态为RAID1态时,映射表表项中包括:
逻辑条带使用状态域,记录为RAID1态;
第一指示位,用于指示RAID1态逻辑条带当前是否被访问;
第二指示位,用于指示RAID1态逻辑条带的两个校验单元是否被RAID5态的逻辑条带用于暂存小写数据;
其中,在步骤S101中,将混合分级阵列中的SSD物理空间与传统磁盘物理空间按照RAID5格式划分为两个物理条带池,每个物理条带池中包含多个物理条带,而每个物理条带均以RAID5格式进行划分,其中包含多个数据存储条带单元(为方便说明,在以下的本发明个实施例中统一简称为“条带单元”,后文不再重复说明)和一个校验单元。
第一条带域,用于记录RAID1态逻辑条带所映射的两条具有不同特征号的SSD物理条带中一个SSD物理条带的地址;
其中,为了区别标识各个物理条带,为各条带设置特征号,在本实施例中,定义一个物理条带的特征号等于该条带中校验单元(Parity)所处的列号,在实际应用中,还可以通过其他方式设定特征号,具体编号规则的变化并不影响本发明的保护范围。
第二条带域,用于记录RAID1态逻辑条带所映射的两条具有不同特征号的SSD物理条带中另一个SSD物理条带的地址;
扩展区域域,用于记录使用RAID1态逻辑条带的校验单元来暂存数据的RAID5态逻辑条带的逻辑地址;
读操作计数域,用于记录当前条带的读访问次数;
写操作计数域,用于记录当前条带的写访问次数。
(2)逻辑条带的使用状态为RAID5态时,映射表表项中包括:
逻辑条带使用状态域,记录为RAID5态;
物理条带类型域,用于指示RAID5态逻辑条带映射的物理条带类型为SSD物理条带、或传统磁盘物理条带;
第三指示位,用于指示RAID5态逻辑条带是否使用RAID1态逻辑条带的两个校验单元;
条带数量域,用于记录RAID5态逻辑条带中使用RAID1态逻辑条带中的校验单元暂存数据的条带单元的数量;
第一条带域,用于记录RAID5态逻辑条带所映射的物理条带地址;
第二条带域,用于当RAID5态逻辑条带中有条带单元暂存于RAID1态逻辑条带的校验单元中时,作为暂存单元映射表的表头,指向该暂存单元映射表的第一个暂存单元映射表表项的地址;
其中,RAID1态逻辑条带的校验单元中存储了RAID5态逻辑条带中的条带单元的数据,成为了该条带单元的暂存单元,为了标识该暂存单元的映射关系,生成了相应的暂存单元映射表表项,多个暂存单元映射表表项共同组成了一个或多个映射表链表,在本发明的各个实施例中定义为暂存单元映射表,与前述的标识物理条带和逻辑条带的映射关系的映射表不同,暂存单元映射表是在出现暂存单元后生成的用于标识校验单元和被存储的条带单元的暂存映射关系的映射表,该暂存单元映射表一般存储于内存之中。
读操作计数域,用于记录当前条带的读访问次数;
写操作计数域,用于记录当前条带的写访问次数。
(3)逻辑条带的使用状态为未使用态时,映射表表项中的各个字段的内容均为空白或缺省。
需要进一步指出的是,在RAID1态逻辑条带的校验模块当逻辑条带的使用状态为RAID1态,且至少一个RAID1态逻辑条带的校验单元被RAID5态逻辑条带中的至少一个条带单元使用时,本方法还包括从映射表表项资源池中分配一个新表项用以建立条带单元与校验单元之间的映射关系的至少一个暂存单元映射表表项,所述至少一个暂存单元映射表表项组成暂存单元映射表。
其中,各暂存单元映射表表项包括:
第一指示位,用于指示校验单元当前是否被访问;
条带数量域,用于记录使用RAID1态逻辑条带的校验单元的RAID5态逻辑条带中的条带单元的序号;
第一条带域,用于记录校验单元所属的RAID1态逻辑条带所对应的逻辑地址;
第二条带域,用于记录暂存单元映射表中下一个暂存单元映射表表项的地址;
读操作计数域,用于记录校验单元的读访问次数;
写操作计数域,用于记录校验单元的写访问次数。
在上述的各种情况下的表项结构说明的基础上,需要指出的是,映射表表项资源池中存在多个空白的映射表表项,而各空白的映射表表项中的结构设置都是相同的,只是在各映射表表项应用于不同的使用状态时,才根据相应的使用状态进行了相应内容的设置,从而生成了响应的各个状态的表项,建立了逻辑条带和物理条带之间的映射关系。
步骤S103、接收到对虚拟LUN中的逻辑条带的操作命令时,根据映射表表项对两个物理条带池中的对应物理条带进行操作。
其中,根据映射表表项对两个物理条带池中的对应物理条带进行操作的具体操作类型的差别,以及该操作所命中的逻辑条带的类型差别,后续的操作也存在相应的区别,具体的情况说明如下:
(1)操作类型为小写操作时的流程情况说明如下:
A、对RAID1态逻辑条带进行小写操作时:
根据映射表表项中的第一条带域和第二条带域,更新RAID1态逻辑条带对应的两个SSD物理条带的地址中的内容。
具体为,在映射表中找到被进行小写操作的RAID1态逻辑条带所对应的映射表表项,将该表项中的第一条带域和第二条带域中的内容分别更新为该RAID1态逻辑条带所对应的两个SSD物理条带的最新地址信息。
B、对RAID5态逻辑条带进行小写操作时:
从多个RAID1态逻辑条带中选出一条更新最频繁的,且其所对应的物理条带的校验单元未被使用的RAID1态逻辑条带,将该RAID1态逻辑条带所对应的映射表表项中的第二指示位标识为是;
然后,当该RAID5态逻辑条带所对应的物理条带的条带单元需要占用RAID1态逻辑条带所对应的校验单元来暂存数据时,从映射表表项资源池中分配一个新表项,即暂存单元映射表表项,用于建立该校验单元与被暂存的RAID5态逻辑条带所对应的物理条带的条带单元的映射关系;
将暂存单元映射表表项插入到RAID5态逻辑条带的第二条带域所指向的 暂存单元映射表的头部,同时递增RAID5态逻辑条带所对应的映射表表项的条带数量域的值;
将RAID5态逻辑条带所对应的映射表表项的第三指示位标识为是;
将小写操作的数据存入选中的RAID1态逻辑条带的两个校验单元中;
在RAID5态逻辑条带所对应的映射表表项的第一条带域中记录选中的RAID1态逻辑条带的逻辑地址,并在RAID1态逻辑条带所对应的映射表表项的条带数量域中记录使用RAID1态逻辑条带的校验单元作为暂存单元的RAID5态逻辑条带中的条带单元的序号。
C、对未使用态逻辑条带进行小写操作时:
为小写操作所对应的逻辑条带分配一个传统磁盘物理条带;
将未使用态逻辑条带所对应的映射表表项中的条带类型域改为RAID5,并初始化映射表表项的其他域;
后续执行上述B情况下的操作步骤。
(2)操作类型为满写操作时的流程情况说明如下:
A、对RAID1态逻辑条带进行满写操作时:
根据映射表表项中的第一条带域和第二条带域,更新RAID1态逻辑条带对应的两个SSD物理条带的地址中的内容。
B、对RAID5态逻辑条带进行满写操作时:
判断RAID5态逻辑条带所对应的映射表表项中的第三指示位是否为是;
当第三指示位为否时,根据本次满写操作的新数据计算出校验值,然后把上述新数据和校验值一起写入该RAID5态逻辑条带在物理条带池中所对应的物理条带中;
当第三指示位为是时,将第三指示位设置为否,将条带数量域设置为0;根据第二条带域找到所有被RAID5态逻辑条带使用作为暂存单元的RAID1态逻辑条带对应物理条带的校验单元所对应的暂存单元映射表表项,将暂存单元映射表表项设置为未使用状态,释放回映射表表项资源池;将第二条带域清空;利用新数据计算出校验值,将新数据和校验值写入RAID5态逻辑条带对应的物理条带中。
C、对未使用态逻辑条带进行满写操作时:
为进行满写操作的逻辑条带分配一个传统磁盘物理条带;
将未使用态逻辑条带所对应的映射表表项中的条带类型域改为RAID5,并初始化映射表表项的其他域;
根据满写操作的数据求出校验值,将数据和校验值一起写入传统磁盘物理条带中。
(3)操作类型为大写操作时的流程情况说明如下:
A、对RAID1态逻辑条带进行大写操作时:
更新RAID1态逻辑条带对应的两个SSD物理条带的内容。
具体为,在映射表中找到被进行大写操作的RAID1态逻辑条带所对应的映射表表项,将该表项中的第一条带域和第二条带域中的内容分别更新为该RAID1态逻辑条带所对应的两个SSD物理条带的最新地址信息。
B、对RAID5态逻辑条带进行大写操作时:
判断RAID5态逻辑条带的映射表表项中的第三指示位是否为是;
当第三指示位为否时,将不需更新的旧数据从RAID5态逻辑条带中读出,然后利用大写操作的新数据和不需更新的旧数据进行异或运算获得新的校验值,将新数据和校验值写回RAID5态逻辑条带对应的物理条带中。
当第三指示位为是时,将第三指示位设置为否,将条带数量域设置为0;根据第二条带域找到所有被RAID5态逻辑条带使用作为暂存单元的RAID1态逻辑条带所对应物理条带的校验单元所对应的暂存单元映射表表项,将暂存单元映射表表项所对应的校验单元中未包含于大写操作中的数据,存放至大写操作的数据所在的物理条带的对应位置,将暂存单元映射表表项设置为未使用状态,释放回映射表表项资源池;将第二条带域清空;利用大写操作的新数据和不需更新的数据计算出校验值,将新数据和校验值写入RAID5态逻辑条带对应的物理条带中。
C、对未使用态逻辑条带进行大写操作时:
为进行大写操作的逻辑条带分配一个传统磁盘物理条带;
将表示未使用态逻辑条带的映射表表项中的条带类型域改为RAID5,并 初始化映射表表项的其他域;
根据大写操作的数据求出校验值,将数据和校验值一起写入传统磁盘物理条带中。
基于上述叙述,在上述技术方案的基础上,还存在不同使用状态的逻辑条带之间的状态切换,具体为以下几种情况:
情况一、当对未使用态逻辑条带进行写操作时,本方法包括对该未使用态逻辑条带所对应的映射表表项进行升级为RAID5态逻辑条带的操作,具体实现方法为:
为未使用态逻辑条带分配一个空闲物理条带;
将空闲物理条带的地址写入未使用态逻辑条带的映射表表项的第一条带域,将数据写入物理条带中;
将未使用态逻辑条带的映射表表项的逻辑条带使用状态域更新为RAID5。
情况二、当对RAID5态逻辑条带中数据的读操作或写操作,且读操作或写操作的次数超过预设阈值时,本方法还包括对RAID5态逻辑条带所对应的映射表表项进行升级为RAID1态逻辑条带的操作,具体实现方法根据RAID5态逻辑条带所对应的物理条带类型进一步存在以下两种情况:
(1)当RAID5态逻辑条带所对应的物理条带类型为传统磁盘物理条带时,对RAID5态逻辑条带所对应的映射表表项进行升级为RAID1态逻辑条带的操作,具体为:
查找出两个具有不同特征号的空闲SSD物理条带;
将RAID5态逻辑条带对应的物理条带中的所有数据读出并写入所述两个空闲SSD物理条带中;
将RAID5态逻辑条带对应的映射表表项的逻辑条带的使用状态域更新为RAID1;
将RAID5态逻辑条带对应的映射表表项的第一条带域和第二条带域分别设置为所述两个空闲SSD物理条带的地址。
(2)当RAID5态逻辑条带所对应的物理条带类型为SSD物理条带时,对RAID5态逻辑条带所对应的映射表表项进行升级为RAID1态逻辑条带的操作,具体为:
查找出一个与RAID5态逻辑条带所对应的SSD物理条带具有不同特征号的空闲SSD物理条带;
将RAID5态逻辑条带对应的物理条带中的所有数据读出并写入所述两个空闲SSD物理条带中;
将RAID5态逻辑条带对应的映射表表项的逻辑条带的使用状态域更新为RAID1;
将RAID5态逻辑条带对应的映射表表项的第一条带域和第二条带域分别设置为所述两个空闲SSD物理条带的地址。
情况三、当对RAID1态逻辑条带中数据的读操作或写操作的次数低于预设阈值时,或当接收到对虚拟LUN中的逻辑条带的操作命令,并且执行所述操作命令所需要的SSD物理条带数量不足时,或系统中空闲的物理条带数量不足时,还包括对RAID1态逻辑条带所对应的映射表表项进行降级为RAID5态逻辑条带的操作,具体实现方法根据RAID1态逻辑条带降级后所对应的物理条带类型,存在以下两种情况:
(1)将RAID1态逻辑条带所对应的两个SSD物理条带中的一个进行释放,而另一个SSD物理条带保持为:由RAID5态逻辑条带转换得来的逻辑条带所对应的物理条带,这种情况下的实现流程具体为:
将RAID1态逻辑条带锁定;
将RAID1态逻辑条带所对应的映射表表项中的第一条带域所对应的物理条带中的数据全部读出,并计算出校验值,用新计算的校验值更新第一条带域所对应的物理条带中的校验单元;
将RAID1态逻辑条带所对应的映射表表项中的逻辑条带的使用状态域更新为RAID5,将第二条带域设置为NULL,释放第二条带域所对应的物理条带。
(2)将RAID1态逻辑条带所对应的两个SSD物理条带全部进行释放, 而转换后的RAID5态逻辑条带对应传统磁盘物理条带,这种情况下的实现流程具体为:
将RAID1态逻辑条带锁定;
将RAID1态逻辑条带所对应的映射表表项中的第一条带域所对应的物理条带中的数据全部读出,并计算出校验值,将读出的数据和计算得到的校验值存入传统磁盘物理条带;
将RAID1态逻辑条带所对应的映射表表项中的逻辑条带的使用状态域更新为RAID5,释放第一条带域和第二条带域所分别对应的两条SSD物理条带,在传统磁盘条带池中选择一条传统磁盘物理条带用于对应降级后生成的RAID5逻辑条带,将本映射表表项的第一条带域设置为该传统磁盘物理条带的地址,将第二条带域设置为NULL。
其中,在上述的情况二和情况三中,对RAID1态逻辑条带中数据的读操作或写操作的次数小于或达到预设阈值的检测,具体通过以下步骤实现:
对混合分级阵列的占用情况以及RAID1态逻辑条带和RAID5态逻辑条带所对应的物理条带中所存储的数据的读操作和写操作次数进行查询;
当RAID1态逻辑条带和/或RAID5态逻辑条带所对应的物理条带中的空闲条带空间低于各自的预设空闲空间阈值(该阈值可以根据具体的系统运行环境的需要进行预先设置)时,或当RAID1态逻辑条带和/或RAID5态逻辑条带所对应的物理条带中所存储数据的读操作和写操作次数达到预设阈值时,从RAID1态逻辑条带所对应的最近最少使用逻辑RAID1逻辑条带的列表中选出待降级条带;
若待降级条带所对应的映射表表项的第二指示位为是,将映射表表项所对应的物理条带的校验单元中的数据写回对应的RAID5态逻辑条带中。
与现有技术相比,本发明实施例具有以下优点,因为采用了一种混合分级阵列的实现方法,从而,实现了SSD物理空间与传统磁盘物理空间的综合使用,达到了应用SSD的高速读写性能和冷热数据切换机制,提高系统资源的利用率,改善系统的读写响应能力的效果。
本发明正是根据SSD和传统磁盘各自的特性提出了虚拟LUN划分的思想,同时提出了基于SSD和传统磁盘的分级阵列系统。
具体如图2所示,本发明实施例二提出了一种存储系统,包括混合分级阵列:
混合分级阵列1,用于将SSD物理空间与传统磁盘物理空间按照RAID5格式划分为两个物理条带池,并建立虚拟LUN中的逻辑条带与两个物理条带池中的物理条带的映射表表项,当接收到对虚拟LUN中的逻辑条带的操作命令时,根据该映射表表项对两个物理条带池中的对应物理条带进行操作,具体的,混合分级阵列中包括SSD物理空间和传统磁盘物理空间,此外,还包括:
物理条带池划分单元11,用于将混合分级阵列中的SSD物理空间与传统磁盘物理空间按照RAID5格式划分为两个物理条带池;
映射表表项建立单元12,用于建立虚拟LUN中的逻辑条带与所述物理条带池划分单元11所划分的两个物理条带池中的物理条带的映射表表项;
命令操作单元13,用于接收到对虚拟LUN中的逻辑条带的操作命令时,根据所述映射表表项建立单元12所建立的映射表表项,对物理条带池划分单元11所划分的所述两个物理条带池中的对应物理条带进行操作。
进一步的,该混合分级阵列还包括:
检测单元14,用于根据所述映射表表项建立单元12所建立的映射表表项检测相应的逻辑条带中数据的读写操作次数是否达到或低于预设阈值;
切换单元15,根据所述检测单元14的检测结果,按照所述映射表表项建立单元2所建立的映射表表项,对相应逻辑条带进行使用状态切换操作。
暂存单元映射表处理单元16,用于在SSD物理空间的SSD物理条带中的校验单元作为一个条带单元的暂存单元来暂存数据时,建立表示该校验单元和条带单元的映射关系的暂存单元映射表表项,并根据映射关系的变化更新该暂存单元映射表表项的内容。
上述模块可以分布于一个装置,也可以分布于多个装置。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
与现有技术相比,本发明实施例具有以下优点,因为采用了一种存储系统,从而,实现了SSD物理空间与传统磁盘物理空间的综合使用,达到了应用SSD的高速读写性能和冷热数据切换机制,提高系统资源的利用率,改善系统的读写响应能力的效果。
下面,基于前述的技术思想,结合具体的实施场景,本发明实施例给出具体说明如下:
本发明实施例采用两个分配位图(Allocation Bitmap)来分别维护SSD物理条带池和传统磁盘条带池的分配状态。
分配位图的大小由各池中配置的物理条带数决定,如果池中的物理条带被分配给了逻辑条带,那么该条带对应的比特位置1,否则置0。如图3所示,为本发明实施例中逻辑空间到物理空间的转换示意图。
如图3中右半部分所示,本发明实施例提供的方法中,为了管理方便,将所有的物理空间都按照RAID5格式划分。
本发明实施例中,定义一个物理条带的特征号等于该条带中校验单元(Parity)所处的列号,这里的列是按照图3所示的管理员指定的RAID5格式来编号的。假设当前为4D+1P格式,那么每个条带Stripe跨5列。特征号用于保证RAID1态逻辑条带中数据的分散性。一个RAID1态逻辑条带将映射两个具有不同特征号的物理条带。
RAID1的数据布局如图4所示,由于物理条带采用RAID5格式并且左对齐,所以当两个物理条带的特征号不同时,只需要按照两个条带中每个条带单元的序号的大小一一对应(条带中序号最小的单元对应另一条带中序号最小的单元),就可实现镜像,并保证了镜像来自不同的列。RAID1态和RAID5态都以RAID5格式的条带作为操作单元,使得两级之间的搬移操作更简单,使得虚拟空间的管理只需要一张逻辑条带到物理条带的映射表就可实现。从图4中可以看到当物理条带被RAID1态逻辑条带所映射时,物理条带中的校验单元是没有被使用的,本发明实施例正是采用这部分空间来提高RAID5小写操作的响应能力。
在本实施例中,首先对虚拟LUN空间的划分方案进行说明如下:
管理员在划分LUN时,系统并不会分配给LUN真实的物理存储空间,而是为LUN创建一个逻辑条带映射表用于逻辑条带到物理条带的地址转换,以及记录访问信息。这样主机可见的就是一个虚拟LUN的空间,当主机发送写操作请求时,系统将采用写时分配技术,从两个物理条带池中选出符合条件的空闲物理条带用于存放数据。逻辑条带映射表中的映射表表项的尺寸由LUN容量、分条深度、RAID5格式决定。图5为本发明实施例中一个映射表表项的示意图。
如图5所示,每个逻辑条带具有3种可能的状态,未使用态、RAID1态、RAID5态。
本发明实施例在SSD和传统磁盘混合阵列中采用分级技术,利用映射表表项中的写操作计数域(Write Count域)记录该条带的被更新次数,将更新频繁的数据放于RAID1态物理条带中,更新不频繁的数据放于RAID5态物理条带中,冷热数据(即更新不频繁的数据和更新频繁的数据)在RAID1态条带和RAID5态条带间的搬移就是通过改变映射表表项的逻辑条带类型域和物理条带地址域来实现的。
为了更充分的利用SSD的读写性能,本发明实施例规定RAID1类型的逻辑条带只能映射SSD物理条带。
而另一方面,在RAID5态逻辑条带中,本发明实施例利用读操作计数域(Read Count域)来记录逻辑条带的读访问命中次数,给读访问频繁的RAID5态逻辑条带分配SSD物理条带,从而提高RAID5态逻辑条带中的读响应性能。
进一步的,为了更充分的说明本发明实施例的技术方案,对图5中所示的映射表表项结构中的各个域的结构设置和功能设定说明如下:
逻辑条带使用状态域(Logical Stripe Type):占用2bit,逻辑条带的使用状态域,分为三种状态:00表示未使用态(unused),01表示RAID1态,10表示RAID5态。三种状态的说明如下:
(1)unused态:此时该逻辑条带没有被分配任何物理空间;初始时,所 有逻辑条带都处于这个状态。
(2)RAID1态:一个RAID1态逻辑条带将映射两个具有不同特征号的SSD物理条带,系统中被频繁更新的条带处于此状态。
(3)RAID5态:一个RAID5态逻辑条带映射一个SSD物理条带。系统将为读访问频繁的RAID5态逻辑条带分配SSID物理条带。
活跃字段(Active bit):即上述实施例所提及的“第一指示位”。占用1bit,记录当前逻辑条带或暂存单元是否正被访问的信息。
物理条带类型域(Physical Stripe Typc):占用1bit,记录当前RAID5态逻辑条带映射的物理条带类型,0表示SSD物理条带,1表示传统磁盘物理条带。该域主要用于RAID5态条带的内部进行读活跃数据搬移时,以及RAID1态条带和RAID5态条带间进行写活跃数据搬移时。
当RAID5态条带内部某逻辑条带的读访问计数值足够大时(达到预设阈值,该阈值可以根据具体环境需求进行设置),将通过Physical Stripe Type域判断当前条带映射的是否是SSD物理条带,若不是,将为该条带分配一个SSD物理条带并将整个条带的值搬移到新分配的SSD物理条带中。
当RAID5态条带中的逻辑条带被更新的很频繁时将触发该条带到RAID1态的升级操作时,将判断当前RAID5态逻辑条带映射的是否是SSD物理条带,若是,则只需在SSD物理条带池中找出一条与当前条带映射的SSD物理条带特征号不同的条带即可,并且只需要进行一次写RAID1态逻辑条带的操作;若不是,需在SSD物理条带池中找出两条特征号不同的SSD物理条带,并且需要进行两次写RAID1态逻辑条带的操作。
RAID1校验单元是否被使用标志位:即上述实施例所提及的“第二指示位”。占用1bit,若当前RAID1态逻辑条带的两个校验单元被RAID5态逻辑条带用于暂时存放小写数据,则此标志位设置为1,否则设置为0。
RAID5态逻辑条带是否使用RAID1校验单元暂存数据的标志位:即上述实施例所提及的“第三指示位”。占用1bit,若当前RAID5态逻辑条带被小写请求命中,那么系统会将小写数据暂时存放在RAID1态逻辑条带的两个校验单元中,若小写不足一个校验单元的大小,将从RAID5态逻辑条带的对应数 据单元中取出旧数据进行填充。只要RAID5态逻辑条带有数据单元暂存于RAID1态逻辑条带的校验单元中,此比特位就为1,否则位0。
条带数量域(stripeunit num域):占用4bit,可以根据具体的系统需求实现对RAID5格式进行扩展,即根据系统所能支持的条带单元个数进行扩展。若当前映射表表项处于RAID5态,则此域用于记录当前条带中使用RAID1校验单元暂存数据的条带单元的数量;若当前映射表表项用于表示暂存单元映射表表项,则此域用于记录使用RAID1态逻辑条带的校验单元的RAID5态逻辑条带中的条带单元的序号。
扩展区域域(expand area域):占用26bit,用于映射表表项的扩展,当用于RAID1态逻辑条带时,将和条带数量域(stripeunit num域)、RAID5态逻辑条带是否使用RAID1校验单元暂存数据的标志位(第三指示位)合并在一起,用于记录使用该RAID1态逻辑条带的校验单元的RAID5态逻辑条带的逻辑地址。
第一条带域(stripel域):占用32bit,若用于RAID5态逻辑条带,则用于记录RAID5态逻辑条带所映射的物理条带地址;若用于RAID1态逻辑条带,则用于记录RAID1态逻辑条带所映射的两条特征号不同的SSD物理条带之一的地址;若用于暂存单元,则用于记录被条带单元使用的校验单元所属的RAID1态逻辑条带的逻辑地址。
第二条带域(stripe2域):占用32bit,若用于RAID5态逻辑条带,如果此条带中有条带单元暂存于RAID1校验单元中,此域将作为暂存单元映射表的表头,指向第一个暂存单元映射表表项的地址;若用于RAID1态逻辑条带,则用于记录RAID1态逻辑条带所映射的两条特征号不同的SSD物理条带中另一个条带的地址;若用于RAID5态逻辑条带的暂存单元,则用于指向暂存单元映射表的下一个节点。
读操作计数域(Read Count域):占用14bit,用于记录当前条带或暂存单元的读访问次数。
写操作计数域(Write Count域):占用14bit,用于记录当前条带或暂存单元的写访问次数。
进一步的,本发明实施例三基于上述的映射表表项设置,对进行数据的小写操作时的实现流程进行说明如下:
如前所述,本发明实施例中将利用RAID1态逻辑条带映射的物理条带中未使用的校验单元来提高小写操作的性能。
下面介绍在使用映射表表项管理系统的同时如何提高小写操作(要写入数据块的磁盘数目小于RAID内磁盘数目的一半)性能。
对于小写操作,如果命中的是RAID1态逻辑条带,则直接更新RAID1态逻辑条带对应的两个物理条带对应位置的内容。
如果小写操作命中的是RAID5态逻辑条带,此时将从RAID1态逻辑条带中选出目前被更新的最频繁,且校验单元未被使用的逻辑条带,这样设置的考虑是由于逻辑条带更新得越频繁,该逻辑条带降级的可能性越小,暂存单元存在的时间就可能越长,则该操作的实现流程具体如下:
将该RAID1态逻辑条带所对应的映射表表项的“RAID1校验单元是否被使用标志位”(第二指示位)设置为1,然后从映射表表项资源池中分配一个新映射表表项用于表示暂存单元,将新分配的映射表表项插入到RAID5态逻辑条带的第二条带域所指向的暂存单元映射表的头部,同时递增RAID5态逻辑条带的条带数量域的值(当RAID5态逻辑条带中没有暂存单元时,条带数量域的值为0),如果RAID5态逻辑条带所对应的映射表表项的“RAID5态逻辑条带是否使用RAID1校验单元暂存数据的标志位”(第三指示位)为0,则将该标志位置1;接着将小写请求的数据存入选中的RAID1态逻辑条带的两个校验单元中,若当前小写请求处于创建暂存单元时期,则未填满一个条带单元时,系统将从RAID5态逻辑条带中读出相应数据进行填充,若小写请求命中了已创建暂存单元,则直接更新对应位置的数据即可。最后在新创建的暂存单元映射表表项的第一条带域中记录选中的RAID1态逻辑条带的逻辑地址,并在其条带数量域中记录当前条带单元的序号。
如果小写命中的是未被使用态条带,则触发从unused态到RAID5态的转换,此时为小写请求对应的逻辑条带分配一个传统磁盘物理条带(用第一条 带域指向该传统磁盘物理条带),但不将数据写入其中,而只是将条带类型域改为RAID5,并初始化映射表表项的其他域。接着进行与小写操作命中RAID5态逻辑条带相同的操作即可。由于系统采用RAID1态的校验单元暂存RAID5态逻辑条带的小写请求提高了其小写响应的能力。
前面提到为了提高读写响应能力,本发明实施例在RAID5态条带内部设置了读访问冷热数据交换机制,以及在RAID1态条带和RAID5态条带之间设置了写访问冷热数据交换机制。
初始阶段,所有的写请求都触发unused态到RAID5态的转换,系统每次更新某逻辑条带时都将该逻辑条所对应的映射表表项带的读操作计数域(Write Count域)的值加1,如果某个RAID5态逻辑条带被更新的频率很高(即Write Count域的值超过预设的阈值时,具体该阈值为多大取决于实验结果和应用场景,该阈值具体数值的区别并不影响本发明的保护范围),那么更希望它是RAID1态逻辑条带,因为逻辑RAID1空间全部对应SSD条带,所以这里会触发RAID5态逻辑条带到RAID1态逻辑条带的升级操作,此时,如果符合条件的空闲物理条带不足,还会随之触发RAID1态逻辑条带到RAID5态逻辑条带的降级操作,使得更新频率较低的RAID1态逻辑条带中的冷数据变换到RAID5态。
下面具体介绍RAID1态条带和RAID5态条带之间搬移操作中几种状态的转换过程。RAID5态条带内部的读访问冷热数据交换与此类似。
未使用态到RAID5态的转换(unused to RAID5):
当一个写操作对应的逻辑条带所对应的映射表表项的逻辑条带使用状态域为未使用态(说明此数据第一次写入阵列中)时,将触发该逻辑条带从未使用态到RAID5态的转换。
将根据分配位图为该逻辑条带分配一个空闲物理条带,由于系统采用SSD物理条带和传统磁盘物理条带的混合阵列,为了保证RAID 1态逻辑条带全部对应SSD物理条带,所以在unused态到RAID5态转换时,应首先从空闲的传统磁盘物理条带开始分配。
若分配空闲物理条带成功,将在分配位图上对应位置做上已分配标记, 并将当前分配的空闲物理条带的地址写入映射表表项的第一条带域,然后将数据写入该物理条带中。
若没有空闲的物理条带,一个RAID1态逻辑条带将降级到RAID5态,从而获得空闲的物理条带。其中,系统应该避免在主机下发写请求时没有空闲物理条带可用的情况,所以RAID1态和RAID5态之间的搬移操作一般都发生在系统空闲时,周期性的通过后台线程实现。最后将数据写入通过降级获得的空闲物理条带中,并将映射表表项的逻辑条带类型更新为RAID5态,同时将当前通过降级操作分配的空闲物理条带的地址,写入映射表表项的第一条带域。
RAID1态到RAID5态的转换(RAID1 to RAID5):
如上所述,当一个写操作对应的逻辑条带为未使用态且没有空闲的物理条带分配给它时、或者当RAID5态逻辑条带到RAID1态逻辑条带的升级操作时,如果符合条件的空闲SSD物理条带不足、或者当通过周期性后台线程发现系统可用的物理条带空间不足、或者系统需要进行写访问冷热数据交换时,都将触发RAID1态逻辑条带降级到RAID5态逻辑条带,从而使其获得空闲空间。
此时系统将首先把该逻辑条带锁住,使得其它请求无法并发的访问待降级的RAID1态逻辑条带。
接着将RAID1态逻辑条带所对应的映射表表项的第一条带域映射的物理条带中的数据全部读出计算出校验值,更新当前物理条带(即第一条带域映射的物理条带)上的校验单元,然后将映射表表项的条带类型更新为RAID5态,将第二条带域置为NULL,而另一个镜像物理条带(即第二条带域映射的物理条带)就可被释放出来供写操作使用。
在系统实现时,为了尽量避免主机写请求时降级情况的发生,系统创建了一个后台线程,该线程将周期性的对存储阵列的占用情况以及RAID1态物理条带、RAID5态条带中数据的冷热状态(针对写访问)进行查询,并检测当前系统的忙闲情况,若发现当前RAID1态条带或RAID5态条带中的空闲条带空间低于它们各自的阈值时,或者两级间需要进行冷热数据交换并且系统 处于空闲状态,将触发RAID1态逻辑条带到RAID5态逻辑条带的降级操作,这时系统会从RAID1态维护的最近最少使用逻辑RAID1态逻辑条带的链表(或者二叉查找树)中选出待降级条带,若待降级的RAID1态逻辑条带的“RAID1校验单元是否被使用标志位”(第二指示位)为1,则需要将RAID1态逻辑条带的校验单元中的数据写回对应RAID5态逻辑条带中,其中,RAID1态逻辑条带通过“使用它的校验单元的RAID5态逻辑条带逻辑地址域”可以找到其所对应的待写回RAID5态逻辑条带。
RAID5态到RAID1态的转换(RAID5 to RAID1):
当系统进行冷热数据交换时将触发RAID5态逻辑条带到RAID1态逻辑条带的升级操作。
为了实现RAID5态逻辑条带到RAID1态逻辑条带的升级操作,必须要获得两个具有不同特征号的SSD物理条带。所以,系统首先会根据分配位图找出两个具有不同特征号的空闲SSD物理条带;若没有符合要求的空闲的SSD物理条带,将触发一个符合要求的RAID1态逻辑条带降级到RAID5态逻辑条带,从而获得空闲的SSD物理条带。接着将RAID5态逻辑条带对应的物理条带中的所有数据读出并写入选出的两个空闲物理条带中。最后将映射表表项的条带类型更新为RAID1态,并用新分配两个SSD物理条带的地址更新映射表表项第一条带域和第二条带域,并修改条带分配位图。
其中,若RAID5态逻辑条带本来就映射的是SSD物理条带,则只需要分配一个符合条件的SSD物理条带,若没有符合要求的空闲的SSD物理条带,将触发一个符合要求的RAID1态逻辑条带降级到RAID5态逻辑条带,从而获得空闲的SSD物理条带,接着将RAID5态逻辑条带对应的SSD物理条带中的所有数据读出并写入选出的空闲物理条带中,同时保持原有SSD物理条带中的数据,最后将映射表表项的条带类型更新为RAID1态,并用新分配一个SSD物理条带的地址更新映射表表项第二条带域,并修改条带分配位图。
为了提高RAID1态条带的响应能力,本发明的实施例规定RAID1态的逻辑条带只能映射SSD物理条带。这使得系统的搬移操作不像只有纯SSD或纯传统磁盘那么简单了。
首先,在RAID5态逻辑条带到RAID1态逻辑条带的升级操作时,如果此时选中的RAID5态逻辑条带的逻辑条带使用状态域(Physical Stripe Type域)为0,说明当前条带映射的是SSD物理条带,此时只需选出一条与其极性不同的SSD物理条带,然后将RAID5态逻辑条带的所有数据单元读出并写入新获得的SSD物理条带的对应位置即可,即只需一次SSD物理条带的写操作,最后用新分配的SSD物理条带的地址更新第二条带域,修改条带类型为RAID1态。如果选中的RAID5态逻辑条带的逻辑条带使用状态域(PhysicalStripe Type域)为1,说明当前条带映射的是传统磁盘物理条带,此时需要选出两个极性不同的SSD物理条带,然后将RAID5态逻辑条带的所有数据单元从传统磁盘物理条带读出并写入新获得的两条SSD物理条带的对应位置,即需要两次SSD物理条带的写操作,最后用新分配的两条SSD物理条带的地址分别更新第一条带域和第二条带域,修改条带类型为RAID1态。
在RAID1态逻辑条带到RAID5态逻辑条带的降级操作时,如果此时后台线程运行于系统空闲时,并且无新到的主机请求被挂起,那么,系统更愿意将降级后的条带存入传统磁盘物理条带中,这样一次性可以释放两个SSD物理条带,不过带来的缺点是使得降级操作变慢了,因为需要将物理条带的数据先读到缓存中,计算出校验单元,然后再将整个原SSD物理条带的数据写入传统磁盘物理条带中,最后将映射表表项的第一条带域改为新分配的传统磁盘物理条带地址,修改条带类型为RAID5态,再将这三个物理条带在分配位图中对应的信息进行修改。如果此时有新到的主机请求被挂起,系统会希望更快的结束搬移操作,那么,此时可以选择直接进行降级操作,即只用将RAID1态逻辑条带数据从第一条带域映射的SSD物理条带中读入缓存,计算出校验单元,然后只将校验单元写回第一条带域映射的SSD物理条带中,最后使第二条带域为NULL,修改条带类型为RAID5态。由于系统在RAID5态内部将读访问频繁的数据存放于SSD条带处,也就是说RAID5内部会进行读访问冷热数据搬移,所以如果在RAID1态逻辑条带到RAID5态逻辑条带的降级操作时,当前待降级RAID1态逻辑条带的读操作计数域(Read Count域)满足系统对读访问热数据的要求,那么此时也可以选择不分配传统磁盘物理 条带的降级操作。
在上述的实施例中,对小写操作情况下的操作流程进行了描述。接下来,本发明实施例将对满写操作和大写操作的流程进行进一步说明,具体情况说明如下:
再进一步的,本发明实施例四基于上述的映射表表项设置,对进行数据的满写操作时的实现流程进行说明如下:
对于满写操作,如果命中的是RAID1态逻辑条带,则直接更新RAID1态逻辑条带对应的两个物理条带的内容,在写操作的过程中,对该RAID1态逻辑条带进行锁定,避免该条带再同时并发的接受其他操作请求,这里要注意的是,只有当两个物理条带的写操作都完成时才能解锁。
如果命中的是RAID5态逻辑条带,首先,要判断该RAID5态逻辑条带的映射表表项中的“RAID5态逻辑条带是否使用RAID1校验单元暂存数据的标志位”(第三指示位)是否为0,若为0,则直接利用新数据计算出校验值,然后把数据和校验值一起写入RAID5态逻辑条带对应的物理条带中;若不为0,则首先将“RAID5态逻辑条带是否使用RAID1校验单元暂存数据的标志位”(第三指示位)和条带数量域清0,然后根据第二条带域所指向的暂存单元映射表中的所有用于表示暂存单元的表项的第一条带域找到对应校验单元所属的RAID1态逻辑条带,将该映射表表项的“RAID1校验单元是否被使用标志位”(第二指示位)清0,并将该映射表表项中用于指向引用它的RAID5态逻辑条带的域设为NULL(即暂存单元映射表表项的第二条带域),最后将RAID5态逻辑条带的第二条带域所指向的暂存单元映射表中的所有暂存单元的表项释放回映射表表项资源池中并使该第二条带域为NULL,接着利用新数据计算出校验值,然后把数据和校验值一起写入RAID5态逻辑条带对应的物理条带中。
如果命中的是未使用态条带(即数据第一次写入),则触发该逻辑条带类型信息从未使用态到RAID5态的转换,系统为满写请求对应的逻辑条带分配一个传统磁盘物理条带,再根据数据求出校验值,然后把数据和校验值一起 写入对应的物理条带中。
再进一步的,本发明实施例五基于上述的映射表表项设置,对进行数据的满写操作时的实现流程进行说明如下:
对于大写操作,如果命中的是RAID1态逻辑条带,则直接更新RAID1态逻辑条带对应的两个物理条带的内容。如果命中的是RAID5态逻辑条带,首先,要判断该RAID5态逻辑条带的映射表表项中的“RAID5态逻辑条带是否使用RAID1校验单元暂存数据的标志位”(第三指示位)是否为0,若为0,对于大写操作,可以只将不需更新的旧数据从RAID5态物理条带中读出,然后在缓存中利用新数据和不需更新的旧数据进行异或运算获得新的校验值,最后启动IO访问将新数据和新获得的校验值写回RAID5态逻辑条带所对应的物理条带;若不为0,则首先将“RAID5态逻辑条带是否使用RAID1校验单元暂存数据的标志位”(第三指示位)和条带数量域清0,然后,将在第二条带域所指向的暂存单元映射表中对所有用于表示暂存单元的映射表表项的条带数量域进行搜索,如果此时发现有不属于执行本次大写操作范围的暂存单元存在,则将把该暂存单元(某个RAID1态逻辑条带的校验单元)中的数据读入缓存中大写数据所在的条带的对应位置,如果此时大写数据没有占满某个条带单元并且该条带单元正被缓存于RAID1态逻辑条带对应的校验单元中,那么将从校验单元对之一中将对应的旧数据读出放入缓存中大写数据所在的条带的对应位置,接着根据第二条带域所指向的暂存单元映射表中的所有用于表示暂存单元的映射表表项的第一条带域找到对应校验单元所属的RAID1态逻辑条带,将其映射表表项的“RAID1校验单元是否被使用标志位”(第二指示位)清0,并将该暂存单元映射表表项中用于指向引用它的RAID5态逻辑条带的域设为NULL(即该暂存单元映射表表项中的第二条带域),最后将RAID5态逻辑条带的第二条带域所指向的链表中的所有暂存单元的表项释放回映射表表项资源池中,并使RAID5态逻辑条带的第二条带域为NULL,最后对于缓存中的大写数据,可以将RAID5态逻辑条带所对应的物理条带中不需更新的旧数据读出,然后在缓存中利用新数据(包括当前大写请求的数 据以及从校验单元中合并的暂存数据)和不需更新的旧数据进行异或运算获得新的校验值,最后启动IO访问将新数据和新获得的校验值写回磁盘。
如果命中的是未使用态条带(即数据第一次写入)则同样触发未使用态到RAID5态的转换,之后的具体过程与大写操作命中RAID5态逻辑条带后的操作流程相同,在此不再另行赘述。
再进一步的,由于系统只通过一张映射表来管理虚拟空间,因此读请求到来时,可以通过缓存中的映射表表项直接寻址到数据所在物理位置(对于有暂存单元的RAID5态条带,最多只需进行几次链表的查找操作)。同时,系统根据SSD的特性,对读访问提供了冷热数据交换机制,使得读响应进一步提高。具体的操作流程与前述实施例中写操作情况下的流程相类似,在此不再赘述。
需要进一步指出的是,在前述的本发明实施例三至本发明实施例五所描述的技术方案中,所涉及的具体参数设置只是本发明的一种优选设置,具体设置值的差异并不影响本发明的保护范围。
综合上述本发明各实施例,尤其是本发明实施例三至本发明实施例五所描述的技术方案,可以看出,本发明实施例针对现有技术没有充分考虑发挥SSD的特性这一情况,提出了一种基于SSD和传统磁盘的混合分级阵列的虚拟LUN划分策略。
本发明实施例通过分级RAID体系提高系统的读写响应能力,不仅在RAID1态和RAID5态条带间进行写访问热点迁移,还在RAID5态条带内部进行了读访问热点迁移,充分发挥了SSD的特性。
同时,本发明实施例所提出的技术方案中,只利用一张逻辑条带到物理条带的映射表进行虚拟LUN的划分,使得管理更加方便,并且采用写时分配技术提高了系统的空间利用率,此外,还采用SSD作为暂存单元提高了RAID5低性能级小写请求命中时的性能。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。