一种结合负载均衡的工作流回填方法与流程

文档序号:12719151阅读:221来源:国知局
一种结合负载均衡的工作流回填方法与流程

本发明涉及高性能计算领域,尤其是指一种结合负载均衡的工作流回填方法。



背景技术:

大数据背景下,数据呈指数级别增加,大数据的处理依赖以集群为主的高性能计算系统,而高性能计算系统的性能又很大程度上依赖于调度和负载均衡策略,所以一个好的调度策略和负载均衡策略显得越为重要。

如今运行在高性能计算系统上任务流越来越多,例如基因测序。基因测序是对目标DNA进行碱基的序列测定,并进行各种相关分析。基因测序已经广泛应用于快速疾病诊断、疫情检测、大规模物种群体进化及个性化医疗等。基因测序的大部分计算任务如全基因组重测序(WGRS)等都需要大量的计算,耗费巨大资源,依赖于高性能平台处理,而且都是典型的工作流计算任务。然而适合任务流的调度策略却很少,很多系统将任务流拆分成单个任务运行,按照传统的单任务投递方式进行调度,也就是单个任务投递,下一级任务依赖上一级任务结果的则进行人工等待,等上一级任务完成则将上一级运行结果作为输入,开始下一级的任务。随着技术的发展,目前也有许多运行任务流的系统,但仍然存在以下问题:

(1)在系统层面上,虽然整个计算任务是按照任务流提交,通过设定任务流的有向无环图(DAG)提交给系统,但是系统调度本质上还是以单个任务为单位,只不过无需人工的等待并能够自动运行下一级任务,调度策略还是以单个任务为单位,并不是以整个任务流作为调度单位,因此计算效率无法保证。

(2)在工作流调度时,经常出现任务特性和任务规模差异较大的情况。目前很多调度方法主要关注调度效率,例如在一般任务调度上有良好表现的资源预留与回填(简称回填,Backfilling)技术得到了广泛的应用,已成为并行作业调度的基本方法。它一方面为作业提前预留处理以保证能够尽快执行该作业;另一方面,在不造成预留的作业被延迟的前提下,按照先后顺序将那些需要处理机数量较少的后续等待作业分配到当前空闲的处理机上。然而对任务调度过程的负载均衡并没有较多关注。

(3)在很多实际运行的高性能计算系统上,普遍存在普通任务与工作流任务同时运行的情况。普通任务与工作流任务同时抢占系统资源,如果工作流任务未能被及时调度,对系统性能造成的影响可能要远远大于普通任务,从而对系统负载均衡和调度效率都会造成更大的影响。

要达到负载均衡,那么就需要了解各任务属性和各主机属性,把一些资源消耗较大的任务调度到负载较轻的主机上,这样就不会出现各主机负载差异过大,以达到负载均衡的目标,并提高资源利用率。本发明基于以上目标,提出了一种结合负载均衡的工作流调度策略。



技术实现要素:

本发明的目的在于克服现有技术的缺点与不足,在典型高性能计算系统计算任务日志特性的基础上,提出了一种结合负载均衡的工作流回填方法,该方法能够有效地调度任务流,减少任务流的执行时间,同时还能够实现高性能计算系统众多节点的负载均衡。

为实现上述目的,本发明所提供的技术方案为:一种结合负载均衡的工作流回填方法,包括以下步骤:

1)对任务特性的划分

先对任务进行分类,采用kmeans聚类方式将任务划分成CPU资源消耗型或者IO资源消耗型,主要是标识任务类型,聚类的类别数k的确定,采用一种失真度的度量方式来确定聚类类别数k,如下式(1)和式(2)所示:

式中,sk为聚成k类的总失真度sk=∑ki(xi-xk)2,xi第i个输入数据,xk为第k个中心点,αk为权重,Nd为输入数据维数,αk-1和sk-1分别是聚k-1类的权值和失真度,f(k)则表示聚成k类的失真度比例;通过不断的选择k取值,获取f(k)-k的变化曲线,然后找出变化曲线最低点,最低点即类别k理想情况;在最低点处,失真度sk达到最小;通过式(1)、(2)确定k,最后再依据下式(3)计算每个数据的类型信息;

