1.一种面向云计算平台的科学工作流任务调度方法,其特征在于,包括以下步骤:步骤1:科学工作流由多个任务相互协作完成,任务及任务间的约束关系模型化为DAG图;其中,所述DAG图中的每个结点代表一个任务;对于结点任务Ti,其在虚拟机上的任务运行时间为R(Ti);任务间的通信代价为W;当两个任务被分到同一个调度组合时,任务间的通信开销为0;
步骤2:转换DAG图为in-tree结构任务图,具体步骤为:
步骤2.1,对DAG图进行广度优先遍历,遇到出度为d的fork结点时,d≧2,进行如下操作:(1)如果该fork结点的入度为0,则复制该fork结点d-1次,使该fork结点的每一个后继结点将该fork结点作为独立直接前驱结点;
(2)如果该fork结点的入度不为0,则将该fork结点连同其前驱路径一同复制d-1次,同样使该fork结点的每一个后继结点将该fork结点作为独立直接前驱结点;
步骤2.2,通过以上的结点复制操作,每个fork结点被其后继结点作为一个独立的直接前驱结点,由此得到in-tree结构任务图;
步骤3:构造调度集合,具体步骤为:
步骤3.1,按照层次递增的顺序,同一层次结点按照结点序号递增排序,依次遍历in-tree结构任务图中的所有结点任务,采取如下选择调度策略得到每个结点任务对应的调度集合以及该结点任务对应的调度集合的执行时间;其中,结点任务对应的调度集合由至少一个结点任务对应的调度组合形成;
(1)对于结点任务Ti,如果结点任务Ti的入度为0,即没有直接前驱结点,则结点任务Ti对应的调度集合Pi由一个结点任务Ti对应的调度组合Ei形成;该调度组合Ei中只有结点任务Ti一个成员;即:调度集合Pi={{调度组合Ei}}={{结点任务Ti}};
该结点任务Ti对应的调度集合Pi的执行时间R(Pi)=结点任务Ti对应的调度组合Ei的执行时间R(Ei);其中,R(Ei)=结点任务Ti的任务运行时间R(Ti);
(2)如果结点任务Ti只有一个直接前驱结点,将直接前驱结点记为Tj,直接前驱结点Tj对应的调度集合为调度集合Pj,调度集合Pj的执行时间为R(Pj);
则:直接合并结点任务Ti与其直接前驱结点对应的调度集合Pj,得到结点任务Ti对应的调度集合Pi,即:调度集合Pi={结点任务Ti∪{调度集合Pj}};
结点任务Ti对应的调度集合Pi的执行时间R(Pi)=调度集合Pj的执行时间R(Pj)+结点任务Ti的任务运行时间R(Ti);
(3)如果结点任务Ti为join结点,其包含k个直接前驱结点,通过如下步骤产生结点任务Ti对应的调度集合Pi:步骤1):计算结点任务Ti的每个直接前驱结点所对应的调度集合的执行时间与结点任务Ti和该直接前驱结点之间通信代价之和,将和值记为Y;
按Y值由大到小顺序,将结点任务Ti的各个直接前驱结点排序;排序第1位的直接前驱结点为第1位直接前驱结点,记为Tis(1);排序第2位的直接前驱结点为第2位直接前驱结点,记s为Ti(2);以此类推;假设共有x个直接前驱结点;排序第x位的直接前驱结点为第x位直接前驱结点,记为Tis(x);
合并结点任务Ti与第1位直接前驱结点Tis(1)所对应的调度集合,形成结点任务Ti所对应的第1个调度组合Ei(1),即:第1个调度组合Ei(1)={结点任务Ti∪{Tis(1)所对应的调度集合}};
如果同时有两个以上的直接前驱结点具有同样的Y值,则选择具有较大通信代价的直接前驱结点形成第1个调度组合Ei(1);通过该步骤,将关键路径上的任务调度到同一个调度组合,有效提前结点任务Ti的开始时间;
步骤2):令k=2;
步骤3):从结点任务Ti余下的直接前驱结点中选择第k位直接前驱结点Tis(k),计算得到第1个调度组合Ei(1)中除去结点任务Ti外其它结点的总执行时间Q;
分别计算以下两个值:
第一个值:如果合并Tis(k)到第1个调度组合Ei(1)时,该结点任务Ti的开始运行时间B1,即:B1=Q+R(Tis(k)),R(Tis(k))代表第k位直接前驱结点Tis(k)的任务运行时间;
s
第二个值:如果不合并Ti (k)到第1个调度组合Ei(1)时,该结点任务Ti的开始运行时间B2,其中,B2取以下两个值中的最大值,一个是Q;另一个是Tis(k)对应的调度集合的执行时间与Tis(k)到结点任务Ti的通信代价的和;
如果B1≤B2,则合并Tis(k)到第1个调度组合Ei(1)中,形成新的第1个调度组合Ei(1);如s果B1>B2,形成第k个调度组合Ei(k),第k个调度组合Ei(k)为Ti(k)对应的调度集合;
步骤4)令k=k+1;判断k是否大于x,如果不大于,返回步骤3);如果大于,则表明结点任务Ti的所有直接前驱结点均被调度完,统计最终是否有Ei(k),如果没有,结点任务Ti的调度集合Pi={{Ei(1)}};结点任务Ti对应的调度集合Pi的执行时间R(Pi)=第1个调度组合Ei(1)的执行时间=第1个调度组合Ei(1)的各个结点任务的任务运行时间之和;
如果有Ei(k),假设共有z个Ei(k),分别为Ei(k1)、Ei(k2)…Ei(kz),则结点任务Ti的调度集合Pi={{Ei(1)},{Ei(k1)},{Ei(k2)},…,{Ei(kz)}};结点任务Ti对应的调度集合Pi的执行时间R(Pi)=Ei(1)中各个任务结点的运行时间之和;
因此,设共有n个结点任务,当遍历完成最后一个结点任务En时,结点任务En的调度集合Pn区分以下两种情况:第一种:结点任务En的调度集合Pn={{En(1)}};
第二种:结点任务En的调度集合Pn={{En(1)},{En(k1)},{En(k2)},…,{En(ka)}};其中,a为结点任务En的调度集合中除En(1)的调度组合数量;
步骤4:如果结点任务En的调度集合Pn属于上述第二种情况,则采用以下方法调整结点任务En的调度集合Pn:步骤4.1,在调度集合Pn中统计只调度过一次的任务,形成单次调度任务集;然后,判断En(k1),En(k2),…,En(ka)中是否存在不包含任意一个属于单次调度任务集中的任务的调度组合,如果有,则表明该调度组合为冗余调度组合,删除该冗余调度组合;
步骤4.2,合并调度集合Pn中的调度组合,步骤为:
步骤4.2.1,令结点任务En的调度集合Pn={{En(1)},{En(k1)},{En(k2)},…,{En(ka)}}={{C0},{C1},…,{Ca}};即:En(1)=C0;En(k1)=C1;…;En(ka)=Ca;
Cu,Cv∈C,并且v>u;
步骤4.2.2,令u=0;
步骤4.2.3,在Cu中查找空闲时间即slot(Cu);
步骤4.2.4,令v=u+1;
步骤4.2.5,在Cv中搜索没有在Cu中出现的任务,构成一个新的任务组合,表示为Tset(Cv),判断是否满足以下两个规则:规则1:Tset(Cv)的执行时间小于等于slot(Cu);
规则2:Cv的后继任务的开始时间不能延迟;
如果满足规则,则将Tset(Cv)插入到slot(Cu);
步骤4.2.6,更新slot(Cu),使slot(Cu)=slot(Cu)-Tset(Cv);
步骤4.2.7,令v=v+1;判断v是否大于a,如果不大于,返回步骤4.2.5;如果大于,执行步骤4.2.8;
步骤4.2.8,令u=u+1,判断u是否大于a-1,如果不大于,返回步骤4.2.3;如果大于,执行步骤4.2.9;
步骤4.2.9,得到新的调度集合Pn;
步骤5,调度集合Pn中的调度组合数量即为所需要的虚拟机数量,将调度集合Pn中的各个调度组合分配给对应的一个虚拟机执行。
2.根据权利要求1所述的面向云计算平台的科学工作流任务调度方法,其特征在于,步骤5具体为:步骤5.1,根据任务的类型和用户的需求选择虚拟机;虚拟机的数量等于调度集合Pn中的调度组合数量;
步骤5.2,查找出每个虚拟机的可利用的空闲时间,并计算空闲时间长度,再按照空闲时间长度降序排列虚拟机;
步骤5.3,按照调度集合Pn中的各个调度组合的执行时间,降序排列调度集合Pn中的各个调度组合,得到新的调度集合Pn;
步骤5.4,从新的调度集合Pn中,依次取出各个调度组合,查找步骤5.2中排列的各虚拟机,选取空闲时间最合适的虚拟机,如果调度组合的执行时间小于等于虚拟机的空闲时间,则分配该调度组合到此虚拟机的空闲时间;否则分配该调度组合到使其具有最早完成时间的虚拟机上,更新虚拟机空闲时间。