1、IqrMC:Main()
- 采用Iqr的Vms分配算法和MC的Vms选择算法;
- 以PlanetLab数据为基础建立PlanetLabRunner对象;
1.1、RunnerAbstract:start()
- RunnerAbstract类,包括broker,cloudletList,vmList,hostList;
- 获取Vms分配策略,getVmAllocationPolicy(vmAllocationPolicy, vmSelectionPolicy, parameter);
- 创建DC:注册/绑定ICS;
Cloudsim
- 设置允许迁移策略;
- 设置停止时间;
- startSimulation()。
1.2、Cloudsim:run()
- 数据中心启动所有的Entities(继承SimEntity);
- 这些Entity包括:CloudsimShutdown、DC、DCBroker(云代理)等,这些对象在创建初始化的时候都会添加到Clousim中的Entities中。
1.3、CloudSim:runstart()->SimEntity:startEntity()
- 启动这些实体,将特定类型的cloudSimTag消息传给另外一个实体:sendNow()->send()->schedule();
- cloudsim:send();
- cloudsim在自己的FutureQueue未来事件队列里面添加消息事件simEvent,事件在添加的时候会传入所谓的“延时执行”和CloudSim对应的事件类型。
1.4、CloudSim:runClockTick()
- 首先,执行entities.run(),让所有实体执行自己消息队列的事件(第一次实际没有执行);
- 其次,CloudSim:processEvent(),cloudsim执行futureQueue里面的事件,如执行“消息传递send”;为此,每个Entities里面都会添加特定的消息事件。
1.5、CloudSim:finishSimulation()
- 循环执行:对于Cloudsim中所有的SimEntity,真正执行事件ent.run(),这些事件实际是在CloudSim:runClockTick()过程中添加的,每次事件执行过程中都可能会添加新的事件;
- 这些新添加的事件又会进一步传入CloudSim消息队列,然后由CloudSim周期执行把消息传个对应的“实体”。
1.6、SimEvent:run()->SimEvent:processEvent()
- 根据消息事件以及消息类型执行具体的工作。
1.7、CloudSim:runStop()