式中,xi表示第i个数据点,ck表示第k个聚类中心点,f(xi)表示映射的任务类别信息值;任务模型根据任务基本属性CPU、IO以及任务类别信息值f(xi)这3属性在模拟平台上产生任务;

2)对回填策略的改进

主要对算法层面进行改进,使回填算法能够适应工作流;在对传统回填算法改进上增加了工作流调度方式、工作流输入方式即输入任务和任务偏序关系;还包含了对工作流调度方案的改进,主要是对回填调度算法改进,以及工作流单位和普通单个任务的竞争约束规则;改进回填算法执行流程:在模拟平台上先根据任务2个资源属性即CPU、IO数据以及类别信息值,结合平台设置相关参数产生任务,然后再根据任务之间的偏序关系生成任务流,具体是利用邻接矩阵,建立DAG来保存任务流信息,最后增加了设置任务优先级操作,对任务优先级进行设置,将任务提交至等待队列;在等待队列中首先选择可调度任务,扫描等待队列,从队列头开始调度,查看任务资源需求是否得到满足,然后对任务流检测,如果是任务流,则检测父级任务是否完成,如果能够调度则提交给调度器,否则将任务进行回填处理,将任务提交至回填子程序,最后对任务运行时间的精确预测操作,寻找回填间隙,如果能够回填,则重新提交给任务流检测子程序,如果不能回填,则将任务仍放入等待队列,开启下一个任务;

对任务运行时间的预测,主要是利用前后N条历史数据来获取限定,然后根据下式(4)、(5)预测任务运行时间;

式中,tj为任务j的预测运行时间,wi为权值,ri为任务i的实际运行时间,JRRi为任务i的请求运行时间,N为历史数据条数;回填策略的好坏直接受任务预测时间准确性影响,通过式(4)获取任务的运行时间,能够很好的改善回填效果;

对于工作流任务和普通任务之间的竞争规则,提出以下3条对工作流和普通任务之间竞争关系的约束:

a、普通任务和工作流比较,设置工作流和普通任务熵阈值,如果低于阈值,则提高普通任务优先级,普通任务和工作流同等对待,否则工作流优先级高于普通任务,如果只调度工作流,忽略该约束;

b、工作流任务的选择则需要判断前驱即所有直接父级任务已经结束,否则不能作回填;

c、工作流任务符合b点之间的比较排序,不同优先级队列任务,高优先级要先高于低优先级,同优先级则无差别对待;

对于约束a作相应的解释,如果调度普通任务和工作流任务混合场景,则要设置普通任务和任务流的优先级,否则忽略本约束;这里定义了工作流任务和普通任务之间的熵s=-PwflogPwf-PglogPg,其中Pwf表示工作流任务比例,Pg表示普通任务比例,并且Pg+Pwf=1,熵值S表现工作流任务和普通任务之间的均匀程度,所以熵值偏小,说明普通任务或工作流任务占比不均匀;设置熵阈值L,能够保证普通任务和工作流任务都能够得到调度,而不会出现工作流得到充分调度,普通任务得不到调度的情况;如果S<L并且Pwf<0.5,则提升任务流优先级,S<L并且Pg<0.5,则提升普通任务优先级,如果S>L,优先工作流;

3)回填任务的投递

回填任务投递需要遵循2条策略:一是作业需求的处理器数目小于当前的空闲处理器数,并且需要在阴影时间即从当前时间到任务开始回填的这段时间之前预期结束;二是任务队列排序不仅要考虑bml,该bml为backfilling matching level,是在等待队列中影响选择回填任务的一个因子,具体定义见下式(6),还要考虑各个资源主机或者虚拟机的负载和任务类别属性的匹配程度定义cml,该cml为class matching level,是在等待队列中影响回填任务选择主机的一个因子,具体定义见下式(7),利用如下两个公式计算两个匹配因子:

式中,cores_level=request_cores/free_cores,time_level=pre_runtime/shadow_time,request_cores为请求的核数,free_cores为当前空闲的核数,pre_runtime为任务预测运行时间,shadow_time为阴影时间,即当前时间到任务回填开始时间;回填任务投递给主机,考虑主机负载情况,再结合任务特性,给要投递的任务寻找合适的主机,寻找规则是负载高主机选择IO消耗型,负载低则选择CPU消耗型,从而达到负载均衡的目的。

