分配处理资源的方法、装置、设备及计算机可读存储介质与流程

文档序号:13427480阅读:158来源:国知局

本发明涉及存储系统领域,特别涉及一种分配处理资源的方法,还涉及一种分配处理资源的装置、设备及计算机可读存储介质。



背景技术:

随着科技的发展和社会的进步,人们对存储系统的性能要求越来越高,而使用缓存能够有效地提高存储的性能。在一种存储系统的体系结构中,所有的存储设备(比如硬盘、ssd盘等)首先被有效地管理为多个矩阵磁盘raid组,在存储系统运行的过程中,当数据被持续写入缓存后会导致缓存过多,这时需要将脏数据从缓存下刷到后端存储设备上。

现有技术是首先将具有脏数据单元的raid组串成链表,将获得的处理资源依次用于处理raid组,也就是说,用处理资源优先处理第一raid组,将第一raid组下刷至后端的存储设备后,再将剩余的处理资源优先用于处理下一raid组。但是,处理资源是有限的,如果按照依次将raid组下刷至后端的存储设备的方法,将导致一些raid组长期不能进行下刷操作,导致处理资源分配不均的问题,影响存储系统的性能。

因此如何均衡地分配处理资源是本领域技术人员目前需要解决的技术问题。



技术实现要素:

有鉴于此,本发明的目的在于提供一种分配处理资源的方法,能够均衡地分配处理资源,提高存储系统的性能;本发明的另一目的是提供一种分配处理资源的装置、设备及计算机可读存储介质,均具有上述有益效果。

为解决上述技术问题,本发明提供一种分配处理资源的方法,包括:

预先设置包含有raid组的链表,所述链表设有与所述raid组对应的可处理的脏数据单元的个数;所述raid组具有对应的当前需处理的脏数据单元;

在当前可使用的处理资源数大于零时,计算并更新待处理raid组当前需处理的脏数据单元数;

在所述待处理raid组所在的链表中存在剩余的所述raid组时,将所述待处理raid组所在的链表中的下一raid组设置为下一待处理raid组。

优选地,所述链表为包括多个级别的分级链表,所述分级链表中的每一级链表均设有本级别中所述raid组对应的可处理的脏数据单元的个数。

优选地,所述在所述待处理raid组所在的链表中存在剩余的所述raid组时,将所述待处理raid组所在的链表中的下一raid组设置为下一待处理raid组具体包括:

判断所述待处理raid组所在的链表中是否存在剩余的所述raid组;

如果存在,则将所述待处理raid组所在的链表中的下一raid组设置为下一待处理raid组;

判断所述待处理raid组当前需处理的脏数据单元数是否小于所述待处理raid组所在级别对应的所述可处理的脏数据单元的个数;

如果小于,则在将所述待处理raid组所在的链表中的下一raid组设置为下一待处理raid组之后,再将所述待处理raid组链接至对应的链表中。

优选地,所述计算并更新待处理raid组当前需处理的脏数据单元数具体包括:

将所述待处理raid组当前需处理的脏数据单元数与所述待处理raid组对应的可处理的脏数据单元的个数的差值再加上一个脏数据单元的值作为待处理raid组需消耗的处理资源数;

根据所述待处理raid组当前需处理的脏数据单元数与所述待处理raid组需消耗的处理资源数的差值得出待处理raid组剩余需处理的脏数据单元数;

将所述待处理raid组当前需处理的脏数据单元数更新为所述待处理raid组剩余需处理的脏数据单元数。

优选地,在所述将所述待处理raid组所在的链表中的下一raid组设置为下一待处理raid组之前进一步包括:

比较所述待处理raid组所在链表中其余raid组的当前需处理的数据单元数,将当前需处理的数据单元数值最大的raid组设置为所述下一raid组。

优选地,进一步包括:在所述raid组链接至对应的链表后开始计时,将达到预定时间的所述raid组设置为所述下一raid组。

优选地,在计算出所述待处理raid组需消耗的处理资源数之后进一步包括:

判断所述待处理raid组需消耗的处理资源数是否大于或等于所述当前可使用的处理资源数,若是,则将所述待处理raid组需消耗的处理资源数设置为所述当前可使用的处理资源数。

为解决上述技术问题,本发明还提供一种分配处理资源的装置,包括:

设置模块,用于预先设置包含有raid组的链表,所述链表设有与所述raid组对应的可处理的脏数据单元的个数;所述raid组具有对应的当前需处理的脏数据单元;

