首页 > 其他分享 >3、cloudsim基于CloudSimExample4建立自己云计算仿真平台

3、cloudsim基于CloudSimExample4建立自己云计算仿真平台

时间:2023-06-02 23:14:07浏览次数:43  
标签:仿真 indent org cloudsim CloudSimExample4 new import cloudbus

1、基于CloudSimExample4构建,两个数据中心,每个中心有一个主机,一共执行两个任务

2、工程构建如下:

 

 3、MyCloudSim4.java源码如下:

  1 package org.cloudbus.cloudsim.examples;
  2 
  3 import java.text.DecimalFormat;
  4 import java.util.ArrayList;
  5 import java.util.Calendar;
  6 import java.util.LinkedList;
  7 import java.util.List;
  8 
  9 import org.cloudbus.cloudsim.Cloudlet;
 10 import org.cloudbus.cloudsim.CloudletSchedulerTimeShared;
 11 import org.cloudbus.cloudsim.Datacenter;
 12 import org.cloudbus.cloudsim.DatacenterBroker;
 13 import org.cloudbus.cloudsim.DatacenterCharacteristics;
 14 import org.cloudbus.cloudsim.Host;
 15 import org.cloudbus.cloudsim.Log;
 16 import org.cloudbus.cloudsim.Pe;
 17 import org.cloudbus.cloudsim.Storage;
 18 import org.cloudbus.cloudsim.UtilizationModel;
 19 import org.cloudbus.cloudsim.UtilizationModelFull;
 20 import org.cloudbus.cloudsim.Vm;
 21 import org.cloudbus.cloudsim.VmAllocationPolicySimple;
 22 import org.cloudbus.cloudsim.VmSchedulerSpaceShared;
 23 import org.cloudbus.cloudsim.VmSchedulerTimeShared;
 24 import org.cloudbus.cloudsim.core.CloudSim;
 25 import org.cloudbus.cloudsim.provisioners.BwProvisionerSimple;
 26 import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple;
 27 import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;
 28 
 29 /*
 30  * 两个数据中心,每个中心有一个主机,一共执行两个任务
 31  */
 32 public class MyCloudSim4 {
 33     //虚拟机列表
 34     private static List<Vm> vmlist;
 35     //云任务列表
 36     private static List<Cloudlet> cloudletList;
 37     public static void main(String[] args) {
 38         Log.printLine("Starting MyCloudSim...");
 39         try{
 40             //云用户数量
 41             int num_user = 1;
 42             //日历的字段已使用当前日期和时间初始化。
 43             Calendar calendar = Calendar.getInstance();
 44             //跟踪事件
 45             boolean trace_flag = false;
 46             //初始化CloudSim库。
 47             CloudSim.init(num_user, calendar, trace_flag);
 48             //第二步:创建数据中心
 49             Datacenter datacenter0 = createDatacenter("Datacenter_0");
 50             Datacenter datacenter1 = createDatacenter("Datacenter_1");
 51             //第三步:创建代理
 52             DatacenterBroker broker = createBroker();
 53             int brokerId = broker.getId();
 54             //第四步:创建两个个虚拟机
 55             Vm vm1 = createVm(brokerId,0);
 56             Vm vm2 = createVm(brokerId,1);
 57             //添加到虚拟机列表
 58             vmlist = new ArrayList<Vm>();
 59             vmlist.add(vm1);
 60             vmlist.add(vm2);
 61             //提交虚拟机列表到代理
 62             broker.submitVmList(vmlist);
 63             //第五步:创建两个云任务,将云任务添加到列表中,将云任务列表提交给数据中心代理
 64             Cloudlet cloudlet1 = createCloudlet(brokerId,0);
 65             Cloudlet cloudlet2 = createCloudlet(brokerId,1);
 66             //将云任务添加到列表中
 67             cloudletList = new ArrayList<Cloudlet>();
 68             cloudletList.add(cloudlet1);
 69             cloudletList.add(cloudlet2);
 70             //将云任务列表提交给代理
 71             broker.submitCloudletList(cloudletList);
 72             //将云任务绑定到指定虚拟机上
 73             broker.bindCloudletToVm(cloudlet1.getCloudletId(),vm1.getId());
 74             broker.bindCloudletToVm(cloudlet2.getCloudletId(),vm2.getId());
 75             //第六步:开始模拟
 76             CloudSim.startSimulation();
 77             //CloudSim.stopSimulation();
 78             //最后一步:模拟结束时打印结果
 79             List<Cloudlet> newList = broker.getCloudletReceivedList();
 80             printCloudletList(newList);
 81             Log.printLine("MyCloudSim4 finished!");
 82 
 83         }catch(Exception e){
 84             e.printStackTrace();
 85             Log.printLine("The simulation has been terminated due to an unexpected error");
 86         }
 87     }
 88     //创建云任务
 89     private static Cloudlet createCloudlet(int brokerId,int id){
 90         //云任务属性
 91         long length = 400000;
 92         long fileSize = 300;
 93         long outputSize = 300;
 94         int pesNumber = 1;
 95         UtilizationModel utilizationModel = new UtilizationModelFull();
 96         Cloudlet cloudlet =new Cloudlet(id, length, pesNumber, fileSize,
 97                 outputSize, utilizationModel, utilizationModel,
 98                 utilizationModel);
 99         cloudlet.setUserId(brokerId);
100         return cloudlet;
101     }
102     //创建虚拟机
103     private static Vm createVm(int brokerId,int vmid){
104         //Vm 描述
105         int mips = 500;//速率
106         long size = 10000; //  虚拟机的存储大小 (MB)
107         int ram = 512; //  虚拟机内存 (MB)
108         long bw = 1000;//虚拟机带宽
109         int pesNumber = 1; // cpu核数
110         String vmm = "Xen"; // //虚拟机监视器
111 
112         Vm vm = new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared());
113 
114         return vm;
115     }
116     //创建代理
117     private static DatacenterBroker createBroker() {
118         DatacenterBroker broker = null;
119         try {
120             broker = new DatacenterBroker("Broker");
121         } catch (Exception e) {
122             e.printStackTrace();
123             return null;
124         }
125         return broker;
126     }
127     private static Datacenter createDatacenter2(String name){
128         List<Host> hostList = new ArrayList<Host>();
129         List<Pe> peList = new ArrayList<Pe>();
130         int mips = 2000;
131         peList.add(new Pe(0, new PeProvisionerSimple(mips)));
132         int hostId=0;
133         int ram = 2048; //host memory (MB)
134         long storage = 1000000; //host storage
135         int bw = 10000;
136         hostList.add(
137                 new Host(
138                         hostId,
139                         new RamProvisionerSimple(ram),
140                         new BwProvisionerSimple(bw),
141                         storage,
142                         peList,
143                         new VmSchedulerSpaceShared(peList)
144                 )
145         );
146         String arch = "x86";      // system architecture
147         String os = "Linux";          // operating system
148         String vmm = "Xen";
149         double time_zone = 10.0;         // time zone this resource located
150         double cost = 3.0;              // the cost of using processing in this resource
151         double costPerMem = 0.05;        // the cost of using memory in this resource
152         double costPerStorage = 0.001;    // the cost of using storage in this resource
153         double costPerBw = 0.0;            // the cost of using bw in this resource
154         LinkedList<Storage> storageList = new LinkedList<Storage>();    //we are not adding SAN devices by now
155 
156         DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
157                 arch, os, vmm, hostList, time_zone, cost, costPerMem, costPerStorage, costPerBw);
158 
159 
160 
161         Datacenter datacenter = null;
162         try {
163             datacenter = new Datacenter(name, characteristics, new VmAllocationPolicySimple(hostList), storageList, 0);
164         } catch (Exception e) {
165             e.printStackTrace();
166         }
167 
168         return datacenter;
169     }
170 
171     //创建数据中心
172     private static Datacenter createDatacenter(String name) {
173 
174         //1.定义主机列表
175         List<Host> hostList = new ArrayList<Host>();
176         //2.创建主机包含的PE或者CPU处理器列表,定义为MIPS速率
177         List<Pe> peList = new ArrayList<Pe>();
178         int mips = 2000;
179         //3. 创建处理器,并添加到Pe列表中
180         peList.add(new Pe(0, new PeProvisionerSimple(mips))); // 需要Pe id 和 MIPS 速率
181         // 4. 创建主机,并将其添加至主机列表
182         int hostId = 0;
183         int ram = 2048; // 主机内存 (MB)
184         long storage = 1000000; // 主机的存储空间
185         int bw = 10000;//主机带宽
186         hostList.add(
187                 new Host(
188                         hostId,
189                         new RamProvisionerSimple(ram),//内存提供者,为虚拟机提供内存
190                         new BwProvisionerSimple(bw),//带宽提供者
191                         storage,
192                         peList,
193                         new VmSchedulerSpaceShared(peList)//空间共享的VM调度
194                 )
195         );
196 
197         // 5. 创建存储数据中心属性的DatacenterCharacteristics对象:架构,操作系统,机器列表,
198         //    分配策略:时间或空间共享,时区及其价格(G $ / Pe时间单位)。
199         String arch = "x86"; // 架构
200         String os = "Linux"; // 操作系统
201         String vmm = "Xen"; //虚拟机监视器
202         double time_zone = 10.0; // 此资源所在的时区
203         double cost = 3.0; // 处理器花费
204         double costPerMem = 0.05; // 内存花费
205         double costPerStorage = 0.001; // 存储花费
206         double costPerBw = 0.0; //带宽花费
207         LinkedList<Storage> storageList = new LinkedList<Storage>(); // 我们现在不添加SAN设备
208         DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
209                 arch, os, vmm, hostList, time_zone, cost, costPerMem,
210                 costPerStorage, costPerBw);
211 
212         // 6. 最后,我们需要创建一个PowerDatacenter对象。
213         Datacenter datacenter = null;
214         try {
215             datacenter = new Datacenter(name, characteristics, new VmAllocationPolicySimple(hostList), storageList, 0);
216         } catch (Exception e) {
217             e.printStackTrace();
218         }
219 
220         return datacenter;
221     }
222     private static void printCloudletList(List<Cloudlet> list) {
223         int size = list.size();
224         Cloudlet cloudlet;
225 
226         String indent = "    ";
227         Log.printLine();
228         Log.printLine("========== OUTPUT ==========");
229         Log.printLine("Cloudlet ID" + indent + "STATUS" + indent
230                 + "Data center ID" + indent + "VM ID" + indent + "Time" + indent
231                 + "Start Time" + indent + "Finish Time");
232 
233         DecimalFormat dft = new DecimalFormat("###.##");
234         for (int i = 0; i < size; i++) {
235             cloudlet = list.get(i);
236             Log.print(indent + cloudlet.getCloudletId() + indent + indent);
237 
238             if (cloudlet.getCloudletStatus() == Cloudlet.SUCCESS) {
239                 Log.print("SUCCESS");
240 
241                 Log.printLine(indent + indent + cloudlet.getResourceId()
242                         + indent + indent + indent + cloudlet.getVmId()
243                         + indent + indent
244                         + dft.format(cloudlet.getActualCPUTime()) + indent
245                         + indent + dft.format(cloudlet.getExecStartTime())
246                         + indent + indent
247                         + dft.format(cloudlet.getFinishTime()));
248             }
249         }
250     }
251 }
MyCloudSim4.java

