CloudSim¶
基础类¶
- Cloudlet 对应的是云端应用
- Vm 对应的是虚拟机,其中封装了虚拟机相应的属性和行为
- Broker 对应的是用户代理,是云端用户的代表,包括虚拟机和云应用在内的资源都要绑定到Broker上。
- Host 对应的是物理主机
- Datacenter 对应的是数据中心,所有物理主机资源必须绑定到数据中心,至少创建一个
模拟实验步骤¶
- 初始化CloudSim
- 创建数据中心DataCenter
- 创建用户代理Broker
- 创建虚拟机Vm
- 创建应用Cloudlet
- 将云端应用绑定到指定的虚拟机上
- 开启模拟仿真
- 结束模拟仿真
- 打印输出仿真结果
DataCenter中Host的创建¶
所需参数:
- 主机编号
- 内存
- 网络带宽
- 外存容量
- cpu列表
- 虚拟机调度策略(主机上的)
1 | new Host( |
数据中心的创建¶
首先创建数据中心特性:需要的参数 @parameter :
- 主机架构
- 操作系统
- 虚拟机监视器种类
- 时区
- cpu的使用费用
- 内存的使用费用
- 外存的使用费用
- 带宽的使用费用
1 | new DatacenterCharacteristics( |
创建数据中心:
- 数据中心的名字
- 数据中心特性
- 虚拟机的创建策略
- 存储设备列表
1 | new Datacenter(name, characteristics, new VmAllocationPolicySimple(hostList), storageList, 0); |
虚拟机的创建¶
需要的参数 @parameter:
- 虚拟机编号
- 用户
- MIPS(Tips:CPU是由MIPS来标定其计算能力的)
- 镜像大小(MB)
- 内存大小(MB)
- 网络带宽
- cpu数量
- 虚拟机监视器类型
- 应用调度策略(虚拟机上的)
1 | new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared()); |
应用的创建¶
需要的参数 @parameter :
- 应用编号
- 执行时的应用长度(MI)
- 要使用到的处理器数量
- 提交应用前的文件大小(byte)
- 应用执行完成后的文件大小(byte)
- cpu的使用模型/策略
- ram的使用模型/策略
- 网络带宽的使用模型/策略
1 | new Cloudlet(id, length, pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel); |
用户的创建¶
一般情况下,Broker的创建需要自定义以适应不同的用户策略.
暂停仿真¶
- 覆盖Runnable接口的run方法;
- 将要运行的代码放在run方法中;
- 向cloudsim核心引擎层提交暂停仿真事件;
- Cloudsim仿真暂停5秒钟后,动态创建数据中心代理broker_1;
- 创建虚拟机和云任务并提交到broker_1代理中;
- 提交虚拟机列表和云任务列表;
- 重启Cloudsim仿真;
1 | // A thread that will create a new broker at 200 clock time |
改写仿真事件¶
processEvent¶
- 继承SimEntity类
- 创建代理
- 创建虚拟机和云任务并提交虚拟机列表和云任务列表
- Cloudsim.resumeSimulation();
startEntity¶
- 调用schedule()
网络¶
网络拓扑的信息包括:
- 节点的位置
- 节点的有向边
- 边时延
- 边带宽等信息
调用org.cloudbus.cloudsim.NetworkTopology构建网络拓扑图,然后把Cloudsim实体与拓扑图的节点进行映射.生成延迟矩阵(利用FloydWarshall计算的最短路径之后得出的)和带宽矩阵.
1 | //Sixth step: configure network |
在brite文件中,程序寻找标记Nodes和Edges.从其下一行开始执行.
Node的格式(列)为:NodeID,xpos,ypos,indegree,outdegree,ASid(AS应用服务器,如果分层,节点属于的ASid),type(router/AS)
Edge的格式(列)为:边序号,始节点序号,终节点序号,边长度,边时延,边带宽.
通过事件管理引擎实现实体i到实体j的传递总共的仿真时间是t+d,其中t表示消息传送最初的仿真时间,d代表实体i与j之间的网络延时.
在network的datacenter中AppCloudlet可以理解为一个完整的工作流程,NetworkCloudlet可以理解为工作流程中的一个功能.