Spring 2024 - CS435 - 2 - bc21012345
Spring 2024 - CS435 - 2 - bc21012345
Student id =
Student name
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.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
* a datacenter with one host and run two
* cloudlets on it. The cloudlets run in
* VMs with the same MIPS requirements.
* The cloudlets will take the same time to
* complete the execution.
*/
public class CloudSimExample2 {
/**
* Creates main() to run this example
*/
public static void main(String[] args) {
Log.printLine("Starting CloudSimExample2...");
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
//VM description
int vmid = 1;
int mips = 100;
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
vmid++;
Vm vm2 = new Vm(vmid, brokerId, mips + 50, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTime-
Shared());
//Cloudlet properties
int id = 0;
pesNumber=1;
long length = 120;
long fileSize = 300;
long outputSize = 300;
UtilizationModel utilizationModel = new UtilizationModelFull();
Cloudlet cloudlet1 = new Cloudlet(id, length, pesNumber, fileSize, outputSize, utilizationModel, uti-
lizationModel, utilizationModel);
cloudlet1.setUserId(brokerId);
id++;
Cloudlet cloudlet2 = new Cloudlet(id, 200, pesNumber, fileSize, outputSize, utilizationModel, utiliza-
tionModel, utilizationModel);
cloudlet2.setUserId(brokerId);
id++;
Cloudlet cloudlet3 = new Cloudlet(id, 140 , pesNumber, fileSize, outputSize, utilizationModel, utiliza-
tionModel, utilizationModel);
cloudlet3.setUserId(brokerId);
id++;
Cloudlet cloudlet4 = new Cloudlet(id, 250, pesNumber, fileSize, outputSize, utilizationModel, utiliza-
tionModel, utilizationModel);
cloudlet4.setUserId(brokerId);
id++;
Cloudlet cloudlet5 = new Cloudlet(id, 180, pesNumber, fileSize, outputSize, utilizationModel, utiliza-
tionModel, utilizationModel);
cloudlet5.setUserId(brokerId);
CloudSim.stopSimulation();
printCloudletList(newList);
//write the code for calculating the Makespan, Throughput and ARUR and display out here
calculateMetrics(newList);
Log.printLine("CloudSimExample2 finished!");
}
catch (Exception e) {
e.printStackTrace();
Log.printLine("The simulation has been terminated due to an unexpected error");
}
}
//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;
hostList.add(
new Host(
hostId,
new RamProvisionerSimple(ram),
new BwProvisionerSimple(bw),
storage,
peList,
new VmSchedulerTimeShared(peList)
)
); // This is our machine
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(){
/**
* Prints the Cloudlet objects
* @param list list of Cloudlets
*/
private static void printCloudletList(List<Cloudlet> list) {
int size = list.size();
Cloudlet cloudlet;
if (cloudlet.getCloudletStatus() == Cloudlet.SUCCESS){
Log.print("SUCCESS");
}
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));
}
}