计算模块,用于在当前可使用的处理资源数大于零时,计算并更新待处理raid组当前需处理的脏数据单元数;

执行模块,用于在所述待处理raid组所在的链表中存在剩余的所述raid组时,将所述待处理raid组所在的链表中的下一raid组设置为下一待处理raid组。

为解决上述技术问题,本发明还提供一种分配处理资源的设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现上述任一种分配处理资源方法的步骤。

为解决上述技术问题,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种分配处理资源方法的步骤。

本发明提供的分配处理资源的方法,包括预先设置包含有raid组的链表,链表设有与raid组对应的可处理的脏数据单元的个数;raid组具有对应的当前需处理的脏数据单元;在当前可使用的处理资源数大于零时,计算并更新待处理raid组当前需处理的脏数据单元数;在待处理raid组所在的链表中存在剩余的raid组时,将待处理raid组所在的链表中的下一raid组设置为下一待处理raid组。

可见,本方法是通过设置包含有raid组的链表,链表设有与raid组对应的可处理的脏数据单元的个数;raid组具有对应的当前需处理的脏数据单元;在当前有可使用的处理资源时,通过计算将处理资源分配去处理不同的raid组,由此能够有效地缓解单个raid组长期获取不到处理资源而不能进行处理的情况,从而均衡地分配处理资源,提高存储系统的性能。

为解决上述技术问题,本发明还提供了一种分配处理资源的装置、设备及计算机可读存储介质,均具有上述有益效果。

附图说明

为了更清楚地说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的一种分配处理资源的方法的流程图;

图2为本发明实施例提供的一种分配处理资源的方法的具体分配示意图;

图3为图1所示的分配处理资源的方法步骤s20中计算并更新待处理raid组当前需处理的脏数据单元数的具体流程图;

图4为本发明实施例提供的另一种具体的分配处理资源的方法的示意图;

图5为本发明实施例提供的另一种分配处理资源的方法的流程图;

图6为本发明实施例提供的一种分配处理资源的装置的示意图;

图7为本发明实施例提供的一种分配处理资源的设备的示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例的核心是提供一种分配处理资源的方法,能够均衡地分配处理资源,提高存储系统的性能;本发明的另一核心是提供一种分配处理资源的装置、设备及计算机可读存储介质,均具有上述有益效果。

为了使本领域技术人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。

图1为本发明实施例提供的一种分配处理资源的方法的流程图;图2为本发明实施例提供的一种分配处理资源的方法的具体分配示意图。如图所示,分配处理资源的方法包括:

s10:预先设置包含有raid组的链表,链表设有与raid组对应的可处理的脏数据单元的个数;raid组具有对应的当前需处理的脏数据单元。

需要说明的是,链表上设置的可处理的脏数据单元的个数指的是位于该链表上所有raid组都对应的可处理的脏数据单元的个数,相应的,链表上所有的raid组对应的当前需处理的脏数据单元数都在链表上可处理的脏数据单元数的范围内。一般的,链表上raid组需要下刷的单元个数固定为32kb,当然,单元个数也可以是其他的值,本实施例对此不做限定。

例如,设置一个链表的可处理的脏数据单元数的范围为7至9,则该链表上与raid组对应的可处理的脏数据单元的个数为7,链表上有4个raid组,4个raid组对应的当前需处理的脏数据单元数分别为7,8,8,9,因此,该链表上的4个raid组的可处理的脏数据单元的个数都为7。假设某一raid组对应的当前需处理的脏数据单元的个数为6,由于6不在范围7至9之间,因此,这个raid组不能链接于这个链表中。当然,上述情况只是本实施例的一种具体实施方式,在实际操作中,与raid组对应的可处理的脏数据单元的个数可以是根据操作需求或者操作经验设置,本实施例对此不作限定。

需要说明的是,不同的raid组可以使用不同的id进行标记,用于更方便地识别不同的raid组,使得处理资源在分配的过程中能够更准确地分配给不同的raid组。raid组根据各自当前需处理的数据单元数链接入对应级别的链表中。

s20:在当前可使用的处理资源数大于零时,计算并更新待处理raid组当前需处理的脏数据单元数。

