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

Office Address

Social List

How to Analyze the Impact of Different Scheduling Intervals on Resource Utilization,Execution Time,and Task Efficiency in Containercloudsim?

Host-Level Power Consumption Using Planetlab

Condition for Analyze the Impact of Different Scheduling Intervals on Resource Utilization,Execution Time,and Task Efficiency in Containercloudsim

  • Description:
    It implements a comparative simulation framework using ContainerCloudSim, extending CloudSim to analyze the impact of different scheduling intervals on containerized workloads in a cloud data center. The code dynamically configures multiple simulations by varying the scheduling interval values (1.0, 5.0, 10.0, and 30.0 seconds) and measures their performance across multiple metrics such as average execution time, waiting time, success rate of cloudlets, and overall simulation runtime. For each interval, the infrastructure—including hosts, VMs, containers, and PlanetLab-based real workload cloudlets—is instantiated with consistent configurations to ensure a fair comparison. After executing the simulations, the system aggregates results and identifies the optimal scheduling interval based on execution efficiency and workload responsiveness. This experiment provides valuable insights into how fine-grained or coarse-grained scheduling intervals influence performance in containerized cloud environments, aiding in optimization of energy-aware and SLA-driven scheduling policies.
Sample Code
  • package containercloudsim;

    import org.cloudbus.cloudsim.Log;
    import org.cloudbus.cloudsim.Storage;
    import org.cloudbus.cloudsim.UtilizationModelNull;
    import org.cloudbus.cloudsim.container.containerProvisioners.ContainerBwProvisionerSimple;
    import org.cloudbus.cloudsim.container.containerProvisioners.ContainerPe;
    import org.cloudbus.cloudsim.container.containerProvisioners.ContainerRamProvisionerSimple;
    import org.cloudbus.cloudsim.container.containerProvisioners.ContainerPeProvisionerSimple;
    import org.cloudbus.cloudsim.container.containerVmProvisioners.ContainerVmBwProvisionerSimple;
    import org.cloudbus.cloudsim.container.containerVmProvisioners.ContainerVmPe;
    import org.cloudbus.cloudsim.container.containerVmProvisioners.ContainerVmPeProvisionerSimple;
    import org.cloudbus.cloudsim.container.containerVmProvisioners.ContainerVmRamProvisionerSimple;
    import org.cloudbus.cloudsim.container.core.*;
    import org.cloudbus.cloudsim.container.hostSelectionPolicies.HostSelectionPolicy;
    import org.cloudbus.cloudsim.container.hostSelectionPolicies.HostSelectionPolicyFirstFit;
    import org.cloudbus.cloudsim.container.resourceAllocatorMigrationEnabled
    .PowerContainerVmAllocationPolicyMigrationAbstractHostSelection;
    import org.cloudbus.cloudsim.container.resourceAllocators.ContainerAllocationPolicy;
    import org.cloudbus.cloudsim.container.resourceAllocators.ContainerVmAllocationPolicy;
    import org.cloudbus.cloudsim.container.resourceAllocators.PowerContainerAllocationPolicySimple;
    import org.cloudbus.cloudsim.container.schedulers.ContainerCloudletSchedulerDynamicWorkload;
    import org.cloudbus.cloudsim.container.schedulers.ContainerSchedulerTimeSharedOverSubscription;
    import org.cloudbus.cloudsim.container.schedulers.ContainerVmSchedulerTimeSharedOverSubscription;
    import org.cloudbus.cloudsim.container.utils.IDs;
    import org.cloudbus.cloudsim.container.vmSelectionPolicies.PowerContainerVmSelectionPolicy;
    import org.cloudbus.cloudsim.container.vmSelectionPolicies
    .PowerContainerVmSelectionPolicyMaximumUsage;
    import org.cloudbus.cloudsim.core.CloudSim;
    import org.cloudbus.cloudsim.container.core.PowerContainer;
    import org.cloudbus.cloudsim.container.core.Container;

    import java.io.FileNotFoundException;
    import java.text.DecimalFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.LinkedList;
    import java.util.List;
    import org.cloudbus.cloudsim.examples.container.ConstantsExamples;
    import org.cloudbus.cloudsim.examples.container.UtilizationModelPlanetLabInMemoryExtended;

    /**
    * A simple example showing how to create a data center with one host, one VM,
    * one container and run one cloudlet on it.
    * Testing different scheduling intervals
    */
    public class SchedulingInterval {

    /**
    * The cloudlet list.
    */
    private static List cloudletList;

    /**
    * The vmlist.
    */
    private static List vmList;

    /**
    * The vmlist.
    */
    private static List containerList;

    /**
    * The hostList.
    */
    private static List hostList;

    /**
    * Creates main() to run this example.
    *
    * @param args the args
    */
    public static void main(String[] args) {
    Log.printLine("Starting Scheduling Intervals Comparison...");

    try {
    // Define different scheduling intervals to test
    double[] schedulingIntervals = {1.0, 5.0, 10.0, 30.0};

    // Store results for each interval
    List results = new ArrayList<>();

    for (double interval : schedulingIntervals) {
    Log.printLine("\n" + "=".repeat(60));
    Log.printLine("Running simulation with scheduling interval: " + interval);
    Log.printLine("=".repeat(60));

    SimulationResult result = runSimulationWithInterval(interval);
    results.add(result);

    // Small delay between simulations
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

    // Print comparative results
    printComparativeResults(results);

    Log.printLine("ContainerCloudSim Example 6 finished!");

    } catch (Exception e) {
    e.printStackTrace();
    Log.printLine("Unwanted errors happen");
    }
    }

    /**
    * Runs a complete simulation with the specified scheduling interval
    */
    private static SimulationResult runSimulationWithInterval(double schedulingInterval) {
    SimulationResult result = new SimulationResult(schedulingInterval);

    try {
    // Initialize CloudSim for this simulation run
    int num_user = 1;
    Calendar calendar = Calendar.getInstance();
    boolean trace_flag = false;
    CloudSim.init(num_user, calendar, trace_flag);

    // Define policies
    ContainerAllocationPolicy containerAllocationPolicy = new PowerContainerAllocationPolicySimple();
    PowerContainerVmSelectionPolicy vmSelectionPolicy = new PowerContainerVmSelectionPolicyMaximumUsage();
    HostSelectionPolicy hostSelectionPolicy = new HostSelectionPolicyFirstFit();

    double overUtilizationThreshold = 0.80;
    double underUtilizationThreshold = 0.70;

    // Create infrastructure
    hostList = createHostList(ConstantsExamples.NUMBER_HOSTS);
    cloudletList = new ArrayList();
    vmList = new ArrayList();

    ContainerVmAllocationPolicy vmAllocationPolicy = new PowerContainerVmAllocationPolicyMigrationAbstractHostSelection(
    hostList, vmSelectionPolicy, hostSelectionPolicy, overUtilizationThreshold, underUtilizationThreshold);

    int overBookingFactor = 80;
    ContainerDatacenterBroker broker = createBroker(overBookingFactor);
    int brokerId = broker.getId();

    // Create entities with the current scheduling interval
    cloudletList = createContainerCloudletList(brokerId, ConstantsExamples.NUMBER_CLOUDLETS);
    containerList = createContainerList(brokerId, ConstantsExamples.NUMBER_CLOUDLETS, schedulingInterval);
    vmList = createVmList(brokerId, ConstantsExamples.NUMBER_VMS, schedulingInterval);

    String logAddress = "~/Results";

    // Create datacenter with the specified scheduling interval
    PowerContainerDatacenter datacenter = (PowerContainerDatacenter) createDatacenter("datacenter",
    PowerContainerDatacenterCM.class, hostList, vmAllocationPolicy, containerAllocationPolicy,
    getExperimentName("SchedulingInterval", String.valueOf(schedulingInterval)),
    schedulingInterval, logAddress,
    ConstantsExamples.VM_STARTTUP_DELAY, ConstantsExamples.CONTAINER_STARTTUP_DELAY);

    // Submit entities to broker
    broker.submitCloudletList(cloudletList.subList(0, containerList.size()));
    broker.submitContainerList(containerList);
    broker.submitVmList(vmList);

    // Set simulation termination time
    CloudSim.terminateSimulation(86400.00);

    // Record start time
    long startTime = System.currentTimeMillis();

    // Run simulation
    CloudSim.startSimulation();
    CloudSim.stopSimulation();

    // Record end time
    long endTime = System.currentTimeMillis();

    // Collect results
    List completedCloudlets = broker.getCloudletReceivedList();
    result.setCompletedCloudlets(completedCloudlets);
    result.setSimulationTime(endTime - startTime);
    result.setDatacenter(datacenter);

    // Print results for this interval
    printIntervalResults(result, completedCloudlets);

    } catch (Exception e) {
    e.printStackTrace();
    Log.printLine("Error in simulation with interval " + schedulingInterval);
    } finally {
    // Shutdown CloudSim for this run
    CloudSim.stopSimulation();
    }

    return result;
    }

    /**
    * Prints results for a single scheduling interval
    */
    private static void printIntervalResults(SimulationResult result, List completedCloudlets) {
    Log.printLine("\n--- RESULTS for Scheduling Interval: " + result.getSchedulingInterval() + " ---");

    int successfulCloudlets = 0;
    double totalExecutionTime = 0;
    double totalWaitTime = 0;
    double maxExecutionTime = 0;
    double minExecutionTime = Double.MAX_VALUE;

    for (ContainerCloudlet cloudlet : completedCloudlets) {
    if (cloudlet.getCloudletStatusString().equals("Success")) {
    successfulCloudlets++;
    double execTime = cloudlet.getActualCPUTime();
    totalExecutionTime += execTime;
    totalWaitTime += cloudlet.getExecStartTime();

    if (execTime > maxExecutionTime) {
    maxExecutionTime = execTime;
    }
    if (execTime < minExecutionTime) {
    minExecutionTime = execTime;
    }
    }
    }

    double avgExecutionTime = successfulCloudlets > 0 ? totalExecutionTime / successfulCloudlets : 0;
    double avgWaitTime = successfulCloudlets > 0 ? totalWaitTime / successfulCloudlets : 0;

    DecimalFormat df = new DecimalFormat("###.##");

    Log.printLine("Successful Cloudlets: " + successfulCloudlets + "/" + completedCloudlets.size());
    Log.printLine("Average Execution Time: " + df.format(avgExecutionTime) + " seconds");
    Log.printLine("Average Wait Time: " + df.format(avgWaitTime) + " seconds");
    Log.printLine("Max Execution Time: " + df.format(maxExecutionTime) + " seconds");
    Log.printLine("Min Execution Time: " + df.format(minExecutionTime) + " seconds");
    Log.printLine("Simulation Runtime: " + result.getSimulationTime() + " ms");

    // Store calculated metrics
    result.setSuccessfulCloudlets(successfulCloudlets);
    result.setTotalCloudlets(completedCloudlets.size());
    result.setAvgExecutionTime(avgExecutionTime);
    result.setAvgWaitTime(avgWaitTime);
    result.setMaxExecutionTime(maxExecutionTime);
    result.setMinExecutionTime(minExecutionTime);
    }

    /**
    * Prints comparative results across all scheduling intervals
    */
    private static void printComparativeResults(List results) {
    Log.printLine("\n" + "=".repeat(80));
    Log.printLine("COMPARATIVE RESULTS ACROSS DIFFERENT SCHEDULING INTERVALS");
    Log.printLine("=".repeat(80));

    String headerFormat = "%-12s %-10s %-12s %-15s %-15s %-15s %-12s";
    String dataFormat = "%-12.1f %-10d %-12.2f %-15.2f %-15.2f %-15.2f %-12d";

    Log.printLine(String.format(headerFormat,
    "Interval", "Success", "Avg Exec Time", "Avg Wait Time",
    "Max Exec Time", "Min Exec Time", "Sim Time(ms)"));
    Log.printLine("-".repeat(80));

    for (SimulationResult result : results) {
    Log.printLine(String.format(dataFormat,
    result.getSchedulingInterval(),
    result.getSuccessfulCloudlets(),
    result.getAvgExecutionTime(),
    result.getAvgWaitTime(),
    result.getMaxExecutionTime(),
    result.getMinExecutionTime(),
    result.getSimulationTime()));
    }

    // Find best performing interval
    SimulationResult bestResult = null;
    double bestScore = Double.MAX_VALUE;

    for (SimulationResult result : results) {
    // Simple scoring: lower average execution time and wait time is better
    double score = result.getAvgExecutionTime() + result.getAvgWaitTime();
    if (score < bestScore && result.getSuccessfulCloudlets() > 0) {
    bestScore = score;
    bestResult = result;
    }
    }

    if (bestResult != null) {
    Log.printLine("\n BEST PERFORMING SCHEDULING INTERVAL: " +
    bestResult.getSchedulingInterval() + " seconds");
    Log.printLine(" - Average Execution Time: " +
    String.format("%.2f", bestResult.getAvgExecutionTime()) + " seconds");
    Log.printLine(" - Average Wait Time: " +
    String.format("%.2f", bestResult.getAvgWaitTime()) + " seconds");
    Log.printLine(" - Success Rate: " +
    bestResult.getSuccessfulCloudlets() + "/" + bestResult.getTotalCloudlets() +
    " (" + String.format("%.1f", (bestResult.getSuccessfulCloudlets() * 100.0 / bestResult.getTotalCloudlets())) + "%)");
    }
    }

    /**
    * Data class to store simulation results
    */
    private static class SimulationResult {
    private double schedulingInterval;
    private int successfulCloudlets;
    private int totalCloudlets;
    private double avgExecutionTime;
    private double avgWaitTime;
    private double maxExecutionTime;
    private double minExecutionTime;
    private long simulationTime;
    private List completedCloudlets;
    private PowerContainerDatacenter datacenter;

    public SimulationResult(double schedulingInterval) {
    this.schedulingInterval = schedulingInterval;
    }

    // Getters and setters
    public double getSchedulingInterval() { return schedulingInterval; }
    public int getSuccessfulCloudlets() { return successfulCloudlets; }
    public void setSuccessfulCloudlets(int successfulCloudlets) { this.successfulCloudlets = successfulCloudlets; }
    public int getTotalCloudlets() { return totalCloudlets; }
    public void setTotalCloudlets(int totalCloudlets) { this.totalCloudlets = totalCloudlets; }
    public double getAvgExecutionTime() { return avgExecutionTime; }
    public void setAvgExecutionTime(double avgExecutionTime) { this.avgExecutionTime = avgExecutionTime; }
    public double getAvgWaitTime() { return avgWaitTime; }
    public void setAvgWaitTime(double avgWaitTime) { this.avgWaitTime = avgWaitTime; }
    public double getMaxExecutionTime() { return maxExecutionTime; }
    public void setMaxExecutionTime(double maxExecutionTime) { this.maxExecutionTime = maxExecutionTime; }
    public double getMinExecutionTime() { return minExecutionTime; }
    public void setMinExecutionTime(double minExecutionTime) { this.minExecutionTime = minExecutionTime; }
    public long getSimulationTime() { return simulationTime; }
    public void setSimulationTime(long simulationTime) { this.simulationTime = simulationTime; }
    public List getCompletedCloudlets() { return completedCloudlets; }
    public void setCompletedCloudlets(List completedCloudlets) { this.completedCloudlets = completedCloudlets; }
    public PowerContainerDatacenter getDatacenter() { return datacenter; }
    public void setDatacenter(PowerContainerDatacenter datacenter) { this.datacenter = datacenter; }
    }

    /**
    * It creates a specific name for the experiment which is used for creating
    * the Log address folder.
    */
    private static String getExperimentName(String... args) {
    StringBuilder experimentName = new StringBuilder();

    for (int i = 0; i < args.length; ++i) {
    if (!args[i].isEmpty()) {
    if (i != 0) {
    experimentName.append("_");
    }
    experimentName.append(args[i]);
    }
    }
    return experimentName.toString();
    }

    /**
    * Creates the broker.
    */
    private static ContainerDatacenterBroker createBroker(int overBookingFactor) {
    ContainerDatacenterBroker broker = null;
    try {
    broker = new ContainerDatacenterBroker("Broker", overBookingFactor);
    } catch (Exception var2) {
    var2.printStackTrace();
    System.exit(0);
    }
    return broker;
    }

    /**
    * Create the Virtual machines and add them to the list
    */
    private static ArrayList createVmList(int brokerId, int containerVmsNumber, double schedulingInterval) {
    ArrayList containerVms = new ArrayList();

    for (int i = 0; i < containerVmsNumber; ++i) {
    ArrayList peList = new ArrayList();
    int vmType = i / (int) Math.ceil((double) containerVmsNumber / 4.0D);

    for (int j = 0; j < ConstantsExamples.VM_PES[vmType]; ++j) {
    peList.add(new ContainerPe(j,
    new ContainerPeProvisionerSimple((double) ConstantsExamples.VM_MIPS[vmType])));
    }

    containerVms.add(new PowerContainerVm(IDs.pollId(ContainerVm.class), brokerId,
    (double) ConstantsExamples.VM_MIPS[vmType], (float) ConstantsExamples.VM_RAM[vmType],
    ConstantsExamples.VM_BW, ConstantsExamples.VM_SIZE, "Xen",
    new ContainerSchedulerTimeSharedOverSubscription(peList),
    new ContainerRamProvisionerSimple(ConstantsExamples.VM_RAM[vmType]),
    new ContainerBwProvisionerSimple(ConstantsExamples.VM_BW),
    peList, schedulingInterval)); // Use the specified scheduling interval
    }
    return containerVms;
    }

    /**
    * Create the host list considering the specs listed in the
    * {@link ConstantsExamples}.
    */
    public static List createHostList(int hostsNumber) {
    ArrayList hostList = new ArrayList();
    for (int i = 0; i < hostsNumber; ++i) {
    int hostType = i / (int) Math.ceil((double) hostsNumber / 3.0D);
    ArrayList peList = new ArrayList();
    for (int j = 0; j < ConstantsExamples.HOST_PES[hostType]; ++j) {
    peList.add(new ContainerVmPe(j,
    new ContainerVmPeProvisionerSimple((double) ConstantsExamples.HOST_MIPS[hostType])));
    }

    hostList.add(new PowerContainerHostUtilizationHistory(IDs.pollId(ContainerHost.class),
    new ContainerVmRamProvisionerSimple(ConstantsExamples.HOST_RAM[hostType]),
    new ContainerVmBwProvisionerSimple(1000000L), 1000000L, peList,
    new ContainerVmSchedulerTimeSharedOverSubscription(peList),
    ConstantsExamples.HOST_POWER[hostType]));
    }
    return hostList;
    }

    /**
    * Create the data center
    */
    public static ContainerDatacenter createDatacenter(String name, Class< extends ContainerDatacenter> datacenterClass,
    List hostList,
    ContainerVmAllocationPolicy vmAllocationPolicy,
    ContainerAllocationPolicy containerAllocationPolicy,
    String experimentName, double schedulingInterval, String logAddress, double VMStartupDelay,
    double ContainerStartupDelay) throws Exception {
    String arch = "x86";
    String os = "Linux";
    String vmm = "Xen";
    double time_zone = 10.0D;
    double cost = 3.0D;
    double costPerMem = 0.05D;
    double costPerStorage = 0.001D;
    double costPerBw = 0.0D;
    ContainerDatacenterCharacteristics characteristics = new ContainerDatacenterCharacteristics(arch, os, vmm, hostList, time_zone, cost, costPerMem, costPerStorage,
    costPerBw);
    ContainerDatacenter datacenter = new PowerContainerDatacenterCM(name, characteristics, vmAllocationPolicy,
    containerAllocationPolicy, new LinkedList(), schedulingInterval, experimentName, logAddress,
    VMStartupDelay, ContainerStartupDelay);

    return datacenter;
    }

    /**
    * create the containers for hosting the cloudlets and binding them
    * together.
    */
    public static List createContainerList(int brokerId, int containersNumber, double schedulingInterval) {
    ArrayList containers = new ArrayList();

    for (int i = 0; i < containersNumber; ++i) {
    int containerType = i / (int) Math.ceil((double) containersNumber / 3.0D);

    containers.add(new PowerContainer(IDs.pollId(Container.class), brokerId,
    (double) ConstantsExamples.CONTAINER_MIPS[containerType],
    ConstantsExamples.CONTAINER_PES[containerType],
    ConstantsExamples.CONTAINER_RAM[containerType],
    ConstantsExamples.CONTAINER_BW, 0L, "Xen",
    new ContainerCloudletSchedulerDynamicWorkload(
    ConstantsExamples.CONTAINER_MIPS[containerType],
    ConstantsExamples.CONTAINER_PES[containerType]),
    schedulingInterval)); // Use the specified scheduling interval
    }
    return containers;
    }

    /**
    * Creating the cloudlet list that are going to run on containers
    */
    public static List createContainerCloudletList(int brokerId, int numberOfCloudlets)
    throws FileNotFoundException {
    String inputFolderName = "/home/soft13/soft13/Project 2019/Cloudsim-4.0-examples/src/workload/planetlab";
    ArrayList cloudletList = new ArrayList();
    long fileSize = 300L;
    long outputSize = 300L;
    UtilizationModelNull utilizationModelNull = new UtilizationModelNull();
    java.io.File inputFolder1 = new java.io.File(inputFolderName);
    java.io.File[] files1 = inputFolder1.listFiles();
    int createdCloudlets = 0;

    if (files1 != null) {
    for (java.io.File aFiles1 : files1) {
    java.io.File inputFolder = new java.io.File(aFiles1.toString());
    java.io.File[] files = inputFolder.listFiles();
    if (files != null) {
    for (int i = 0; i < files.length; ++i) {
    if (createdCloudlets < numberOfCloudlets) {
    ContainerCloudlet cloudlet = null;
    try {
    cloudlet = new ContainerCloudlet(IDs.pollId(ContainerCloudlet.class),
    ConstantsExamples.CLOUDLET_LENGTH, 1,
    fileSize, outputSize,
    new UtilizationModelPlanetLabInMemoryExtended(files[i].getAbsolutePath(), 300.0D),
    utilizationModelNull, utilizationModelNull);
    } catch (Exception var13) {
    var13.printStackTrace();
    System.exit(0);
    }
    cloudlet.setUserId(brokerId);
    cloudletList.add(cloudlet);
    createdCloudlets += 1;
    } else {
    return cloudletList;
    }
    }
    }
    }
    }
    return cloudletList;
    }
    }
Screenshots
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83