用于存储系统中的服务感知数据放置的方法和系统
背景技术
为了防止存储系统中的数据的潜在丢失,实施复制方案常常是有利的。在写入数据和奇偶校验值时,现有的复制方案不考虑存储系统的硬件服务调度。
发明内容
一般地,在一个方面,本发明涉及一种包括当通过处理器被执行时执行方法的指令的非暂时性计算机可读介质,该方法包括:接收指定目标存储设备(SD)的服务通知;在接收服务通知之后,完成以下操作:接收将数据写入到永久存储器的请求,其中,永久存储器包括SD;响应请求,将独立磁盘冗余阵列(RAID)条带写入到永久存储器,其中,RAID条带包括第一数据块和第一奇偶校验块,其中,第一数据块中的至少一个包括数据的一部分,第一奇偶校验块包括通过使用第一数据块计算的第一奇偶校验值,并且,第一奇偶校验块不存储于目标SD上,并且,第一数据块均不存储于目标SD上;执行改进的垃圾收集操作,其中,改进的垃圾收集操作包括:标识永久存储器中的活RAID条带,其中,活RAID条带包括N 个第二数据块和第二奇偶校验块,其中,活RAID条带的至少一部分位于目标SD上;将新的RAID条带写入到永久存储器中的新位置,其中,新的RAID条带包括N-1个第三数据块,N-1个第三数据块中的至少一个包括第二数据块中的至少一个中的数据的副本,新的RAID条带包括第三奇偶校验块,第三奇偶校验块包括通过使用N-1个第三数据块计算的第二奇偶校验值,第三奇偶校验块不存储于目标SD上,并且,N-1个第三数据块均不存储于目标SD上;和当完成改进的垃圾收集操作时,发出去除通知,其中,去除通知指示可从永久存储器去除目标SD。
一般地,在一个方面,本发明涉及一种系统,该系统包括:包括N+M 个存储设备(SD)的存储阵列;和与存储阵列可操作地连接并且被配置为完成以下操作的存储控制器:标识用于去除的目标SD;在标识作为多个SD中的一个的目标SD之后,完成以下操作:接收将数据写入到存储阵列的请求;响应请求,将包括N-1个数据块和M个奇偶校验块的独立磁盘冗余阵列(RAID)条带写入到存储阵列,其中,N-1个数据块均不存储于目标SD上,并且,M个奇偶校验块均不存储于目标SD上;执行改进的垃圾收集操作,其中,改进的垃圾收集操作包括:标识存储阵列中的活RAID条带,其中,活RAID条带包括第二数据并且包括N个第二数据块和M个第二奇偶校验块;将新的RAID条带写入到存储阵列中的新位置,其中,新的RAID条带包括N-1个第三数据块和M个第三奇偶校验块,其中,N-1个第三数据块中的至少一个包括N个第二数据块中的至少一个中的数据的副本;和当完成改进的垃圾收集操作时,发出去除通知,其中,去除通知指示可从存储阵列去除目标SD。
从以下的描述和所附的权利要求,本发明的其它方面将十分明显。
附图说明
图1表示根据本发明的一个实施例的系统。
图2表示根据本发明的一个或更多个实施例的RAID条带。
图3表示根据本发明的一个实施例的数据结构。
图4表示根据本发明的一个或更多个实施例的实现RAID写入操作的流程图。
图5表示根据本发明的一个或更多个实施例的用于实现服务感知数据放置的流程图。
图6表示根据本发明的一个或更多个实施例的用于实现改进的RAID 写入操作的流程图。
图7A-7B表示根据本发明的一个或更多个实施例的用于实现改进的垃圾收集操作的流程图。
图8A-8B表示根据本发明的一个或更多个实施例的例子。
具体实施方式
现在参照附图详细描述本发明的具体实施例。在本发明的实施例的以下详细描述中,为了使得能够更彻底地理解本发明,阐述大量的特定细节。但是,对于本领域技术人员来说,很显然,可以在没有这些具体细节的情况下实施本发明。在其它情况下,为了避免不必要地使描述复杂化,没有描述公知的特征。
在图1~8B的以下描述中,在本发明的各种实施例中针对附图描述的任何组件可以与针对任何其它附图描述的一个或更多个名称类似的组件等同。为了简便起见,对这些组件的描述并不针对每个附图进行重复。因此,各附图的组件的每一个实施例通过引用被并入,并且被假定为可选地存在于具有一个或更多个名称类似的组件的每一个其它附图中。另外,根据本发明的各种实施例,附图的组件的任何描述要被解释为可选实施例,该可选实施例的实施可以附加于、结合于或者替代针对其他任意附图中相应的名称类似组件所描述的实施例。
一般地,本发明的实施例涉及通过使用RAID方案在存储阵列中存储数据。具体而言,RAID方案使用关于在确定新的和活RAID条带的RAID 条带几何结构时被去除和/或替代的存储设备的信息。
对于本发明,这里使用的术语“RAID”指的是“独立磁盘冗余阵列”。虽然“RAID”指的是独立磁盘的任何阵列,但可通过使用任何类型的永久性存储设备实现本发明的实施例。
图1表示根据本发明的一个实施例的系统。如图1所示,系统包括一个或更多个客户机(100A、100M)、RAID控制器(104)、存储器(106)、可选的现场可编程门阵列(FPGA)(102)和存储阵列(108)。
在本发明的一个实施例中,客户机(100A、100M)是包括向RAID 控制器(104)发出读取请求或写入请求的功能的任何系统或任何在这种系统上执行的处理。在本发明的一个实施例中,每个客户机(100A、100M) 可包括处理器(未示出)、存储器(未示出)和永久存储器(未示出)。在本发明的一个实施例中,RAID控制器(104)被配置为实现RAID方案,该RAID方案包括以与在图4~7中描述的实施例一致的方式将数据写入到存储阵列(108),和根据在图7中描述的实施例执行垃圾收集操作。进一步地,RAID控制器包括从存储阵列(108)读取数据(包括重构数据) 的功能。在本发明的一个实施例中,RAID控制器(104)包括被配置为执行用于实现本发明的一个或更多个实施例的指令的处理器,其中,指令存储于位于RAID控制器(104)内或者与其可操作地连接的非暂时性计算机可读介质(未示出)上。作为替代方案,可通过使用硬件实现RAID控制器(104)。本领域技术人员可以理解,可通过使用软件和/或硬件的任意组合实现RAID控制器(104)。
在本发明的一个实施例中,RAID控制器(104)与存储器(106)可操作地连接。存储器(106)可以是任何易失性存储器,包括但不限于动态随机存储器(DRAM)、同步DRAM、SDRSDRAM和DDR SDRAM。在本发明的一个实施例中,存储器(106)被配置为在各种数据(包括奇偶校验数据)被存储于存储阵列中之前暂时存储这些数据。
在本发明的一个实施例中,FPGA(102)(如果存在的话)包括出于在存储阵列(108)中存储数据的目的计算奇偶校验值(例如,P奇偶校验值、Q奇偶校验值)的功能,和/或执行恢复通过使用RAID方案存储的损坏数据所需要的各种计算的功能。根据本发明的一个或更多个实施例, RAID控制器(104)可使用FPGA(102)以卸载各种数据的处理。
在本发明的一个实施例中,存储阵列(108)包括一个或更多个存储设备(SDD)(110A、110B)。各存储设备包括永久存储介质。存储设备的例子包括但不限于磁存储设备、光学存储设备、相变存储设备、固态存储设备、带驱动、任何其它适当类型的永久存储设备或它们的任意组合。
本领域技术人员可以理解,虽然图1表示FPGA,但可以在没有FPGA 的情况下实现本发明。并且,本领域技术人员可以理解,在不背离本发明的情况下,可以使用其它的组件以替代FPGA。例如,可通过使用下列设备来实现本发明:专用集成电路(ASIC)、图形处理单元(GPU)、通用处理器、能够出于在存储阵列中存储数据的目的计算奇偶校验值和/或执行恢复通过使用RAID方案存储的损坏数据所需要的各种计算的任何其它硬件设备、包括被配置为出于在存储阵列(108)中存储数据的目的计算奇偶校验值和/或执行恢复通过使用RAID方案存储的损坏数据所需要的各种计算的硬件、固件和/或软件的组合的任何设备或它们的任意组合。
本领域技术人员可以理解,本发明不限于图1所示的配置。
图2表示根据本发明的一个或更多个实施例的RAID条带。各RAID 条带包括数据块和奇偶校验块。数据块与位于包括数据(与奇偶校验值相对)的存储设备上的RAID条带的一部分对应。奇偶校验块与位于包括RAID 条带的奇偶校验值(或奇偶校验值中的一个)的存储设备上的RAID条带的一部分对应。各RAID条带包括数据块和一个或更多个奇偶校验块。
在本发明的一个实施例中,各块(即,数据块和奇偶校验块)可以是死块或活块。死块是包括陈旧数据或另外被标记为要被擦除的数据的块。当数据的更新副本存储于存储阵列中的另一活块中时,数据可被视为陈旧。死块中的数据不被用于服务读取请求。在本发明的一个实施例中,活块是包括被客户机和/或存储控制器积极使用的至少一些数据的块。活块中的数据被用于服务读取请求。
系统中的各RAID条带为活条带(200)或死条带(202)。如果RAID 条带仅包括死块(例如,数据块4~7和奇偶校验块1),那么它是死条带。如果存储阵列中的RAID条带包括至少一个活块,那么它是活条带(200)。
如图2所示,RAID条带(200、202)包括数据块和奇偶校验块。数据块和奇偶校验块的数量可基于用于产生RAID条带的RAID方案而改变。例如,如果根据RAID-5产生RAID条带,那么RAID条带可包括四个数据块和一个奇偶校验块。在另一例子中,如果根据RAID-6产生RAID条带,那么RAID条带可包括四个数据块和两个奇偶校验块(例如,具有P奇偶校验值的奇偶校验块和具有Q奇偶校验值的第二奇偶校验块)。可通过使用同一奇偶方案实现存储阵列中所有的RAID条带。作为替代方案,可通过使用不同的RAID方案实现存储阵列中的RAID条带。
在本发明的一个实施例中,P奇偶校验值是通过使用P奇偶校验函数产生的Reed-Solomon综合征(syndrome)。P奇偶校验函数可与可产生 Reed-Solomon综合征的任何函数对应。在本发明的一个实施例中,P奇偶校验函数是XOR函数。
在本发明的一个实施例中,Q奇偶校验值是通过使用Q奇偶校验函数产生的Reed-Solomon综合征。Q奇偶校验函数可与可产生Reed-Solomon 综合征的任何函数对应。在本发明的一个实施例中,Q奇偶校验值为 Reed-Solomon代码。在本发明的一个实施例中,Q=g0·D0+g1·D1+g2·D2+…+gn-1·Dn-1,其中,Q与在本发明中描述的Q奇偶校验值中的任一个对应,g是字段生成器,并且,D的值与数据(存储于相应RAID条带中的数据块中)对应。
在本发明的一个实施例中,RAID条带几何结构限定RAID条带中的每一个块的位置。例如,参照活条带(200),RAID几何结构可指定以下方面:(i)RAID方案-RAID5和(ii)奇偶校验块位于SD4上。类似地,对于死条带(202),RAID几何结构可指定以下方面:(i)RAID方案-RAID5 和(ii)奇偶校验块位于SD2上。根据SD的特定实现,RAID条带几何结构也可包括与奇偶校验块对应的SD内的特定块的位置。
通过使用该信息,存储控制器(或系统中的另一组件)可确定存储阵列中针对活条带(200)和死条带(202)的数据块的位置。在不背离本发明的情况下,条带几何结构可包括附加的信息(例如,数据块位置)和/或其他信息。
在本发明的一个实施例中,RAID条带中的各块位于不同的SD上。并且,存储阵列中的各RAID条带的宽度可相同并且跨过整个存储阵列(例如,图2中的5个SD)。在本发明的另一实施例中,RAID条带可以不跨过整个存储阵列(例如,参见图8A~8B)。
可通过使用不同的RAID方案(例如,RAID-4、RAID-5、RAID6、多维RAID等)和不同的条带宽度实现本发明的实施例,而不偏离本发明。进一步地,给定的存储阵列可同时在其中存储通过使用不同的RAID方案存储的不同宽度的RAID条带。
图3表示根据本发明的一个实施例的数据结构。在本发明的一个实施例中,RAID控制器包括用于实现本发明的实施例的一个或更多个数据结构。
在本发明的一个实施例中,对于存储阵列中的各块(300)保持块状态 (302)。块状态(302)指示块是活块还是死块。在本发明的一个实施例中,对于存储于存储阵列中的各RAID条带(304)保持RAID条带几何结构(306)。进一步地,对于各RAID条带(304)保持指示RAID条带(304) 是活条带还是死条带的条带状态(308)。另外,RAID控制器还可跟踪各存储设备(310)中的可用空间(312)。可用空间表示存储设备有多少空间可用于存储块(数据或奇偶)。可用空间可包括(i)当前不使用的空间和/或(ii)当前被使用但可被新块(数据或奇偶)重写的空间。
转到流程图,虽然依次给出和描述了流程图中的各步骤,但本领域技术人员可以理解,可以以不同的次序执行、可以组合或者省略步骤中的一些或全部,并且可以并行执行步骤中的一些或全部。在本发明的一个实施例中,图4~7B所示的一个或更多个步骤可以与图4~7B所示的其它步骤中的一个或更多个并行地执行。
图4表示根据本发明的一个或更多个实施例实现RAID写入操作的流程图。具体而言,图4表示标识目标SD(参见图6)之前的常规RAID写入操作。
在步骤400中,接收用于将数据写入存储阵列的请求。请求可包括要存储的数据或者可包括对要存储的数据的参照。在不背离本发明的情况下,请求可采取任何形式。在步骤402中,产生N个数据块以存储于RAID条带(参见图2)中。数据块与要存储于存储阵列中的数据的一部分对应。 RAID条带的数据块的数量基于RAID条带基于的RAID方案。在步骤404中,通过使用数据块计算新的RAID条带的一个或更多个奇偶校验值。奇偶校验值的数量依赖于RAID条带基于的RAID方案。例如,如果基于 RAID-6产生RAID条带,那么存在两个计算的奇偶校验值:P奇偶校验值和Q奇偶校验值。步骤404的结果是奇偶校验块组。在步骤406中,确定了RAID条带的RAID条带几何结构(参见图2)。RAID条带几何结构可与任何RAID条带几何结构对应。具体而言,奇偶校验值可位于存储阵列中的任何SD上。
在步骤408中,数据块和奇偶校验块根据RAID条带几何结构(在步骤406中确定)作为RAID条带被写入到存储阵列。在步骤410中,数据结构(例如,图3中的数据结构)被更新以反映新的RAID条带已被写入到存储阵列。例如,步骤410可包括(i)存储新的RAID条带的RAID条带几何结构和(ii)更新新的RAID条带中的至少一个块被写入到的存储设备中的每一个中的可用空间的量。
与图4所示的处理的执行同时,存储控制器也可执行垃圾收集操作。一般地,垃圾收集操作包括:(i)标识具有零个或更多个死数据块的活 RAID条带;(ii)通过使用来自在(i)中标识的RAID条带的活数据块产生新的RAID条带;(iii)将新的RAID条带写入到存储阵列中的可用位置;(iv)擦除或恢复(reclaim)包括死RAID条带或在(i)中标识的RAID 条带的存储阵列中的所有位置。
图5~7B表示针对标识目标SD之后的存储控制器的操作的流程图。
转到图5,图5表示用于根据本发明的一个或更多个实施例实现服务感知奇偶校验放置的流程图。在步骤500中,接收标识目标SD的服务通知请求。目标SD与存储阵列中的下类SD相对应,该SD(i)被调度为基于SD服务调度被替代(例如,各SD在服务一定的时间周期之后被替代)、 (ii)基于来自用户(例如,系统管理员)的输入被替代或(iii)正在经历高于错误事件阈值的错误事件(例如,失败的写入操作、失败的读取操作等)。错误事件阈值可基于(a)用户输入、(b)缺省值和/或(c)关于存储阵列和/或SD的历史信息被设定。服务通知可基于以上列出的条目(i)、 (ii)和/或(iii)由存储控制器发出和/或接收。作为替代方案,存储控制器可在不接收服务通知的情况下基于以上列出的条目(i)、(ii)和/或(iii) 执行剩余的步骤。在本发明的另一实施例中,在存储控制器中执行的一个处理(或一组处理)可基于条目(i)、(ii)和/或(iii)产生服务通知,该服务通知然后在存储控制器执行图5中的步骤时被处理(或一组处理) 接收。
在步骤502中,确定在存储阵列中是否存在用于执行图5中的剩余步骤的可用空间。这可以通过使用图3中的数据结构来进行。具体而言,如果RAID条带包括N个数据块,那么,为了有足够的可用空间以执行图5 中的剩余步骤,必须在存储阵列中存在足够的空间以在N-1个存储设备中存储N个数据块。例如,考虑在具有实现RAID-5的五个存储设备的存储阵列中存在两个RAID条带的情形,其中,各RAID条带包括四个数据块和一个奇偶校验块。因此,在五个存储设备中的每一个上存在两个块(数据或奇偶)。为了确定是否存在足够的可用空间,各存储设备(目标存储设备以外)必须具有足够的空间以存储三个块(数据或奇偶校验)。如果存在足够的可用空间,那么处理前进到步骤504;否则,处理结束。
在步骤504中,启动改进的RAID操作(参见图6)。仅当在步骤500 (或在标识目标SD之后)与步骤508中的去除通知的发出之间接收到写入请求时执行改进的RAID操作。在步骤506中,执行改进的垃圾收集操作(参见图7A-7B)。在本发明的一个实施例中,虽然仅在接收到写入请求时执行改进的RAID操作,但总是执行改进的垃圾收集操作。由此,如果在步骤500与改进的垃圾收集操作的完成之间未接收到写入请求,那么不执行步骤504。如上面讨论的那样,步骤504和506可被同时执行。在步骤508中,一旦完成了改进的垃圾收集操作,存储控制器(或在其上执行的处理)就可发出指示可从存储阵列物理去除目标SD的去除通知。在步骤508之后,存储控制器根据图4服务写入请求,并且执行以上描述的垃圾收集操作(且不执行改进的垃圾收集操作),直到另一目标SD被标识。
图6表示根据本发明的一个或更多个实施例的实现改进的RAID写入操作的流程图。
在步骤600中,接收将数据写入到存储阵列的请求。请求可包括要存储的数据或者可包括对要存储的数据的参照。在不背离本发明的情况下,请求可采取任何形式。在步骤602中,产生数据块以将其存储在RAID条带(例如,参见图2)中。数据块与要存储于存储阵列中的数据的一部分对应。关于步骤602,数据块的数量基于处于RAID条带中的数据块的数量。如果存储阵列包括N个存储设备,那么RAID条带中的块(数据块+ 奇偶校验块)的最大数量为N-1。并且,如果在RAID条带中存在X个奇偶校验块,那么RAID条带中的数据块的最大数量为N-1-X。例如,如果在存储阵列中存在五个存储设备并且在RAID条带中存在一个奇偶校验块,那么RAID条带中的数据块的最大数量为5-1-1=3。
在步骤604中,通过使用数据块计算新的RAID条带的一个或更多个奇偶校验值。奇偶校验值的数量依赖于RAID条带基于的RAID方案。例如,如果基于RAID-6产生RAID条带,那么存在两个计算的奇偶校验值: P奇偶校验值和Q奇偶校验值。步骤604的结果是一个或更多个奇偶校验块。在步骤606中,确定新的RAID条带的RAID条带几何结构(参见图2)。 RAID条带几何结构可与不在目标SD上放置任何数据块或奇偶校验块的任何RAID条带几何结构对应。继续讨论图6,在步骤608中,根据RAID 条带几何结构(在步骤606中确定),数据块和奇偶校验块作为RAID条带被写入存储阵列。
图7A~7B表示根据本发明的一个或更多个实施例的用于实现改进的垃圾收集操作的流程图。在步骤700中,选择RAID条带。RAID条带可以是在启动改进的垃圾收集操作时存在的存储阵列中的任何RAID条带。在启动改进的垃圾收集操作之后,在被写入存储阵列的RAID条带上并不执行在图7A~7B中描述的处理(作为改进的垃圾收集操作的一部分或者作为改进的RAID写入操作(参见图6)的一部分)。在步骤700中选择的RAID 条带包括N个数据块。
在步骤702中,确定选择的RAID条带是否死条带。如果选择的RAID 条带是死条带,那么处理前进到步骤724;否则,处理前进到步骤704。在步骤704中,选择RAID条带中的数据块。在步骤706中,确定选择的数据是否是活的。如果选择的数据块是活的,那么处理前进到步骤708;否则,处理前进到步骤722。
在步骤708中,确定在新的RAID条带中是否存在可用于存储选择的数据块的空间。换句话说,作为改进的垃圾收集操作的一部分,确定是否存在当前正被填充数据块的新的RAID条带(例如,参见图8A~8B)。如果在新的RAID条带中存在可用于存储选择的数据块的空间,那么处理前进到步骤712;否则,处理前进到步骤710。在本发明的一个实施例中,如果存在少于N-1个与新的RAID条带相关的数据块,那么新的RAID条带不满,其中,RAID条带(当满时)包括N-1个数据块和M个奇偶校验块(其中,例如,N≥4且M≥1)。
在步骤710中,当在新的RAID条带中不存在可用于存储选择的数据块的空间时,创建新的RAID条带。在本发明的一个实施例中,在创建新的RAID条带时,RAID条带不包括任何数据块或奇偶校验块。在步骤712 中,数据块(在步骤704中所选择的)与新的RAID条带(即,在步骤710 中创建的空的新的RAID条带或包括至少一个其它的数据块并在执行步骤 708时不满的另一新的RAID条带)相关联。
在步骤714中,确定新的RAID条带是否充满(即,新的RAID条带是否与N-1个数据块相关联)。如果新的RAID条带充满,那么处理前进到步骤716;否则,处理前进到步骤722。
在步骤716中,针对选择的RAID条带产生新的RAID条带几何结构,其中,RAID条带中的块均不存储于目标SD上。在步骤718中,通过使用与新的RAID条带相关联的数据块对奇偶校验块计算新的奇偶校验值。在步骤720中,根据在步骤716中确定的RAID条带几何结构,数据块和奇偶校验块(包括奇偶校验值)作为RAID条带(具有N-1个数据块)写入存储阵列中。然后,处理前进到步骤722。
在步骤722中,确定在选择的RAID条带中是否仍存在要处理的其他数据块。如果在选择的RAID条带中仍存在要处理的其他数据块,那么处理前进到步骤704;否则,处理前进到步骤724。
在步骤724中,RAID条带(在步骤700中所选择的)被标记为处理过。在步骤726中,确定在存储阵列中是否存在要处理的剩余RAID条带。如果在存储阵列中存在要处理的剩余RAID条带,那么处理前进到步骤 700;否则,处理前进到步骤728。
在步骤728中,确定是否存在剩余的任何不满的新的RAID条带。换句话说,确定是否存在包括需要存储于存储阵列中的数据块的不满的RAID 条带。如果存在剩余的任何不满的新的RAID条带,那么处理前进到步骤 730;否则,处理前进到步骤738。
在步骤730中,为了使RAID条带(在步骤728中所标识的)具有与之相关联的总共N-1个数据块,将一个或更多个填充数据块与该RAID条带相关联。填充数据块是包括例如包括全零或全一的块的数据块,以不影响通过使用RAID条带中的非填充数据块产生的奇偶校验值。
在步骤732中,针对选择的RAID条带确定新的RAID条带几何结构,其中,RAID条带中的块均不存储于目标SD上。在步骤734中,通过使用与新的RAID条带相关联的数据块对奇偶校验块计算新的奇偶校验值。在步骤736中,根据在步骤732中确定的RAID条带几何结构,数据块和奇偶校验块(包括奇偶校验值)作为RAID条带(具有N-1个数据块)写入存储阵列中。然后,处理前进到步骤738。
在步骤738中,在改进的垃圾收集操作启动之前存在于存储阵列中的所有RAID条带都已被处理,因此,所有已处理的RAID条带都被擦除。一旦所有已处理的RAID条带被擦除,就可发出去除通知,该去除通知指示可去除目标SD。去除通知可被发送给用户(例如,系统管理员),以指示可从存储阵列去除目标SD。虽然不需要,但也可在擦除已处理的RAID 条带时擦除所有死块。
在本发明的一个实施例中,图7A~7B中的处理结果是一组新的RAID 条带,其中,与这些新的RAID条带相关联的块(数据或奇偶)均不位于目标SD上。
图8A~8B表示根据本发明的一个或更多个实施例的例子。例子不是要限制本发明的范围。
转到图8A,考虑存储阵列具有五个存储设备(SD0~SD4)并且已接收到指示需要去除SD2的服务通知的情形。图8A表示启动改进的垃圾收集操作时存储阵列的状态。
在该阶段中,存储控制器如图7A~7B描述的那样启动改进的垃圾收集操作。具体而言,参照图8A,RAID条带RS_0~RAID条带RS_3每个都包括四个数据块和一个奇偶校验块。更具体而言,RAID条带RS_0是活 RAID条带并且包括活数据块D0、D2和D3。RAID条带RS_1是死条带。 RAID条带RS_2是包括活数据块D9的活RAID条带。最后,RAID条带 RS_3是包括活数据块D13和D15的活RAID条带。
RS_0~RAID条带RS_3根据图7A~7B被处理。具体而言,活数据块 D0、D2和D3被组合以形成新的RAID条带RS_4(参见图8B)。并且,活数据块D9、D13和D15被组合以形成新的RAID条带RS_5。如图8B 所示,新的RAID条带(RS_4和RS_5)具有三个数据块(而不是四个数据块)。关于RAID条带RS_1,在任一个新的RAID条带中都不重写RAID 条带RS_1中的数据块,原因是RS_1中的所有数据块是死的。
在本例子中,在执行改进的垃圾收集操作(即,在RAID条带RS_4 和RAID条带RS_5被写入到存储阵列之后,但在RAID条带RS_0~RAID 条带RS_3被擦除之前)的同时,存储控制器(未示出)接收将新数据作为RAID条带写入到存储阵列的请求。新数据根据图6被写入到存储阵列 (步骤606),其中,RAID条带几何结构指定奇偶校验块(P6)要位于 SD1上。RAID条带RS_6随后被写入存储阵列。
在本阶段中,在启动改进的垃圾收集操作时存在于存储阵列中的所有 RAID条带都已被处理,因此,参照图8B,所有已处理的RAID条带(即, RAID条带RS_0~RS_3)可被擦除并且SD2可随后被去除。在不背离本发明的情况下,可在擦除死块之前去除SD2。
本领域技术人员可以理解,虽然参照单维RAID方案描述了本发明,但本发明的实施例可被扩展到任何多维RAID方案。例如,本发明的实施例可扩展到在美国专利No.8,316,260(在此通过引用并入本文)中描述的多维RAID方案。
在本发明的一个或更多个实施例中,在执行了图5~7B所示的方法之后,在目标SD被去除之后剩余的RAID条带与在启动图5~7A之前存在的 RAID条带相比具有相同数量的奇偶校验块,但是,每一个RAID条带具有少一个的数据块。一旦完成改进的垃圾收集操作,写入到存储阵列的新的 RAID条带就可包括与在启动改进的垃圾收集操作之前RAID条带包括的相同数量的数据块。并且,可跨越所有SD写入RAID条带。换句话说,在完成图5之后,随后接收的数据可被写入到包括N个数据块的RAID条带 (与在执行图5时产生的RAID条带中的N-1个数据块相比)中的存储阵列。
可通过使用由系统中的一个或更多个处理器执行的指令实现本发明的一个或更多个实施例。并且,这些指令可与存储于一个或更多个非暂时性计算机可读介质上的计算机可读指令对应。
虽然按照有限数量的实施例描述了本发明,但受益于本公开的本领域技术人员可以理解,可以设计不背离这里公开的本发明的范围的其它实施例。因此,本发明的范围应仅由所附的权利要求限定。