4、执行效果如下:

 

标签:仿真,indent,org,cloudsim,CloudSimExample4,new,import,cloudbus
From: https://www.cnblogs.com/holly8/p/17453077.html

相关文章

  • m基于ICP和网格拉普拉斯变形算法的三维模型配准matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要步骤一,搜索需要变形的坐标点,类似于论文中的变形控制点,只不过这里是自动的,而不是手动去控制。步骤二,根据需要变形的控制点,对面进行处理,因为我们的数据除了点坐标外还有面,因此选择了处理的点之后,还需对面进行......
  • m基于高斯滤波和八方向sobel边缘提取的道路检测和提取算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要点和线是做图像分析时两个最重要的特征,而线条往往反映了物体的轮廓,对图像中边缘线的检测是图像分割与特征提取的基础。边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明......
  • m基于高斯滤波和八方向sobel边缘提取的道路检测和提取算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:     2.算法涉及理论知识概要           点和线是做图像分析时两个最重要的特征,而线条往往反映了物体的轮廓,对图像中边缘线的检测是图像分割与特征提取的基础。边缘检测是图像处理和计算机视觉中的基本......
  • 九大亮点+六大好处,瑞云科技虚拟仿真实训平台引领教育信息化新潮流
    随着新技术的快速发展和数字化转型的加速推进,高等教育面临着培养创新型、复合型、适应型人才的新要求。虚拟仿真实训教学作为一种新型的教学模式,能够有效解决实训教学中的高投入、高损耗、高风险及难实施、难观摩、难再现的“三高三难”问题,提升学生的动手能力、创新能力和综合......
  • Qemu仿真----(13)运行Alpine Linux Rootfs
    平台:ubuntu-22.04-desktop-amd64.对象:alpinelinuxrootfs、qemu.文件:linux-6.1.26.tar.xz、alpine-minirootfs-3.18.0-aarch64.tar.gz.本例通过qemu运行alpinerootfsforarm64。1.安装依赖$sudoaptinstallqemu-user-staticqemu-system-aarch64gcc-aarch64-linux-g......
  • Qemu仿真----(12)运行Void Linux Rootfs
    平台:ubuntu-22.04-desktop-amd64.对象:voidlinuxrootfs、qemu.文件:linux-6.1.26.tar.xz、void-aarch64-ROOTFS-20221001.tar.xz.本例通过qemu运行voidlinuxrootfsforarm64。1.安装依赖$sudoaptinstallqemu-user-staticqemu-system-aarch64gcc-aarch64-linux-gnu......
  • abaqus有限元仿真常见问题(一):数值仿真在产品研发中的作用
    在当今欧美发达国家的工业企业中,有限元分析已成为产品研发过程中-个必不可少的重要环节。CAE工程师在校核设计方案、保证产品质量、改进产品设计、降低产品成本提高产品强度和寿命等方面肩负重要的职责。对于一些复杂的关键部件,如果不经CAE工程师分析确认设计方案,就不能投产,如果......
  • 基于arx模型的MPC预测控制器simulink仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要        arx模型是一种重要的时间序列分析模型,能够用来描述实际应用中的许多问题,在经济、电力系统、车辆驾驶、医疗、信号处理等领域都有着广泛的应用。因此,基于arx模型的相关理论和方法受到了大量关......
  • m基于MPC模型预测的网络控制系统simulink仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要       随着通信网络和信息理论的迅速发展,网络控制系统引起了研究人员和工程师的兴趣。众所周知,网络控制系统是一个非常具有挑战性和前景的研究领域。因此,网络控制系统(NCS)实现了传感器,控制器和执行器......
  • 1、CloudSim-介绍和使用
    CloudSim:是一款用于云计算基础设施和服务建模和仿真的框架云计算是提供可靠、安全、容错、可持续和可扩展的计算服务的领先方法。因此,在实际开发之前,需要及时、可重复和可控的方法对新的云应用程序和策略进行性能评估。由于使用真实测试台将实验限制在测试台的规模上,并且使结果的......