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