1、Cloudsim和Workflowsim仿真环境下载

1、WorkflowSim的下载和安装

workflowsim下载地址

2、Cloudsim的下载和安装

cloudsim官网
在这里插入图片描述
cloudsim4.0安装包地址
在这里插入图片描述
在这里插入图片描述

3、Cloudsim如何工作

Cloudsim如何工作?原版内容
cloudsim配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面这是CloudsimExamples1的代码:

package org.cloudbus.cloudsim.examples;/** Title:        CloudSim Toolkit* Description:  CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation*               of Clouds* Licence:      GPL - http://www.gnu.org/copyleft/gpl.html** Copyright (c) 2009, The University of Melbourne, Australia*/import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;import org.cloudbus.cloudsim.Cloudlet;
import org.cloudbus.cloudsim.CloudletSchedulerTimeShared;
import org.cloudbus.cloudsim.Datacenter;
import org.cloudbus.cloudsim.DatacenterBroker;
import org.cloudbus.cloudsim.DatacenterCharacteristics;
import org.cloudbus.cloudsim.Host;
import org.cloudbus.cloudsim.Log;
import org.cloudbus.cloudsim.Pe;
import org.cloudbus.cloudsim.Storage;
import org.cloudbus.cloudsim.UtilizationModel;
import org.cloudbus.cloudsim.UtilizationModelFull;
import org.cloudbus.cloudsim.Vm;
import org.cloudbus.cloudsim.VmAllocationPolicySimple;
import org.cloudbus.cloudsim.VmSchedulerTimeShared;
import org.cloudbus.cloudsim.core.CloudSim;
import org.cloudbus.cloudsim.provisioners.BwProvisionerSimple;
import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple;
import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;/**A simple example showing how to create a data center with one host and run one cloudlet on it.演示如何使用一台主机创建一个数据中心并在其上运行一个cloudlet。ContainerCloudSimExample1模拟了如何使用一台主机、一台VM、一个容器创建一个数据中心,并在其上运行一个云任务ContainerCloudSimExample1为例,可将仿真流程分成三个阶段:初始化仿真环境,执行仿真,结束仿真,从这三个阶段对容器编程进行了解。*/
public class CloudSimExample1 {// 云任务列表private static List<Cloudlet> cloudletList;// 虚拟机列表private static List<Vm> vmlist;public static void main(String[] args) {Log.printLine("Starting CloudSimExample1...");try {// 在创建任何实体类之前,必须初始化CloudSim包// 云用户数量int num_user = 1;// 日历的字段已使用当前日期和时间初始化Calendar calendar = Calendar.getInstance();// 跟踪事件boolean trace_flag = false; // trace events// 第一步:初始化CloudSim工具包。num_user(云用户数量),calendar(日历), trace_flag(标志位)。CloudSim.init(num_user, calendar, trace_flag);// 第二步:创建数据中心。数据中心是cloudSim 的资源提供者、需要列出其中一个来运行CloudSim模拟Datacenter datacenter0 = createDatacenter("Datacenter_0");// 第三步:创建代理DatacenterBroker broker = createBroker();int brokerId = broker.getId();// 第四步:创建虚拟机列表vmlist = new ArrayList<Vm>();// VM description 虚拟机描述int vmid = 0;int mips = 1000;long size = 10000; // image size (MB)int ram = 512; // vm memory (MB)long bw = 1000;int pesNumber = 1; // number of cpusString vmm = "Xen"; // VMM name// 创建虚拟机Vm vm = new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared());// 将创建的虚拟机添加到虚拟机列表vmlist.add(vm);// 将创建的vm提交给代理broker.submitVmList(vmlist);// 第四步:创建一个 cloudlet云任务列表cloudletList = new ArrayList<Cloudlet>();// 云任务资源int id = 0;long length = 400000;long fileSize = 300;long outputSize = 300;// 为了提供细粒度的控制,需要实现utilzationmodel接口Cloudlet的资源使用情况。UtilizationModel utilizationModel = new UtilizationModelFull();Cloudlet cloudlet = new Cloudlet(id, length, pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel);cloudlet.setUserId(brokerId);cloudlet.setVmId(vmid);// 将云任务添加到列表中cloudletList.add(cloudlet);// 将云任务列表提交给代理broker.submitCloudletList(cloudletList);// 第六步:开始模拟、结束模拟CloudSim.startSimulation();CloudSim.stopSimulation();//最后一步:模拟结束时打印结果List<Cloudlet> newList = broker.getCloudletReceivedList();printCloudletList(newList);Log.printLine("CloudSimExample1 finished!");} catch (Exception e) {e.printStackTrace();Log.printLine("Unwanted errors happen");}}// 创建数据中心private static Datacenter createDatacenter(String name) {// 1. 定义一个主机列表去存储我们的机器// our machineList<Host> hostList = new ArrayList<Host>();// 2. 创建主机包含的PE或者CPU处理器(核数)列表,定义为MIPS速率// A Machine contains one or more PEs or CPUs/Cores.// In this example, it will have only one core.List<Pe> peList = new ArrayList<Pe>();int mips = 1000;// 3. 创建处理器,并添加到Pe列表中  Create PEs and add these into a list.peList.add(new Pe(0, new PeProvisionerSimple(mips))); // 需要Pe id 和 MIPS 速率  need to store Pe id and MIPS Rating// 4. Create Host with its id and list of PEs and add them to the list// of machines// 创建主机,并将其添加至主机列表int hostId = 0;int ram = 2048; // 主机内存 (MB)long storage = 1000000; // 主机的存储空间int bw = 10000;hostList.add(new Host(hostId,new RamProvisionerSimple(ram),// 内存提供者,为虚拟机提供内存// 内存分配策略new BwProvisionerSimple(bw),// 带宽提供者// 带宽分配策略storage,peList,new VmSchedulerTimeShared(peList)	// 时间共享的VM调度// 虚拟机间共享资源的实时调度策略// VMM对虚拟机间共享处理器资源的策略)); // This is our machine// 5. 创建存储数据中心属性的DatacenterCharacteristics对象:架构,操作系统,机器列表,// 分配策略:时间或空间共享,时区及其价格(G $ / Pe时间单位)。String arch = "x86"; // 系统架构String os = "Linux"; // 操作系统String vmm = "Xen";	// 虚拟机监视器double time_zone = 10.0; // 此资源所在的时区double cost = 3.0; // 处理器花费  the cost of using processing in this resourcedouble costPerMem = 0.05; // 内存花费  the cost of using memory in this resourcedouble costPerStorage = 0.001; // 存储花费  the cost of using storage in this resourcedouble costPerBw = 0.0; // 带宽花费  the cost of using bw in this resourceLinkedList<Storage> storageList = new LinkedList<Storage>(); // we are not adding SAN// devices by nowDatacenterCharacteristics characteristics = new DatacenterCharacteristics(arch, os, vmm, hostList, time_zone, cost, costPerMem,costPerStorage, costPerBw);// 6. 最后,我们需要创建一个PowerDatacenter对象。 Finally, we need to create a PowerDatacenter object.Datacenter datacenter = null;try {// 虚拟机到主机的资源分配、任务调度策略datacenter = new Datacenter(name, characteristics, new VmAllocationPolicySimple(hostList), storageList, 0);} catch (Exception e) {e.printStackTrace();}return datacenter;}// We strongly encourage users to develop their own broker policies, to// submit vms and cloudlets according// to the specific rules of the simulated scenario// 创建代理private static DatacenterBroker createBroker() {DatacenterBroker broker = null;try {broker = new DatacenterBroker("Broker");} catch (Exception e) {e.printStackTrace();return null;}return broker;}// 打印云任务对象private static void printCloudletList(List<Cloudlet> list) {int size = list.size();Cloudlet cloudlet;String indent = "    ";Log.printLine();Log.printLine("========== OUTPUT ==========");Log.printLine("Cloudlet ID" + indent + "STATUS" + indent+ "Data center ID" + indent + "VM ID" + indent + "Time" + indent+ "Start Time" + indent + "Finish Time");DecimalFormat dft = new DecimalFormat("###.##");for (int i = 0; i < size; i++) {cloudlet = list.get(i);Log.print(indent + cloudlet.getCloudletId() + indent + indent);if (cloudlet.getStatus() == Cloudlet.SUCCESS) {Log.print("SUCCESS");Log.printLine(indent + indent + cloudlet.getResourceId()+ indent + indent + indent + cloudlet.getVmId()+ indent + indent+ dft.format(cloudlet.getActualCPUTime()) + indent+ indent + dft.format(cloudlet.getExecStartTime())+ indent + indent+ dft.format(cloudlet.getFinishTime()));}}}
}
开始CloudSimExample1……初始化…启动CloudSim 3.0版本Datacenter_0正在启动…经纪人开始…实体开始。0.0:代理:云资源列表收到1个资源0.0:代理:试图在Datacenter_0中创建虚拟机#00.1:代理:已经在数据中心#2,主机#0中创建了虚拟机#00.1: Broker:向VM #0发送cloudlet 040.1:代理:Cloudlet 0收到4001: Broker:执行所有cloudlet。完成……40.1:代理:破坏虚拟机#0经纪人要关门了…模拟:没有更多的未来事件CloudInformationService:通知所有CloudSim实体关闭。Datacenter_0正在关闭…经纪人要关门了…模拟完成。模拟完成。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部