一种RAID条带重映射方法、系统、设备以及存储介质技术方案

技术编号:38252629 阅读:12 留言:0更新日期:2023-07-27 10:17
本发明专利技术公开了一种RAID条带重映射方法,包括以下步骤:获取待重映射的条带以及对应的第一指针列表并确定所述条带的类型,其中所述待重映射的条带包括多个子条带,所述第一指针列表包括多个指针区域;根据所述条带的类型初始化第一计数器、第二计数器,其中所述第一计数器用于记录当前重映射的子条带的编号,所述第二计数器记录待处理的盘数;按照所述子条带的顺序将所述第一指针列表中的指针重映射成第二指针列表。本发明专利技术还公开了一种系统、计算机设备以及可读存储介质。本发明专利技术提出的方案通过将第一指针列表中的指针重映射成第二列表,避免了碎片化读取。免了碎片化读取。免了碎片化读取。

【技术实现步骤摘要】
一种RAID条带重映射方法、系统、设备以及存储介质


[0001]本专利技术涉及存储领域,具体涉及一种RAID条带重映射方法、系统、设备以及存储介质。

技术介绍

[0002]RAID又称独立磁盘冗余阵列,是一种存储解决方案,该方案将多个独立的磁盘组合起来,构成一个大型逻辑阵列。RAID技术具有提高数据可靠性和I/O性能的优点,可以向主机提供成本适中,高可靠性的高性能存储。主要用于为大型服务器提供高端存储功能和冗余的数据安全。数据以块为单位分布到各个硬盘上。其基本功能有:1)对磁盘数据条带化,实现数据成块存取;2)通过存储奇偶校验信息,实现数据冗余保护;RAID有不同的等级,以RAID5为例:RAID5至少需要3块硬盘,其中一块硬盘用于存储校验码,如果其中一块硬盘损坏,通过均匀分布在各个硬盘中的数据和校验码,可以恢复出损坏硬盘上的数据。当主机下发一次IO请求,如何映射到组RAID的物理硬盘的存储空间需要给予定义。
[0003]将RAID盘中的数据按照4KB为单位,划分为多个数据块,每个数据块对应一个32比特位宽的指针索引,这些指针索引按照某种规则以list page页的形式存储在内存池中。本文将按照SOC对主机呈现的IO顺序排列的list称为A_list(绝对列表),同时为了方便raid加速引擎处理数据,需要将条带内的数据按照面向“striphead”做数据整合,因此需要以面向“striphead”的规则重新对A_list中的指针排序,组成H_list(水平列表)。
[0004]若A_list是按列连续的list,H_list是按行连续的list。若直接输出按行排序的list,将导致大间隔,碎片化的读取A_list。若连续读入A_list,会导致H_list输出呈现大间隔、零碎的状态。上述两种访问对DRAM非常不友好。

技术实现思路