具体的,在分配处理资源之前,需要向元数据申请处理资源,申请处理资源数有多种策略,一种是根据当前的缓存情况,例如,当前的缓存已接近缓存满的状态,此时申请到的处理资源数量相对于当前缓存较少的时申请到的处理资源数量就会更多;另一种是根据分配处理资源的周期,例如,相同的处理资源数在更短的时间内被分配去处理脏数据,那么下一次申请到的处理资源数将会更多。

在具体实施中,一种方式是当存储系统中的写缓存满时,将触发进程进行下刷脏数据,也就是进行分配处理资源;另一种方式是在存储系统中设置阈值,当存储的内容达到阈值时,将触发进程进行处理资源的分配;当然,也可以是其他的方式触发进程进行分配处理资源,本实施例对触发进行处理资源的分配的方式不做限定。

在当前可使用的处理资源数大于零时,也就是说目前有可使用的处理资源时,通过算法计算,根据计算的结果分配处理资源,并用计算得出的数据更新待处理raid组当前需处理的脏数据单元数。

s30:在待处理raid组所在的链表中存在剩余的raid组时,将待处理raid组所在的链表中的下一raid组设置为下一待处理raid组。

具体的,先判断待处理raid组所在的链表中是否存在剩余的raid组,也就是说,在当前待处理raid组所在的链表中,检测除当前待处理raid组以外是否还存在其他的raid组,如果存在,则将待处理raid组所在的链表中的下一raid组设置为下一待处理raid组。这样,就能将处理资源分配给其他的raid组,而不是让某一raid组优先将自身的脏数据单元全部下刷,导致其余的raid组则因没有分配到处理资源而需要等待更长的时间。

本实施例提供的分配处理资源的方法是通过设置包含有raid组的链表,链表设有与raid组对应的可处理的脏数据单元的个数;raid组具有对应的当前需处理的脏数据单元;在当前有可使用的处理资源时,通过计算将处理资源分配去处理不同的raid组,由此能够有效地缓解单个raid组长期获取不到处理资源而不能进行处理的情况,从而均衡地分配处理资源,提高存储系统的性能。

图3为图1所示的分配处理资源的方法步骤s20中计算并更新待处理raid组当前需处理的脏数据单元数的具体流程图。

请参考图3,步骤s20中计算并更新待处理raid组当前需处理的脏数据单元数的具体包括:

s21:将待处理raid组当前需处理的脏数据单元数与待处理raid组对应的可处理的脏数据单元的个数的差值再加上一个脏数据单元的值作为待处理raid组需消耗的处理资源数;

s22:根据待处理raid组当前需处理的脏数据单元数与待处理raid组需消耗的处理资源数的差值得出待处理raid组剩余需处理的脏数据单元数;

s23:将待处理raid组当前需处理的脏数据单元数更新为待处理raid组剩余需处理的脏数据单元数。

结合图2,假设当前可使用的处理资源为4个,raid组a为当前待处理的raid组,raid组a当前需处理的脏数据单元数为7,因此raid组a链接于链表的7-9级别的链表中,也就是说,raid组a当前可处理的脏数据单元数为7。

首先,计算raid组a需消耗的处理资源数,raid组a需消耗的处理资源数为(7-7+1),也就是说raid组a需消耗的处理资源数为1;

然后,计算raid组a剩余需处理的脏数据单元数,raid组a剩余需处理的脏数据单元数为(7-1),即raid组a剩余需处理的脏数据单元数为6;

最后,更新raid组a当前需处理的脏数据单元数,即raid组a当前需处理的脏数据单元数由于分配了1个处理资源进行处理,raid组a消耗了1个处理资源用于处理脏数据单元后,raid组a当前需处理的脏数据单元数由原来的7更新为6。

由此可见,通过上述算法,根据计算的结果分配进行处理资源,raid组将分配的处理资源用于处理部分当前需处理的脏数据单元,而不是将处理资源全部用于优先处理某一raid组,这样能够将剩余的处理资源分配给其他的raid组,因此分配给raid组消耗的处理资源数是均衡的,从而均衡地分配处理资源。

需要说明的是,在计算出待处理raid组需消耗的处理资源数之后进一步包括:

判断待处理raid组需消耗的处理资源数是否大于或等于当前可使用的处理资源数,若是,则将待处理raid组需消耗的处理资源数设置为当前可使用的处理资源数。

