As is known to all……咳咳
众所周知,一个workflow就是一张有向图,以Epigenomics为例,它大概长这样:
图.1 Epigenomics_46,实际有47个任务
工作流的形状就像好多棵交错纠缠的树,构成森林……哦不还是 有向图呀;
其中可能存在多个入度为零的节点,我们暂且称之为“根节点”。
以上图为例,有两个“根节点”,我们可以用一句话很方便的找出它们:
至此,已知task_i->vm_solution[i],接下来就是仿真调度。具体安排:
每台vm上的时间片(Event)将由一个一个的任务拼接连成;
其中,每一个任务都有一个就绪时间readyTime,一个执行时间timeCost,一个完成时间finishTime(放到实际就是actReadyTime、actFinishTime);
如果父任务pre与子任务suc不在同一台vm上执行,则它们之间还存在一个传递时间transferTime;
一台vm的完成时间由它上面拥有最大完成时间的任务决定;
整体的makespan,即这些vm里的最大finishTime决定。
好了,可以安排时间片了。那怎么来精确求出各个任务的实际就绪时间、完成时间呢?
可以从这些根节点出发,按DFS来遍历它们。自己写了一个适用于task_i->vm_solution[i]的代码:
private double max(double a, <