CloudSim(3.0.3)运行机制见解

本文为markdown重构版
原文链接:CloudSim(3.0.3)运行机制见解

接到导师的命令,最近几日在学习CloudSim3.0.3的源码,看着看着就意图弄清example的模拟过程,即从startSimulation()到stopSimulation()之间主要发生了什么。

CloudSim是目前应用最广泛的云计算环境模拟工具,采用Java编写。我们知道云数据中心的运转是连续的,各个实体(Vm,Host等)每一秒钟(当然可以说每一ms)都在变化,那么CloudSim是以什么样的方式进行模拟

答案是:基于事件的机制

下面我这几日对CloudSim模拟机制的关键见解:

1) CloudSim时间轴

云数据中心的运转是连续的,CloudSim也有全局变量CloudSim.clock用于记录时间,但与我最初设想不同,clock并不是步进的(并没有在某个函数中clock++什么的),而是基于“事件”的发生演进的。例如,当前正在处理的事件是event_0,它由实体DataCenter于clock=0发出,delay=0.1,那么处理该事件的函数(先由CloudSim.processEvent()处理)中,会将全局clock置为0.1,也即可以理解为event_0的发生使得时间轴前进了0.1s。举一个更具体的例子,在org.cloudbus.cloudsim.examples.CloudSimExample1.java中,DC实体(关于事件怎么传递给DC的,在下一个问题中讨论)处理CLOUDLET_SUBMIT事件时clock是0.1,处理过程中会产生VM_DC_EVENT(clock=0.1+400,发给自己)、CLOUDLET_RETURN事件(clock也是400.1,发给Broker)等等。当这两个event被处理时,时间轴自然就被推进到400.1这个时间点上了,即逻辑上代表某个VM执行完毕,在example1这个仅一个cloudlet的简单例子中,即代表所有云任务执行完毕。

2) CloudSim事件机制

在上一个话题中,我们可以总结出时间轴(clock)由事件驱动,那么CloudSim的事件处理机制如何?其中它采用了一个常见方案,事件队列——名为future并定义在CloudSim.java中。有事件,就必然有处理事件的主体——SimEntity,查看代码发现,CIS(CloudInformationSystem)对象、DC对象和DCBroker对象是三种最典型的实体,他们继承SimEntity类。简单来说,事件的处理机制是:事件被存放在future中,模拟程序开始(CloudSim.startSimulation)后,不断地检查future队列,取出事件并处理(往往伴随新事件的入队),直到future为空就可以开始进行结束模拟的相关动作。

源码中的调用逻辑:

CloudSim.startSimulation() ->(调用) CloudSim.run(){while(true){...runClockTick() ->(调用) processEvent()...}
}

这个CloudSim.processEvent()自己能处理ENULL(无效的)、CREATE和HOLD_DONE事件,但其实我发现这几个事件寥寥无几(实例化事件也不是CREATE)。该函数真正的作用在于将SEND类型的事件转交给相应的SimEntity(比如DC、Broker)去处理,即调用event.getDestination().processEvent()。DC、Broker类重载了父类SimEntity的processEvent()方法,它们就是destination(事件的目标),所以SEND事件都是被转交给DC、Broker等实体来执行的。

那么最初的(几个)事件是什么呢?毕竟后面的事件均由前面的触发。

运行example1是一个好方法:我通过在事件(SimEvent)的构造函数中输出构造的事件信息和时间,发现前几个event大概是实例化事件,包括:CIS实例化事件、DC实例化事件、Broker实例化事件(SimEntity对象的构造函数中会产生事件);接下来的事件是:REGISTER_RESOURCE(由DC.startEntity()产生)以及RESOURCE_CHARACTERISTICS_REQUEST(由Broker. startEntity()产生)。

探究代码发现:RESOURCE_CHARACTERISTICS_REQUEST是一系列后续事件的源头,因此模拟流程的大致逻辑是:DC和Broker之间往来事件以确认DataCenterCharacteristic创建完成 -> Broker产生事件VM_CREATE_ACK要求DC创建VM -> DC完成VM创建并产生ACK事件 -> Broker收到后接着产生CLOUDLET_SUBMIT事件要求DC处理分配执行云任务 -> DC调用相关函数更新集群状态(相当于执行任务)、产生相关事件(发给自己,事件clock已推进)、产生任务完成事件(事件的clock已推进)等 -> Broker处理CLOUDLET_RETURN等事件,模拟过程基本结束。