例如,结合图2,计算出raid组b需消耗2个处理资源,假设raid组c为待处理的raid组,计算得出raid组c需消耗的处理资源数为(8-7+1)为2,而4个可使用的处理资源分别分配给raid组a和raid组b使用后,此时可使用的处理资源数为(4-1-2)为1个,raid组c需消耗的处理资源数大于当前可使用的处理资源数,因此,raid组c剩余需处理的脏数据单元数为raid组c当前需处理的脏数据单元数与当前可使用的处理资源数的差值,即(7-1),而不是raid组a当前需处理的脏数据单元数与raid组a需消耗的处理资源数的差值(7-2),得出raid组c剩余需处理的脏数据单元数为7,即更新当前需处理的脏数据单元数为7。

可见,根据当前可使用的处理资源数调整待处理raid组需消耗的处理资源数,使得计算算法更贴合实际,使得分配处理资源的方法更科学。

在上述实施例的基础上,本实施例对技术方案作了进一步的说明和优化,具体的,在将待处理raid组所在的链表中的下一raid组设置为下一待处理raid组之前进一步包括:比较待处理raid组所在链表中其余raid组的当前需处理的数据单元数,将当前需处理的数据单元数值最大的raid组设置为下一raid组。

需要说明的是,每次待处理raid组在消耗处理资源后,都将更新自身对应的当前需处理的脏数据单元数。通过比较待处理raid组所在链表中其余raid组的当前需处理的数据单元数,将当前需处理的数据单元数值最大的raid组设置为下一raid组。值得注意的是,如果有多个当前需处理的数据单元数最大值相同的raid组,可以根据排列的顺序或者链接入链表的时间等参数确定设置哪一个raid组为下一raid组,本实施例对此不做限定。

可见,通过比较待处理raid组所在链表中其余raid组的当前需处理的数据单元数,并将当前需处理的数据单元数值最大的raid组设置为下一raid组可以将脏数据单元较多的raid组提前处理,避免某一raid组内脏数据单元过多影响系统的性能。

在上述实施例的基础上,本实施例对技术方案作了进一步的说明和优化,具体的,本实施例进一步包括:在raid组链接至对应的链表后开始计时,将达到预定时间的raid组设置为下一raid组。

需要说明的是,raid组链接至对应的链表的时间时不同的,可以在raid组中设置计时器,并设置raid组最长的等待时间,在raid组链接至对应的链表后启动计时开关开始计时,在达到预定的等待时间后,将raid组设置为下一raid组。

更进一步的,可以设置阶梯式的最长等待时间,也就是根据不同raid组内当前需处理的脏数据单元数的不同而设置不同的最长等待时间。例如,将当前需处理的脏数据单元数最大的raid组设置的最长等待时间最短,也就是可以优先处理;将当前需处理的脏数据单元数最小的raid组设置的最长等待时间最长,也就是说当前需处理的脏数据单元数最小的raid组可以等待的时间较长。当然,这只是本实施例中的一种优选的方案,还可以根据链表中的raid组根据其他规则设置计时时间,本实施例对此不做限定。

可见,在raid组内设置计时时间,可以使得某些长期获取不到处理资源的raid组尽快被处理,尽快提高系统的性能。

图4为本发明实施例提供的另一种具体的分配处理资源的方法的示意图。如图所示,本实施例相对于第一实施例,设置的链表为包括多个级别的分级链表,分级链表中的每一级链表均设有本级别中raid组对应的可处理的脏数据单元的个数。

可以理解的是,链表中分布的raid组的数量是不固定的,也就是说,对每一级链表中具体分布多少个raid组不限定,当然,不一定是所有级别上都分布有raid组,也可能存在某一级别上raid组数量为零的情况。可以理解的是,可以根据实际的需要或者实际经验设置级别的数量,本实施例对此不做限定。另外,本实施例对每一级对应的可处理的脏数据单元的数量的范围也不做限定。作为优选的实施方式,每一级对应的可处理的脏数据单元的数量的范围最好是不重叠的,也最好是连续的,没有间断。

例如,如图所示,本实施例中的链表设置有5个级别,每一级链表分布有raid组,每个raid组都有不同的id,每一级对应的可处理的脏数据单元的数量的范围分别为0,1-2,3-4,5-6,7及以上。具体的,raid组a具有7个当前需处理的脏数据单元数,因此链接在链表7及以上的级别中。也就是说,7及以上级的链表中的raid组需处理的脏数据单元数均为7及以上的数量,5-6级的链表中的raid组需处理的脏数据单元数均为5个或者6个,相应的,其他raid组都分布于对应的级别中。

本实施例提供的分配处理资源的方法,通过设置分级链表,使得raid组能够根据自身对应的当前需处理的脏数据单元数链接至对应的级别中,位于不同级别的raid组对于需要被处理的紧急程度是不同的,因此在能够均衡地分配处理资源的基础上,还能使处理资源得到最有效地使用。

图5为本发明实施例提供的另一种分配处理资源的方法的流程图,本实施例对技术方案作了进一步的说明和优化,具体的,如图所示,在步骤s30的基础上具体包括:

s31:判断待处理raid组所在的链表中是否存在剩余的raid组;

s32:如果存在,则将待处理raid组所在的链表中的下一raid组设置为下一待处理raid组;

s33:判断待处理raid组当前需处理的脏数据单元数是否小于待处理raid组所在级别对应的可处理的脏数据单元的个数;

s34:如果小于,则在将待处理raid组所在的链表中的下一raid组设置为下一待处理raid组之后,再将待处理raid组链接至对应的链表中。

在一种具体实施中,结合图4与图5,由上述实施例,在raid组a为当前待处理的raid组时,计算并更新raid组a当前需处理的脏数据单元数为6之后,判断raid组a所在的链表中是否存在剩余的raid组,如果存在,则将raid组a所在的链表中的下一raid组b设置为下一待处理raid组;若不存在,则结束分配进程或者从另一级的raid组开始分配;判断raid组a当前需处理的脏数据单元数6小于raid组a所在级别对应的可处理的脏数据单元的个数7;则在将raid组a所在的链表中的下一raid组b设置为下一待处理raid组之后,再将raid组a链接至对应的5~6级链表中。

需要说明的是,上述举例只是为了更清楚地解释本实施例的方案,本实施例对分级链表的具体数值设置以及raid组内的当前需处理的脏数据单元数不做限定。

本实施例提供的分配处理资源的方法,在上述有益效果的基础上,进一步根据raid组当前需处理的脏数据单元数将raid组链接至相应的级别的链表中,使得分级链表中的raid组按照级别分布;并且通过检查链表中是否存在剩余的raid组,可以充分利用可使用的处理资源。

上文对于本发明提供的一种分配处理资源的方法的实施例进行了详细的描述,本发明还提供了一种与该方法对应的分配处理资源的装置、设备及计算机可读存储介质,由于装置、设备及计算机可读存储介质部分的实施例与方法部分的实施例相互照应,因此装置、设备及计算机可读存储介质部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

图6为本发明实施例提供的一种分配处理资源的装置的示意图,包括:

设置模块60,用于预先设置包含有raid组的链表,链表设有与raid组对应的可处理的脏数据单元的个数;raid组具有对应的当前需处理的脏数据单元;

计算模块61,用于在当前可使用的处理资源数大于零时,计算并更新待处理raid组当前需处理的脏数据单元数;

执行模块62,用于在待处理raid组所在的链表中存在剩余的raid组时,将待处理raid组所在的链表中的下一raid组设置为下一待处理raid组。

本发明提供的分配处理资源的装置,具有上述分配处理资源的方法的有益效果。

图7为本发明实施例提供的一种分配处理资源的设备的示意图,包括:

存储器70,用于存储计算机程序;

处理器71,用于执行计算机程序时实现如下步骤:

预先设置包含有raid组的链表,链表设有与raid组对应的可处理的脏数据单元的个数;raid组具有对应的当前需处理的脏数据单元;

在当前可使用的处理资源数大于零时,计算并更新待处理raid组当前需处理的脏数据单元数;

在待处理raid组所在的链表中存在剩余的raid组时,将待处理raid组所在的链表中的下一raid组设置为下一待处理raid组。

本发明提供的分配处理资源的设备,具有上述分配处理资源的方法的有益效果。

为解决上述技术问题,本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现下步骤:

预先设置包含有raid组的链表,链表设有与raid组对应的可处理的脏数据单元的个数;raid组具有对应的当前需处理的脏数据单元;

在当前可使用的处理资源数大于零时,计算并更新待处理raid组当前需处理的脏数据单元数;

在待处理raid组所在的链表中存在剩余的raid组时,将待处理raid组所在的链表中的下一raid组设置为下一待处理raid组。

本实施例提供的分配处理资源的计算机可读存储介质,具有上述分配处理资源的方法的有益效果。

以上对本发明所提供的分配处理资源的方法进行了详细介绍。本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1