List of Topics:
Research Breakthrough Possible @S-Logix pro@slogix.in

Office Address

Social List

How to Allocate the Cloudlets Tasks to VM?

Allocate the Cloudlets Tasks to VM

Condition for Allocate the Cloudlets Tasks to VM

  • Description:
    In CloudSim, cloudlet/task allocation to VMs is managed by the DatacenterBroker, which decides which cloudlet is allocated to which VM based on factors like VM capacity and cloudlet requirements. To customize this process, you can extend the DatacenterBroker class and override the submitCloudlets() method. In this method, you can calculate the expected execution time of each cloudlet on all VMs, considering factors like cloudlet length, input size, and VM processing power. The broker then selects the VM with the minimum execution time, ensuring efficient allocation and optimal resource usage.
Sample Code
  • 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.core.CloudSim;
    import org.cloudbus.cloudsim.provisioners.BwProvisionerSimple;
    import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple;
    import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;
    import org.cloudbus.cloudsim.VmSchedulerTimeShared;
    import org.cloudbus.cloudsim.VmAllocationPolicySimple;
    /**
    * A simple example showing how to allocate cloudlets to VMs and run a
    * simulation.
    */
    public class CloudletAllocationExample {
    private static List cloudletList;
    private static List vmlist;
    public static void main(String[] args) {
    Log.printLine("Starting Cloudlet Allocation Example...");
    try {
    // Initialize CloudSim
    int num_user = 1; // number of cloud users
    Calendar calendar = Calendar.getInstance(); // Current date and time
    boolean trace_flag = false; // trace events
    CloudSim.init(num_user, calendar, trace_flag);
    // Create Datacenter
    Datacenter datacenter0 = createDatacenter("Datacenter_0");
    // Create Broker
    DatacenterBroker broker = createBroker();
    int brokerId = broker.getId();
    // Create Virtual Machines (VMs)
    vmlist = new ArrayList();
    int vmid = 0;
    int mips = 1000;
    long size = 10000; // image size (MB)
    int ram = 512; // VM memory (MB)
    long bw = 1000; // bandwidth (Mbps)
    int pesNumber = 1; // number of CPUs
    String vmm = "Xen"; // Virtual Machine Monitor name
    // Create 2 VMs
    Vm vm1 = new Vm(vmid++, brokerId, mips, pesNumber, ram, bw, size, vmm, new
    CloudletSchedulerTimeShared());
    Vm vm2 = new Vm(vmid++, brokerId, mips, pesNumber, ram, bw, size, vmm, new
    CloudletSchedulerTimeShared());
    vmlist.add(vm1);
    vmlist.add(vm2);
    // Submit VMs to the broker
    broker.submitVmList(vmlist);
    // Create Cloudlets (Tasks)
    cloudletList = new ArrayList();
    int cloudletId = 0;
    long length = 400000;
    long fileSize = 300;
    long outputSize = 300;
    UtilizationModel utilizationModel = new UtilizationModelFull();
    // Create 3 cloudlets
    Cloudlet cloudlet1 = new Cloudlet(cloudletId++, length, pesNumber, fileSize, outputSize,
    utilizationModel, utilizationModel, utilizationModel);
    Cloudlet cloudlet2 = new Cloudlet(cloudletId++, length, pesNumber, fileSize, outputSize,
    utilizationModel, utilizationModel, utilizationModel);
    Cloudlet cloudlet3 = new Cloudlet(cloudletId++, length, pesNumber, fileSize, outputSize,
    utilizationModel, utilizationModel, utilizationModel);
    cloudlet1.setUserId(brokerId);
    cloudlet2.setUserId(brokerId);
    cloudlet3.setUserId(brokerId);
    cloudlet1.setVmId(vm1.getId()); // Assign to VM1
    cloudlet2.setVmId(vm1.getId()); // Assign to VM1
    cloudlet3.setVmId(vm2.getId()); // Assign to VM2
    cloudletList.add(cloudlet1);
    cloudletList.add(cloudlet2);
    cloudletList.add(cloudlet3);
    // Submit cloudlets to the broker
    broker.submitCloudletList(cloudletList);
    // Start the simulation
    CloudSim.startSimulation();
    Log.printLine(" ");
    // Retrieve results
    List newList = broker.getCloudletReceivedList();
    printCloudletList(newList);
    CloudSim.stopSimulation();
    Log.printLine("Cloudlet Allocation Example finished!");
    } catch (Exception e) {
    e.printStackTrace();
    Log.printLine("Unwanted errors happen");
    }
    }
    /**
    * Creates the datacenter.
    *
    * @param name the name of the datacenter
    * @return the created datacenter
    */
    private static Datacenter createDatacenter(String name) {
    List hostList = new ArrayList();
    List peList = new ArrayList();
    int mips = 1000;
    peList.add(new Pe(0, new PeProvisionerSimple(mips)));
    int hostId = 0;
    int ram = 2048;
    long storage = 1000000;
    int bw = 10000;
    hostList.add(new Host(hostId, new RamProvisionerSimple(ram), new
    BwProvisionerSimple(bw),
    storage, peList, new VmSchedulerTimeShared(peList)));
    String arch = "x86";
    String os = "Linux";
    String vmm = "Xen";
    double timeZone = 10.0;
    double cost = 3.0;
    double costPerMem = 0.05;
    double costPerStorage = 0.001;
    double costPerBw = 0.0;
    LinkedList storageList = new LinkedList();
    DatacenterCharacteristics characteristics = new DatacenterCharacteristics(arch, os, vmm,
    hostList, timeZone, cost, costPerMem, costPerStorage, costPerBw);
    Datacenter datacenter = null;
    try {
    datacenter = new Datacenter(name, characteristics, new
    VmAllocationPolicySimple(hostList), storageList, 0);
    } catch (Exception e) {
    e.printStackTrace();
    }
    return datacenter;
    }
    /**
    * Creates the broker.
    *
    * @return the broker
    */
    private static DatacenterBroker createBroker() {
    DatacenterBroker broker = null;
    try {
    broker = new DatacenterBroker("Broker");
    } catch (Exception e) {
    e.printStackTrace();
    }
    return broker;
    }
    /**
    * Prints the cloudlet list.
    *
    * @param list the list of cloudlets
    */
    private static void printCloudletList(List list) {
    int size = list.size();
    Cloudlet cloudlet;
    String indent = " ";
    Log.printLine();
    Log.printLine("Cloudlet ID" + indent + "Status" + 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 + cloudlet.getStatus() + indent +
    cloudlet.getVmId() + indent
    + dft.format(cloudlet.getActualCPUTime()) + indent +
    dft.format(cloudlet.getExecStartTime()) + indent
    + dft.format(cloudlet.getFinishTime()));
    }
    }
    }
ScreenShots
  • Allocate the Cloudlets Tasks to VM1