Created
May 28, 2020 03:59
-
-
Save ehzawad/e67838c7e1d35328d282a80c047f0d6e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
// ehza | |
import java.lang.Math; | |
import examples.org.cloudbus.cloudsim.examples.CloudSimExampleInput1; | |
import java.util.Collections; | |
/** | |
* A simple example showing how to create a datacenter with one host and run one | |
* cloudlet on it. | |
*/ | |
public class CloudSimExample1 { | |
/** The cloudlet list. */ | |
private static List<Cloudlet> cloudletList; | |
/** The vmlist. */ | |
private static List<Vm> vmlist; | |
/** | |
* Creates main() to run this example. | |
* | |
* @param args the args | |
*/ | |
public static void main(String[] args) { | |
Log.printLine("Starting CloudSimExample1..."); | |
try { | |
// First step: Initialize the CloudSim package. It should be called | |
// before creating any entities. | |
int num_user = 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 resource providers in CloudSim. We need at | |
// list one of them to run a CloudSim simulation | |
Datacenter datacenter0 = createDatacenter("Datacenter_2"); | |
// Third step: Create Broker | |
DatacenterBroker broker = createBroker(); | |
int brokerId = broker.getId(); | |
// Fourth step: Create one virtual machine | |
vmlist = new ArrayList<Vm>(); | |
// ehza | |
int totalVms = CloudSimExampleInput1.totalVms; | |
// VM description | |
int vmid = 0; | |
int mips = CloudSimExampleInput1.vmCpuMips; | |
long size = CloudSimExampleInput1.vmTotalStorage; // image size (MB) | |
int ram = CloudSimExampleInput1.vmTotalMem; // vm memory (MB) | |
long bw = CloudSimExampleInput1.vmTotalBW; | |
int pesNumber = 1; // number of cpus | |
List<Integer> randomPes = new ArrayList<Integer>(totalVms); | |
for(int i=0; i<totalVms; i++) { | |
int max = CloudSimExampleInput1.vmMaxCpus; | |
int min = 1; | |
int range = max - min + 1; | |
int peNumber = min + (int)(Math.random() * range); //RANDOM NUMBER FOR PE/ | |
randomPes.add(peNumber); | |
} | |
String vmm = "Xen"; // VMM name | |
// 2nd one | |
// If you use bestfit decreasing,it will decease | |
// Collections.sort(randomPes, Collections.reverseOrder()); | |
for (int i = 0; i < totalVms; i++){ | |
// create VM | |
Vm vm = new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared()); | |
// add the VM to the vmList | |
vmlist.add(vm); | |
} | |
// submit vm list to the broker | |
broker.submitVmList(vmlist); | |
// Fifth step: Create one Cloudlet | |
cloudletList = new ArrayList<Cloudlet>(); | |
// Cloudlet properties | |
int id = 0; | |
long length = 400000; | |
long fileSize = 300; | |
long outputSize = 300; | |
UtilizationModel utilizationModel = new UtilizationModelFull(); | |
Cloudlet cloudlet = new Cloudlet(id, length, pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel); | |
cloudlet.setUserId(brokerId); | |
cloudlet.setVmId(vmid); | |
// add the cloudlet to the list | |
cloudletList.add(cloudlet); | |
// submit cloudlet list to the broker | |
broker.submitCloudletList(cloudletList); | |
//print the VM’s information | |
List<Vm> newVmList = broker.getVmList(); | |
printVMList(newVmList); | |
//print the VM’s information | |
List<Host> newHostList = datacenter0.getHostList(); | |
printHostList(newHostList); | |
// Sixth step: Starts the simulation | |
CloudSim.startSimulation(); | |
CloudSim.stopSimulation(); | |
//Final step: Print results when simulation is over | |
List<Cloudlet> newList = broker.getCloudletReceivedList(); | |
printCloudletList(newList); | |
// Print the debt of each user to each datacenter | |
datacenter0.printDebts(); | |
Log.printLine("CloudSimExample1 finished!"); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
Log.printLine("Unwanted errors happen"); | |
} | |
} | |
/** | |
* Creates the datacenter. | |
* | |
* @param name the name | |
* | |
* @return the datacenter | |
*/ | |
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<Host> hostList = new ArrayList<Host>(); | |
// 2. 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. Create PEs and add these into a list. | |
peList.add(new Pe(0, new PeProvisionerSimple(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; // host memory (MB) | |
long storage = 1000000; // host storage | |
int bw = 10000; | |
int totalHosts=CloudSimExampleInput1.totalHosts; | |
for(int i=0; i<totalHosts; i++) { | |
Host host = new Host( | |
hostId++, | |
new RamProvisionerSimple(ram), | |
new BwProvisionerSimple(bw), | |
storage, | |
peList, | |
new VmSchedulerTimeShared(peList)); | |
// This is our machine | |
hostList.add(host); | |
} | |
// 5. Create a DatacenterCharacteristics 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"; // 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 = 0.001; // the cost of using storage in this | |
// resource | |
double costPerBw = 0.0; // the cost of using bw in this resource | |
LinkedList<Storage> storageList = new LinkedList<Storage>(); // we are not adding SAN | |
// devices by now | |
DatacenterCharacteristics characteristics = new DatacenterCharacteristics( | |
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 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 | |
/** | |
* Creates the broker. | |
* | |
* @return the datacenter broker | |
*/ | |
private static DatacenterBroker 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 | |
*/ | |
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.getCloudletStatus() == 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())); | |
} | |
} | |
} | |
private static void printVMList(List<Vm> list) { | |
int size = list.size(); Vm vm; | |
String indent = " "; | |
Log.printLine(); | |
Log.printLine("========== VM INFORMATION ============"); | |
Log.printLine("Vm ID" + indent + "Vm’s PEs" + indent+ "Vm’s RAM" + indent + "Vm’s BW"+ indent ); | |
for (int i = 0; i < size; i++) { vm = list.get(i); | |
Log.print(indent+vm.getId()+indent+indent + vm.getNumberOfPes() + indent+indent ); Log.printLine(vm.getCurrentRequestedRam()+ indent+indent +vm.getCurrentRequestedBw()+ indent+ | |
indent ); } | |
Log.printLine(); | |
} | |
private static void printHostList(List<Host> list) { int size = list.size(); | |
Host host; | |
String indent = " "; | |
Log.printLine(); | |
Log.printLine("========== HOST INFORMATION =============================="); | |
Log.printLine("Host ID" + indent+ "Host PEs" + indent + "Host RAM"+ indent + "Host BW"+ indent + "Host HD"); | |
for (int i = 0; i < size; i++) { host = list.get(i); | |
Log.print(indent+host.getId()+ indent+indent+indent ); | |
Log.printLine(host.getNumberOfPes()+ indent+indent +host.getRam()+indent+indent+host.getBw()+ | |
indent+host.getStorage()); } | |
Log.printLine(); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment