在基于闪存的存储系统中构建RAID的方法及系统与流程

文档序号:12757314阅读:417来源:国知局
在基于闪存的存储系统中构建RAID的方法及系统与流程
本发明涉及一种在基于闪存的存储系统中构建RAID的方法,以及应用该方法的系统。

背景技术:
基于闪存(NANDFlash)的数据存储技术在过去十几年发展迅速,在很多应用中逐渐取代了传统的磁记录硬盘(harddiskdrive,HDD)。主要原因有:速度快:基于闪存的数据存储不象传统HDD依靠磁头机械寻址,从而在数据读写速度上有本质性的提高,满足了应用对数据存储吞吐速度的日趋严格的需求。价格下降:随着半导体技术的进步,闪存的容量也随着摩尔定律每不到两年增加一倍,单位容量价格也随着下降。目前MLC的闪存每GB的价格已从5年前的$10USD/GB降至现在的低于$1USD/GB。控制器技术进步:闪存需要匹配的控制器(controller)才能与主机(host)通信实现数据存储读写。控制器技术的成熟促进了基于闪存的固态存储技术在越来越多的领域找到相应的应用,包括在高端的数据中心及移动智能电话中的应用。闪存控制器是固态硬盘(SSD)系统中最核心的部分,它的性能及功能直接决定了该SSD的性能和功能,也是消费类SSD与企业级SSD最本质的区别。由于数据保护的要求,冗余校验码(RAID)的计算和写入是企业级应用所必备的。由于闪存的价格较高,镜像等RAID方法(即RAID-1)在通常应用环境下不可接受。通常在SSD中使用的方法是RAID5,即n个数据块产生1个校验块(n>>2)。如果数据为D0,D1,…,Dn的话,奇偶校验码即为D0,D1,…,Dn的异或P=D0^D1^...^Dn。本发明将以RAID5的数据结构为例子。需要指出的是该方法与系统也可以应用于其它RAID的结构,如RAID6。闪存的一大特性是其不可重写性:保存在闪存中的一页(page)数据必需要经过其页面所在的整个块(block)擦除之后才可以写入新的数据。这对闪存转换层(FTL)带来了挑战,但对RAID带来了机遇,RAID的附加写放大不再存在。在SSD中实现动态RAID的方法在中国专利申请201210256754.4“基于非易失性存储器的动态独立冗余阵列存储系统及方法”中有详尽描述。SSD下的RAID5数据结构如图1所示,数据块D0,D1,D2,D3组成一个RAID数据带,D0,D1,D2,D3异或后产生奇偶校验码D4。在通常情况下,D0,D1,D2,D3和D4分别存储在不同的闪存单元,既LUN(logicUnitNumber)中,以确保在任何一个闪存LUN失效的情况下数据能通过异或操作进行恢复。当前,市场上的SSD主要分为两种,一种是通常不带RAID5功能的消费类的SSD;另一种是包含RAID5功能的企业级SSD,但其在读写混合下性能不尽如人意。为了达到高性能,需要使用完全为闪存控制量身定做的大规模并行多核多线程控制器,对每一块闪存芯片(LUN)做独立并行操作。RAID5计算和写入要考虑如下因素:从主机传来的数据是乱序的,后发的指令可能先执行;从主机传来的数据是交织的,一个数据块没有传完,另一个数据块已开始传送,并部分先期到达;奇偶校验码的写入是异步的:充任校验设备的闪存需要写入的时候校验码未必准备好,校验码准备好时控制此闪存的读写处理单元未必准备就绪;不同应用下对RAID5的宽度(既组成一个RAID数据带的数据块的数量,或者闪存LUN的数量)不同;一个读写处理单元可能控制多个闪存芯片,带来更多死锁的可能,从而加大了调度的难度。本发明所要解决的技术问题包括:如何降低RAID5计算所造成的性能代价,以达到如SSD的存储系统的高性能要求;如何减少RAID5的逻辑面积,以适应如SSD的存储系统的控制单元的小型化。技术方案本发明提供一种在基于闪存的存储系统中构建RAID5的方法,能够在非常小的逻辑面积和近似忽略不计的时间内实现RAID5功能,使得如企业级SSD的存储系统的功能和性能实现统一,所述方法包括:将校验码编程指令提交给RAID处理器,由RAID处理器的读写处理单元读取当前数据带中的部分数据块,设置数据块指针,分别对应于每个闪存单元,记录当前数据块的输入位置,将读写处理单元读取的数据块部分根据当前数据块指针的位置计算奇偶校验码,并将结果写回奇偶校验码缓存器,数据块指针增加输入部分数据块的长度值,在对应于一个闪存单元的所有数据块处理完成之后,即数据块指针回绕归零时,数据块处理完成数量加一,当所记录的数据块处理完成数量达到RAID数据带所包含的数据块数量之和时,奇偶校验码缓存器内的数据被写入相应的闪存单元,当所有校验码被取走后,校验码缓存器清零,开始下一个RAID数据带的计算,直到数据处理完毕。此外,校验码的编程指令必须在当前RAID数据带的所有数据编程指令提交之后,下一RAID数据带的数据编程指令之前发出。进一步,在每一输入的部分数据块内加入了一个标签,标明处理该数据块的读写处理单元、该数据块所面向的RAID处理器、该数据块所属的RAID数据带。还有,RAID处理器向所有的读写处理单元广播一个短消息,用来防止读写处理单元跨越RAID数据带,短消息包含如下信息:当前此RAID处理器所允许读写处理单元读的数据带号;当前此RAID处理器的校验码是否可以被读出。一个读写处理单元可以控制多个闪存单元,当读写处理单元发现下一个操作暂时为非法操作时,切换到其他线程,对另一闪存单元芯片操作。本发明还提供一种构建有RAID5的基于闪存的存储系统,所述系统包括:一个或多个RAID处理器和多个闪存单元,其中,RAID处理器包括多个读写处理单元、数据块指针单元、数据块计数器、奇偶校验码缓存器,一个读写处理单元控制一个或多个闪存单元,将校验码的编程指令提交给RAID处理器,指令提交由源至于主机的驱动发起,或是由固件发起,读写处理单元读取当前数据带中的数据块,数据块指针单元用于分别对每个闪存记录当前数据块的输入位置,数据块计数器用于对所处理的数据块数量进行记数,奇偶校验码缓存器用于缓存奇偶校验码,读写处理单元读取相应部分数据块,根据当前数据指针的位置与奇偶校验码缓存器内的数据进行奇偶校验码的计算操作,并将结果写回奇偶校验码缓存器,当计算操作完成后,数据块指针单元为数据块指针增加输入数据的长度值,移动对应的数据块指针,数据块计数器在对应于一个闪存单元的数据块处理完成之后,即数据块指针回绕归零时,加一,当数据块计数器所记录的数据块数量达到RAID数据带所包含的数据块数量时,奇偶校验码缓存器内的数据被写入相应的闪存单元,当所有校验码被取走后,缓存器清零,开始下一个RAID数据带的计算,直到数据处理完毕。此外,所述RAID处理器还包括RAID短消息单元,用于向所有的读写处理单元广播一个短消息,用来防止读写处理单元跨越RAID数据带,短消息包含如下信息:当前此RAID处理器所允许读写处理单元读的数据带号;当前此RAID处理器的校验码是否可以被读出。一个读写处理单元可以控制多个闪存单元,当读写处理单元发现下一个操作暂时为非法操作时,切换到其他线程,对另一闪存单元芯片操作。还有,校验码的编程指令必须在当前RAID数据带的所有数据编程指令提交之后,下一RAID数据带的数据编程指令之前发出。本发明通过锁和消息传递对线程之间和读写处理单元相互之间的执行次序进行调度,使得RAID5的计算和正确写入成为可能;并利用简单规则,在指令的提交和执行是异步和乱序的情况下,使得在遵循这一规则下提交的指令不发生死锁。本发明实现了动态可配置的RAID5宽度,满足应用的需要,并且最大程度维持了每一个读写处理单元的独立自主,从而实现了性能的最大化。综上所述,本发明的优点在于:RAID奇偶校验码由多个数据块异或后产生,每一数据块存储于独立存储单元;参与RAID计算的每一数据块分至少分为两部分输入RAID处理器,而属于不同数据块的部分数据以时分交织的方式输入RAID处理器;RAID处理器在属于该RAID组的所有数据块输入完成后,将输出奇偶校验码;数据块部分输入位置由相应指针记录输入位置,以容纳在RAID组内交织、乱序和分段部分数据输入;采用数据块计数器允许可调节的RAID组内数据块的数量;RAID处理器采短消息广播方式调度多个闪存读写处理单元,防止读写处理单元跨RAID组的操作;RAID校验码可以在完成计算的数据段部分输出,而不需等待整个RAID组的所有数据输入之后输出。附图说明图1示出了SSD下的RAID5的数据结构;图2示出了一种数据块数据乱序和交织输入的示例图;图3示出了本发明在RAID处理器内中记录数据输入位置的指针位置示意图;图4示出了根据本发明应用RAID5的基于闪存的存储系统的结构框图;图5示出了根据本发明应用多个RAID处理器的基于闪存的存储系统的结构框图。具体实施方式由于RAID数据带的多个数据块D0、D1、D2…各自分别对应于不同的闪存存储单元LUN,各数据块将由相应的读写处理单元处理。为实现并行化处理,最大化系统性能,在本发明的构建RAID方法中,将允许数据块的输入实现交织和乱序输入。图2示出了一种数据块数据乱序和交织输入的示例情况。其中,D0、D1和D2分别代表RAID数据带中的数据块,而Part0、Part1、Part2……表数据块中的部分数据,可能是64byte、1Kbyte、或其它任意长度的数据(小于或等于数据块D的长度)。例如,D2Part0代表数据块D2的第一部分数据,而D1Part2代表数据块D1的第三部分数据。RAID5的计算目的是高效地获得D0,D1,D2,…等数据块的异或奇偶校验码。其基于以下事实实现:·异或操作存在交换律,所以次序颠倒的数据块并不影响校验码的正确性。·虽然不同的读写处理单元要写入的数据存在交织,但同一数据块内不存在乱序的情况。·一个读写处理单元可能控制多个闪存单元,分别存储不同的数据块,但在同一处理器内的数据块之间不存在交织。从而,为保证校验码的正确性,在RAID5的构建中数据输入需要满足以下条件:·同一RAID数据带内的数据可以乱序,但不同RAID数据带之间不得乱序;·同一RAID数据带内的数据可以交织,但不同RAID数据带之间不得交织;·在当前数据带的校验码被校验设备的处理器取走之后,才能开始传送下一RAID数据带的数据。在RAID系统中,奇偶校验码的计算方法如下:在每一输入的数据块内加入了一个标签,标明处理该数据块的读写处理单元、该数据块所面向的RAID处理器、该数据块所属的RAID数据带;在RAID处理器内,具有一个校验码缓存(buffer),并为读写处理单元设置数据块指针(pointer),所述数据块指针用于记录当前数据块在收到输入数据中的位置,如图3所示。当收到数据时,此数据和对应数据块指针指向的校验码缓存内的数据异或并写回校验码缓存,数据块指针根据所输入的数据长度增加指针值。当数据块指针值达到数据块长度时回绕归零,代表完成一个数据块的异或操作,同时将该处理器所完成处理的数据块加1。记录RAID处理器完成当前数据带中的数据块处理的数量,根据所完成数据块处理的数量和各个指针的位置,确定已经计算完毕的部分数据带的校验码。只要有部分数据带的校验码计算完毕,则RAID处理器可以通知对应的读写处理单元开始取回校验码写入相应的闪存单元。当所有校验码被取走后,缓存器清零,重新开始下一个RAID数据带的计算,开始新一轮的循环。由于每一个RAID处理器仅需要保留一个完整数据块大小的缓存(通常为16KB),完全可以使用片内的SRAM实现,从而避免了片外DRAM的使用,简化了设计。在消息总线上RAID处理器向所有的读写处理单元广播一个短消息,用来防止读写处理单元跨越RAID数据带。短消息包含如下信息:当前此RAID处理器所允许读写处理单元读的数据带号;当前此RAID处理器的校验码是否可以被读出。一个读写处理单元可以控制一个或多个闪存单元(LUN),当读写处理单元发现下一个操作暂时为非法操作时(例如对应于下一个RAID数据带的数据写入),它就切换到其他线程,对另一闪存单元芯片操作。这样写入较快的闪存芯片所在的线程将把资源出让给较慢的线程,使得各线程进度大致相当。本发明方法的目的实现取决于尽量降低非法操作的概率,使得每一个读写处理单元都能接近满负荷工作,所采取的措施是尽可能提前校验码开始读出的时间点。由于对应校验设备的读写处理单元通常较为空闲,因此通常最后一个数据块处理完成后很短的时间内校验码的读取也完成了,整个系统可以进行下一个数据带的写入,从而缩短了无法传输数据的窗口。另外,由于闪存芯片的编程时间是数据传输时间的数倍以上,且系统内可以同时操作两个RAID5写入点,即使一个暂时被禁用,另一个仍可操作,因此,通过测算,RAID5引起的同步效应造成的性能损失在各种环境下都在5%以内。如果一个读写处理单元无法进行下一步工作(如下一步为非法操作),必须等待另一个处理单元,并依此类推,形成循环,就会形成死锁。死锁是必须严格避免的,死锁是由不正确的指令执行次序造成的,而指令的执行次序和指令的发出次序是不同的。由于在本方案中乱序执行仅存在于不同线程之间,同一线程内是严格按序执行的,软件发出指令只需遵守以下简单规则,即可避免死锁:·仅对应该RAID处理器的指令有次序要求,其他指令可以任意发出。·同一RAID数据带内的数据编程指令之间无次序要求。·校验码编程指令必须在当前RAID数据带内的所有数据编程指令之后,下一RAID数据带内所有数据编程指令之前发出。图4示出了一种使用上述方法构建的基于闪存的存储系统,包括:RAID处理器和多个闪存,其中,RAID处理器包括多个读写处理单元、RAID短消息单元、数据块指针单元、数据块计数器、奇偶校验码缓存器,一个读写处理单元可以控制一个或多个闪存单元(LUN)。将校验码的编程指令提交给RAID处理器,指令提交可以由源至于主机的驱动发起,或是由固件发起。为防止死锁,指令提交必须符合RAID处理器所制定的规则,即校验码的编程指令必须在当前RAID数据带的所有数据编程指令提交之后,下一RAID数据带的数据编程指令之前发出。读写处理单元执行其所对应的指令,在执行过程中遵循RAID控制器短消息的规则。读写处理单元读取当前数据带中的数据块,仅在当前数据带的校验码被校验设备的处理器取走之后,才能开始读取下一RAID数据带的数据。数据块指针单元用于分别对每个闪存记录当前数据块的输入位置。数据块计数器用于对一个闪存中所处理的数据块数量进行记数。奇偶校验码缓存器用于缓存奇偶校验码。RAID短消息单元用于向所有的读写处理单元广播一个短消息,用来防止读写处理单元跨越RAID数据带。短消息包含如下信息:当前此RAID处理器所允许读写处理单元读的数据带号;当前此RAID处理器的校验码是否可以被读出。读写处理单元读取相应数据块,根据当前数据指针的位置与奇偶校验码缓存器内的数据进行异或操作,并将数据写入奇偶校验码缓存器。当异或操作完成后,数据块指针单元增加输入数据的长度值而移动对应的数据块指针。数据块计数器在对应于一个闪存LUN的数据块处理完成之后,即数据块指针回绕归零时,加一。当数据块计数器达到RAID数据带所包含的数据块之和时,奇偶校验码存储器内的数据被写入相应的闪存单元。RAID处理器开始下一个RAID数据带的计算操作,直到处理完该数据。如前所描述,该体系架构可以扩展到多个RAID处理器的应用,如图5所示。其优点在于:多个RAID处理器完全独立操作;在无中央控制的写序列下实现RAID的正确计算和写入;RAID带来的性能损失接近零;RAID宽度可以灵活配置。最后应说明的是:以上实施方式仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员应当理解:本发明的核心思想不仅可以在SSD上采用,还可以运用到传统基于硬盘的阵列,或下一代存储介质的阵列上,本发明能够以FPGA、可编程逻辑、ASIC、或专用芯片实施,RAID写入点个数可以根据需要进一步扩充,每个写入点可以进一步采取双处理器配置,进一步消除无法进行数据传输的时间窗口,RAID的方式可以是RAID5、RAID6或者其它RAID结构。本领域技术人员可以对本发明进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1