云计算实验(三)CloudSim练习

1、实验目的
CloudSim 是一个云计算仿真平台软件,提供给研究和设计人员做仿真实验。通过本次实验,初步了解 CloudSim,通过学习 CloudSim 内置的仿真实例,理解云计算应用设计的方法。
2、实验内容
(1)CloudSim 平台的安装
CloudSim 是用 java 开发的跨平台软件,在个人电脑上安装部署 CloudSim。
由于本人深入学习过java相关技术,从java基础到jsp,ssh,ssm之类的都已经学习过,现在已经在学习spring boot微服务了,所以java安装,构建工具maven的安装这些常规操作不再赘述。
云计算实验(三)CloudSim练习_第1张图片
打开cloudsim的下载页面,记得下载的是source code而不是上面两个打包好的,下载后得到cloudsim-cloudsim-4.0.zip
在这里插入图片描述
解压后如下,发现是一个maven项目(含有pom.xml文件)
云计算实验(三)CloudSim练习_第2张图片
使用IDEA导入该maven项目后发现该项目为maven聚合项目
云计算实验(三)CloudSim练习_第3张图片
项目下有三个子项目distribution、documentation和modules,modules项目下又有cloudsim和cloudsim-examples项目
直接运行CloudSimExample1的mian方法
云计算实验(三)CloudSim练习_第4张图片
运行成功
(2)运行 CloudSim 的 Examples——CloudSimExample5
CloudSim 带有 Basic Examples、Network Examples、Power Examples
、Container Examples 等例子。尝试正确运行其中的一个,并理解过程和运行结果。
参考资料(不限于):
https://blog.csdn.net/lhakuma/article/details/78754957
http://www.cloudbus.org/cloudsim/examples.html

依据CloudSim源代码介绍几个核心类:
(1) Cloudlet类:构建云环境下的任务。
(2) DataCenter类:数据中心,提供虚拟化的网格资源,处理虚拟机信息的查询,包含虚拟机对资源的分配策略,云计算采用VMProvisioner 处理虚拟机。
(3) DataCenterBroker类:隐藏了虚拟机的管理,如创建、任务提交、虚拟机的销毁等。
(4) Host类:扩展了机器对虚拟机除处理单元(PE)之外的参数分配策略,如带宽、存储空间、内存等,一台 Host 可对应多台虚拟机。
(5) VirtualMachine类:虚拟机类,运行在 Host上,与其它虚拟机共享资源,每台虚拟机由一个拥有者所有,可提交任务,并由VMScheduler 类定制该虚拟机的调度策略。
(6) VMSchedult类:虚拟机的调度策略,用来管理执行任务,实现了任务接口。
(7) VMCharacteristics类:提供虚拟机描述。
(8) VMMAlocationPolicy类:虚拟机监视器策略类,描述同- Host 上的多台虚拟机共享资源的策略。
(9) VMProvisioner类:实现数据中心的主机到虚拟机的映射。

本次实验分析了CloudSimExample5这个例子
它创建了两个数据中心,每个数据中心有1个主机并且运行两个用户。

维基百科对cloudlet的介绍https://en.wikipedia.org/wiki/Cloudlet

A cloudlet is a mobility-enhanced small-scale cloud datacenter that is located at the edge of the Internet. The main purpose of the cloudlet is supporting resource-intensive and interactive mobile applications by providing powerful computing resources to mobile devices with lower latency. It is a new architectural element that extends today’s cloud computing infrastructure. It represents the middle tier of a 3-tier hierarchy: mobile device - cloudlet - cloud. A cloudlet can be viewed as a data center in a box whose goal is to bring the cloud closer. The cloudlet term was first coined by M. Satyanarayanan, Victor Bahl, Ramón Cáceres, and Nigel Davies,[1] and a prototype implementation is developed by Carnegie Mellon University as a research project.[2] The concept of cloudlet is also known as follow me cloud,[3] and mobile micro-cloud.[4]

可以看出cloudlet简单理解就是一个小型的移动数据中心,适合边缘计算。在这里是云任务的意思

先创建4个静态列表,存放两个云任务列表和虚拟主机列表。
云计算实验(三)CloudSim练习_第5张图片
Main函数开始:

点进去看到源码后就知道Log这个类就是在控制台打印字符串的。
在这里插入图片描述
第一步,初始化CloudSim包,这里我们有两个用户,calendar直译日历,还有个traceflag,熟悉java日志处理的都知道java的日志等级分为8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL),越后面粒度越小,简而言之就是trace是false的话就少打印一些trace级别的信息。ZZ

云计算实验(三)CloudSim练习_第6张图片
第二步,创建两个数据中心Datacenter_0和Datacenter_1
云计算实验(三)CloudSim练习_第7张图片
createDatacenter是一个单独的函数,定义如下:
1、创建主机列表
云计算实验(三)CloudSim练习_第8张图片
2、创建pe列表,pe的意思是Processing Element 处理单元,代表物理主机的一个cpu
在这里插入图片描述
Mips的意思是Millions Instructions Per Second 百万条指令/秒,不懂的同学可以简单理解为和主频类似的概念MHZ,因为两者成正比例,衡量了cpu的计算能力,总之越大越强。

3、创建PE并加入到pelist中,每个pe的构造函数需要传入它的id和它的计算能力mips。
在这里插入图片描述
4、创建主机,指定id,pelist(计算单元列表,简单理解就是几个cpu),内存大小,磁盘大小,bw(带宽大小)

云计算实验(三)CloudSim练习_第9张图片
在这个例子中,虚拟主机分配策略是每个pe只有一个虚拟主机,又因为在这个例子中每个主机只有一个pe,所以每个主机只有一个虚拟主机
云计算实验(三)CloudSim练习_第10张图片
5、创建数据中心的一些特征(描述),这里架构是x86,系统是linux,Xen是一个开放源代码虚拟机监视器,vmm的意思是the virtual machine monitor used。。。。。。
DatacenterCharacteristics构造函数的注释里面已经说的很清楚了,所以不再赘述。Cost是花费的意思,这里还没有存储中心的配置。
云计算实验(三)CloudSim练习_第11张图片

DatacenterCharacteristics构造函数的注释
云计算实验(三)CloudSim练习_第12张图片
6、最后自然是完成数据中心的配置并返回构建好的对象。
云计算实验(三)CloudSim练习_第13张图片
至此createDatacenter函数结束。

第三步,创建两个代理broker1和broker2用来代理用户对象,简化操作,createBroker函数比较简单,就不拿出来说了。
云计算实验(三)CloudSim练习_第14张图片
第四步,为每个borker/user 创建虚拟主机
先分别创建两个虚拟主机列表
在这里插入图片描述
创建两个参数一样的虚拟主机
云计算实验(三)CloudSim练习_第15张图片
添加到虚拟主机列表里并提交给代理(只是提交给broker,broker还没创建主机列表里面的主机)
云计算实验(三)CloudSim练习_第16张图片
第五步,创建两个云任务列表,都只有一个元素。配置参数并提交给broker,参数分别为id,任务长度,文件大小,输出文件大小,期待cpu,期待完成时间,期待带宽。这里三个期待都是无限制。
云计算实验(三)CloudSim练习_第17张图片
Cloudlet的构造函数的参数的注释,讲的很详细了。
云计算实验(三)CloudSim练习_第18张图片
第六步,开始模拟
在这里插入图片描述

最后一步,当运行结束时打印结果
云计算实验(三)CloudSim练习_第19张图片

有一个printCloudletList函数,用来打印运行结果
至此main函数结束

CloudSimExample5结果分析:
Starting CloudSimExample5…
Initialising…
Starting CloudSim version 3.0

创建并启动两个数据中心
Datacenter_0 is starting…
Datacenter_1 is starting…

#创建并启动两个代理
Broker1 is starting…
Broker2 is starting…

#实体都已启动
Entities started.
0.0: Broker1: Cloud Resource List received with 2 resource(s)
0.0: Broker2: Cloud Resource List received with 2 resource(s)

#两个Broker都尝试在Datacenter_0(Datacenter #2)上分配虚拟主机
0.0: Broker1: Trying to Create VM #0 in Datacenter_0
0.0: Broker2: Trying to Create VM #0 in Datacenter_0

#可以看到,因为mips的限制(实际上是cpu的限制),在host0上分配虚拟主机0失败了。
这个原因呢之前的代码的注释中已经解释过了,“在这个例子中,虚拟主机分配策略是每个pe只有一个虚拟主机,又因为在这个例子中每个主机只有一个pe,所以每个主机只有一个虚拟主机”,两个Broker都想在Datacenter_0(Datacenter #2)上创建虚拟机0,那么后者就会创建失败,
[VmScheduler.vmCreate] Allocation of VM #0 to Host #0 failed by MIPS

#Broker1成功在Datacenter_0(Datacenter #2)上分配了虚拟主机0
0.1: Broker1: VM #0 has been created in Datacenter #2, Host #0

#分配云任务给VM #0
0.1: Broker1: Sending cloudlet 0 to VM #0
#Broker2在Datacenter_0(Datacenter #2)上创建虚拟主机失败
0.1: Broker2: Creation of VM #0 failed in Datacenter #2
#剩下来的Broker2尝试在Datacenter_1(Datacenter #3)上分配虚拟主机
0.1: Broker2: Trying to Create VM #0 in Datacenter_1
#分配成功
0.2: Broker2: VM #0 has been created in Datacenter #3, Host #0
#分配云任务给VM #0
0.2: Broker2: Sending cloudlet 0 to VM #0

#所有的云计划完成执行,退出
160.1: Broker1: Cloudlet 0 received
160.1: Broker1: All Cloudlets executed. Finishing…
160.1: Broker1: Destroying VM #0
Broker1 is shutting down…

160.2: Broker2: Cloudlet 0 received
160.2: Broker2: All Cloudlets executed. Finishing…
160.2: Broker2: Destroying VM #0
Broker2 is shutting down…

Simulation: No more future events
CloudInformationService: Notify all CloudSim entities for shutting down.
Datacenter_0 is shutting down…
Datacenter_1 is shutting down…
Broker1 is shutting down…
Broker2 is shutting down…
Simulation completed.
Simulation completed.
=============> User 4
========== OUTPUT ==========
Cloudlet ID STATUS Data center ID VM ID Time Start Time Finish Time
0 SUCCESS 2 0 160 0.1 160.1
=============> User 5
========== OUTPUT ==========
Cloudlet ID STATUS Data center ID VM ID Time Start Time Finish Time
0 SUCCESS 3 0 160 0.2 160.2
CloudSimExample5 finished!

Q&A:ID的问题
为什么是Datacenter2 和Datacenter3 和User4和User5呢?进过调试后发现id是按照entities先后顺序分配的,此id不是传进去的那个int的id,两个不一样,分配到第一个broker的时候,id=4,所以给broker1的id是4,第二个broker的id是5
云计算实验(三)CloudSim练习_第20张图片

发现有6个entities,分别是CloudSimShutdown id为0,CloudInfomationService id为1,Datacenter_0 id为2,Datacenter_1 id为3,名称为Broker1的DatacenterBroker id为4,名称为Broker2的DatacenterBroker id为5,而且非常重要的一点是这几个类都是抽象类SimEntity的实现,查看SimEntity以后发现它有个id属性,也就是说,这6个entities是按照这个id按先后顺序排的。

SimEntity
云计算实验(三)CloudSim练习_第21张图片
SimEntity的实现类
云计算实验(三)CloudSim练习_第22张图片

特别注意Vm和Host这两个类并不是SimEntity的实现类,它们的id 是自己的

云计算实验(三)CloudSim练习_第23张图片
在这里插入图片描述

你可能感兴趣的:(云计算,CloudSim)