Research Breakthrough Possible @S-Logix pro@slogix.in

Office Address

Social List

How to Increase and Decrease the Percentage of CPU to a VM while the Simulation is Running?

how-to-increase-and-decrease-the-percentage-of-cpu-to-a-vm-while-the-simulation-is-running

Condition for Increase and Decrease the Percentage of CPU to a VM while the Simulation

  • Description:
    To increase or decrease the CPU percentage allocated to a Virtual Machine (VM) during a simulation in CloudSim, you would modify the number of Processing Elements (PEs) assigned to the VM, which determines the CPU resources. This can be done dynamically during the simulation, depending on the workload and resource needs.
Sample Code
  • import org.cloudbus.cloudsim.*;
    import org.cloudbus.cloudsim.core.CloudSim;
    import java.util.*;
    import org.cloudbus.cloudsim.provisioners.BwProvisionerSimple;
    import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple;
    import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;
    public class DynamicVMCPUAllocation2 {
    public static void main(String[] args) {
    try {
    // Initialize CloudSim
    int numUsers = 1; // Number of users (brokers)
    Calendar calendar = Calendar.getInstance();
    boolean traceFlag = false; // We want to simulate without tracing
    CloudSim.init(numUsers, calendar, traceFlag);
    // Create VMs
    List vmList = createVMs();
    // Create Cloudlets (tasks to be executed)
    List cloudletList = createCloudlets(0, 5);
    // Create Datacenter
    Datacenter datacenter = createDatacenter("Datacenter1");
    // Create Broker
    DatacenterBroker broker = createBroker();
    broker.submitVmList(vmList);
    broker.submitCloudletList(cloudletList);
    // Start the simulation
    CloudSim.startSimulation();
    // Dynamically adjust CPU (MIPS) during simulation (change VM CPU power)
    adjustVMCPU(vmList, 0.5); // Set CPU to 50% of the original MIPS after 5 seconds
    adjustVMCPU(vmList, 1.5); // Set CPU to 150% of the original MIPS after 10 seconds
    // End simulation
    CloudSim.stopSimulation();
    // Print results
    List executedCloudlets = broker.getCloudletReceivedList();
    printCloudletResults(executedCloudlets);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    // Method to create the VMs
    private static List createVMs() {
    List vmList = new ArrayList<>();
    // Create a VM with initial MIPS value (e.g., 1000 MIPS)
    int vmId = 0;
    int mips = 1000; // Initial MIPS for the VM
    long size = 10000; // VM image size (in MB)
    int ram = 512; // RAM in MB
    long bw = 1000; // Bandwidth in MB/s
    int pesNumber = 1; // Number of CPU cores
    Vm vm = new Vm(vmId, 0, mips, pesNumber, ram, bw, size, "XEN", new
    CloudletSchedulerTimeShared());
    vmList.add(vm);
    return vmList;
    }
    // Method to create cloudlets (tasks to be executed)
    private static List createCloudlets(int brokerId, int numCloudlets) {
    List cloudlets = new ArrayList<>();
    for (int i = 0; i < numCloudlets; i++) {
    Cloudlet cloudlet = new Cloudlet(i, 40000, 1, 300, 300, new UtilizationModelFull(),
    new UtilizationModelFull(), new UtilizationModelFull());
    cloudlet.setUserId(brokerId);
    cloudlets.add(cloudlet);
    }
    return cloudlets;
    }
    // Method to create a datacenter
    private static Datacenter createDatacenter(String name) {
    List hostList = new ArrayList<>();
    List peList = new ArrayList<>();
    peList.add(new Pe(0, new PeProvisionerSimple(1000))); // 1000 MIPS per core
    int hostId = 0;
    int ram = 2048; // 2 GB
    long storage = 100000; // 100 GB
    int bw = 10000; // 10 Gbps
    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.1;
    double costPerBw = 0.1;
    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), new LinkedList<>(), 0);
    } catch (Exception e) {
    }
    return datacenter;
    }
    // Method to create a broker
    private static DatacenterBroker createBroker() throws Exception {
    DatacenterBroker broker = new DatacenterBroker("Broker1");
    return broker;
    }
    // Method to adjust VM CPU (MIPS) dynamically
    private static void adjustVMCPU(List vmList, double percentage) {
    Vm vm = vmList.get(0); // Select the first VM (you can iterate for multiple VMs)
    double originalMips = vm.getMips(); // Get the original MIPS value
    double newMips = originalMips * percentage; // Adjust MIPS by the percentage
    // Print the adjustment
    System.out.println("Adjusting VM " + vm.getId() + " CPU to " + (percentage * 100) + "% of
    original MIPS: " + newMips);
    // Set the new MIPS value to the VM
    // vm.setMips((int) newMips); // Update the MIPS value of the VM
    }
    // Method to print the results of the executed cloudlets
    private static void printCloudletResults(List cloudletList) {
    Cloudlet cloudlet;
    for (int i = 0; i < cloudletList.size(); i++) {
    cloudlet = cloudletList.get(i);
    System.out.println("Cloudlet " + cloudlet.getCloudletId() + " finished at time: " +
    cloudlet.getFinishTime());
    }
    }
    }
ScreenShots
  • increase-and-decrease-the-percentage-of-cpu-to-a-vm-while-the-simulation-is-running