CloudSim(3.0.3)运行机制见解相关推荐

  1. 大数据之MapReduce详解(MR的运行机制及配合WordCount实例来说明运行机制)

    目录 前言: 1.MapReduce原理 2.mapreduce实践(WordCount实例) 目录 今天先总体说下MapReduce的相关知识,后续将会详细说明对应的shuffle.mr与yarn的 ...

  2. js中当等于最小值是让代码不执行_从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理...

    前言 见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正. ----------超长文+多图预警,需要花费不少时间.---------- 如果看完本文后,还对进程线程傻傻分不清,不清楚浏 ...

  3. 傻傻分不清的javascript运行机制

    学习到javascript的运行机制时,有几个概念经常出现在各种文章中且容易混淆.Execution Context(执行环境或执行上下文),Context Stack (执行栈),Variable ...

  4. 从hello world 说程序运行机制

    http://www.cnblogs.com/yanlingyin/archive/2012/03/05/2379199.html 开篇 学习任何一门编程语言,都会从hello world 开始.对于 ...

  5. js 多个定时器_从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理(二)

    作者:撒网要见鱼   https://segmentfault.com/a/1190000012925872 本文接上篇 <从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理(一)> ...

  6. http和https的区别 与 SSL/TLS协议运行机制的概述

    http和https的区别 与 SSL/TLS协议运行机制的概述 参考1 1 http 是不使用的SSL/TSL的通信通道 窃听风险:第三方获取通信内容 篡改风险:修改通信内容 冒充风险:冒充他人身份 ...

  7. JavaScript 运行机制详解:Event Loop——续

    转自:http://www.ruanyifeng.com/blog/2014/10/event-loop.html 五.定时器 除了放置异步任务的事件,"任务队列"还可以放置定时事 ...

  8. Visual Studio 2008 可扩展性开发(三):Add-In运行机制解析(下)

    前言 在上篇Add-In运行机制解析(上)中,我分析了Add-In向导生成的代码,从中我们知道只要创建一个类库,它包含实现了IDTExtensibility2接口的类,然后为其建立.addin配置文件 ...

  9. JavaScript 运行机制详解

    一:为什么JavaScript是单线程 JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事. 那么,为什么JavaScript不能有多个线程呢? 这样能提高效率! Java ...

最新文章

  1. 搭建 VUE + NODE.JS + ElementUI 学习过程中问题总结
  2. nginx tomcat https
  3. plsql连接不上64位oracle,plsql develope连接64位Oracle 11g出错解决方案(图)
  4. Ubuntu 中sendmail 的安装、配置与发送邮件的具体实现
  5. flutter 自定义 AppBar
  6. Golang类型转化方法汇总
  7. JSON.stringify() / JSON.parse()
  8. linux 摄像头设置时间同步,linux系统设置时间同步
  9. 解决git push远程分支错误
  10. React Hooks 实现和由来以及解决的问题
  11. 九九乘法表新打表(倒三角式)
  12. Linux运维基础软件
  13. web渗透学习目录-新手打开思路
  14. 分门别类刷leetcode——递归和回溯搜索(C++实现)
  15. 超级计算机在鄂尔多斯那个区,内蒙古超级计算机运算能力 进入中国最强行列...
  16. freemarker模板注入
  17. 双向链表list(十二)
  18. 链路层协议——SLIP协议和PPP协议
  19. 2013计算机视觉代码合集三
  20. vs2015安装时遇到更新KB2919355

热门文章

  1. FMX.Graphics.TBitmap.ApplyMask
  2. 构建文本数据集(tokenize、vocab)
  3. win7 网络计算机密码,告诉你win7系统局域网访问怎么设置需要密码
  4. Vue实现购物车完整代码
  5. 修改IIS6上传文件限制,下载附件大小限制
  6. initWithNibName与一般init的区别
  7. xshell密码保存位置_如何用BITLOCKER对移动硬盘进行加密和解密移除密码的方法
  8. 10.2函数牛顿迭代
  9. python颜色设置
  10. 【TFTP客户端--实现下载文件和上传文件】