经历过才能真的感受,做一个靠谱的人!
分类: 云计算
2013-09-23 09:38:19
CloudSim源码分析之startSimulation()
在CloudSim源码中的example都是通过startSimulation()启动仿真过程,实际上startSimulation()方法内部做了非常多的工作,此次博客将详细分析startSimulation()方法的工作流程。
startSimulation()是CloudSim类的静态方法,该方法在所有的实体被创建和加载之后调用,开始执行CloudSim仿真,直到所有的实体完全执行(所有的实体线程到达non-RUNNABLE状态或者在future队列中没有事件)才结束。
startSimulation()方法完成的核心工作:
1、启动所有在startSimulation()方法之前定义好的实体(CloudSimShutdown、CloudInformationService、Datacenter、DatacenterBroker)。核心是根据不同实体间的逻辑关系创建相关事件,并将事件添加到等待队列(future)。比如:datacenter实体首先需要向CIS注册,因此datacenter会创建一个向CIS请求注册的事件,并将该事件添加到等待队列;datacenterBroker实体需要知道数据中心特征,因此datacenterBroker会创建一个向datacenter实体请求数据中心特征的事件,并将该事件添加到等待队列。在下面的源码中会按照方法调用的深度详细分析。
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
2、处理具体的仿真任务,实际是处理延时队列以及等待队列中的各种事件。CloudSim允许仿真突然中止、在特定时刻中止仿真、在某一时刻暂停仿真,最主要也最一般的情况是在一个时钟心跳期间处理事件队列中的事件。在下面的源码中会按照方法调用的深度详细分析。
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
3、获取仿真运行时间,仿真完成,运行结束。
点击(此处)折叠或打开
(1)startSimulation()源码分析:
(1)处理仿真事件
xiaoyao38572014-03-21 16:24:25
xiaoyao3857:学习笔记,结构清晰,解说落到实处,并有实际问题留待探讨,很有帮助,我这里受益不少,另外,我也抛个问题:各事件是如何设置与相应的处理程序对应的,比如对于CloudSim.VM_DATA_ADD是由什么事件设置的
另外,任务队列中什么时候从Deffered加入到Future队列中,可能是在CloudletScheduler的派生类中实现的
回复 | 举报xiaoyao38572014-03-21 15:05:16
学习笔记,结构清晰,解说落到实处,并有实际问题留待探讨,很有帮助,我这里受益不少,另外,我也抛个问题:各事件是如何设置与相应的处理程序对应的,比如对于CloudSim.VM_DATA_ADD是由什么事件设置的