1、/* * 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 */ package org.clou
2、dbus.cloudsim.examples; 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
3、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.Utilizat
4、ionModel; 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.BwProvi
5、sionerSimple; import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple; import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple; /** * A simple example showing how to create * a datacenter with two hosts and run two * cloudlets on it. The cloudlets run in * VMs with differ
6、ent MIPS requirements.
* The cloudlets will take different time
* to complete the execution depending on
* the requested VM performance.
*/
public class CloudSimExample3 {
/** The cloudlet list. */
private static List
7、t
8、 1; // number of cloud users Calendar calendar = Calendar.getInstance(); boolean trace_flag = false; // mean trace events // Initialize the CloudSim library CloudSim.init(num_user, calendar, trace_flag); // Second step: Create Datacenters //Datacenters are the resourc
9、e providers in CloudSim. We need at list one of them to run a CloudSim simulation Datacenter datacenter0 = createDatacenter("Datacenter_0"); //Third step: Create Broker DatacenterBroker broker = createBroker(); int brokerId = broker.getId(); //Fourth step: Create one virtual
10、machine
vmlist = new ArrayList
11、 Vm vm1 = new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared()); //the second VM will have twice the priority of VM1 and so will receive twice CPU time vmid++; Vm vm2 = new Vm(vmid, brokerId, mips * 2, pesNumber, ram, bw, size, vmm, new Cloudl
12、etSchedulerTimeShared());
//add the VMs to the vmList
vmlist.add(vm1);
vmlist.add(vm2);
//submit vm list to the broker
broker.submitVmList(vmlist);
//Fifth step: Create two Cloudlets
cloudletList = new ArrayList
13、 0; long length = 40000; long fileSize = 300; long outputSize = 300; UtilizationModel utilizationModel = new UtilizationModelFull(); Cloudlet cloudlet1 = new Cloudlet(id, length, pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel); cloudl
14、et1.setUserId(brokerId); id++; Cloudlet cloudlet2 = new Cloudlet(id, length, pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel); cloudlet2.setUserId(brokerId); //add the cloudlets to the list cloudletList.add(cloudlet1); cloudletList.ad
15、d(cloudlet2); //submit cloudlet list to the broker broker.submitCloudletList(cloudletList); //bind the cloudlets to the vms. This way, the broker // will submit the bound cloudlets only to the specific VM broker.bindCloudletToVm(cloudlet1.getCloudletId(),vm1.getId()); b
16、roker.bindCloudletToVm(cloudlet2.getCloudletId(),vm2.getId());
// Sixth step: Starts the simulation
CloudSim.startSimulation();
// Final step: Print results when simulation is over
List
17、 printCloudletList(newList); //Print the debt of each user to each datacenter datacenter0.printDebts(); Log.printLine("CloudSimExample3 finished!"); } catch (Exception e) { e.printStackTrace(); Log.printLine("The simulation has been terminated due to an unexpected
18、 error");
}
}
private static Datacenter createDatacenter(String name){
// Here are the steps needed to create a PowerDatacenter:
// 1. We need to create a list to store
// our machine
List
19、 or CPUs/Cores.
// In this example, it will have only one core.
List
20、ith its id and list of PEs and add them to the list of machines int hostId=0; int ram = 2048; //host memory (MB) long storage = 1000000; //host storage int bw = 10000; hostList.add( new Host( hostId, new RamProvisionerSimple(ram), new BwProvisioner
21、Simple(bw),
storage,
peList,
new VmSchedulerTimeShared(peList)
)
); // This is our first machine
//create another machine in the Data center
List
22、Id++; hostList.add( new Host( hostId, new RamProvisionerSimple(ram), new BwProvisionerSimple(bw), storage, peList2, new VmSchedulerTimeShared(peList2) ) ); // This is our second machine // 5. Create a Datacent
23、erCharacteristics object that stores the // properties of a data center: architecture, OS, list of // Machines, allocation policy: time- or space-shared, time zone // and its price (G$/Pe time unit). String arch = "x86"; // system architecture String os = "Linux";
24、 // operating system String vmm = "Xen"; double time_zone = 10.0; // time zone this resource located double cost = 3.0; // the cost of using processing in this resource double costPerMem = 0.05; // the cost of using memory in this resource double costPerStorage
25、 = 0.001; // the cost of using storage in this resource
double costPerBw = 0.0; // the cost of using bw in this resource
LinkedList
26、aracteristics( arch, os, vmm, hostList, time_zone, cost, costPerMem, costPerStorage, costPerBw); // 6. Finally, we need to create a PowerDatacenter object. Datacenter datacenter = null; try { datacenter = new Datacenter(name, characteristics, new VmAllocationPolicySim
27、ple(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 Data
28、centerBroker createBroker(){ DatacenterBroker broker = null; try { broker = new DatacenterBroker("Broker"); } catch (Exception e) { e.printStackTrace(); return null; } return broker; } /** * Prints the Cloudlet objects * @param list list of Cloudlets */
29、 private static void printCloudletList(List
30、nt + "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.getCloudletSt
31、atus() == 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())); } } } }
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818