用cloudsim实现如下仿真:2个用户,2个数据中心,每个数据中心有7个host,执行7个云任务

时间: 2023-11-27 15:49:25 浏览: 41
好的,以下是使用CloudSim实现的仿真代码: ```java import org.cloudbus.cloudsim.allocationpolicies.VmAllocationPolicySimple; import org.cloudbus.cloudsim.core.CloudSim; import org.cloudbus.cloudsim.datacenters.Datacenter; import org.cloudbus.cloudsim.datacenters.DatacenterBroker; import org.cloudbus.cloudsim.datacenters.DatacenterCharacteristics; import org.cloudbus.cloudsim.datacenters.DatacenterSimple; import org.cloudbus.cloudsim.hosts.Host; import org.cloudbus.cloudsim.hosts.HostSimple; import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple; import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple; import org.cloudbus.cloudsim.resources.PeSimple; import org.cloudbus.cloudsim.resources.ResourceManageable; import org.cloudbus.cloudsim.schedulers.vm.VmSchedulerSpaceShared; import org.cloudbus.cloudsim.utilizationmodels.UtilizationModelFull; import org.cloudbus.cloudsim.vms.Vm; import org.cloudbus.cloudsim.vms.VmSimple; import java.util.ArrayList; import java.util.List; public class CloudSimSimulation { public static void main(String[] args) { // 初始化CloudSim CloudSim.init(1, Calendar.getInstance(), false); // 创建两个数据中心和两个用户 Datacenter dc1 = createDatacenter("Datacenter1"); Datacenter dc2 = createDatacenter("Datacenter2"); DatacenterBroker broker1 = new DatacenterBroker("Broker1"); DatacenterBroker broker2 = new DatacenterBroker("Broker2"); // 创建7个host,并将它们添加到数据中心中 for (int i = 0; i < 7; i++) { Host host1 = createHost("Host1-" + i); Host host2 = createHost("Host2-" + i); dc1.addHost(host1); dc2.addHost(host2); } // 创建7个VM,并将它们分配给两个用户 List<Vm> vms1 = new ArrayList<>(); List<Vm> vms2 = new ArrayList<>(); for (int i = 0; i < 7; i++) { Vm vm1 = createVm("VM1-" + i, broker1.getId()); Vm vm2 = createVm("VM2-" + i, broker2.getId()); vms1.add(vm1); vms2.add(vm2); } broker1.submitVmList(vms1); broker2.submitVmList(vms2); // 创建7个云任务,并将它们提交给相应的用户 List<Cloudlet> cloudlets1 = new ArrayList<>(); List<Cloudlet> cloudlets2 = new ArrayList<>(); for (int i = 0; i < 7; i++) { Cloudlet cloudlet1 = createCloudlet("Cloudlet1-" + i, broker1.getId()); Cloudlet cloudlet2 = createCloudlet("Cloudlet2-" + i, broker2.getId()); cloudlets1.add(cloudlet1); cloudlets2.add(cloudlet2); } broker1.submitCloudletList(cloudlets1); broker2.submitCloudletList(cloudlets2); // 开始仿真 CloudSim.startSimulation(); // 输出仿真结果 List<Cloudlet> finishedCloudlets1 = broker1.getCloudletFinishedList(); List<Cloudlet> finishedCloudlets2 = broker2.getCloudletFinishedList(); printCloudletList(finishedCloudlets1); printCloudletList(finishedCloudlets2); // 结束仿真 CloudSim.stopSimulation(); } private static Datacenter createDatacenter(String name) { // 创建数据中心特征 List<Host> hostList = new ArrayList<>(); for (int i = 0; i < 7; i++) { Host host = createHost(name + "-Host" + i); hostList.add(host); } String arch = "x86"; String os = "Linux"; String vmm = "Xen"; double time_zone = 10.0; double cost = 3.0; double costPerMem = 0.05; double costPerStorage = 0.001; double costPerBw = 0.0; DatacenterCharacteristics characteristics = new DatacenterCharacteristics(arch, os, vmm, hostList, time_zone, cost, costPerMem, costPerStorage, costPerBw); // 创建数据中心 VmAllocationPolicySimple vmAllocationPolicy = new VmAllocationPolicySimple(); VmSchedulerSpaceShared vmScheduler = new VmSchedulerSpaceShared(); List<ResourceManageable> resourceList = new ArrayList<>(); resourceList.addAll(hostList); Datacenter datacenter = null; try { datacenter = new DatacenterSimple(name, characteristics, vmAllocationPolicy, resourceList, 0, vmScheduler); } catch (Exception e) { e.printStackTrace(); } return datacenter; } private static Host createHost(String name) { // 创建PE、RAM、BANDWIDTH资源 List<PeSimple> peList = new ArrayList<>(); for (int i = 0; i < 4; i++) { PeSimple pe = new PeSimple(i, new PeProvisionerSimple(1000)); peList.add(pe); } int ram = 8192; long bw = 1000000; // 创建Host VmSchedulerSpaceShared vmScheduler = new VmSchedulerSpaceShared(); Host host = new HostSimple(name, new RamProvisionerSimple(ram), new BwProvisionerSimple(bw), peList, vmScheduler); return host; } private static Vm createVm(String name, int brokerId) { // 创建VM int mips = 1000; int pesNumber = 2; int ram = 2048; long bw = 1000000; long size = 10000; String vmm = "Xen"; Vm vm = new VmSimple(CloudSim.getVmList().size(), brokerId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerSpaceShared()); return vm; } private static Cloudlet createCloudlet(String name, int brokerId) { // 创建Cloudlet long length = 40000; int pesNumber = 2; long fileSize = 300; long outputSize = 300; UtilizationModel utilizationModel = new UtilizationModelFull(); Cloudlet cloudlet = new CloudletSimple(CloudSim.getCloudletList().size(), length, pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel); cloudlet.setUserId(brokerId); return cloudlet; } private static void printCloudletList(List<Cloudlet> cloudletList) { String indent = " "; Log.printLine(); Log.printLine("Cloudlet ID" + indent + "STATUS" + indent + "Data center ID" + indent + "VM ID" + indent + indent + "Time" + indent + "Start Time" + indent + "Finish Time"); DecimalFormat dft = new DecimalFormat("###.##"); for (Cloudlet cloudlet : cloudletList) { 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 + dft.format(cloudlet.getExecStartTime()) + indent + indent + dft.format(cloudlet.getFinishTime())); } } } } ``` 在上述代码中,我们创建了两个数据中心和两个用户。每个数据中心有7个主机,每个主机有4个PE、8GB RAM和1Mbps带宽。每个用户有7个VM,每个VM有2个PE、2GB RAM和1Mbps带宽。每个用户有7个云任务,每个任务需要执行的长度为40000 MI,需要的文件大小为300 MB,输出文件大小为300 MB。在开始仿真之前,我们将VM和云任务分别分配给两个用户,并将任务提交到相应的代理中心。在仿真过程中,CloudSim会模拟VM和云任务的执行,并计算出完成时间。最后,我们将完成的云任务列表打印出来。

相关推荐

最新推荐

recommend-type

CloudSim云仿真框架介绍

CloudSim云仿真框架介绍,是本人翻译的一篇关于CloudSim非常棒的一篇英文论文
recommend-type

云计算仿真工具CloudSim介绍和使用.doc

云计算仿真工具CloudSim介绍和使用,帮助你尽快掌握CloudSim这一云计算仿真利器!
recommend-type

Cloudsim的介绍与使用

cloudsim在myeclipse下的安装图文过程,排错,cloudsim的介绍与使用
recommend-type

[PPT]《云计算》教材配套课件12-云计算仿真器CloudSim

重点阐述了云计算领域具代表性的Google、亚马逊和微软三个三家公司的云计算平台的技术原理和应用方法,并介绍了以Hadoop为代表的开源云计算技术和云计算仿真器CloudSim,分析了云计算领域的理论研究热点问题,给出了...
recommend-type

基于关键词搜索结果的微博爬虫(下载即用).zip

基于关键词搜索结果的微博爬虫(下载即用).zip本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,当然也适合小白学习进阶。如果基础还行,可以在此代码基础上进行修改,以实现其他功能。 基于关键词搜索结果的微博爬虫(下载即用).zip本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,当然也适合小白学习进阶。如果基础还行,可以在此代码基础上进行修改,以实现其他功能。 基于关键词搜索结果的微博爬虫(下载即用).zip本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,当然也适合小白学习进阶。如果基础还行,可以在此代码基础上进行修改,以实现其他功能。 基于关键词搜索结果的微博爬虫(下载即用).zip本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,当然也适合小白学习进阶。如果基础还行,可以在此代码基础上进行修改
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】增量式PID的simulink仿真实现

# 2.1 Simulink仿真环境简介 Simulink是MATLAB中用于建模、仿真和分析动态系统的图形化环境。它提供了一个直观的用户界面,允许用户使用块和连接线来创建系统模型。Simulink模型由以下元素组成: - **子系统:**将复杂系统分解成更小的、可管理的模块。 - **块:**代表系统中的组件,如传感器、执行器和控制器。 - **连接线:**表示信号在块之间的流动。 Simulink仿真环境提供了广泛的块库,涵盖了各种工程学科,包括控制系统、电子和机械工程。它还支持用户自定义块的创建,以满足特定仿真需求。 # 2. Simulink仿真环境的搭建和建模 ### 2.
recommend-type

训练集和测试集的准确率都99%,但是预测效果不好

即使训练集和测试集的准确率都很高,但是在实际的预测中表现不佳,可能会有以下几个原因: 1. 数据质量问题:模型训练和测试的数据可能存在问题,比如数据标签错误、数据集采样不均衡、数据集中存在异常值等问题,这些问题可能会导致模型在实际预测中表现不佳。 2. 特征工程问题:模型的特征工程可能存在问题,导致模型无法很好地捕捉数据的特征,从而影响预测效果。 3. 模型选择问题:模型的选择可能不合适,比如选择的模型太简单,无法很好地拟合数据,或者选择的模型太复杂,导致过拟合等问题。 4. 超参数调整问题:模型的超参数可能没有调整到最佳状态,需要进行调整。 针对以上可能的原因,可以采取相应的措施进
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。