[0005]有鉴于此,为了克服上述问题的至少一个方面,本专利技术实施例提出一种RAID条带重映射方法,包括以下步骤:
[0006]获取待重映射的条带以及对应的第一指针列表并确定所述条带的类型,其中所述待重映射的条带包括多个子条带,所述第一指针列表包括多个指针区域;
[0007]根据所述条带的类型初始化第一计数器、第二计数器,其中所述第一计数器用于记录当前重映射的子条带的编号,所述第二计数器记录待处理的盘数;
[0008]按照所述子条带的顺序将所述第一指针列表中的指针重映射成第二指针列表,其中基于每一个所述子条带对所述第一指针列表进行重映射时均执行以下步骤:
[0009]根据所述第一计数器的值确定第三计数器的初始值以及将所述子条带的数量作为步进值更新所述第三计数器,其中所述第三计数器记录所述第一指针列表的当前位置;
[0010]每次更新所述第三计数器后将所述第二计数器的值减1直到所述第二计数器的值减至0并停止更新所述第三计数器,且对每一个所述第三计数器的值进行解析并根据解析结果从所述第一指针列表的对应指针区域取出对应的指针并放入所述第二指针列表中。
[0011]在一些实施例中,还包括:
[0012]响应于所述条带为非满条带,基于每一个所述子条带对所述第一指针列表进行重映射时,确定重映射顺序为原数据指针、原数据对应的原校验数据的指针、新数据指针、新数据对应的新校验数据的指针;
[0013]响应于所述条带为伪满条带,基于每一个所述子条带对所述第一指针列表进行重映射时,确定重映射顺序为原数据指针、新数据指针、新数据对应的新校验数据的指针以及校验和指针。
[0014]在一些实施例中,根据所述第一计数器的值确定第三计数器的初始值,进一步还包括:
[0015]响应于所述条带为非满条带且当前对原数据指针或新数据指针进行重映射时,所述第三计数器的初始值为所述第一计数器的值减去所述条带的偏移单元偏移;
[0016]响应于所述条带为非满条带且当前对原校验数据的指针或新校验数据的指针进行重映射时,将所述第一计数器的值减去所述条带单元偏移,若差值小于0,则将所述差值加上条带单元大小作为所述第三计数器的初始值,若所述差值大于0,则直接将所述差值作为所述第三计数器的初始值;
[0017]响应于所述条带为伪满条带且当前对原数据指针、新数据指针或校验和对应的指针进行重映射时,所述第三计数器的初始值为所述第一计数器的值;
[0018]响应于所述条带为伪满条带且当前对新校验数据的指针进行重映射时,所述第三计数器的初始值为所述第一计数器的值加上奇偶校验偏移。
[0019]在一些实施例中,对每一个所述第三计数器的值进行解析并根据解析结果从所述第一指针列表的对应指针区域取出对应的指针并放入所述第二指针列表中,进一步还包括:
[0020]获取当前所述第三计数器的值;
[0021]响应于所述条带为非满条带且当前对原数据指针或新数据指针进行重映射时,判断所述第三计数器的值是否小于0;
[0022]响应于小于0,向所述第二指针列表中填入无效指针;
[0023]响应于大于0,将从所述第一指针列表的原数据指针区域或新数据指针区域的起始位置偏移所述第三计数器的值后的指针放入所述第二指针列表。
[0024]在一些实施例中,对每一个所述第三计数器的值进行解析并根据解析结果从所述第一指针列表的对应区域取出对应的指针并放入所述第二指针列表中,进一步还包括:
[0025]获取当前所述第三计数器的值;
[0026]响应于所述条带为非满条带且当前对原校验数据的指针或新校验数据的指针进行重映射时,将从所述第一指针列表的原校验数据指针区域或新校验数据指针区域的起始位置偏移所述第三计数器的值后的指针放入所述第二指针列表。
[0027]在一些实施例中,对每一个所述第三计数器的值进行解析并根据解析结果从所述第一指针列表的对应区域取出对应的指针并放入所述第二指针列表中,进一步还包括:
[0028]获取当前所述第三计数器的值并将所述第一指针列表中的原数据和新数据指针区域、校验指针区域放入第一缓存,校验和指针区域放入第二缓存并获取所述第一指针列表中记录新数据指针的起始位置和结束位置;
[0029]响应于所述条带为伪满条带且当前对原数据指针进行重映射时,若第三计数器的值落入所述起始位置和所述结束位置之间,向所述第二指针列表中填入无效指针;若第三计数器的值未落入所述起始位置和所述结束位置之间,将从所述第一缓存中原数据和新数据指针区域的起始位置偏移所述第三计数器的值后的指针放入所述第二指针列表;
[0030]响应于所述条带为伪满条带且当前对新数据指针进行重映射时,若第三计数器的值落入所述起始位置和所述结束位置之间,将从所述第一缓存中原数据和新数据指针区域的起始位置偏移所述第三计数器的值后的指针放入所述第二指针列表;若第三计数器的值未落入所述起始位置和所述结束位置之间,向所述第二指针列表中填入无效指针。
[0031]在一些实施例中,对每一个所述第三计数器的值进行解析并根据解析结果从所述第一本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种RAID条带重映射方法,其特征在于,包括以下步骤:获取待重映射的条带以及对应的第一指针列表并确定所述条带的类型,其中所述待重映射的条带包括多个子条带,所述第一指针列表包括多个指针区域;根据所述条带的类型初始化第一计数器、第二计数器,其中所述第一计数器用于记录当前重映射的子条带的编号,所述第二计数器记录待处理的盘数;按照所述子条带的顺序将所述第一指针列表中的指针重映射成第二指针列表,其中基于每一个所述子条带对所述第一指针列表进行重映射时均执行以下步骤:根据所述第一计数器的值确定第三计数器的初始值以及将所述子条带的数量作为步进值更新所述第三计数器,其中所述第三计数器记录所述第一指针列表的当前位置;每次更新所述第三计数器后将所述第二计数器的值减1直到所述第二计数器的值减至0并停止更新所述第三计数器,且对每一个所述第三计数器的值进行解析并根据解析结果从所述第一指针列表的对应指针区域取出对应的指针并放入所述第二指针列表中。2.如权利要求1所述的方法,其特征在于,还包括:响应于所述条带为非满条带,基于每一个所述子条带对所述第一指针列表进行重映射时,确定重映射顺序为原数据指针、原数据对应的原校验数据的指针、新数据指针、新数据对应的新校验数据的指针;响应于所述条带为伪满条带,基于每一个所述子条带对所述第一指针列表进行重映射时,确定重映射顺序为原数据指针、新数据指针、新数据对应的新校验数据的指针以及校验和指针。3.如权利要求2所述的方法,其特征在于,根据所述第一计数器的值确定第三计数器的初始值,进一步还包括:响应于所述条带为非满条带且当前对原数据指针或新数据指针进行重映射时,所述第三计数器的初始值为所述第一计数器的值减去所述条带的偏移单元偏移;响应于所述条带为非满条带且当前对原校验数据的指针或新校验数据的指针进行重映射时,将所述第一计数器的值减去所述条带单元偏移,若差值小于0,则将所述差值加上条带单元大小作为所述第三计数器的初始值,若所述差值大于0,则直接将所述差值作为所述第三计数器的初始值;响应于所述条带为伪满条带且当前对原数据指针、新数据指针或校验和对应的指针进行重映射时,所述第三计数器的初始值为所述第一计数器的值;响应于所述条带为伪满条带且当前对新校验数据的指针进行重映射时,所述第三计数器的初始值为所述第一计数器的值加上奇偶校验偏移。4.如权利要求3所述的方法,其特征在于,对每一个所述第三计数器的值进行解析并根据解析结果从所述第一指针列表的对应指针区域取出对应的指针并放入所述第二指针列表中,进一步还包括:获取当前所述第三计数器的值;响应于所述条带为非满条带且当前对原数据指针或新数据指针进行重映射时,判断所述第三计数器的值是否小于0;响应于小于0,向所述第二指针列表中填入无效指针;响应于大于0,将从所述第一指针列表的原数据指针区域或新数据指针区域的起始位
置偏移所述第三计数器的值后的指针放入所述第二指针列表。5.如权利要求3所述的方法,其特征在于,对每一个所述第三计数器的值进行解析并根据解析结果从所述第一指针列表的对应区域取出对应的指针并放入所述第二指针列表中,进一步还包括:获取当前所述第三计数器的值;响应于所述条带为非满条带且当前对原校验数据的指针或新校验数据的指针进行重映射时,将从所述第一指针列表的原校验数据指针区域或新校验数据指针区域的起始位置偏移所述第三计数器的值后的指针放入所述第二指针列表。6....

【专利技术属性】
技术研发人员:史琪邵海波朱雷
申请(专利权)人:山东云海国创云计算装备产业创新中心有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1