发明名称 一种双磁盘容错垂直型分组并行访问磁盘阵列的构建方法
摘要 本发明涉及一种双磁盘容错垂直型分组并行访问的磁盘阵列SVE-RAID 6的构建方法的构建方法,适用于连续数据存储,属于独立磁盘冗余阵列技术领域。本发明针对连续数据存储的特点,设计实现一种双磁盘容错垂直型分组并行访问的磁盘阵列SVE-RAID 6,主要包括:对磁盘阵列进行条带、数据块、校验块和数据子块的划分和布局;磁盘工作状态转换调度策略;写数据时的优化处理方法;故障磁盘处理方法等。磁盘阵列SVE-RAID 6不但具有优良的冗余数据保护机制,而且能显著降低功耗,延长磁盘使用寿命。
申请公布号 CN102023820A 申请公布日期 2011.04.20
申请号 CN201010575625.2 申请日期 2010.12.01
申请人 北京同有飞骥科技股份有限公司 发明人 孙志卓;谭毓安;周泽湘;王道邦;李艳国;章珉;武志民;范利东
分类号 G06F3/06(2006.01)I;G06F11/10(2006.01)I 主分类号 G06F3/06(2006.01)I
代理机构 代理人
主权项 1.一种双磁盘容错垂直型分组并行访问磁盘阵列的构建方法,其特征在于,包括以下步骤:一、对磁盘阵列进行条带、数据块、校验块和数据子块的划分和布局,具体方法为:在磁盘阵列包含N个磁盘的场景中,其中N≥4且N为正整数;将N个磁盘构造成1行×N列的磁盘矩阵;对全部磁盘进行条带划分,分成N个条带并为每个条带顺序编号,每个条带上有N个存储块,其中1个为P校验块,1个为Q校验块,另外N-2个为数据块,校验块P由相同条带内的N-2个数据块进行异或运算得出,校验块Q由相同条带内的N-2个数据块进行伽罗华域乘法和加法运算得出,P、Q的生成公式如下:<maths num="0001"><![CDATA[<math><mrow><mi>P</mi><mo>=</mo><msub><mi>D</mi><mn>0</mn></msub><mo>&CirclePlus;</mo><msub><mi>D</mi><mn>1</mn></msub><mo>&CirclePlus;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CirclePlus;</mo><msub><mi>D</mi><mrow><mi>N</mi><mo>-</mo><mn>2</mn></mrow></msub><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow></math>]]></maths><maths num="0002"><![CDATA[<math><mrow><mi>Q</mi><mo>=</mo><mrow><mo>(</mo><msub><mi>A</mi><mn>0</mn></msub><mo>*</mo><msub><mi>D</mi><mn>0</mn></msub><mo>)</mo></mrow><mo>&CirclePlus;</mo><mrow><mo>(</mo><msub><mi>A</mi><mn>1</mn></msub><mo>*</mo><msub><mi>D</mi><mn>1</mn></msub><mo>)</mo></mrow><mo>&CirclePlus;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CirclePlus;</mo><mrow><mo>(</mo><msub><mi>A</mi><mrow><mi>N</mi><mo>-</mo><mn>2</mn></mrow></msub><mo>*</mo><msub><mi>D</mi><mrow><mi>N</mi><mo>-</mo><mn>2</mn></mrow></msub><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow></math>]]></maths>其中D<sub>1</sub>、D<sub>2</sub>、......,D<sub>N-2</sub>为同一条带内的N-2个数据块,<img file="FSA00000375316800013.GIF" wi="38" he="37" />表示异或运算,A<sub>1</sub>、A<sub>2</sub>、......,A<sub>N-2</sub>为互异的伽罗华域乘法系数,*表示伽罗华域乘法;用X(i,j)表示磁盘阵列SVE-RAID 6中的一个存储块,其中i表示该存储块所在条带的序号,j表示所在磁盘的序号,存储块X(i,j)位于磁盘j上,1≤i,j≤N;第i条带内的校验块P,用P(i)表示,与存储块X(i,j)具有如下关系:<maths num="0003"><![CDATA[<math><mrow><mi>P</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>X</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>N</mi><mo>-</mo><mi>i</mi><mo>)</mo></mrow></mtd><mtd><mi>i</mi><mo>&NotEqual;</mo><mi>N</mi></mtd></mtr><mtr><mtd><mi>X</mi><mrow><mo>(</mo><mi>N</mi><mo>,</mo><mi>N</mi><mo>)</mo></mrow></mtd><mtd><mi>i</mi><mo>=</mo><mi>N</mi></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow></math>]]></maths>第i条带内的校验块Q,用Q(i)表示,与存储块X(i,j)具有如下关系:Q(i)=X(i,N+1-i)(4)其它存储块为数据块,用D(u,v)表示,其中u表示数据块所在条带的序号,1≤u≤N,v表示忽略校验块P和Q时,该数据块在所属条带内的数据块的序号,序号从1开始,1≤v≤N-2;数据块D(u,v)与存储块的对应关系满足式5:<maths num="0004"><![CDATA[<math><mrow><mi>D</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>X</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>)</mo></mrow></mtd><mtd><mi>u</mi><mo>+</mo><mi>v</mi><mo>&lt;</mo><mi>N</mi></mtd></mtr><mtr><mtd><mi>X</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>+</mo><mn>2</mn><mo>)</mo></mrow></mtd><mtd><mi>u</mi><mo>+</mo><mi>v</mi><mo>&GreaterEqual;</mo><mi>N</mi></mtd></mtr><mtr><mtd><mi>X</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow></mtd><mtd><mi>u</mi><mo>=</mo><mi>N</mi></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>且u ≠N    (5)为了提高连续存储带宽,并获得不同的连续存储带宽,以满足不同存储速率的需求,将每个条带上的N-2个数据块平均分成p组,p≥2且p为正整数,每组包含q个数据块,q≥1且q为正整数,q值根据实际存储任务对连续带宽的需求确定;并满足以下关系:p×q=N-2;每个数据块分成K个大小相等的数据子块,K≥2且K为正整数,然后按照组号依次为全部数据子块编号,组号相同的数据子块,按照条带顺序编号,即:第一条带第1组的第1个数据块中第1个数据子块编号为1;为第一条带第1组中的第2个数据块中第1个数据子块编号为2;……;为第一条带第1组中的第q个数据块中第1个数据子块编号为q;然后为第一条带第1组中的第1个数据块中第2个数据子块编号为q+1;为第一条带第1组的第2个数据块中第2个数据子块编号为q+2;……;为第一条带第1组中的第q个数据块中第2个数据子块编号为2×q;……;以此类推,为第一条带第1组中的第1个数据块中第K个数据子块编号为(K-1)×q+1;为第一条带第1组的第2个数据块中第K个数据子块编号为(K-1)×q+2;……;为第一条带第1组中的第q个数据块中第K个数据子块编号为K×q;然后为第二条带第1组的第1个数据块中第1个数据子块编号为K×q+1;为第二条带第1组的第2个数据块中第1个数据子块编号为K×q+2;……;为第二条带第1组的第q个数据块中第1个数据子块编号为(K+1)×q;然后为第二条带第1组的第1个数据块中第2个数据子块编号为(K+1)×q+1;为第二条带第1组的第2个数据块中第2个数据子块编号为(K+1)×q+2;……;为第二条带第1组的第q个数据块中第2个数据子块编号为(K+2)×q;……;以此类推,为第二条带第1组的第1个数据块中第K个数据子块编号为2×K×q-q+1;为第二条带第1组的第2个数据块中第K个数据子块编号为2×K×q-q+2;……;为第二条带第1组的第q个数据块中第K个数据子块编号为2×K×q;同理为第i条带第1组的第1个数据块中第1个数据子块编号为(i-1)×K×q+1,1≤i≤N;为第i条带第1组的第2个数据块中第1个数据子块编号为(i-1)×K×q+2;……;为第i条带第1组的第q个数据块中第1个数据子块编号为(i-1)×K×q+q;然后为第i条带第1组的第1个数据块中第2个数据子块编号为(i-1)×K×q+q+1;为第i条带第1组的第2个数据块中第2个数据子块编号为(i-1)×K×q+q+2;……;为第i条带第1组的第q个数据块中第2个数据子块编号为(i-1)×K×q+q×2;……;以此类推,为第i条带第1组的第1个数据块中第K个数据子块编号为i×K×q-q+1;为第i条带第1组的第2个数据块中第K个数据子块编号为i×K×q-q+2;……;为第i条带第1组的第q个数据块中第K个数据子块编号为i×K×q;以此类推,按照相同的编号原则,为每一条带的第2组数据子块进行编号、为每一条带的第3组数据子块进行编号、……、为每一条带的第p组数据子块进行编号,编号相邻的数据子块,其逻辑地址相邻;条带序号相邻、组序号相同的组,其逻辑地址相邻,第N条带与第一条带中组序号相邻的组,逻辑地址相邻,逻辑地址相邻的组,称为相邻组;每个校验块P、校验块Q也分成K个大小相等的校验子块,校验块P、Q中的校验子块由所在条带中偏移位置相同的N-2个数据子块分别通过异或运算、伽罗华域乘法和加法得出,这N-2数据子块及其生成的校验子块,构成一个校验条;二、按照以下策略,调度磁盘进行工作状态转换:为每个磁盘设置一个信号量,用Sem i表示,1≤i≤N,设置信号量Sem i的初始值均为0;第1步:根据访问数据的逻辑地址,用LBA表示,计算出该访问数据所在数据块所属的条带u以及所属的组,用r表示;通过式6得到:<img file="FSA00000375316800031.GIF" wi="1919" he="294" />其中,组大小表示组内各数据块的大小之和,MOD表示模运算,加1表示条带编号和组编号均从1开始;然后,用式5确定第u条带第r组内的q个数据块D(u,r×q-q+1)、D(u,r×q-q+2)、……、D(u,r×q-q+q)所在的磁盘,用式3确定本条带校验块P(u)所在的磁盘为(N-u)或N,用式4确定本条带校验块Q(u)所在的磁盘为N+1-u,对以上磁盘分别处理:若磁盘处于停止状态,则调度到就绪状态;条带序号u和组序号r分别用于记录当前访问操作的条带序号和组序号;第2步:当第u条带第r组内的q个数据块所在磁盘,第u条带校验块P(u)、Q(u)所在磁盘处于就绪状态时,开始并行访问这q+2个磁盘,被访问的磁盘由就绪状态转为运行状态;第3步:如果本次访问在第u条带第r组内结束,则本次访问结束后,第u条带第r组内的q个数据块所属磁盘、第u条带内的校验块P(u)、Q(u)所属磁盘由运行状态转为就绪状态,然后退出本次调度;否则,在第u条带第r组访问结束前t时刻,确定相邻组的条带编号及组编号,其中t为磁盘由停止状态转为就绪状态所需要的时间,条带编号用I表示,组编号用R表示;并对第I条带第R组内q个数据块所属磁盘、第I条带内的校验块P(I)、校验块Q(I)所在磁盘分别处理:若磁盘处于停止状态,则调度到就绪状态;若磁盘处于运行状态,则该磁盘的信号量加1;在第u条带第r组访问结束后,对第u条带第r组内的q个数据块所属磁盘、第u条带内的校验块P(u)、Q(u)所属磁盘分别处理:将磁盘的信号量减1,如果该磁盘的信号量小于0,则将该磁盘由运行状态转为停止状态,并重新设置该磁盘的信号量为0;否则,将该磁盘由运行状态转为就绪状态;第4步:把记录当前访问所在条带序号的u值更新为I,将记录当前访问所在组序号的r的值更新为R,重复执行第2步到第4步。
地址 100081 北京市海淀区中关村南大街36号湖北大厦18层