0% found this document useful (0 votes)
15 views8 pages

Ranif Cs435

Uploaded by

bilalmusakhel786
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views8 pages

Ranif Cs435

Uploaded by

bilalmusakhel786
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

CS435 ASSIGNMENT NO: 02

FALL 2024

CODE OUTPUT
package org.cloudbus.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.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.NetworkTopology;
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;

/**
* A simple example showing how to create
* two datacenters with one host and a
* network topology each and run two cloudlets
* on them.
*/
public class CloudSimExample2 {

/** The cloudlet list. */


private static List<Cloudlet> cloudletList;

/** The vmlist. */


private static List<Vm> vmlist;

/**
* Creates main() to run this example
*/
public static void main(String[] args) {

Log.printLine("Starting NetworkExample2...");

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("Dc_bc230417987");
Datacenter datacenter1 = createDatacenter("Datacenter_1");

//Third step: Create Broker


DatacenterBroker broker = createBroker();
int brokerId = broker.getId();

//Fourth step: Create one virtual machine


vmlist = new ArrayList<Vm>();

//VM description
int vmid = 1;
int mips = 150;
long size = 10000; //image size (MB)
int ram = 512; //vm memory (MB)
long bw = 1000;
int pesNumber = 1; //number of cpus
String vmm = "Xen"; //VMM name

//create two VMs


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 + 50, pesNumber, ram,
bw, size, vmm, new CloudletSchedulerTimeShared());

//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<Cloudlet>();

//Cloudlet properties
int id = 0;
long length = 250;
long fileSize = 300;
long outputSize = 300;
UtilizationModel utilizationModel = new
UtilizationModelFull();

Cloudlet cloudlet1 = new Cloudlet(id, length, pesNumber,


fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel);
cloudlet1.setUserId(brokerId);

id++;
Cloudlet cloudlet2 = new Cloudlet(id, 150, pesNumber,
fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel);
cloudlet2.setUserId(brokerId);
id++;
Cloudlet cloudlet3 = new Cloudlet(id, 350, pesNumber,
fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel);
cloudlet3.setUserId(brokerId);
id++;
Cloudlet cloudlet4 = new Cloudlet(id, 180, pesNumber,
fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel);
cloudlet4.setUserId(brokerId);
id++;
Cloudlet cloudlet5 = new Cloudlet(id, 200, pesNumber,
fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel);
cloudlet5.setUserId(brokerId);

Cloudlet cloudlet6 = new Cloudlet(id, 280, pesNumber, fileSize, outputSize,


utilizationModel, utilizationModel, utilizationModel);
cloudlet6.setUserId(brokerId);

//add the cloudlets to the list


cloudletList.add(cloudlet1);
cloudletList.add(cloudlet2);
cloudletList.add(cloudlet3);
cloudletList.add(cloudlet4);
cloudletList.add(cloudlet5);
cloudletList.add(cloudlet6);

//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(),vm2.getId());

broker.bindCloudletToVm(cloudlet2.getCloudletId(),vm1.getId());

broker.bindCloudletToVm(cloudlet3.getCloudletId(),vm2.getId());

broker.bindCloudletToVm(cloudlet4.getCloudletId(),vm1.getId());

broker.bindCloudletToVm(cloudlet5.getCloudletId(),vm2.getId());

broker.bindCloudletToVm(cloudlet6.getCloudletId(),vm1.getId());

//Sixth step: configure network


//load the network topology file
NetworkTopology.buildNetworkTopology("topology.brite");

//maps CloudSim entities to BRITE entities


//Datacenter0 will correspond to BRITE node 0
int briteNode=0;
NetworkTopology.mapNode(datacenter0.getId(),briteNode);

//Datacenter1 will correspond to BRITE node 2


briteNode=2;
NetworkTopology.mapNode(datacenter1.getId(),briteNode);

//Broker will correspond to BRITE node 3


briteNode=3;
NetworkTopology.mapNode(broker.getId(),briteNode);

// Sixth step: Starts the simulation


CloudSim.startSimulation();
// Final step: Print results when simulation is over
List<Cloudlet> newList = broker.getCloudletReceivedList();

CloudSim.stopSimulation();

printCloudletList(newList);

//write the code for calculating the Makespan, Throughput


and ARUR and display out here

calculateMetrics(newList);

Log.printLine("NetworkExample2 finished!");
}
catch (Exception e) {
e.printStackTrace();
Log.printLine("The simulation has been terminated due to an
unexpected 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<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;

//in this example, the VMAllocatonPolicy in use is Time Shared


with priorities. It means that VMs
//receive time shares accroding to their priority.
hostList.add(
new Host(
hostId,
new RamProvisionerSimple(ram),
new BwProvisionerSimple(bw),
storage,
peList,
new VmSchedulerTimeShared(peList)
)
); // This is our machine

// 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
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");

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");

DecimalFormat dft = new DecimalFormat("###.##");


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 calculateMetrics(List<Cloudlet> list) {

double finishTimeVM1 = 0;
double finishTimeVM2 = 0;

for (Cloudlet cloudlet : list) {

if (cloudlet.getVmId()==1){

finishTimeVM1 = Math.max(finishTimeVM1, cloudlet.getFinishTime());

}
else if (cloudlet.getVmId()==2) {

finishTimeVM2 = Math.max(finishTimeVM2, cloudlet.getFinishTime());


}

double makespan = Math.max(finishTimeVM1, finishTimeVM2);


double averageMakespan = (finishTimeVM1 + finishTimeVM2)/2;

double arur = averageMakespan/ makespan;

int totalTasks = list.size ();

double throughput = totalTasks / makespan;

DecimalFormat dft = new DecimalFormat("###.##");


Log.printLine();
Log.printLine("==========METRICS==========");
Log.printLine("Makespan: " + dft.format(makespan));
Log.printLine("Throughput: " + dft.format(throughput));
Log.printLine("Average Makespan:" + dft.format(averageMakespan));
Log.printLine("ARUR:" + dft.format(arur));

You might also like