
1.本公开的各实现方式涉及存储管理,更具体地,涉及用基于动态窗口来管理存储系统中的备用区块的方法、设备和计算机程序产品。
背景技术:2.随着数据存储技术的发展,各种数据存储设备已经能够向用户提供越来越高的数据存储能力。在提高数据存储能力的同时,用户对于数据可靠性和存储系统的可扩展性也提供了越来越高的需求。目前,已经开发出了基于独立磁盘冗余阵列(redundant array of independent disks,raid)的多种数据存储系统来提高数据的可靠性。当存储系统中的一个或者多个磁盘出现故障时,可以从其他正常操作的磁盘上的数据来重建故障磁盘中的数据。
3.目前已经开发出了映射独立磁盘冗余阵列(mapped raid)。在该映射raid中,磁盘是一个逻辑概念并且可以包括多个区块(extent)。一个逻辑磁盘中包括的多个区块可以分布在存储系统中的不同物理存储设备上。对于映射raid的一个条带中的多个区块而言,该多个区块应当分布在不同的物理存储设备上,以便当该多个区块中的一个区块所在的物理存储设备出现故障时,可以执行重建操作以便从其他区块所在的物理存储设备中恢复数据。可以在每个存储设备中预留备用存储空间(包括一个或多个备用区块),以便用于执行恢复操作。
4.为了便于管理存储系统中的多个存储设备,目前已经提出了按照分组阈值(包括上限阈值和下限阈值),将多个存储设备划分为至少一个分组。可以基于每个分组中的各个存储设备来创建用户存储系统中的各个条带。由于仅能在分组内共享各个存储设备中的备用存储空间,当需要执行恢复操作时,可能会出现某个分组内的备用存储空间不足并且另一分组中的备用存储空间很少被使用的情况。此时,如何尽可能有效地利用各个存储设备中的备用存储空间,成为一个技术难题。
技术实现要素:5.因而,期望能够开发并实现一种以更为有效的方式来在管理存储系统中的备用区块技术方案。期望该技术方案能够与现有的存储系统相兼容,并且通过改造现有存储系统的各种配置,来以更为有效的方式管理存储设备。
6.根据本公开的第一方面,提供了一种用于管理存储系统中的备用区块的方法,在此存储系统包括多个存储设备。在该方法中,响应于确定多个存储设备中的源存储设备中的备用区块数量低于预定阈值,从源存储设备中选择源区块,源区块是存储系统包括的已经被创建的条带中的区块。基于条带中的源区块以外的一组区块,确定分别与一组区块相关联的一组存储设备序列,一组存储设备序列中的存储设备序列与一组区块中的区块相关联,并且包括区块所在的存储设备以及与存储设备相邻的多个连续存储设备。从一组存储设备序列中的多个备用区块中标识目的地区块。将源区块中的数据迁移至目的地区块。
7.根据本公开的第二方面,提供了一种电子设备。该电子设备包括:至少一个处理器;以及与至少一个处理器耦合的存储器,存储器具有存储于其中的指令,指令在被至少一个处理器执行时使得设备执行根据本公开的第一方面的方法。
8.根据本公开的第三方面,提供了一种计算机程序产品,计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,机器可执行指令用于执行根据本公开的第一方面的方法。
附图说明
9.结合附图并参考以下详细说明,本公开各实现方式的特征、优点及其他方面将变得更加明显,在此以示例性而非限制性的方式示出了本公开的若干实现方式。在附图中:
10.图1a示意性示出了根据一个技术方案的存储系统的示意图;
11.图1b示意性示出了如图1a所示的存储系统中的存储设备的示意图;
12.图2示意性示出了根据本公开的一个实现方式的用于基于动态窗口来管理备用区块的过程的框图;
13.图3示意性示出了根据本公开的一个实现方式的用于基于动态窗口来管理备用区块的方法的流程图;
14.图4示意性示出了根据本公开的一个实现方式的动态窗口的框图;
15.图5示意性示出了根据本公开的一个实现方式的分别与条带中的各个区块相关联的各个存储设备序列的框图;
16.图6示意性示出了根据本公开的一个实现方式的用于确定两个存储设备之间的相关度的过程的框图;
17.图7示意性示出了根据本公开的一个实现方式的从源区块向目的地区块迁移数据的过程的框图;
18.图8示意性示出了根据本公开的一个实现方式的用于基于动态窗口来管理备用区块的方法的流程图;以及
19.图9示意性示出了根据本公开的一个实现方式的用于基于动态窗口来管理备用区块的设备的框图。
具体实施方式
20.下面将参照附图更详细地描述本公开的优选实现。虽然附图中显示了本公开的优选实现,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实现所限制。相反,提供这些实现是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
21.在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实现”和“一个实现”表示“至少一个示例实现”。术语“另一实现”表示“至少一个另外的实现”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
22.首先参见图1a和图1b描述存储系统的应用环境。图1a示意性示出了根据一个技术
方案的存储系统的示意图100a。如图1a所示,存储系统可以包括资源池110,资源池110可以包括多个存储设备。为了便于管理,可以将多个存储设备划分至一个或多个分组。例如,存储设备122、
…
、124、
…
、以及126可以被划分至分组120,并且存储设备132、
…
、134、
…
、以及136可以被划分至分组130。
23.存储系统可以是基于raid的存储系统。基于raid的存储系统可以将多个存储设备组合起来,成为一个磁盘阵列。通过提供冗余的存储设备,可以使得整个磁盘组的可靠性大大超过单一的存储设备。raid可以提供优于单一的存储设备的各种优势,例如,增强数据整合度,增强容错功能,增加吞吐量或容量,等等。raid存在多个标准,例如raid-1,raid-2,raid-3,raid-4,raid-5,raid-6,raid-10,raid-50等等。
24.基于映射raid技术,可以利用分组中的各个存储设备中的存储空间来创建用户存储系统。例如,可以基于分组120内的存储设备来分别创建用户存储系统140、
…
、以及142。此时,对于用户存储系统中的一个条带而言,仅能从一个分组中各个存储设备中选择空闲区块来创建条带。换言之,条带中的多个区块仅能来自一个分组并且不能跨越多个分组。
25.将会理解,分组中包括的存储设备的数量具有阈值范围(例如,包括上限阈值和下限阈值)。通常而言,上限阈值可以被设置为64或者其他数值,并且下限阈值可以根据存储系统的条带宽度和所要求的后备存储设备的数量来确定。例如,在4d+1p的存储系统中,条带宽度为4+1=5,并且后备存储设备的数量为1,则可以基于两者的求和来确定下限阈值:5+1=6。此时,每个分组可以包括6至64个存储设备。当资源池110包括的存储设备的数量超过64时,可以存在多个分组。
26.可以在每个存储设备中预留备用存储空间,具体地,图1b示意性示出了如图1a所示的存储系统中的存储设备122的示意图100b。如图1b所示,存储系统122可以包括多个区块,其中以空白示出的区块表示可以用于创建用户存储系统中的条带的普通区块,并且以阴影示出的区块表示在存储设备中预留的用于恢复数据的备用区块。可以预先指定一个分组内的备用存储空间的大小,例如,可以基于一个存储设备的存储空间大小来指定备用存储空间的总量。此时,一个存储设备可以包括一个或多个备用区块。
27.将会理解,备用存储空间仅能在分组内的各个存储设备之间共享。换言之,当分组内的一个存储设备出现故障时,仅可以使用该分组内的存储设备中的备用存储空间,而不能跨越分组来使用另一分组中的备用存储空间。由于各个分组中的存储设备出现故障的概率并不相同,这将导致可能会出现某个分组中的备用存储空间即将耗尽,而另一分组中的备用存储空间尚未被使用的情况。在基于分组的技术方案中,一方面在每个分组中预留足够的备用存储空间可能会导致存储空间的浪费,另一方面不同分组中的备用存储空间的工作负载可能会存在严重不平衡。
28.为了至少部分地解决上述技术方案中的不足,根据本公开的示例性实现方式,提供了一种基于动态窗口来管理存储系统中的备用存储空间的技术方案。在下文中,将参见图2概括描述根据本公开的示例性实现方式的过程。图2示意性示出了根据本公开的一个实现方式的用于基于动态窗口来管理备用区块的过程200的框图。根据本公开的一个示例性实现方式,抛弃了已有技术方案中的分组,并且提出了统一地管理存储系统中的全部存储设备中的备用区块。
29.在下文中,将仅以4d+1p的存储系统作为示例进行描述。当发现存储系统中的某个
存储设备(例如,条带210中的区块211所在的存储设备)中的备用区块的数量较低时,可以基于条带210中的其他区块的位置,来从多个存储设备中确定目标存储设备,进而将区块211中的数据迁移至目标存储设备中的未使用备用区块。继而,可以将区块211标记为未使用备用区块。以此方式,可以在整个存储系统内部共享各个存储设备中的备用区块,进而提高存储设备中的存储空间的使用率并且确保各个存储设备中的备用区块的负载平衡。
30.具体地,可以首先确定区块211所在的条带210包括的其他区块212、213、214和215。进一步,可以分别确定与每个其他区块相关联的存储设备序列。仅以区块212和213为示例,可以分别确定区块212位于存储设备126并且区块213位于存储设备132。此时,与区块212相关联的存储设备序列包括窗口220内的存储设备124、
…
、126、132、
…
,并且与区块213相关联的存储设备序列包括窗口230内的存储设备126、132、
…
、存储设备134。此时,窗口220和230的重叠部分示出为交集240。进一步,可以基于分别与区块212、213、214和215相关联的各个存储设备序列(例如,基于各个窗口的交集)中的多个备用区块,来标识目的地区块。
31.利用本公开的示例性实现方式,抛弃了已有技术方案中“分组”的概念。当源存储设备中的备用区块不足时,可以基于该源存储设备中的源区块所在条带中的其他区块的位置,来动态地确定可以用于迁移的目的地存储设备。以此方式,对于不同的源区块而言,可以分别从不同的存储设备中选择目的地存储设备并且进行数据迁移。由此,可以更充分地利用包括较多备用区块的存储设备中的备用区块,进而避免在某些存储设备中出现备用区块短缺的情况。
32.根据本公开的一个示例性实现方式,将参见图3描述根据本公开的一个示例性实现方式的更多细节。图3示意性示出了根据本公开的一个实现方式的用于基于动态窗口来管理备用区块的方法300的流程图。在框310处,响应于确定多个存储设备中的源存储设备中的备用区块数量低于预定阈值,从源存储设备中选择源区块,源区块是存储系统包括的已经被创建的条带中的区块。根据本公开的一个示例性实现方式,可以确定每个存储设备中的备用区块的数量是否低于预定阈值,并且在低于预定阈值时启动用于管理备用区块的技术方案。
33.根据本公开的一个示例性实现方式,可以随机地从源存储设备中选择源区块。备选地和/或附加地,可以基于源存储设备中的已经被创建的各个条带中的各个区块的工作负载,选择源区块。例如,可以优先地选择工作负载较低的区块。此时,当将源区块迁移至包括丰富备用区块的目的地存储设备时,不会对该目的地存储设备造成过多的负担。
34.将会理解,在此的条带是存储系统中的已经分配给用户存储系统的条带。将会理解,在此的条带是基于动态窗口来创建的条带。具体地,可以在多个轮次中分别选择条带中的每个区块。在第一个轮次中,可以从一个存储设备中选择区块211来作为条带210中的第一个区块。可以基于预定的窗口大小来确定与区块211相关联的存储设备序列。进一步可以从存储设备序列中的一个存储设备中选择区块212来作为条带210中的第二个区块。此时,条带210中包括两个区块211和212。进一步,可以基于与条带210中的各个区块相关联的存储设备序列的交集,来选择条带210中的其他区块。将会理解,在此与区块相关联的存储设备序列包括所述区块所在的存储设备以及与所述存储设备相邻的多个连续存储设备。在下文中,将详细描述有关窗口和存储设备序列的更多细节。
35.根据本公开的一个示例性实现方式,在创建条带时抛弃了已有存储系统中的分组,这可以以更加灵活的方式统一管理存储系统中的全部存储设备中的备用区块。可以确保各个存储设备中的备用区块的负载平衡。进一步,由于窗口的位置可以随着出现备用区块短缺的存储设备的位置而变化,可以以更为灵活的方式从更多的存储设备中选择用于数据迁移的目标存储设备。以此方式,可以避免存储系统中的各个存储设备中的备用存储空间的使用负载的不平衡,进而可以更为充分地利用每个存储设备中的备用存储空间。
36.继续参见图3,在框320处,基于条带210中的源区块211以外的一组区块(例如,包括区块212、213、214和215),确定分别与一组区块相关联的一组存储设备序列。在此,一组存储设备序列中的存储设备序列与一组区块中的区块相关联,并且包括区块所在的存储设备以及与存储设备相邻的多个连续存储设备。根据本公开的一个示例性实现方式,可以针对一组区块中的每个区块来确定相关联的存储设备序列。将会理解,在创建条带和管理备用区块的过程中,确定与区块相关联的存储设备序列的方式是相同的。在下文中,将仅以一组区块中的区块212作为示例,描述如何确定与区块212相关联的存储设备序列。可以首先从多个存储设备中确定区块212所在的存储设备,并且基于预定窗口大小确定与存储设备相邻的多个连续存储设备。
37.在下文中,将参见图4描述有关动态窗口的更多信息。图4示意性示出了根据本公开的一个实现方式的动态窗口400的框图。假设存储系统包括160个存储设备(即,存储设备d0至d159),坐标轴示出了按顺序排列的各个存储设备,其中坐标点示出了存储设备的id。如图5所示,黑点表示条带中的区块212所在的存储设备410(d80)。根据本公开的一个示例性实现方式,可以基于存储设备410的位置来确定与区块212相关联的存储设备序列(如窗口412所示),在此存储设备序列包括存储设备410以及多个存储设备中的与存储设备410相邻的一组连续存储设备。可以预先指定窗口412的宽度,例如,可以基于已有技术方案中的分组的阈值上限和/或其他数值来设置窗口的宽度。根据本公开的一个示例性实现方式,可以将窗口宽度指定为64(或者其他数值)。
38.根据本公开的一个示例性实现方式,可以基于预定窗口大小确定存储设备序列,以使得存储设备410靠近存储设备序列的中心,也即可以使得存储设备410靠近窗口412的中心。例如,可以从存储设备410左侧选择32个存储设备,并且从存储设备410右侧选择31个存储设备。在图4的示例中,存储设备序列可以包括如下存储设备:d48至d111。又例如,可以从存储设备410左侧选择31个存储设备,并且从存储设备410右侧选择32个存储设备。将会理解,尽管上文示意性示出了从被存储设备410两侧以基本对称的方式来确定存储设备序列。根据本公开的一个示例性实现方式,可以指定窗口412的滑动范围。例如,可以从存储设备左侧选择30个存储设备,并且从存储设备右侧选择33个存储设备。又例如,可以从存储设备左侧选择29个存储设备,并且从存储设备右侧选择34个存储设备,等等。
39.将会理解,在此用于管理备用区块的窗口的滑动范围与用于创建条带时使用的窗口的滑动范围是一致的。在创建条带过程中,需要确保滑动窗口的交集包括足够数量的存储设备来用于创建条带。在4d+1p的条带中,条带包括5个区块。此时,需要基于与条带中的每个区块相关联的存储设备序列的交集,选择用于生成条带中的其他区块的存储设备。因而,应当确保在极端情况下(每次选择交集中位于边缘的存储设备),在选择最后一个存储设备时交集中至少包括一个存储设备。因而,窗口的滑动范围应当大于或等于5-1=4。也
即,在确定与条带中的区块相关联的存储设备序列时,窗口边缘与条带中的区块所在的存储设备之间的距离应当大于或者等于4。
40.根据本公开的一个示例性实现方式,对于宽度为m的条带而言,在确定与每个所选择的存储设备相关联的存储设备序列时,应当确保窗口边缘与所选择的存储设备之间的距离大于或者等于m-1。将会理解,在此的窗口边缘包括窗口的左边缘和右边缘。也即在极端情况下,存储设备序列可以包括:被选择的存储设备左侧(或者右侧)的m-1个存储设备、以及被选择的存储设备右侧(或者左侧)的64-(m-1)-1个存储设备。利用本公开的示例性实现方式,可以确保在确定条带中的最后一个区块时,各个存储设备序列的交集中至少包括1个存储设备。
41.根据本公开的一个示例性实现方式,为了确保可以以连续的方式确定存储设备序列,可以将多个存储设备以环形方式排列。将会理解,如果存储系统中的多个存储设备的数量小于上限阈值(例如,64),则此时无论怎样滑动窗口,多个存储设备将位于相同的分组阈值范围之内。如果多个存储设备的数量大于上限阈值,则窗口的滑动将会使得更多存储设备可以用于创建条带和/或作为目标存储设备,进而提高存储系统的使用效率和均衡度。
42.上文已经描述了如何确定与条带210中的区块212相关联的存储设备序列。可以以类似方式确定与区块213、214和215相关联的各个存储设备序列。在下文中,将返回图3描述如何确定目的地区块。在图3的框330处,从一组存储设备序列中的多个备用区块中标识目的地区块。在此,一组存储设备序列包括4个存储设备序列,也即,分别与区块212、213、214和215相关联的存储设备序列。
43.图5示意性示出了根据本公开的一个实现方式的分别与条带210中的各个区块相关联的各个存储设备序列的框图500。假设条带210中的区块211位于源存储设备550(d90)并且该存储设备中出现备用区块短缺。条带210中的其他4个区块212、213、214和215分别位于存储设备510(d80)、520(d96)、530(d100)和540(d70)。可以基于上文描述的方法来分别确定与每个存储设备510至540相关联的存储设备序列。
44.具体地,可以确定与存储设备510相关联的存储设备序列512包括:d48至d111(从存储设备510左侧选择32个存储设备,并且从存储设备510右侧选择31个存储设备);与存储设备520相关联的存储设备序列522包括:d64至d127;与存储设备530相关联的存储设备序列532包括:d68至d131;与存储设备540相关联的存储设备序列542包括:d38至d101。此时,可以从上述存储设备序列的交集560(d68至d101)中选择目的地存储设备。此时,相对于已有技术方案中在分组内部选择目的地存储设备而言,利用图5的过程所选择的目的地的存储设备的位置不再局限于一个分组之内,而是可以随着条带中的各个区块的位置而变化。以此方式,可以确保存储系统中的各个存储设备中的备用区块的负载均衡。
45.将会理解,raid技术要求条带中的各个区块分别位于不同的存储设备,因而可以首先从交集中的至少一个存储设备中确定不包括条带中的任何区块的一组候选存储设备,并且可以从一组候选存储设备中选择目的地存储设备。根据本公开的一个示例性实现方式,提出了条带相关度的概念,在此条带相关度表示特定候选存储设备与条带210之间的关联程度。条带相关度越低,则表示该特定候选存储设备与条带210中的区块所在的设备被同时访问的可能性越低。因而,可以优先地选择具有较低条带相关度的候选存储设备,来作为目的地存储设备。以此方式,可以提高条带210中的数据的访问效率。
46.根据本公开的一个示例性实现方式,可以基于两个存储设备之间的相关度来确定特定存储设备与特定条带之间的条带相关度。在下文中,首先介绍两个存储设备之间的相关度的概念。4d+1p的raid条带包括5个区块,并且5个区块中的数据通常被相关联地访问。这导致分别包括5个区块的5个存储设备的访问量有所提高。概括地讲,对于任意两个存储设备而言,这两个存储设备所共同服务的条带数量越多,则这两个存储设备被同时访问的可能性越大,并且这两个存储设备的工作负载越高。因而,应当尽量避免两个存储设备同时服务于过多的条带。
47.对于多个存储设备中的第i个存储设备和第j个存储设备(i≠j),这两个存储设备之间的相关度可以表示为γ
disk i,disk j
。根据本公开的示例性实现方式,可以将存储设备自身的相关度设置为0,也即,γ
disk i,disk i
=0。随着存储系统的使用,在存储系统中将会创建一些条带,在下文中,将参见图6描述如何确定存储设备之间的相关度。
48.图6示意性示出了根据本公开的一个实现方式的用于确定两个存储设备之间的相关度的过程600的框图。如图6所示,假设存储系统包括n(n为正整数)个存储设备d0至dn-1。存储系统中已经创建了3个条带610、620和630,可以基于共同涉及第i个存储设备和第j个存储设备的条带的数量,确定相关度γ
disk i,disk j
。如果期望确定存储设备do和存储设备d1之间的相关度(即,i=0,j=1),可以发现仅有条带610同时使用了存储设备d0和存储设备d1中的区块,因而γ
disk 0,disk 1
=1。
49.又例如,如果期望确定存储设备d1和存储设备d2之间的相关度(即,i=1,j=2),可以发现条带610同时使用了存储设备d1和存储设备d2中的区块,并且条带620也同时使用了存储设备d1和存储设备d2中的区块,因而γ
disk 1,disk 2
=2。类似地,可以确定多个存储设备中的任意两个存储设备之间的相关度。可以从存储系统的地址映射中方便地获取条带与条带中的区块之间的映射关系。因而,利用本公开的示例性实现方式可以以简单并且有效的方式确定任意两个存储设备之间的相关度γ
disk 1,disk 2
。
50.根据本公开的示例性实现方式,可以基于两个存储设备之间的相关度,来确定多个存储设备中的特定存储设备的设备相关度。具体地,可以分别确定该特定存储设备与该特定存储设备以外的每个其他存储设备之间的相关度。进一步,可以基于确定的相关度,确定特定存储设备的设备相关度。
51.根据本公开的示例性实现方式,可以将设备相关度设置为正比于存储设备与每个其他存储设备之间的相关度。例如,可以获取多个相关度的和,并且基于求和操作来确定设备相关度。利用本公开的示例性实现方式,可以基于简单的数学运算,来基于特定存储设备与其他存储设备之间的相关度,确定该特定存储设备的设备相关度。假设期望确定第i个存储设备的设备相关度,可以基于上文参见图6描述的方法来确定第i个存储设备与其他的第j个存储设备(0≤j≤n-1,并且i≠j)之间的相关度。根据本公开的示例性实现方式,可以基于如下公式1来确定第i个存储设备的设备相关度γ
disk i
:
[0052][0053]
其中γ
disk i
,表示第i个存储设备的设备相关度,γ
disk i,disk j
表示第i个存储设备和第j个存储设备之间的相关度,n表示资源池中的存储设备的数量。
[0054]
利用本公开的示例性实现方式,对于第i个存储设备而言,该设备的设备相关度γ
disk i
表示第i个存储设备与其他n-1个存储设备之间的相关度的总和。此时,设备相关度可以准确地衡量第i个存储设备与其他存储设备之间的相关程度,并且可以反映该存储设备的工作负载。基于设备相关度来选择用于创建条带的存储设备,可以准确地基于各个存储设备的工作负载,来选择有助于实现负载均衡的适合的存储设备。
[0055]
将会理解,上文公式1仅仅示意性示出了用于确定设备相关度的一个具体示例。根据本公开的示例性实现方式,还可以采用其他公式来确定设备相关度。例如,可以基于多个相关度的乘积来确定设备相关度。根据本公开的一个示例性实现方式,可以基于设备相关度来确定条带相关度。在此条带相关度描述一个存储设备与一个条带所在的多个存储设备之间的相关度。条带相关度越高则表示该存储设备与条带之间的关系越密切。例如,可以基于如下公式2来确定第i个存储设备与第k个条带之间的条带相关度γ
disk i,re k
。
[0056][0057]
其中γ
disk i,re k
表示第i个存储设备与第k个条带之间的条带相关度,γ
disk i,disk j
表示第i个存储设备和第j个存储设备之间的相关度,以及第j个存储设备表示包括在第k个条带中的区块的各个存储设备。利用本公开的示例性实现方式,存储设备与条带中的每个区块所在的存储设备之间的相关度可以反映存储设备与条带所涉及的各个存储设备之间的密切程度。通过将多个相关度求和,可以以简单并且有效的方式确定设备与条带之间的密切程度。
[0058]
根据本公开的一个示例性实现方式,可以分别确定一组候选存储设备与条带之间的一组条带相关度。进一步,可以基于一组条带相关度,从一组候选存储设备中选择目的地存储设备。根据本公开的示例性实现方式,可以比较每个候选存储设备的条带相关度并且选择具有最小条带相关度的候选存储设备,来作为目的地存储设备。以此方式,可以尽量利用与当前条带所涉及的各个存储设备之间关系较为疏远的存储设备,这使得条带可以以较高的性能运行。
[0059]
为了方便描述起见,可以利用符号γ
disk i,re current
表示第i个存储设备与当前条带之间的条带相关度。其中re current表示当前条带中的区块所在的存储设备。利用本公开的示例性实现方式,仅需要通过简单的数学计算,即可逐一确定每个存储设备的条带相关度。以此方式,可以确保每次从多个存储设备中选择最为有助于实现负载平衡的存储设备来作为目的地存储设备。
[0060]
上文已经描述了基于条带相关度来选择目的地存储设备。根据本公开的示例性实现方式,还可以基于存储设备的条带相关度和设备相关度两者,来选择目的地存储设备。将会理解,条带中的多个区块将被相关联地访问,基于条带相关度来选择存储设备可以考虑所创建的条带中的各个存储设备之间的相互影响。进一步中,存储设备的性能还会受到该存储设备与其他存储设备之间的相关度(即,设备相关度)的影响。因而,可以基于条带相关度和设备相关度两者来选择存储设备。利用本公开的示例性实现方式,可以充分考虑以上两方面因素,进而提高存储系统的整体性能。
[0061]
根据本公开的示例性实现方式,可以基于公式3来确定第i个存储设备与当前条带
之间的组合相关度γ
′
disk i,re k
。
[0062]
γ
′
disk i,re current
=γ
disk i,re current
+γ
disk i
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
公式3
[0063][0064]
其中γ
′
disk i,re current
表示第i个存储设备与当前条带之间的组合相关度,γ
disk i,re current
表示第i个存储设备与当前条带之间的条带相关度,以及γ
disk i
表示第i个存储设备的设备相关度。将会理解,公式3仅仅是用于计算组合相关度的一个具体示例,根据本公开的示例性实现方式,可以采用其他公式来确定组合相关度。例如,可以基于条带相关度和设备相关度的乘积来确定组合相关度。
[0065]
上文已经基于公式2和公式3描述了如何确定交集中的各个存储设备与当前条带的条带相关度。根据本公开的一个示例性实现方式,可以基于公式2或3来确定每个候选存储设备的条带相关度,进而选择具有较低(最低)条带相关度的存储设备来作为目的地存储设备。
[0066]
根据本公开的一个示例性实现方式,可以基于目的地存储设备中的未使用的备用区块的数量,来选择目的地存储设备。例如,可以优先地选择具有较多未使用备用区块的候选存储设备作为目的地存储设备。利用本公开的示例性实现方式,可以尽量使用包括丰富备用区块的存储设备来作为迁移目的地。以此方式,可以避免在目的地存储设备中出现备用区块不足的情况。进一步,可以从目的地存储设备中的未被使用的备用区块中选择目的地区块。例如,可以随机地选择一个未被使用的备用区块。
[0067]
在框340处,将源区块中的数据迁移至目的地区块。在下文中,将参见图7描述有关数据迁移的更多细节。图7示意性示出了根据本公开的一个实现方式的从源区块向目的地区块迁移数据的过程700的框图。假设区块212位于源存储设备550中,并且已经基于多个存储设备序列的交集确定了目的地存储设备710。此时,可以将源区块212中的数据迁移720至目的地区块712。
[0068]
将会理解,此时源区块212中的数据已经被拷贝至目的地区块712,因而可以基于目的地区块712的地址来更新条带210的地址映射。更新后的地址映射可以表示,条带210包括目的地区块712、区块212、213、214和215。进一步,因而可以将源区块212标识为备用区块。此时,源存储设备550中的备用区块的数量将会增加1。将会理解,上文仅示意性示出了将源存储设备550中的源区块211迁移至目的地存储设备710中的目的地区块712的操作。根据本公开的一个示例性实现方式,可以针对存储系统中的每个存储系统执行类似的操作。在下文中,将参见图8描述有关管理存储系统中的更多备用区块的过程。
[0069]
图8示意性示出了根据本公开的一个实现方式的用于基于动态窗口来管理备用区块的方法800的流程图。可以逐一处理存储系统中的每个存储设备。例如,可以逐一确定每个存储设备中的备用区块的数量。对于某个源存储设备而言,在框810处,如果确定源存储设备中的备用区块的数量低于预定阈值,则方法800前进至框820。在框820处,可以从源存储设备中选择源区块。例如,可以随机地选择源区块;又例如,可以基于源存储设备中的各个区块的工作负载,选择具有较低工作负载的源区块。在框830处,可以确定源区块所在的条带中的一组其他区块。在此,一组其他区块是指条带中的源区块以外的一个或多个区块。
[0070]
在框840处,可以确定分别与一组其他区块相关联的一组存储设备序列。具体地,可以基于上文描述的方法来分别确定与每个其他区块相关联的存储设备。在框850处,可以
从一组存储设备序列的交集中选择目标存储设备。例如,首先从交集中选择不同于条带中的任何区块所在的存储设备的一组候选存储设备。可以基于上文描述的公式2或者公式3,来从一组候选存储设备中选择具有较大备用存储空间的存储设备,来作为目标存储设备。进一步,在框860处可以将源区块中的数据迁移至目标存储设备中的未使用备用区块。
[0071]
将会理解,在框810至860处仅仅示意性示出了迁移一个源区块的过程。可以以类似方式来源存储设备中的其他区块。例如,方法800可以返回框810以便确定源存储设备中的备用区块数量是否达到预定阈值。如果该数量低于预定阈值,则可以再次执行框820至860处的各个步骤。如果该数量不低于预定阈值,则方法800结束。此时,已经完成针对存储系统中的一个存储设备的处理,可以以类似方式处理存储系统中的另一存储设备,在下文中将不再赘述。
[0072]
利用本公开的示例性实现方式,随着存储系统运行,各个存储设备中的备用区块的使用负载将会在整个存储系统中保持均匀分布。以此方式,可以在整个存储系统内部的各个存储设备中选择目的地存储设备并且进行迁移。由此,可以抛弃基于分组管理备用区块的限制,并且避免出现各个存储设备中的备用区块的负载不均衡。进一步,由于可以在整个存储系统内部共享备用区块,这使得不必针对每个分组预留大量备用存储空间。以此方式,可以提高存储系统中的存储空间的使用率。
[0073]
在上文中已经参见图2至图8详细描述了根据本公开的方法的示例,在下文中将描述相应的装置的实现。根据本公开的示例性实现,提供了一种用于管理存储系统中的备用区块的装置。该存储系统包括多个存储设备,并且该装置包括:选择模块,配置用于响应于确定多个存储设备中的源存储设备中的备用区块数量低于预定阈值,从源存储设备中选择源区块,源区块是存储系统包括的已经被创建的条带中的区块;确定模块,配置用于基于条带中的源区块以外的一组区块,确定分别与一组区块相关联的一组存储设备序列,一组存储设备序列中的存储设备序列与一组区块中的区块相关联,并且包括区块所在的存储设备以及与存储设备相邻的多个连续存储设备;标识模块,配置用于从一组存储设备序列中的多个备用区块中标识目的地区块;以及迁移模块,配置用于将源区块中的数据迁移至目的地区块。根据本公开的示例性实现方式,该装置还包括用于执行上文描述的方法中的其他步骤的模块。
[0074]
图9示意性示出了根据本公开的一个实现方式的用于基于动态窗口来管理备用区块的设备900的框图。如图所示,设备900包括中央处理单元(cpu)901,其可以根据存储在只读存储器(rom)902中的计算机程序指令或者从存储单元908加载到随机访问存储器(ram)903中的计算机程序指令,来执行各种适当的动作和处理。在ram 903中,还可存储设备900操作所需的各种程序和数据。cpu 901、rom 902以及ram 903通过总线904彼此相连。输入/输出(i/o)接口905也连接至总线904。
[0075]
设备900中的多个部件连接至i/o接口905,包括:输入单元906,例如键盘、鼠标等;输出单元907,例如各种类型的显示器、扬声器等;存储单元908,例如磁盘、光盘等;以及通信单元909,例如网卡、调制解调器、无线通信收发机等。通信单元909允许设备900通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0076]
上文所描述的各个过程和处理,例如方法300,可由处理单元901执行。例如,在一些实现中,方法300可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存
储单元908。在一些实现中,计算机程序的部分或者全部可以经由rom 902和/或通信单元909而被载入和/或安装到设备900上。当计算机程序被加载到ram 903并由cpu 901执行时,可以执行上文描述的方法300的一个或多个步骤。备选地,在其他实现中,cpu 901也可以以其他任何适当的方式被配置以实现上述过程/方法。
[0077]
根据本公开的示例性实现方式,提供了一种电子设备,设备包括:至少一个处理器;以及与至少一个处理器耦合的存储器,存储器具有存储于其中的指令,指令在被至少一个处理器执行时使得设备执行一种用于管理存储系统中的备用区块的方法,存储系统包括多个存储设备。该方法包括:响应于确定多个存储设备中的源存储设备中的备用区块数量低于预定阈值,从源存储设备中选择源区块,源区块是存储系统包括的已经被创建的条带中的区块;基于条带中的源区块以外的一组区块,确定分别与一组区块相关联的一组存储设备序列,一组存储设备序列中的存储设备序列与一组区块中的区块相关联,并且包括区块所在的存储设备以及与存储设备相邻的多个连续存储设备;从一组存储设备序列中的多个备用区块中标识目的地区块;以及将源区块中的数据迁移至目的地区块。
[0078]
根据本公开的一个示例性实现方式,确定一组存储设备序列包括:针对一组区块中的区块,从多个存储设备中确定区块所在的存储设备;以及基于预定窗口大小确定与存储设备相邻的多个连续存储设备。
[0079]
根据本公开的一个示例性实现方式,确定多个连续存储设备包括:基于预定窗口大小,从多个存储设备中选择多个连续存储设备,以使得存储设备靠近存储设备序列的中心。
[0080]
根据本公开的一个示例性实现方式,选择目的地区块包括:确定一组存储设备序列的交集;以及从交集中的至少一个存储设备中选择目的地区块。
[0081]
根据本公开的一个示例性实现方式,从交集中的至少一个存储设备中选择目的地区块包括:从至少一个存储设备中确定不包括条带中的任何区块的一组候选存储设备;从一组候选存储设备中选择目的地存储设备;以及从目的地存储设备中的未被使用的备用区块中选择目的地区块。
[0082]
根据本公开的一个示例性实现方式,从一组候选存储设备中选择目的地存储设备包括:分别确定一组候选存储设备与条带之间的一组条带相关度;以及基于一组条带相关度,从一组候选存储设备中选择目的地存储设备。
[0083]
根据本公开的一个示例性实现方式,分别确定一组候选存储设备与条带之间的一组条带相关度包括:针对一组候选存储设备中的给定存储设备,基于给定存储设备与条带中各个区块所在的各个存储设备的相关度,确定给定存储设备与条带的条带相关度。
[0084]
根据本公开的一个示例性实现方式,基于一组条带相关度,从一组候选存储设备中选择目的地存储设备进一步包括基于以下至少任一项来选择目的地存储设备:目的地存储设备的设备相关度;以及目的地存储设备中的未使用的备用区块的数量。
[0085]
根据本公开的一个示例性实现方式,从源存储设备中选择源区块包括:基于源存储设备中的已经被创建的各个条带中的各个区块的工作负载,选择源区块。
[0086]
根据本公开的一个示例性实现方式,该方法进一步包括:将源区块标识为备用区块;以及基于目的地区块的地址来更新条带的地址映射。
[0087]
根据本公开的一个示例性实现方式,多个存储设备以环形方式排列,条带是独立
磁盘冗余阵列中的条带,多个存储设备的数量大于用于形成独立磁盘冗余阵列的分组中包括的存储设备的数量的阈值上限,以及预定窗口大小是基于阈值上限确定的。
[0088]
根据本公开的示例性实现,提供了一种计算机程序产品,计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,机器可执行指令用于执行根据本公开的方法。
[0089]
根据本公开的示例性实现,提供了一种计算机可读介质。计算机可读介质上存储有机器可执行指令,当机器可执行指令在被至少一个处理器执行时,使得至少一个处理器实现根据本公开方法。
[0090]
本公开可以是方法、设备、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。
[0091]
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
[0092]
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
[0093]
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实现中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
[0094]
这里参照根据本公开实现的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或
框图中各方框的组合,都可以由计算机可读程序指令实现。
[0095]
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其他可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
[0096]
也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程数据处理装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其他可编程数据处理装置、或其他设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
[0097]
附图中的流程图和框图显示了根据本公开的多个实现的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0098]
以上已经描述了本公开的各实现,上述说明是示例性的,并非穷尽性的,并且也不限于所公开的各实现。在不偏离所说明的各实现的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实现的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文公开的各实现。