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

Office Address

Social List

How to Evaluate the Impact of the Least Full Container Placement Policy on Resource Utilization, Load Balancing, and Performance in Containercloudsim?

Host-Level Power Consumption Using Planetlab

Condition for Evaluate the Impact of the Least Full Container Placement Policy on Resource Utilization

  • Description:
    This research investigates the effectiveness of the Least Full container placement policy in achieving optimal resource utilization and workload balancing within containerized cloud data centers. Using the ContainerCloudSim simulation framework, the study evaluates the dynamic allocation of containers to virtual machines (VMs) based on available computational resources. The proposed framework integrates host and VM selection strategies, including HostSelectionPolicyFirstFit and PowerContainerVmSelectionPolicyMaximumUsage, with the Least Full placement algorithm to distribute workloads evenly across the infrastructure. PlanetLab workload traces are utilized to emulate realistic cloud behavior, enabling detailed analysis of CPU utilization, execution time, and success rate. The simulation captures pre- and post-placement performance statistics, including average utilization, load balance efficiency, execution variance, and success ratio. Experimental results demonstrate how the Least Full policy effectively reduces resource imbalance and improves the efficiency and scalability of containerized cloud operations, offering insights for energy-aware and SLA-compliant scheduling strategies in cloud environments.
Sample Code
  • package containercloudsim;

    import org.cloudbus.cloudsim.Log;
    import org.cloudbus.cloudsim.Storage;
    import org.cloudbus.cloudsim.UtilizationModelNull;
    import org.cloudbus.cloudsim.container.containerPlacementPolicies.ContainerPlacementPolicy;
    import org.cloudbus.cloudsim.container.containerPlacementPolicies.ContainerPlacementPolicyLeastFull;
    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.*;
    import org.cloudbus.cloudsim.examples.container.ConstantsExamples;
    import org.cloudbus.cloudsim.examples.container.UtilizationModelPlanetLabInMemoryExtended;

    /**
    * Comprehensive analysis of Least Full Container Placement Policy
    */
    public class PlacementPolicyLeastFull {

    private static List cloudletList;
    private static List vmList;
    private static List containerList;
    private static List hostList;

    // Statistics for Least Full analysis
    private static LeastFullStats leastFullStats;

    public static void main(String[] args) {
    Log.printLine("Starting Least Full Container Placement Policy Analysis...");
    leastFullStats = new LeastFullStats();

    try {
    int num_user = 1;
    Calendar calendar = Calendar.getInstance();
    boolean trace_flag = false;

    // Initialize CloudSim
    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 workloads
    cloudletList = createContainerCloudletList(brokerId, ConstantsExamples.NUMBER_CLOUDLETS);
    containerList = createContainerList(brokerId, ConstantsExamples.NUMBER_CLOUDLETS);
    vmList = createVmList(brokerId, ConstantsExamples.NUMBER_VMS);

    String logAddress = "~/Results/LeastFullAnalysis";

    PowerContainerDatacenter datacenter = (PowerContainerDatacenter) createDatacenter("datacenter",
    PowerContainerDatacenterCM.class, hostList, vmAllocationPolicy, containerAllocationPolicy,
    getExperimentName("LeastFullAnalysis", String.valueOf(overBookingFactor)),
    ConstantsExamples.SCHEDULING_INTERVAL, logAddress,
    ConstantsExamples.VM_STARTTUP_DELAY, ConstantsExamples.CONTAINER_STARTTUP_DELAY);

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

    // Analyze Least Full placement before simulation
    analyzeLeastFullPlacement(containerList, vmList);

    CloudSim.terminateSimulation(86400.00);
    CloudSim.startSimulation();
    CloudSim.stopSimulation();

    // Get results and analyze
    List completedCloudlets = broker.getCloudletReceivedList();
    printCloudletList(completedCloudlets);
    analyzeLeastFullResults(completedCloudlets, containerList, vmList);
    printLeastFullStatistics();

    Log.printLine("Least Full Container Placement Analysis finished!");

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

    /**
    * Analyze Least Full placement pattern
    */
    private static void analyzeLeastFullPlacement(List containers, List vms) {
    Log.printLine("\n=== LEAST FULL PLACEMENT ANALYSIS ===");

    // Simulate Least Full placement
    ContainerPlacementPolicy leastFullPolicy = new ContainerPlacementPolicyLeastFull();
    Map vmContainerCount = new HashMap<>();
    Map vmCpuUtilization = new HashMap<>();
    Map vmRamUtilization = new HashMap<>();
    Map initialAvailableMips = new HashMap<>();

    // Initialize maps and record initial available MIPS
    for (ContainerVm vm : vms) {
    vmContainerCount.put(vm.getId(), 0);
    vmCpuUtilization.put(vm.getId(), 0.0);
    vmRamUtilization.put(vm.getId(), 0.0);
    initialAvailableMips.put(vm.getId(), vm.getContainerScheduler().getAvailableMips());
    }

    Log.printLine("Initial Available MIPS per VM:");
    for (ContainerVm vm : vms) {
    Log.printLine(String.format("VM %d: %.2f MIPS available",
    vm.getId(), initialAvailableMips.get(vm.getId())));
    }

    // Simulate placement for each container
    List containersCopy = new ArrayList<>(containers);
    for (Container container : containersCopy) {
    ContainerVm selectedVm = leastFullPolicy.getContainerVm(vmList, container, new HashSet());

    if (selectedVm != null) {
    // Update statistics
    int vmId = selectedVm.getId();
    vmContainerCount.put(vmId, vmContainerCount.get(vmId) + 1);

    // Calculate utilization (simplified)
    double cpuUtil = vmCpuUtilization.get(vmId) +
    (container.getMips() / selectedVm.getMips());
    double ramUtil = vmRamUtilization.get(vmId) +
    (container.getRam() / (double) selectedVm.getRam());

    vmCpuUtilization.put(vmId, cpuUtil);
    vmRamUtilization.put(vmId, ramUtil);

    leastFullStats.totalPlacements++;
    leastFullStats.placementSequence.add(new Placement(container.getId(), vmId));

    // Record available MIPS decision metric
    double availableMips = selectedVm.getContainerScheduler().getAvailableMips();
    leastFullStats.availableMipsAtPlacement.add(availableMips);
    }
    }

    // Print placement results
    Log.printLine("\nVM ID | Containers | CPU Util (%) | RAM Util (%) | Initial Avail MIPS");
    Log.printLine("------|------------|--------------|-------------|-------------------");

    for (ContainerVm vm : vms) {
    int vmId = vm.getId();
    int containerCount = vmContainerCount.get(vmId);
    double cpuUtilPercent = Math.min(vmCpuUtilization.get(vmId) * 100, 100);
    double ramUtilPercent = Math.min(vmRamUtilization.get(vmId) * 100, 100);
    double initialMips = initialAvailableMips.get(vmId);

    Log.printLine(String.format("%5d | %10d | %12.2f | %11.2f | %17.2f",
    vmId, containerCount, cpuUtilPercent, ramUtilPercent, initialMips));

    // Update statistics
    leastFullStats.vmUtilization.add(cpuUtilPercent);
    leastFullStats.finalVmUtilization.put(vmId, cpuUtilPercent);
    if (cpuUtilPercent > leastFullStats.maxVmUtilization) {
    leastFullStats.maxVmUtilization = cpuUtilPercent;
    }
    if (cpuUtilPercent < leastFullStats.minVmUtilization || leastFullStats.minVmUtilization == -1) {
    leastFullStats.minVmUtilization = cpuUtilPercent;
    }
    }

    // Calculate load balancing metrics
    calculateLoadBalancingMetrics();
    }

    /**
    * Calculate load balancing effectiveness
    */
    private static void calculateLoadBalancingMetrics() {
    double sum = 0;
    double sumSquared = 0;
    int count = leastFullStats.vmUtilization.size();

    for (double utilization : leastFullStats.vmUtilization) {
    sum += utilization;
    sumSquared += utilization * utilization;
    }

    double mean = sum / count;
    double variance = (sumSquared / count) - (mean * mean);
    double stdDev = Math.sqrt(variance);

    leastFullStats.averageUtilization = mean;
    leastFullStats.utilizationStdDev = stdDev;
    leastFullStats.loadBalanceEfficiency = 100 - (stdDev / mean * 100);

    Log.printLine(String.format("\nLoad Balancing Metrics:"));
    Log.printLine(String.format("Average VM Utilization: %.2f%%", mean));
    Log.printLine(String.format("Utilization Std Deviation: %.2f%%", stdDev));
    Log.printLine(String.format("Load Balance Efficiency: %.2f%%", leastFullStats.loadBalanceEfficiency));
    }

    /**
    * Analyze Least Full results after simulation
    */
    private static void analyzeLeastFullResults(List completedCloudlets,
    List containers, List vms) {
    Log.printLine("\n=== LEAST FULL PERFORMANCE RESULTS ===");

    Map> vmExecutionTimes = new HashMap<>();
    Map vmSuccessCount = new HashMap<>();
    Map vmTotalMips = new HashMap<>();

    // Initialize maps
    for (ContainerVm vm : vms) {
    vmExecutionTimes.put(vm.getId(), new ArrayList());
    vmSuccessCount.put(vm.getId(), 0);
    vmTotalMips.put(vm.getId(), vm.getMips());
    }

    // Analyze completed cloudlets
    for (ContainerCloudlet cloudlet : completedCloudlets) {
    if (cloudlet.getCloudletStatusString().equals("Success")) {
    int vmId = cloudlet.getVmId();
    double executionTime = cloudlet.getActualCPUTime();

    vmExecutionTimes.get(vmId).add(executionTime);
    vmSuccessCount.put(vmId, vmSuccessCount.get(vmId) + 1);
    leastFullStats.successfulCloudlets++;

    leastFullStats.totalExecutionTime += executionTime;
    if (executionTime > leastFullStats.maxExecutionTime) {
    leastFullStats.maxExecutionTime = executionTime;
    }
    if (executionTime < leastFullStats.minExecutionTime || leastFullStats.minExecutionTime == -1) {
    leastFullStats.minExecutionTime = executionTime;
    }
    }
    }

    // Calculate performance metrics per VM
    Log.printLine("\nVM ID | Success Count | Avg Time (s) | Std Dev | MIPS | Efficiency");
    Log.printLine("------|--------------|--------------|----------|-------|------------");

    for (ContainerVm vm : vms) {
    int vmId = vm.getId();
    List times = vmExecutionTimes.get(vmId);
    int successCount = vmSuccessCount.get(vmId);
    double totalMips = vmTotalMips.get(vmId);

    if (successCount > 0) {
    double avgTime = times.stream().mapToDouble(Double::doubleValue).average().orElse(0);
    double stdDev = calculateStdDev(times, avgTime);
    double efficiency = (successCount / avgTime) * totalMips; // Higher is better

    Log.printLine(String.format("%5d | %12d | %12.2f | %8.2f | %5.0f | %10.2f",
    vmId, successCount, avgTime, stdDev, totalMips, efficiency));

    leastFullStats.vmAvgTimes.put(vmId, avgTime);
    leastFullStats.vmEfficiency.put(vmId, efficiency);
    }
    }

    // Calculate overall performance metrics
    calculatePerformanceMetrics(vmExecutionTimes, vmSuccessCount);
    }

    /**
    * Calculate standard deviation
    */
    private static double calculateStdDev(List values, double mean) {
    if (values.size() <= 1) return 0;
    double sum = 0;
    for (double value : values) {
    sum += Math.pow(value - mean, 2);
    }
    return Math.sqrt(sum / values.size());
    }

    /**
    * Calculate overall performance metrics
    */
    private static void calculatePerformanceMetrics(Map> vmExecutionTimes,
    Map vmSuccessCount) {
    double totalAvgTime = 0;
    int vmCount = 0;

    for (List times : vmExecutionTimes.values()) {
    if (!times.isEmpty()) {
    totalAvgTime += times.stream().mapToDouble(Double::doubleValue).average().orElse(0);
    vmCount++;
    }
    }

    if (vmCount > 0) {
    leastFullStats.overallAvgExecutionTime = totalAvgTime / vmCount;
    }

    // Calculate success rate
    int totalSuccess = vmSuccessCount.values().stream().mapToInt(Integer::intValue).sum();
    leastFullStats.successRate = (double) totalSuccess / leastFullStats.totalPlacements * 100;
    }

    /**
    * Print comprehensive Least Full statistics
    */
    private static void printLeastFullStatistics() {
    Log.printLine("\n=== LEAST FULL STATISTICS SUMMARY ===");

    Log.printLine("Total Placements: " + leastFullStats.totalPlacements);
    Log.printLine("Successful Cloudlets: " + leastFullStats.successfulCloudlets);
    Log.printLine("Success Rate: " + String.format("%.2f%%", leastFullStats.successRate));
    Log.printLine("Overall Average Execution Time: " + String.format("%.2f seconds", leastFullStats.overallAvgExecutionTime));
    Log.printLine("Min Execution Time: " + String.format("%.2f seconds", leastFullStats.minExecutionTime));
    Log.printLine("Max Execution Time: " + String.format("%.2f seconds", leastFullStats.maxExecutionTime));
    Log.printLine("Min VM Utilization: " + String.format("%.2f%%", leastFullStats.minVmUtilization));
    Log.printLine("Max VM Utilization: " + String.format("%.2f%%", leastFullStats.maxVmUtilization));
    Log.printLine("Average VM Utilization: " + String.format("%.2f%%", leastFullStats.averageUtilization));
    Log.printLine("VM Utilization Std Dev: " + String.format("%.2f%%", leastFullStats.utilizationStdDev));
    Log.printLine("Load Balance Efficiency: " + String.format("%.2f%%", leastFullStats.loadBalanceEfficiency));

    // Analyze placement patterns
    analyzeLeastFullPlacementPatterns();


    }

    /**
    * Analyze placement patterns for Least Full
    */
    private static void analyzeLeastFullPlacementPatterns() {
    Log.printLine("\n=== LEAST FULL PLACEMENT PATTERN ANALYSIS ===");

    // Count containers per VM in placement sequence
    Map placementDistribution = new HashMap<>();
    for (Placement placement : leastFullStats.placementSequence) {
    placementDistribution.put(placement.vmId,
    placementDistribution.getOrDefault(placement.vmId, 0) + 1);
    }

    Log.printLine("Placement Distribution:");
    for (Map.Entry entry : placementDistribution.entrySet()) {
    double percentage = (double) entry.getValue() / leastFullStats.totalPlacements * 100;
    double finalUtilization = leastFullStats.finalVmUtilization.get(entry.getKey());
    Log.printLine(String.format(" VM %d: %d containers (%.1f%%) - Final Utilization: %.1f%%",
    entry.getKey(), entry.getValue(), percentage, finalUtilization));
    }

    // Analyze available MIPS pattern
    if (!leastFullStats.availableMipsAtPlacement.isEmpty()) {
    double avgAvailableMips = leastFullStats.availableMipsAtPlacement.stream()
    .mapToDouble(Double::doubleValue).average().orElse(0);
    double minAvailableMips = leastFullStats.availableMipsAtPlacement.stream()
    .mapToDouble(Double::doubleValue).min().orElse(0);
    double maxAvailableMips = leastFullStats.availableMipsAtPlacement.stream()
    .mapToDouble(Double::doubleValue).max().orElse(0);

    Log.printLine(String.format("\nAvailable MIPS at Placement Decisions:"));
    Log.printLine(String.format(" Average: %.2f MIPS", avgAvailableMips));
    Log.printLine(String.format(" Minimum: %.2f MIPS", minAvailableMips));
    Log.printLine(String.format(" Maximum: %.2f MIPS", maxAvailableMips));
    }

    // Calculate load imbalance score
    double avgContainersPerVm = (double) leastFullStats.totalPlacements / placementDistribution.size();
    double imbalanceScore = 0;
    for (int count : placementDistribution.values()) {
    imbalanceScore += Math.abs(count - avgContainersPerVm);
    }
    imbalanceScore /= leastFullStats.totalPlacements;

    Log.printLine(String.format("Load Imbalance Score: %.3f (0 = perfect balance, 1 = maximum imbalance)", imbalanceScore));
    Log.printLine(String.format("Utilization Range: %.1f%% (difference between min and max utilization)",
    leastFullStats.maxVmUtilization - leastFullStats.minVmUtilization));
    }

    // Existing utility methods (similar to previous implementation)
    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();
    }

    private static ContainerDatacenterBroker createBroker(int overBookingFactor) {
    try {
    return new ContainerDatacenterBroker("Broker", overBookingFactor);
    } catch (Exception e) {
    e.printStackTrace();
    System.exit(0);
    return null;
    }
    }

    private static void printCloudletList(List list) {
    int size = list.size();
    ContainerCloudlet cloudlet;
    String indent = " ";

    Log.printLine("\n========== CLOUDLET EXECUTION RESULTS ==========");
    Log.printLine("Cloudlet ID" + indent + "VM ID" + indent + "Container ID" + indent + "STATUS" + 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 + indent);
    Log.print(cloudlet.getVmId() + indent + indent);
    Log.print(cloudlet.getContainerId() + indent + indent);

    if (cloudlet.getCloudletStatusString().equals("Success")) {
    Log.print("SUCCESS" + indent + indent);
    Log.printLine(dft.format(cloudlet.getActualCPUTime()) + indent + indent +
    dft.format(cloudlet.getExecStartTime()) + indent + indent +
    dft.format(cloudlet.getFinishTime()));
    } else {
    Log.printLine("FAILED");
    }
    }
    }

    private static ArrayList createVmList(int brokerId, int containerVmsNumber) {
    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, ConstantsExamples.SCHEDULING_INTERVAL));
    }
    return containerVms;
    }

    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;
    }

    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;
    }

    public static List createContainerList(int brokerId, int containersNumber) {
    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]),
    ConstantsExamples.SCHEDULING_INTERVAL));
    }
    return 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;

    for (java.io.File aFiles1 : files1) {
    java.io.File inputFolder = new java.io.File(aFiles1.toString());
    java.io.File[] files = inputFolder.listFiles();
    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;
    }

    /**
    * Statistics class for Least Full analysis
    */
    static class LeastFullStats {
    int totalPlacements = 0;
    int successfulCloudlets = 0;
    double totalExecutionTime = 0;
    double minExecutionTime = -1;
    double maxExecutionTime = 0;
    double overallAvgExecutionTime = 0;
    double minVmUtilization = -1;
    double maxVmUtilization = 0;
    double averageUtilization = 0;
    double utilizationStdDev = 0;
    double loadBalanceEfficiency = 0;
    double successRate = 0;

    List vmUtilization = new ArrayList<>();
    List availableMipsAtPlacement = new ArrayList<>();
    List placementSequence = new ArrayList<>();
    Map vmAvgTimes = new HashMap<>();
    Map vmEfficiency = new HashMap<>();
    Map finalVmUtilization = new HashMap<>();
    }

    /**
    * Placement record class
    */
    static class Placement {
    int containerId;
    int vmId;

    Placement(int containerId, int vmId) {
    this.containerId = containerId;
    this.vmId = vmId;
    }
    }
    }
Screenshots
  • 115
  • 116
  • 117
  • 118
  • 119