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

Office Address

Social List

How to Allocate the Cloudlets Tasks in a Specific VM?

Allocate the Cloudlets Tasks in a Specific VM

Condition for Allocate the Cloudlets Tasks in a Specific VM

  • Description:
    To allocate cloudlets to specific virtual machines in CloudSim, you can assign the VM ID to each cloudlet using the setVmId method. This maps cloudlets to their designated VMs before submitting them to the broker. By setting the VM ID for each cloudlet, you ensure it runs on the specified VM. After mapping, submit the cloudlet list to the broker, and CloudSim will execute the cloudlets on the assigned VMs. This method provides precise control over cloudlet allocation, enabling the implementation of custom scheduling strategies and optimizing resource use.
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 CloudletAllocationSpecificVM {
    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();
    // 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");
    }
    }
    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;
    }
    private static DatacenterBroker createBroker() {
    DatacenterBroker broker = null;
    try {
    broker = new DatacenterBroker("Broker");
    } catch (Exception e) {
    e.printStackTrace();
    }
    return broker;
    }
    private static void printCloudletList(List list) {
    String format = "%-15s%-10s%-10s%-15s%-15s%-15s%n";
    System.out.printf(format, "Cloudlet ID", "Status", "VM ID", "Exec Time", "Start Time",
    "Finish Time");
    DecimalFormat dft = new DecimalFormat("###.##");
    for (Cloudlet cloudlet : list) {
    String status = cloudlet.getStatus() == Cloudlet.SUCCESS ? "SUCCESS" : "FAILED";
    System.out.printf(format,
    cloudlet.getCloudletId(),
    status,
    cloudlet.getVmId(),
    dft.format(cloudlet.getActualCPUTime()),
    dft.format(cloudlet.getExecStartTime()),
    dft.format(cloudlet.getFinishTime())
    );
    }
    }
    }
ScreenShots
  • Cloudlets Tasks in a Specific VM1