CN106227463A - Raid模型、数据读写及其重建方法 - Google Patents
Raid模型、数据读写及其重建方法 Download PDFInfo
- Publication number
- CN106227463A CN106227463A CN201610538948.1A CN201610538948A CN106227463A CN 106227463 A CN106227463 A CN 106227463A CN 201610538948 A CN201610538948 A CN 201610538948A CN 106227463 A CN106227463 A CN 106227463A
- Authority
- CN
- China
- Prior art keywords
- raid
- data
- module
- kernel scheduling
- scheduling module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种RAID模型,包括:RAID核心校验模块,采用基于范德蒙矩阵的RS编码的Erasure code校验算法,支持N个数据块生成M个校验数据,RAID核心调度模块用于对RAID模型所有的数据读写操作进行统一调度;RAID核心调度模块通过调度算法选择N个正确的数据块,通过RAID核心校验模块计算出对应的M个校验数据;RAID核心I/O模块用于执行RAID的数据读写操作;RAID核心调度模块创建容纳所有数据的对象容器。本发明RAID核心调度模块对RAID所有的数据读写操作进行统一调度,无需用户缓存进行长度适配、可自定义校验个数、对待数据的态度是没有状态的、无需全盘重建、读写效率高。
Description
技术领域
本发明涉及RAID存储模式技术领域,尤其涉及一种RAID模型、数据读写及其重建方法。
背景技术
随着存储技术的复兴以及云计算时代的来临,存储产品已经深入到我们生活的方方面面,如何使数据更安全、存储地更高效、应用起来更方便是存储产品开发过程中都需要面临的事情。传统的RAID(Redundant Arrays of Independent Disks,磁盘阵列)5的存储模式是通过横向切割各个磁盘的空间来建立横向的空间存储模型,使得各个磁盘协同工作提升了存储效率,并且使用异或算法使得保存的数据拥有N+1的冗余备份。
RAID 5的数据切分方式是将所有的磁盘横向切分、每个磁盘上相同长度的数据块逻辑上横向拼接成的条带的数据结构,stripe cache(条带在内存中的缓冲)的长度是与磁盘数量成正比,例如,Stripe_cache_size=4k*working_disks_nr*chunk_size;但是,通常情况下,用户态的程序(尤其是在监控录像领域)都是一种追加写的输入,有音频也有视频,长度是用户态程序自身控制的,往往在这个buffer长度的匹配上会出现无法适配的情况,因此,RAID 5最大的一个限制是stripe cache(条带在内存中的缓冲)和用户态buffer的匹配程度。RAID 5在发现应用程序buffer和stripe cache不匹配的情况下,设置STRIPE_DELAYED标志位,将条带延期下发I/O,来期待后续的数据输入,这是一种被动的等待过程,对于单次I/O并无法做到stripe cache的匹配,无法高效I/O协作,存在RCW及RMW的写入放大等缺点。
另外,RAID5存在失效状态下中断用户写入并且无法读取剩余数据、全盘重建耗时耗I/O资源等诸多设计上的限制。
发明内容
针对上述技术中存在的不足之处,本发明提供一种RAID模型,RAID核心调度模块对RAID所有的数据读写操作进行统一调度,无需用户缓存进行长度适配、可自定义校验个数、对待数据的态度是没有状态的、无需全盘重建、读写效率高;
本发明还提供一种RAID模型的数据读写方法,RAID模型对待数据没有状态,RAID模型中可以被获取的数据会全部返回给用户程序而没有其他条件,即便磁盘丢失到只剩下1块,所剩磁盘上的数据依然可以被读出;
本发明还提供一种RAID模型的重建方法,是以对象容器为单元的数据块重建,原来所有的磁盘不需要全部参与重建,只针对有效数据进行重建,把丢失的有效数据重建到当前未分配空间中重新分配的部分空间,使得I/O资源更加合理。
为了实现根据本发明的这些目的和其它优点,本发明通过以下技术方案实现:
本发明提供一种RAID模型,包括:RAID核心校验模块,其采用基于范德蒙矩阵的RS编码的Erasure code校验算法;所述Erasure code校验算法支持N个数据块生成M个校验数据,RAID核心调度模块,其用于对RAID模型所有的数据读写操作进行统一调度;所述RAID核心调度模块通过调度算法选择N个正确的数据块,通过所述RAID核心校验模块计算出对应的M个校验数据;以及,RAID核心I/O模块,其用于执行RAID的数据读写操作;RAID核心调度模块调度所述RAID核心I/O模块依次写入所述N个正确的数据块和对应的所述M个校验数据;其中,所述RAID核心调度模块创建容纳所有数据的对象容器;所述对象容器包括容纳数据块的数据对象和容纳校验数据的校验对象。
优选的是,所述RAID核心调度模块提供追加写的数据写入接口。
优选的是,所述RAID核心I/O模块采用direct I/O模型对存储介质进行直接I/O访问。
优选的是,所述RAID核心I/O模块的数据读写操作采用异步非阻塞模型。
一种RAID模型的数据读写方法,所述RAID核心调度模块对RAID模型所有数据的写入操作进行统一调度,步骤如下:
S10,所述RAID核心调度模块创建容纳所有数据的对象容器;所述RAID核心调度模块对所述对象容器进行一一标记;
S11,所述RAID核心调度提供追加写的数据写入接口,用户通过该数据写入接口将数据块写入所述数据对象;所述RAID核心调度模块调度所述RAID核心校验模块对所述数据对象中所述数据块进行校验计算,得出对应的检验数据存储在所述校验对象中;
S12,所述RAID核心调度模块调度所述RAID核心I/O模块,将所述数据对象中的所述数据块和所述校验对象中的所述校验数据分别写入存储介质;
S13,存储介质写入成功后,所述RAID核心调度模块通知写入成功,并且返回此次写入操作涉及的所有所述对象容器的标记。
优选的是,用户通过该数据写入接口将数据块写入所述数据对象,所述数据块的大小由用户自定义。
优选的是,所述RAID核心调度模块对RAID模型所有数据的读取进行统一调度,步骤如下:
S20,所述RAID核心调度模块通过用户程序提供的标记,获取标记对应的对象容器;
S21,所述RAID核心调度模块调度所述RAID核心I/O模块,对每个所述对象容器中的所述数据块进行读取;
S22,若读取的所述数据块完整,则所述RAID核心调度模块直接返回该数据块;
S23,若读取的数据块不完整,则所述RAID核心调度模块调度所述RAID核心校验模块,所述RAID核心校验模块通过所述校验数据进行数据块恢复,数据块恢复后,重复步骤S21。
一种RAID模型的重建的方法,包括以下步骤:
S30,数据写入过程中,将已写入存储介质的所述数据块和所述校验数据定义为有效数据;将所述有效数据占用的存储空间标识为已分配空间,其他存储空间标识为未分配空间,则,所述未分配空间中的所有数据以及所述已分配空间中有效数据在被用户主动删除后均标识为无效数据;
S31,数据写入过程中,所述RAID核心调度模块建立所述对象容器与所述存储介质存储空间之间对应关系的查询表;
S32,数据重建时,所述RAID核心调度模块对所有所述有效数据进行查询判断,判断是否丢失;若丢失有效数据,则根据所述查询表确定该丢失的有效数据属于哪些对象容器;
S33,所述RAID核心调度模块对上述对象容器进行检查,依次判断每个对象容器中哪些有效数据丢失、哪些有效数据存在,所述RAID核心校验模块结合存在的有效数据计算出丢失的有效数据;若丢失的有效数据超过所述RAID核心校验模块的计算范围,则,该对象容器重建失败;
S34,所述RAID核心调度模块从未分配空间中分配出部分空间重新定义为已分配空间,所述RAID核心调度模块调度所述RAID核心I/O模块将计算出丢失的有效数据写入该重新定义的已分配空间并更新为有效数据;
S35,所述RAID核心调度模块重新检查所有所述对象容器与所有所述有效数据占用的存储空间之间的对应关系,以更新所述查询表。
本发明至少包括以下有益效果:
1)本发明提供的RAID模型,包括采用基于范德蒙矩阵的RS编码的Erasure code校验算法的RAID核心校验模块,整个校验计算和写入成功的过程中,N+M个磁盘的冗余数量为M个磁盘(M可用户自定义),冗余能力提高,冗余强度也可以由用户自定义;
2)RAID核心I/O模块均通过RAID核心调度模块的数据写入接口以追加写的方式写入,不需像RAID 5一样去考虑条带缓存和应用程序缓冲不匹配的问题,即写入的数据块及对应的校验数据可以是任意长度(4k的整数倍)且性能不会受到影响,数据块的长度大小由用户自定义,可以由用户指定当前数据块和对应的校验数据是否已经写入完毕;整个写入操作由RAID模块的RAID核心调度模块来进行统一调度,I/O协作高效;
3)RAID核心I/O模块采用direct I/O模型对存储介质进行直接I/O访问,不通过操作系统缓存,I/O效率高;
4)RAID核心I/O模块的数据读写操作采用异步非阻塞模型,用户程序不产生任何阻塞,当I/O完成了之后会通过异步回调通知用户程序进行处理;
5)direct I/O的本质是同步阻塞I/O,RAID核心I/O模块的数据读写操作在采用异步非阻塞模型后,就成为了异步非阻塞机制,对上层应用来说大大提升了性能,可以显著提升I/O的数据吞吐量;
6)RAID核心调度模块创建容纳所有数据的对象容器,通过若干个对象容器,实现对所有数据进行扁平化处理,区别于RAID 5的条带化数据管理,容纳在每个对象容器中数据对象的每个数据块可以是任意长度且多个数据块的相互长度可以不同,数据块的大小由用户自定义;
7)RAID核心调度模块对若干个对象容器进行一一标记,RAID核心调度模块通知写入成功后返回此次写入操作涉及的所有对象容器的标记;标记操作为后期数据的读取可识别性做准备;
8)本发明提供的RAID模型的数据读写方法,若一个数据块不完整且超过校验范围(整个RAID 5丢失2块或者2块以上的组成盘时,无法通过校验算法计算出来),RAID核心调度模块仍然通过数据写入时返回的标记获取对应的对象容器、调度RAID核心I/O模块对该对象容器中的数据块进行读取,RAID模型对待数据没有状态,RAID模型中可以被获取的数据会全部返回给用户程序而没有其他条件,即便磁盘丢失到只剩下1块,所剩磁盘上的数据依然可以被读出;
9)本发明提供的RAID模型的重建方法,是以对象容器为单元的数据块重建,原来所有的磁盘不需要全部参与重建,只针对有效数据进行重建,把丢失的有效数据重建到当前未分配空间中重新分配的部分空间,使得I/O资源更加合理;新加入的磁盘会作为新的可用空间来正常使用,新加入的磁盘不会是I/O写入热点。
本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。
附图说明
图1为本发明所述的RAID模型的示意图;
图2为本发明所述的基于范德蒙矩阵的RS编码的Erasure code校验算法进行校验的示意图;
图3为本发明所述的RAID核心调度模块对RAID模型所有数据的写入操作进行统一调度的方法流程图;
图4为本发明所述的RAID核心调度模块对RAID模型所有数据的读取操作进行统一调度的方法流程图;
图5为本发明所述的RAID模型的重建方法的流程图;
图6(a)至图6(d)为本发明所述的实施例1的示意图;
图7(a)至图7(c)为本发明所述的实施例2的示意图。
具体实施方式
下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
应当理解,本文所使用的诸如“具有”、“包含”以及“包括”术语并不配出一个或多个其它元件或其组合的存在或添加。
<实施方式1>
本发明提供一种新式存储模式的RAID模型,如图1所示,该RAID模型包括:RAID核心校验模块,其采用基于范德蒙矩阵的RS编码的Erasure code校验算法;所述Erasurecode校验算法支持N个数据块生成M个校验数据,RAID核心调度模块,其用于对RAID模型所有的数据读写操作进行统一调度;所述RAID核心调度模块通过调度算法选择N个正确的数据块,通过所述RAID核心校验模块计算出对应的M个校验数据;以及,RAID核心I/O模块,其用于执行RAID的数据读写操作;RAID核心调度模块调度所述RAID核心I/O模块依次写入所述N个正确的数据块和对应的所述M个校验数据;写入成功后,RAID核心调度模块发出N个正确的数据块被成功写入的通知。其中,所述RAID核心调度模块创建容纳所有数据的对象容器;所述对象容器包括容纳数据块的数据对象和容纳校验数据的校验对象。
RAID 5通过XOR(exclusive OR,异或)算法来计算校验的,只能实现1个磁盘的冗余,即便是RAID 6通过复杂的伽罗瓦域矩阵算法也只能有2个磁盘的冗余,但是,相对于RAID5来说,其付出的代价是算法复杂、降低I/O性能。本发明提供的RAID模型,其RAID核心校验模块采用基于范德蒙矩阵的RS编码的Erasure code校验算法;Erasure code校验算法进行校验的原理如图2所示:假设D是数据块,有D1、D2、、、D5共5个数据块,将数据D矩阵乘以一个B矩阵,B矩阵由N*N单位矩阵和M*N的范德蒙矩阵(基于伽罗瓦域),得到一个新的(N+M)*1的D+C矩阵,其实C1、C2、C3就是Erasure code的校验码。因此,Erasure code校验算法可支持N个数据块生成M个校验数据,那么,本发明的RAID核心调度模块通过调度算法选择N个正确的数据块后,通过RAID核心校验模块可以计算出N个正确的数据块对应的M个校验数据;通过RAID核心I/O模块依次写入N个数据块和M个校验数据;写入成功后,RAID核心调度模块发出N个正确的数据块被成功写入的通知。整个校验计算和写入成功的过程中,N+M个磁盘的冗余数量为M个磁盘(M可用户自定义,图2给出了N=5、M=3的示例),相对于传统的RAID 5的1个磁盘冗余或RAID 6的两个磁盘冗余,冗余能力提高,冗余强度也可以由用户自定义,是高度可定制的方案。RAID模型基于Erasure code校验算法的校验计算使用intel的sse(Streaming SIMD Extensions,单指令多数据流扩展)指令集进行加速,性能显著优于XOR算法。
本发明提供的RAID模型,RAID核心调度模块提供追加写的数据写入接口。所有的数据块以及对应的校验数据,RAID核心I/O模块均通过RAID核心调度模块的数据写入接口以追加写的方式写入,而不需像RAID 5一样去考虑条带缓存和应用程序缓冲不匹配的问题,即写入的数据块及对应的校验数据可以是任意长度(4k的整数倍)且性能不会受到影响,数据块的长度大小由用户自定义,对应的校验数据的长度由RAID核心校验模块的Erasure code校验算法根据该数据块计算决定;并且,可以由用户指定当前数据块和对应的校验数据是否已经写入完毕;整个写入操作由RAID模块的RAID核心调度模块来进行统一调度,I/O协作高效。
上述实施方式中,RAID核心调度模块创建容纳所有数据的对象容器为若干个,每个对象容器包括容纳数据块的数据对象和容纳校验数据的校验对象,RAID核心调度模块对若干个对象容器进行管理;这里,通过对象容器,实现对所有数据进行扁平化处理,区别于RAID 5的条带化数据管理,容纳在每个对象容器中数据对象的每个数据块可以是任意长度且多个数据块的相互长度可以不同,数据块的大小由用户自定义。
作为上述实施方式的优选,RAID核心I/O模块采用direct I/O模型对存储介质进行直接I/O访问,不通过操作系统缓存,I/O效率高。
作为最优实施方式,RAID核心I/O模块的数据读写操作还采用异步非阻塞模型,也就是说,用户程序不产生任何阻塞,当I/O完成了之后会通过异步回调通知用户程序进行处理;对于direct I/O来说,本质是同步阻塞I/O,若RAID核心I/O模块的数据读写操作还采用异步非阻塞模型后,就成为了异步非阻塞机制,对上层应用来说大大提升了性能,可以显著提升I/O的数据吞吐量。
<实施方式2>
在实施方式1的基础上,本发明提供一种RAID模型的数据读写方法,包括步骤:RAID核心调度模块对RAID模型所有数据的写入操作进行统一调度,如图3所示,具体包括步骤如下:
S10,RAID核心调度模块创建容纳所有数据的对象容器;RAID核心调度模块对对象容器进行一一标记;
S11,RAID核心调度提供追加写的数据写入接口,用户通过该数据写入接口将数据块写入数据对象;RAID核心调度模块调度RAID核心校验模块对数据对象中数据块进行校验计算,得出对应的检验数据存储在校验对象中;
S12,RAID核心调度模块调度RAID核心I/O模块,将数据对象中的数据块和校验对象中的校验数据分别写入存储介质;
S13,存储介质写入成功后,RAID核心调度模块通知写入成功,并且返回此次写入操作涉及的所有对象容器的标记。
上述实施方式中,RAID核心调度模块创建容纳所有数据的对象容器为若干个,每个对象容器包括容纳数据块的数据对象和容纳校验数据的校验对象,RAID核心调度模块对若干个对象容器进行管理;这里,通过对象容器,实现对所有数据进行扁平化处理,区别于RAID 5的条带化数据管理,容纳在每个对象容器中数据对象的每个数据块可以是任意长度且多个数据块的相互长度可以不同,数据块的大小由用户自定义;对象容器的创建,配合追加写,无需像RAID 5一样去考虑条带缓存和应用程序缓冲不匹配的问题。RAID核心调度模块对若干个对象容器进行一一标记,RAID核心调度模块通知写入成功后返回此次写入操作涉及的所有对象容器的标记;标记操作为后期数据的读取可识别性做准备。
上述实施方式中,RAID模型的数据读写方法,如图4所示,还包括步骤:RAID核心调度模块对RAID模型所有数据的读取进行统一调度,具体如下:
S20,所述RAID核心调度模块通过用户程序提供的标记,获取标记对应的对象容器;
S21,RAID核心调度模块调度RAID核心I/O模块,对每个对象容器中的数据块进行读取;
S22,若读取的数据块完整,则RAID核心调度模块直接返回该数据块;
S23,若读取的数据块不完整,则RAID核心调度模块调度RAID核心校验模块,RAID核心校验模块通过校验数据进行数据块恢复,数据块恢复后,重复步骤S21。
由于数据块的大小由用户自定义,所以,RAID核心调度模块调度RAID核心I/O模块进行数据块读取时,结合每个对象容器对应返回的标记,将该标记内每个数据块的当前长度与各自预先的自定义长度进行对比,以判断当前读取的数据块长度是否完整。若完整,直接返回该数据块。若不完整,则数据块可能丢失或损坏,RAID核心调度模块调度RAID核心校验模块,RAID核心校验模块通过校验数据进行数据块恢复,数据块恢复后,RAID核心I/O模块重新进行读取操作。每个对象容器对应返回的标记,使得该对象容器内的数据块的读取具有可识别性,且读取准确率高。
这里需要说明的是,若一个数据块不完整且超过校验范围(整个RAID 5丢失2块或者2块以上的组成盘时,无法通过校验算法计算出来),在RAID 5中视为失效,在失效状态下,所有的I/O请求都不会被执行,没办法写入和读取,在视频监控领域,这对海量的监控录像数据来说无疑是不合适的,少数磁盘的损坏不应该影响剩余数据的获取。而本发明提供的RAID模型的数据读写方法,RAID核心调度模块仍然通过数据写入时返回的标记获取对应的对象容器、调度RAID核心I/O模块对该对象容器中的数据块进行读取,且通过追加写方式写入的数据块的大小是自定义的,不需要像RAID 5进行条带式切分,所以,RAID模型对待数据没有状态,RAID模型中可以被获取的数据会全部返回给用户程序而没有其他条件,即便磁盘丢失到只剩下1块,所剩磁盘上的数据依然可以被读出,对于视频监控领域的监控录像和海量流数据的应用来说具有较大的便捷:即便丢失了部分录像,但是大部分的录像依然可以被读取和回放,对监控业务的可用性和健壮性具有长足的提升。
<实施方式3>
在实施方式2的基础上,本发明提供一种RAID模型的重建方法,如图5所示,包括以下步骤:
S30,数据写入过程中,将已写入存储介质的数据块和校验数据定义为有效数据;将有效数据占用的存储空间标识为已分配空间,其他存储空间标识为未分配空间,则,未分配空间中的所有数据以及已分配空间中有效数据在被用户主动删除后均标识为无效数据;
S31,数据写入过程中,RAID核心调度模块建立对象容器与存储介质存储空间之间对应关系的查询表;
S32,数据重建时,RAID核心调度模块对所有有效数据进行查询判断,判断是否丢失;若丢失有效数据,则根据查询表确定该丢失的有效数据属于哪些对象容器;
S33,RAID核心调度模块对上述对象容器进行检查,依次判断每个对象容器中哪些有效数据丢失、哪些有效数据存在,RAID核心校验模块结合存在的有效数据计算出丢失的有效数据;若丢失的有效数据超过RAID核心校验模块的计算范围,则,该对象容器重建失败;
S34,RAID核心调度模块从未分配空间中分配出部分空间重新定义为已分配空间,RAID核心调度模块调度RAID核心I/O模块将计算出丢失的有效数据写入该重新定义的已分配空间并更新为有效数据;
S35,RAID核心调度模块重新检查所有对象容器与所有有效数据占用的存储空间之间的对应关系,以更新查询表。
传统RAID 5在丢失一块组成盘后会进入降级状态,通过新增一块磁盘进行RAID5全盘重建,尝试重新进入校验完善的状态。在这个过程中,RAID 5会读取降级部分的所有数据,重新计算校验写入到组成盘中,整个过程时长依赖于磁盘容量,非常消耗时间和I/O资源。本发明的上述实施方式中,存储容量的增加和减少对应的是对象容器数量的增加和减少,因此,RAID模型的重建方法,是以对象容器为单元的数据块重建。RAID核心调度模块从未分配空间中分配出部分空间重新定义为已分配空间,RAID核心调度模块调度RAID核心I/O模块将计算出丢失的有效数据写入该重新定义的已分配空间并更新为有效数据;即把丢失的有效数据重建到当前未分配空间中重新分配的部分空间;新加入的磁盘会作为新的可用空间来正常使用。这样就带来了几个好处:1)新加入的磁盘不会是I/O写入热点;2)原来所有的磁盘不需要全部参与重建,只针对有效数据进行重建,使得I/O资源更加合理。
<实施例1>
在实施方式1、2、3的基础上,本实施例给出便于理解RAID模型及其数据读写方法的例子,以下例子均与传统的RAID 5进行比较。
由图6(a)的RAID 5可知,假设以4k为一个数据块的长度、一个条带长度为64k,则,RAID 5的A、B、C、D四个磁盘中,从A磁盘开始、依条带依次写入。如想写入目标数据块a、b、c,则需要在A磁盘中对应写入数据块a、b、c共12k的数据容量,对应的校验数据为P(a,b,c)。此时,写入的数据只覆盖磁盘A,未写满一个条带64k的数据容量,RAID 5需要重新计算校验,这时候会通过RCW算法读取B磁盘12k数据、C磁盘12k数据和A磁盘中待写入的12k数据进行重新校验计算,得到新的校验数据P’(a,b,c),大小为12k。最后,将A磁盘中待写入的12k数据写入A磁盘,将计算得到的12k新的校验数据P’(a,b,c)写入磁盘D。于是,一共发生了B磁盘12k和C磁盘12k共24k的读取操作、待写入的12k数据写入A磁盘和12k新校验数据P’(a,b,c)写入磁盘D共24k的写入操作。
由图6(b)所示,本发明提供的RAID模型,假设用户自定义4k为一个数据块的长度,从A磁盘开始,通过追加写的数据接口,RAID核心I/O模块将A、B、C各个磁盘依次对应写入4k数据a、b、c;根据RAID核心校验模块,结合A、B、C各个磁盘4k数据,计算出对应的4k的校验数据P’(a,b,c),RAID核心调度模块调度RAID核心I/O模块采用追加写的方式,将计算出的4k校验数据P’(a,b,c)写入D盘,实际发生16k的数据写入。由此可见,读写操作效率显著提高。
又由于RAID核心调度模块调度创建对象容器并追加写,无需受传统的条带划分约束,4k数据a、b、c以及4k校验数据P’(a,b,c)还可以如图6(c)和图(d)形式的进行写入。
还需要说明的是,如图6(c)所示,若此时B磁盘和C磁盘同时损坏,对于RAID 5,则失效,无法进行数据读取或写入;对于本发明的RAID模型,B磁盘和C磁盘同时损坏,A磁盘数据块a、b、c的读取或A磁盘的其他未分配空间的数据写入并未受影响。
<实施例2>
在实施方式1、2、3以及实施例1的基础上,本实施例给出便于理解RAID模型重建方法的例子,以下例子均与传统的RAID 5进行比较。
本发明提供的RAID模型的A盘、B盘、C盘、D盘各自第一行分别对应写入数据块a、b、c、d,a、b、c、d数据块均为有效数据;则数据块的读取对应为obj(A1,B1,C1,D1)。
若丢失一个磁盘B,如图7(a)所示,若B盘丢失,RAID模型的RAID核心调度模块判断出有效数据块b丢失并查询表确定该丢失的有效数据b属于哪些对象容器;RAID核心调度模块调度RAID核心校验模块进行校验计算得出校验数据,再根据校验数据恢复出有效数据b,RAID核心I/O模块通过追加写的方式,可以将数据b写入A、B、C三个盘中任意一个盘中未分配空间,如将A磁盘中未分配空间的第二行重新定义为已分配空间,并写入b,则重建后新的数据块的读取对应为obj(A1,A2,C1,D1)。
若丢失一个磁盘C,如图7(b)所示,若C盘丢失,RAID模型的RAID核心调度模块判断出没有有效数据丢失,那么,C盘的丢失不需要重建。
若丢失一个磁盘A,如图7(c)所示,若A盘丢失,因为A盘的所有有效数据a、b、c全部丢失,RAID核心调度模块调度RAID核心校验模块进行校验计算无法算出相应的校验数据,也就无法恢复各个数据,重建失败,只有返回其他盘的剩余数据。
尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用。它完全可以被适用于各种适合本发明的领域。对于熟悉本领域的人员而言可容易地实现另外的修改。因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。
Claims (8)
1.一种RAID模型,其特征在于,包括:
RAID核心校验模块,其采用基于范德蒙矩阵的RS编码的Erasure code校验算法;所述Erasure code校验算法支持N个数据块生成M个校验数据,
RAID核心调度模块,其用于对RAID模型所有的数据读写操作进行统一调度;所述RAID核心调度模块通过调度算法选择N个正确的数据块,通过所述RAID核心校验模块计算出对应的M个校验数据;以及,
RAID核心I/O模块,其用于执行RAID的数据读写操作;RAID核心调度模块调度所述RAID核心I/O模块依次写入所述N个正确的数据块和对应的所述M个校验数据;
其中,所述RAID核心调度模块创建容纳所有数据的对象容器;所述对象容器包括容纳数据块的数据对象和容纳校验数据的校验对象。
2.如权利要求1所述的RAID模型,其特征在于,所述RAID核心调度模块提供追加写的数据写入接口。
3.如权利要求1所述的RAID模型,其特征在于,所述RAID核心I/O模块采用direct I/O模型对存储介质进行直接I/O访问。
4.如权利要求1所述的RAID模型,其特征在于,所述RAID核心I/O模块的数据读写操作采用异步非阻塞模型。
5.一种如权利要求1-4中任一项所述的RAID模型的数据读写方法,其特征在于,所述RAID核心调度模块对RAID模型所有数据的写入操作进行统一调度,步骤如下:
S10,所述RAID核心调度模块创建容纳所有数据的对象容器;所述RAID核心调度模块对所述对象容器进行一一标记;
S11,所述RAID核心调度提供追加写的数据写入接口,用户通过该数据写入接口将数据块写入所述数据对象;所述RAID核心调度模块调度所述RAID核心校验模块对所述数据对象中所述数据块进行校验计算,得出对应的检验数据存储在所述校验对象中;
S12,所述RAID核心调度模块调度所述RAID核心I/O模块,将所述数据对象中的所述数据块和所述校验对象中的所述校验数据分别写入存储介质;
S13,存储介质写入成功后,所述RAID核心调度模块通知写入成功,并且返回此次写入操作涉及的所有所述对象容器的标记。
6.如权利要求5所述的RAID模型的数据读写方法,其特征在于,用户通过该数据写入接口将数据块写入所述数据对象,所述数据块的大小由用户自定义。
7.如权利要求5或6所述的RAID模型的数据读写方法,其特征在于,所述RAID核心调度模块对RAID模型所有数据的读取进行统一调度,步骤如下:
S20,所述RAID核心调度模块通过用户程序提供的标记,获取标记对应的对象容器;
S21,所述RAID核心调度模块调度所述RAID核心I/O模块,对每个所述对象容器中的所述数据块进行读取;
S22,若读取的所述数据块完整,则所述RAID核心调度模块直接返回该数据块;
S23,若读取的数据块不完整,则所述RAID核心调度模块调度所述RAID核心校验模块,所述RAID核心校验模块通过所述校验数据进行数据块恢复,数据块恢复后,重复步骤S21。
8.一种应用如权利要求5-7中任一项所述的RAID模型的数据读写方法进行重建的方法,其特征在于,包括以下步骤:
S30,数据写入过程中,将已写入存储介质的所述数据块和所述校验数据定义为有效数据;将所述有效数据占用的存储空间标识为已分配空间,其他存储空间标识为未分配空间,则,所述未分配空间中的所有数据以及所述已分配空间中有效数据在被用户主动删除后均标识为无效数据;
S31,数据写入过程中,所述RAID核心调度模块建立所述对象容器与所述存储介质存储空间之间对应关系的查询表;
S32,数据重建时,所述RAID核心调度模块对所有所述有效数据进行查询判断,判断是否丢失;若丢失有效数据,则根据所述查询表确定该丢失的有效数据属于哪些对象容器;
S33,所述RAID核心调度模块对上述对象容器进行检查,依次判断每个对象容器中哪些有效数据丢失、哪些有效数据存在,所述RAID核心校验模块结合存在的有效数据计算出丢失的有效数据;若丢失的有效数据超过所述RAID核心校验模块的计算范围,则,该对象容器重建失败;
S34,所述RAID核心调度模块从未分配空间中分配出部分空间重新定义为已分配空间,所述RAID核心调度模块调度所述RAID核心I/O模块将计算出丢失的有效数据写入该重新定义的已分配空间并更新为有效数据;
S35,所述RAID核心调度模块重新检查所有所述对象容器与所有所述有效数据占用的存储空间之间的对应关系,以更新所述查询表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610538948.1A CN106227463B (zh) | 2016-07-11 | 2016-07-11 | Raid、数据读写及其重建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610538948.1A CN106227463B (zh) | 2016-07-11 | 2016-07-11 | Raid、数据读写及其重建方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106227463A true CN106227463A (zh) | 2016-12-14 |
CN106227463B CN106227463B (zh) | 2019-06-14 |
Family
ID=57518963
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610538948.1A Active CN106227463B (zh) | 2016-07-11 | 2016-07-11 | Raid、数据读写及其重建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106227463B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107678694A (zh) * | 2017-10-17 | 2018-02-09 | 深圳大普微电子科技有限公司 | Raid条带重建方法及固态盘 |
CN113297000A (zh) * | 2021-05-20 | 2021-08-24 | 山东云海国创云计算装备产业创新中心有限公司 | 一种raid编码电路及编码方法 |
CN113986151A (zh) * | 2021-12-29 | 2022-01-28 | 南京奥看信息科技有限公司 | 一种高性能视频流连续录制存储方法 |
WO2023184921A1 (zh) * | 2022-03-30 | 2023-10-05 | 苏州浪潮智能科技有限公司 | 一种raid编解码方法、装置、设备及非易失性可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100083069A1 (en) * | 2008-06-18 | 2010-04-01 | John Johnson Wylie | Selecting Erasure Codes For A Fault Tolerant System |
CN102012792A (zh) * | 2010-11-02 | 2011-04-13 | 华中科技大学 | 一种快速重构的raid-6编码及重构方法 |
CN102460439A (zh) * | 2009-04-30 | 2012-05-16 | 网络存储技术公司 | 通过条带式文件系统中的容量平衡进行数据分布 |
CN103797455A (zh) * | 2013-11-06 | 2014-05-14 | 华为技术有限公司 | 存储文件的方法和装置 |
CN104885056A (zh) * | 2012-12-31 | 2015-09-02 | 华为技术有限公司 | 高效高可用性存储系统 |
-
2016
- 2016-07-11 CN CN201610538948.1A patent/CN106227463B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100083069A1 (en) * | 2008-06-18 | 2010-04-01 | John Johnson Wylie | Selecting Erasure Codes For A Fault Tolerant System |
CN102460439A (zh) * | 2009-04-30 | 2012-05-16 | 网络存储技术公司 | 通过条带式文件系统中的容量平衡进行数据分布 |
CN102012792A (zh) * | 2010-11-02 | 2011-04-13 | 华中科技大学 | 一种快速重构的raid-6编码及重构方法 |
CN104885056A (zh) * | 2012-12-31 | 2015-09-02 | 华为技术有限公司 | 高效高可用性存储系统 |
CN103797455A (zh) * | 2013-11-06 | 2014-05-14 | 华为技术有限公司 | 存储文件的方法和装置 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107678694A (zh) * | 2017-10-17 | 2018-02-09 | 深圳大普微电子科技有限公司 | Raid条带重建方法及固态盘 |
CN107678694B (zh) * | 2017-10-17 | 2019-02-05 | 深圳大普微电子科技有限公司 | Raid条带重建方法及固态盘 |
CN113297000A (zh) * | 2021-05-20 | 2021-08-24 | 山东云海国创云计算装备产业创新中心有限公司 | 一种raid编码电路及编码方法 |
CN113297000B (zh) * | 2021-05-20 | 2022-12-23 | 山东云海国创云计算装备产业创新中心有限公司 | 一种raid编码电路及编码方法 |
CN113986151A (zh) * | 2021-12-29 | 2022-01-28 | 南京奥看信息科技有限公司 | 一种高性能视频流连续录制存储方法 |
WO2023184921A1 (zh) * | 2022-03-30 | 2023-10-05 | 苏州浪潮智能科技有限公司 | 一种raid编解码方法、装置、设备及非易失性可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106227463B (zh) | 2019-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105468293B (zh) | 通过预测损坏的m-页提高闪存利用率的方法和系统 | |
US9128846B2 (en) | Disk array device, control device and data write method | |
US6704837B2 (en) | Method and apparatus for increasing RAID write performance by maintaining a full track write counter | |
US10896089B2 (en) | System level data-loss protection using storage device local buffers | |
US9104342B2 (en) | Two stage checksummed raid storage model | |
US20160217040A1 (en) | Raid parity stripe reconstruction | |
US9563511B1 (en) | Performing input/output operations on a set of storage devices based on scalable input/output credits | |
CN106227463A (zh) | Raid模型、数据读写及其重建方法 | |
US10353787B2 (en) | Data stripping, allocation and reconstruction | |
US20160062674A1 (en) | Data storage architecture for storing metadata with data | |
CN105960639A (zh) | 分布式存储系统中的优先化数据重构 | |
Curry et al. | Gibraltar: A Reed‐Solomon coding library for storage applications on programmable graphics processors | |
JP2006244122A (ja) | 記憶装置、その制御方法及びプログラム | |
US6378038B1 (en) | Method and system for caching data using raid level selection | |
US10430336B2 (en) | Lock-free raid implementation in multi-queue architecture | |
TW201113705A (en) | Wear leveling of solid state disks distributed in a plurality of redundant array of independent disk ranks | |
CN103703440A (zh) | 预取用于使更新轨道离台的数据轨道和奇偶校验数据 | |
US10564865B2 (en) | Lockless parity management in a distributed data storage system | |
CN104679442A (zh) | 一种提高磁盘阵列性能的方法及装置 | |
CN107787485B (zh) | 多读取和写入端口存储器 | |
CN102799533A (zh) | 一种磁盘损坏扇区屏蔽方法及装置 | |
CN103914402A (zh) | 一种基于纠删码缓存的重构优化方法 | |
TW201423376A (zh) | 資料儲存與重建的方法與系統 | |
CN108958656A (zh) | 基于raid5固态硬盘阵列的动态条带系统设计方法 | |
TW202014884A (zh) | 利用非揮發性固定記憶體的區塊元件介面 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |