CloudSim学习.pdf

Share Embed Donate


Short Description

Download CloudSim学习.pdf...

Description

CloudSim 学习 2009年4月8日,澳大利亚墨尔本大学的网格实验室和Gridbus项目宣布推出 云计算仿真软件,称为CloudSim。它是在离散事件模拟包SimJava上开发的函 数库,可在Windows和Linux系统上跨平台运行,CloudSim继承了GridSim的编 程模型,支持云计算的研究和开发,并提供了以下新的特点: ⑴支持大规模的云计算环境的模拟与仿真,包括数据中心,单一物理计算节 点; ⑵为模拟云、服务代理、供应、分配策略提供独立的平台; ⑶支持在模拟系统元素间仿真网络连接; ⑷具有在联合的云环境下仿真的功能,私有和公共领域的混合网络资源,对 有关 Cloud-Bursts 和自动应用伸缩的关键功能的研究。 CloudSim 是在 GridSim 模型基础上发展而来,提供了云计算的特性,支持 云计算的资源管理和调度模拟。云计算与网格计算的一个显著区别是云计算采用 了成熟的虚拟化技术,将数据中心的资源虚拟化为资源池,打包对外向用户提供 服务,CloudSim 体现了此特点,扩展部分实现了一系列接口,提供基于数据中 心的虚拟化技术、虚拟化云的建模和仿真功能。通常,数据中心的一台主机的资 源可以根据用户的需求映射到多台虚拟机上,因此,虚拟机之间存在对主机资源 的竞争关系。CloudSim 提供了资源的监测、主机到虚拟机的映射功能。CloudSim 的 CIS(Cloud Information Service)和 DataCenterBroker 实现资源发现和信息 交互,是模拟调度的核心。用户自行开发的调度算法可在 DataCenterBroker 的 方法中实现,从而实现调度算法的模拟。

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

2、CloudSim 环境配置 (1)JDK 安装和配置 从 http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载 JDK 最 新版本 jdk1.7.0_02,CloudSim 需要运行在 JDK1.6 版本以上。安装下载的 JDK, 设置环境变量。在 Path 中加入路径:C:/Program Files/Java/jdk1.7.0_02/bin; 新建 ClassPath 并加入路径:C:/Program Files/Java/jdk1.7.0_02/lib/dt.jar; C:/Program Files/Java/jdk1.7.0_02/lib/tools.jar; 。 (2)CloudSim 配置 从 http://code.google.com/p/cloudsim/downloads/list 下载 CloudSim 3.0 及以上 (3.0.1,3.0.2)版本,下载的是一个 Zip 包或者 tar.gz 包,解压压缩包即可得到源 代码。 (3)在 Eclipse 中使用 Cloudsim 1.Eclipse->File->new->java project-> 2.project name :cloudsim 3.选中 create project from exiting source,在目录中选择 cloudsim 包的路 径。 4.然后点击完成就可以运行了。 (4)在 Netbeans 中使用 Cloudsim 见第 6 节。

3、CloudSim 的扩展 CloudSim 是开源的,可以在 windows Xp 和 linux 上运行,用户可以根据自己 的研究内容自行扩展 CloudSim,加入自己的代码后,需要重新编译并发布平台。 下面给出编译和生成平台的方法: 从 http://ant.apache.org/ 下载 Ant 工具,解压到目录 D:/apache-ant-1.8.3, 设置环境变量,在 PATH 中加入:D:/apache-ant-1.8.3/bin;。将命令行切换到扩展 的 CloudSim 路径(build.xml 所在目录),在命令行下键入命令 D:/CloudSim>ant, 批量编译 CloudSim 源文件,生成的文件按照 build.xml 的设置存储到指定位置, 编译成功后在命令行下键入 D:/CloudSim>ant makejar 命令打包生成 new_cloudsim.jar。扩展的 CloudSim 平台生成成功。 重设环境变量,在 ClassPath 中增加路径: D:/CloudSim/jars/new_cloudsim.jar;D:/CloudSim/jars/cloudsim.jar;D:/CloudSim/jars/ g-ridsim.jar; D:/CloudSim/jars/simjava2.jar;,下一步在新的平台下编写自己的仿真 验证程序。

4、使用 CloudSim 仿真的一般步骤 (1) 初始化 CloudSim 库 CloudSim.init(num_user, calendar, trace_flag); (2) 创建数据中心,在 CloudSim 仿真平台中,一个数据中心由一个或多个

Machine 组成,一个 Machine 是由一个或多个 PEs 或 CPUs 组成。 Datacenter datacenter0 = createDatacenter("Datacenter_0"); (3) 创建代理 Broker DatacenterBroker broker = createBroker(); int brokerId = broker.getId(); (4) 创建虚拟机 vmlist = new ArrayList(); //VM 描述参数 int vmid = 0; int mips = 250; long size = 10000; int ram = 512; long bw = 1000; int pesNumber = 1; String vmm = "Xen"; //创建时为虚拟机指定 Broker Vm vm1 = new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared()); //将虚拟机加入虚拟机列表

vmlist.add(vm1); //向相应代理 Broker 提交虚拟机列表 broker.submitVmList(vmlist); (5) 创建云任务

cloudletList = new ArrayList(); //创建时指定任务的用户 ID,BrokerID //Cloudlet 描述参数 int id = 0; pesNumber=1; long length = 250000; long fileSize = 300; long outputSize = 300;

new UtilizationModel utilizationModel =new UtilizationModelFull(); Cloudlet cloudlet1 = new Cloudlet(id, length, pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel); cloudlet1.setUserId(brokerId); …… //将任务加入任务列表 cloudletList.add(cloudlet1); …… //向代理Broker提交任务列表 broker.submitCloudletList(cloudletList); (6) 启动仿真 CloudSim.startSimulation(); (7) 在仿真结束后统计结果 List newList = broker.getCloudletReceivedList(); CloudSim.stopSimulation(); printCloudletList(newList); datacenter0.printDebts();

5、调度策略的扩展实现 根据自己研究需要对平台进行了扩展,调度算法可以在 DatacenterBroker 中实现,从而达到自定义调度算法的扩展。 Cloudsim 里面的任务执行时间等于任务的指令长度(MI)除以运行该任务 的虚拟机的执行速度(MIPS),即 T=MI / MIPS。现在仅考虑任务的执行时间 只与 MI 和 MIPS 有关,则有以下结论: a、如果一个虚拟机上同时运行多个任务,不论使用空间共享还是时间共享, 这些任务的执行时间是一定的。(任务的总指令长度和虚拟机的执行速度是一定 的)。 b、如果一个任务在某个虚拟机上执行的时间最短,那么它在其他虚拟机上 的执行时间也是最短的。 c、如果一个虚拟机的执行速度最快,那么它不论执行哪个任务都是最快的。

1、顺序分配策略 在 DatacenterBroker 类中实现方法 bindCloudletsToVmsSimple():用于把 一组任务顺序分配给一组虚拟机,当所有的虚拟机都运行有任务后,再从第一个 虚拟机开始重头分配任务。 2、贪心策略 在 DatacenterBroker 类中实现方法 bindCloudletsToVmsTimeAwared(): 定义一个矩阵 time[i][j],表示任务 i 在虚拟机 j 上所需的执行时间。在初始化 矩阵 time 前,首先将任务按 MI 的大小降序排序,将虚拟机按 MIPS 的大小升序 排列。 从矩阵中行号为 0 的任务开始,每次都尝试分配给最后一列对应的虚拟机, 如果该选择相对于其他选择是最优的,就完成分配,否则将任务分配给使当前结 果最优的虚拟机。同时,如果有多种分配方法都能使当前结果最优,则将任务分 配给运行任务最少的虚拟机。 代码如下: 在 DatacenterBroker 中 bindCloudletToVm(int cloudletId, int vmId) 函数后面添加: public void bindCloudletsToVmsSimple(){ int vmNum = vmList.size(); int cloudletNum = cloudletList.size(); int idx = 0; for int i=0;inew->class;在 name 处填写你的类名(这个类名要和你在记事本上写的的 java 的类要一致)。 然后 finish 就可以了.最后保存一下.同样在在 Project explorer 下找到你刚刚 建立的 project 下面的 src 下的你的那个类.右键->run as->java application 就可 以了。 6.2 由于 flanagan 包不存在导致一些例子不能运行的问题 添加 flanagan.jar 支持,下载地址 http://www.ee.ucl.ac.uk/~mflanaga/java/#down 将 flanagan.jar 放到 cloudsim 的 jars 文件夹下,在 Eclipse 里面右键点 击该 jar 文件,选择 Build Path,然后选 Add to Build Path 就可以了。

7、在 Netbeans 中使用 Cloudsim

Step1 open Netbeans (any version greater then 5.0) ,Go to file-->>new project

Step 2 select "Java" folder then select first option java Application ,Press next

Step3 Now give name to the project as you wish ,then un-check the "create main class" press next.

Step 4 Now your project is been created as shown.

Step5 Go to library ,right click on it ,a menu will come ,click on "Add jars/Folders" Now browse the cloudsim folder which you have extracted from zip file .and go to "cloudsim-3.0.2\jars" and select "cloudsim-3.0.2.jar" .

Step6 Now simply copy the "org" folder in "cloudsim-3.0.2\examples" and paste it to net beans source folder as shown.go to source and right click select Paste.

Step 7 To run the example go to source ->> org.cloudbus.cloudsim.examples->>select any example ,right click on it and select "run" option the output will be displayed in the output window at the bottom.

TO RUN EXAMPLE CODE FROM SOURCE CODE Step 1,2,3,4 remain the same in step 5 copy and paste "org" folder from "cloudsim-3.0.2\source" and paste it into the source folder of your netbeans project as you copied the example folder.

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF