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

Office Address

Social List

How to Pause the Cloudlet Running in a VM?

Pause the Cloudlet Running in a VM

Condition for Pause the Cloudlet Running in a VM

  • Description:
    To pause a cloudlet in CloudSim, you modify the CloudletScheduler in the updateVmProcessing() method. Check if the cloudlet should be paused by identifying it in the execution list using its ID. Once found, remove it from the execution list, mark it as Cloudlet.PAUSED (if not finished), and add it to the paused list. This allows pausing and later resuming the cloudlet by moving it back to the execution list.
Sample Code
  • import org.cloudbus.cloudsim.*;
    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 java.util.ArrayList;
    import java.util.Calendar;
    import java.util.List;
    public class PauseCloudletExample {
    public static void main(String[] args) {
    try {
    // Initialize CloudSim library
    int numUsers = 1;
    Calendar calendar = Calendar.getInstance();
    boolean traceFlag = false;
    CloudSim.init(numUsers, calendar, traceFlag);
    // Create Datacenter
    Datacenter datacenter = createDatacenter("Datacenter_0");
    // Create Broker
    DatacenterBroker broker = new DatacenterBroker("Broker");
    // Create VMs
    List vmList = new ArrayList<>();
    int vmId = 0;
    int mips = 1000;
    int pesNumber = 1; // Number of CPUs
    int ram = 2048; // VM memory (MB)
    long bw = 10000; // Bandwidth
    long size = 10000; // Image size (MB)
    String vmm = "Xen"; // VMM name
    Vm vm = new CustomVm(vmId, broker.getId(), mips, pesNumber, ram, bw, size, vmm, new
    CustomCloudletSchedulerTimeShared());
    vmList.add(vm);
    broker.submitVmList(vmList);
    // Create Cloudlets
    List cloudletList = new ArrayList<>();
    int cloudletId = 0;
    long length = 40000;
    long fileSize = 300;
    long outputSize = 300;
    UtilizationModel utilizationModel = new UtilizationModelFull();
    // Create 10 cloudlets
    for (int i = 0; i < 10; i++) {
    Cloudlet cloudlet = new Cloudlet(cloudletId++, length, pesNumber, fileSize, outputSize,
    utilizationModel, utilizationModel, utilizationModel);
    cloudlet.setUserId(broker.getId());
    cloudletList.add(cloudlet);
    }
    broker.submitCloudletList(cloudletList);
    // Start simulation
    CloudSim.startSimulation();
    // Pause a cloudlet after a while (simulate time by using Thread.sleep or a specific condition)
    CustomVm customVm = (CustomVm) vm;
    customVm.getCloudletScheduler().pauseCloudlet(2); // Pausing cloudlet with ID 2
    // Continue the simulation
    CloudSim.stopSimulation();
    // Print results
    for (Cloudlet cloudlet : broker.getCloudletReceivedList()) {
    System.out.println("Cloudlet ID: " + cloudlet.getCloudletId()
    + " Status: " + cloudlet.getCloudletStatusString());
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    private static Datacenter createDatacenter(String name) {
    List hostList = new ArrayList<>();
    int hostId = 0;
    int ram = 16384; // Host memory (MB)
    long storage = 1000000; // Host storage
    int bw = 100000; // Bandwidth
    int pesNumber = 4; // Number of CPUs
    List peList = new ArrayList<>();
    for (int i = 0; i < pesNumber; i++) {
    peList.add(new Pe(i, new PeProvisionerSimple(1000))); // MIPS
    }
    Host host = new Host(hostId, new RamProvisionerSimple(ram), new
    BwProvisionerSimple(bw), storage, peList, new VmSchedulerTimeShared(peList));
    hostList.add(host);
    String arch = "x86";
    String os = "Linux";
    String vmm = "Xen";
    double timeZone = 10.0;
    double costPerSec = 3.0;
    double costPerMem = 0.05;
    double costPerStorage = 0.1;
    double costPerBw = 0.1;
    DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
    arch, os, vmm, hostList, timeZone, costPerSec, costPerMem, costPerStorage, costPerBw);
    Datacenter datacenter = null;
    try {
    datacenter = new Datacenter(name, characteristics, new
    VmAllocationPolicySimple(hostList), new ArrayList<>(), 0);
    } catch (Exception e) {
    e.printStackTrace();
    }
    return datacenter;
    }
    }
    // Custom VM class to use the custom scheduler
    class CustomVm extends Vm {
    public CustomVm(int id, int userId, double mips, int numberOfPes, int ram, long bw, long size,
    String vmm, CloudletScheduler cloudletScheduler) {
    super(id, userId, mips, numberOfPes, ram, bw, size, vmm, cloudletScheduler);
    }
    @Override
    public CustomCloudletSchedulerTimeShared getCloudletScheduler() {
    return (CustomCloudletSchedulerTimeShared) super.getCloudletScheduler();
    }
    }
    // Custom CloudletScheduler class
    class CustomCloudletSchedulerTimeShared extends CloudletSchedulerTimeShared {
    // Method to pause a specific cloudlet
    public void pauseCloudlet(int cloudletId) {
    int position = 0;
    boolean found = false;
    // Check if the cloudlet is in the exec list
    for (ResCloudlet rcl : getCloudletExecList()) {
    if (rcl.getCloudletId() == cloudletId) {
    found = true;
    break;
    }
    position++;
    }
    if (found) {
    // Remove cloudlet from the exec list and add to the paused list
    ResCloudlet rcl = getCloudletExecList().remove(position);
    if (rcl.getRemainingCloudletLength() == 0) {
    cloudletFinish(rcl);
    } else {
    rcl.setCloudletStatus(Cloudlet.PAUSED);
    getCloudletPausedList().add(rcl);
    System.out.println("Cloudlet " + cloudletId + " was paused.");
    }
    } else {
    System.out.println("Cloudlet " + cloudletId + " not found in execution list.");
    }
    }
    // Override updateVmProcessing to include pausing logic
    @Override
    public double updateVmProcessing(double currentTime, List mipsShare) {
    // Call the parent method
    double time = super.updateVmProcessing(currentTime, mipsShare);
    // You can pause a cloudlet after a certain condition or time
    // For example, pause the cloudlet with ID 2 after 5 seconds
    if (currentTime > 5) {
    pauseCloudlet(2);
    }
    return time;
    }
    }
ScreenShots
  • Pause the Cloudlet Running in a VM
  • Pause the Cloudlet Running in a VM