本发明与现有技术相比,具有如下优点与有益效果:

1、本发明结合实际工作流,改变手工按步骤提交运行脚本方式,提供工作流作输入方式,相比传统分步骤的输入方式,本方法能够极大的降低中间等待时间和成本。

2、本发明对任务作了相应的聚类来标识任务特性。对任务作分类标识处理,区分IO密集型或者CPU密集型,并应用于任务调度中,结合主机负载,改进回填任务投递方式,有效实现各主机负载均衡。

3、本发明对回填调度策略进行改进,通过定义任务竞争规则,精确预测任务运行时间,优化回填调度策略。改进回填策略不仅可以调度工作流,有效降低任务等待时间,还能够提高任务执行效率。

附图说明

图1为工作流整体调度执行流程。

图2为工作流回填流程。

图3为多优先级设置流程。

图4为工作流检测流程。

图5为寻找时间间隙流程。

具体实施方式

下面结合具体实施例对本发明作进一步说明。

本实施例所述的结合负载均衡的工作流回填方法,具体情况如下:

一、对任务特性的划分

先对任务进行分类,采用kmeans聚类方式将任务划分成CPU资源消耗型或者IO资源消耗型,主要是标识任务类型,同时还要确定要聚类的类别数k,采用一种失真度的度量方式来确定聚类k,如下式(1)、(2)所示:

其中,sk为聚成k类的总失真度sk=∑ki(xi-xk)2,xi第i个输入数据,xk为第k个中心点,αk为权重,Nd为输入数据维数,αk-1和sk-1分别是聚k-1类的权值和失真度,f(k)则表示聚成k类的失真度比例。通过不断的选择k取值(可取经验值2至20),可获取f(k)-k的变化曲线,然后找出变化曲线最低点,最低点即类别k较理想情况。在最低点处,失真度sk达到最小。通过式(1)、(2)确定k,然后再依据式(3)计算每个数据的类型信息。

其中,xi表示第i个数据点,ck表示第k个聚类中心点,f(xi)表示映射的任务类别信息值。任务模型可根据任务基本属性(CPU、IO)以及任务类别信息值f(xi)这3属性在模拟平台上产生任务。

二、对回填策略的改进

主要是对回填算法的一些改进。在改进回填算法之前,先对算法流程进行简要说明。如图1所示的整体算法流程图,在模拟平台上先根据任务2个资源属性(CPU、IO)数据以及类别信息值,结合平台设置相关参数产生任务,然后再根据任务之间的偏序关系生成任务流(利用邻接矩阵),建立DAG来保存任务流信息,最后将任务流提交至等待队列或者将普通任务提交至等待队列(不同任务类型,提交至相应的队列)。如图2所示的改进回填算法,增加设置任务优先级操作,然后将任务提交至等待队列。在等待队列中首先选择可调度任务(扫描等待队列,从队列头开始调度,查看任务资源需求是否得到满足,增加任务流检测,如果是任务流,则检测父级任务是否完成),如果能够调度则提交给调度器,否则将任务进行回填处理,将任务提交至回填子程序(增加任务运行时间的精确预测操作),寻找回填间隙,如果可以回填,则重新提交给任务流检测子程序,如果不能回填,则将任务仍放入等待队列,开启下一个任务。调度器对任务调度,通过增加匹配度因子(权衡主机负载和任务类型匹配程度的因子,具体定义如式(6)、(7)所示)检测,将任务投递到合适的主机进行调度。

上面对改进回填调度流程进行相应的说明,针对传统回填策略的不足,对传统回填作了相应的改进,包括以下2点:

1.对任务运行时间的预测,主要是利用前后N条历史数据来获取限定,然后根据式(4)(5)预测任务运行时间。

其中tj为任务j的预测运行时间,wi为权值,ri为任务i的实际运行时间,JRRi为任务i的请求运行时间,N为历史数据条数。通过式(4)可以获取任务的运行时间,回填策略的好坏直接受任务预测时间准确性影响,预测一个较准确的任务运行时间可以很好的改善回填效果。

2.多优先级任务设定,对任务流的调度比较复杂,如果不设置和定义相应的优先级,则任务流和普通任务,竞争关系无法确定,无法确定优先调度工作流还是普通任务。原回填策略因为调度单位是普通任务,所以任务之间平等关系,无优先级之分,改进回填策略调度单位为工作流,和普通任务之间是有相应的优先级区别。因此提出以下3条对工作流和普通任务之间竞争关系的约束:

1)普通任务和工作流比较,设置工作流和普通任务熵阈值,如果低于阈值,则提高普通任务优先级,普通任务和工作流同等对待,否则工作流优先级高于普通任务。如果只调度工作流,忽略该约束。

2)工作流任务的选择则需要判断前驱(所有直接父级任务)已经结束,否则不能作回填。

3)工作流任务(符合第2点)之间的比较排序,不同优先级队列任务,高优先级要先高于低优先级,同优先级则无差别对待。

对于约束1作相应的解释,如果调度普通任务和工作流任务混合场景,则要设置普通任务和任务流的优先级,否则忽略本约束。这里定义了工作流任务和普通任务之间的熵s=-PwflogPwf-PglogPg,其中Pwf表示工作流任务比例,Pg表示普通任务比例,并且Pg+Pwf=1,熵值S表现工作流任务和普通任务之间的均匀程度,所以熵值偏小,说明普通任务或工作流任务占比不均匀。设置熵阈值L,可以保证普通任务和工作流任务都能够得到调度,而不会出现工作流得到充分调度,普通任务得不到调度的情况。如果S<L并且Pwf<0.5,则提升任务流优先级,S<L并且Pg<0.5,则提升普通任务优先级,如果S>L,优先工作流。

三、回填任务的投递

需要遵循下面2条策略:一是作业需求的处理器数目小于当前的空闲处理器数,并且需要在阴影时间(从当前时间到任务开始回填的这段时间)之前预期结束。二是任务队列排序时定义bml(backfilling matching level,在等待队列中影响选择回填任务的一个因子),见式(6),还要考虑各个资源主机或者虚拟机的负载和任务类别属性的匹配程度定义cml(class matching level,在等待队列中影响回填任务选择主机的一个因子),见式(7)。利用如下两个公式可计算两个匹配因子:

其中cores_level=request_cores/free_cores,time_level=pre_runtime/shadow_time,request_cores为请求的核数,free_cores为当前空闲的核数,pre_runtime为任务预测运行时间,shadow_time为阴影时间(当前时间到任务回填开始时间)。

回填任务投递给主机,考虑主机负载情况,再结合任务特性,给要投递的任务寻找合适的主机,寻找规则是负载高主机选择IO消耗型,负载低则选择CPU消耗型,从而达到负载均衡的目的。

通过以上改进,可使回填策略能够调度工作流和达到负载均衡的目的。最后对各个子程序进行相应的说明,如图3是优先级的设置,按照内容二的介绍,根据资源属性(CPU、IO)以及任务类别信息值,结合平台参数生成相应的任务,利用提交过来的任务,然后可以通过任务的ID在DAG处找到该任务所在的工作流,然后通过工作流的邻接矩阵,可以找出该任务在工作流中的深度,这样可以获取任务的优先级。图4是检测任务的父级任务是否完成,调度任务流或任务的时候需要进行任务流检测,也就是说该任务如果是任务流,那么必须对检测所有父级任务的完成,否则不能调度该任务。如果任务为普通任务,那么按照正常的策略进行调度。图5则是给回填任务选择适合的主机,分配主机要先检测可以分配的主机群,然后对任务做匹配度因子cml的检测,选择出最佳的匹配主机。在任务调度阶段,还需要做一个任务的bml匹配因子调整,调整等待队列任务顺序,该操作在任务调度之前完成,通过bml调整等待队列,优先选取短小任务进行回填。

以上所述实施例只为本发明之较佳实施例,并非以此限制本发明的实施范围,故凡依本发明之形状、原理所作的变化,均应涵盖在本发明的保护范围内。

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