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

Office Address

Social List

How to Design and Implement Custom Container Allocation Policies in Cloudsim to Optimize Resource Utilization and Compare Them with Default Policies?

Host-Level Power Consumption Using Planetlab

Condition for Design and Implement Custom Container Allocation Policies in Cloudsim

  • Description:
    This project implements and evaluates custom container allocation policies within the CloudSim container extension framework. The system features two novel allocation strategies: a threshold-based policy that prevents over-utilization by enforcing CPU and RAM thresholds, and a load-balancing policy that distributes containers evenly across VMs based on current resource utilization. The implementation extends PowerContainerAllocationPolicySimple to incorporate intelligent container placement logic, including resource monitoring, allocation scoring, and constraint enforcement. The framework conducts comparative simulations across multiple policies, measuring key performance metrics including success rates, resource utilization efficiency, execution times, and overall system performance.
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.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 org.cloudbus.cloudsim.container.core.ContainerDatacenterCharacteristics;

    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.
    * Modified for Exercise 8: Custom Container-VM Allocation Policy
    */
    public class ContainerVmAllocationPolicy { // Renamed class to avoid conflict

    /**
    * 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;

    /**
    * Custom Container Allocation Policy that ensures VMs have sufficient free resources
    */
    public static class CustomContainerAllocationPolicy extends PowerContainerAllocationPolicySimple {
    private double cpuThreshold;
    private double ramThreshold;
    private int allocationAttempts;
    private int successfulAllocations;

    public CustomContainerAllocationPolicy() {
    this(0.8, 0.8); // Default thresholds: 80% utilization
    }

    public CustomContainerAllocationPolicy(double cpuThreshold, double ramThreshold) {
    super();
    this.cpuThreshold = cpuThreshold;
    this.ramThreshold = ramThreshold;
    this.allocationAttempts = 0;
    this.successfulAllocations = 0;
    }

    @Override
    public boolean allocateVmForContainer(Container container, ContainerVm vm) {
    allocationAttempts++;

    // Custom logic: Only allocate if VM has sufficient free resources
    double cpuUtilization = vm.getTotalUtilizationOfCpu(CloudSim.clock());
    double ramUtilization = (double) vm.getContainerRamProvisioner().getUsedVmRam() / vm.getRam();

    // Check if VM has enough CPU and RAM capacity for the container
    boolean hasEnoughCpu = (cpuUtilization + (container.getMips() / vm.getMips())) <= cpuThreshold;
    boolean hasEnoughRam = vm.getContainerRamProvisioner().isSuitableForContainer(container, container.getRam());

    Log.printLine(String.format("Allocation attempt %d: VM %d - CPU: %.2f%%, RAM: %.2f%%, Suitable: %s",
    allocationAttempts, vm.getId(), cpuUtilization * 100, ramUtilization * 100,
    hasEnoughCpu && hasEnoughRam ? "YES" : "NO"));

    if (hasEnoughCpu && hasEnoughRam) {
    boolean result = super.allocateVmForContainer(container, vm);
    if (result) {
    successfulAllocations++;
    Log.printLine(" Successfully allocated Container " + container.getId() +
    " to VM " + vm.getId());
    }
    return result;
    } else {
    Log.printLine(" Rejected allocation - VM " + vm.getId() +
    " exceeds resource thresholds (CPU: " + String.format("%.1f", cpuUtilization * 100) +
    "%, RAM: " + String.format("%.1f", ramUtilization * 100) + "%)");
    return false;
    }
    }

    @Override
    public ContainerVm findVmForContainer(Container container) {
    Log.printLine("Searching for suitable VM for Container " + container.getId() +
    " (MIPS: " + container.getMips() + ", RAM: " + container.getRam() + ")");

    ContainerVm selectedVm = null;
    double bestScore = Double.MAX_VALUE;

    for (ContainerVm vm : getContainerVmList()) {
    if (vm.isSuitableForContainer(container)) {
    double cpuUtilization = vm.getTotalUtilizationOfCpu(CloudSim.clock());
    double ramUtilization = (double) vm.getContainerRamProvisioner().getUsedVmRam() / vm.getRam();

    // Calculate a score based on current utilization (lower is better)
    double score = (cpuUtilization * 0.6) + (ramUtilization * 0.4);

    // Check if this VM has the lowest utilization
    if (score < bestScore) {
    bestScore = score;
    selectedVm = vm;
    }

    Log.printLine(String.format(" VM %d - Score: %.3f (CPU: %.1f%%, RAM: %.1f%%)",
    vm.getId(), score, cpuUtilization * 100, ramUtilization * 100));
    }
    }

    if (selectedVm != null) {
    Log.printLine("Selected VM " + selectedVm.getId() + " with score: " + String.format("%.3f", bestScore));
    } else {
    Log.printLine("No suitable VM found for Container " + container.getId());
    }

    return selectedVm;
    }

    public void printAllocationStatistics() {
    Log.printLine("\n--- Custom Allocation Policy Statistics ---");
    Log.printLine("Total allocation attempts: " + allocationAttempts);
    Log.printLine("Successful allocations: " + successfulAllocations);
    Log.printLine("Success rate: " + String.format("%.1f",
    (successfulAllocations * 100.0 / allocationAttempts)) + "%");
    Log.printLine("CPU threshold: " + (cpuThreshold * 100) + "%");
    Log.printLine("RAM threshold: " + (ramThreshold * 100) + "%");
    }
    }

    /**
    * Alternative Custom Policy: Load Balancing Allocation
    */
    public static class LoadBalancingContainerAllocationPolicy extends PowerContainerAllocationPolicySimple {
    private int allocationAttempts;
    private int successfulAllocations;

    public LoadBalancingContainerAllocationPolicy() {
    super();
    this.allocationAttempts = 0;
    this.successfulAllocations = 0;
    }

    @Override
    public ContainerVm findVmForContainer(Container container) {
    allocationAttempts++;
    Log.printLine("LoadBalancing: Finding VM for Container " + container.getId());

    ContainerVm selectedVm = null;
    double minLoad = Double.MAX_VALUE;

    for (ContainerVm vm : getContainerVmList()) {
    if (vm.isSuitableForContainer(container)) {
    // Calculate current load (combination of CPU and RAM utilization)
    double cpuLoad = vm.getTotalUtilizationOfCpu(CloudSim.clock());
    double ramLoad = (double) vm.getContainerRamProvisioner().getUsedVmRam() / vm.getRam();
    double totalLoad = (cpuLoad + ramLoad) / 2; // Average load

    Log.printLine(String.format(" VM %d - Load: %.3f (CPU: %.1f%%, RAM: %.1f%%)",
    vm.getId(), totalLoad, cpuLoad * 100, ramLoad * 100));

    // Select VM with minimum load
    if (totalLoad < minLoad) {
    minLoad = totalLoad;
    selectedVm = vm;
    }
    }
    }

    if (selectedVm != null) {
    Log.printLine("Selected VM " + selectedVm.getId() + " with load: " + String.format("%.3f", minLoad));
    }

    return selectedVm;
    }

    @Override
    public boolean allocateVmForContainer(Container container, ContainerVm vm) {
    boolean result = super.allocateVmForContainer(container, vm);
    if (result) {
    successfulAllocations++;
    Log.printLine(" LoadBalancing: Allocated Container " + container.getId() +
    " to VM " + vm.getId());
    }
    return result;
    }

    public void printAllocationStatistics() {
    Log.printLine("\n--- Load Balancing Allocation Statistics ---");
    Log.printLine("Total allocation attempts: " + allocationAttempts);
    Log.printLine("Successful allocations: " + successfulAllocations);
    }
    }

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

    try {
    // Test different allocation policies
    testAllocationPolicies();

    Log.printLine("ContainerCloudSim Custom Allocation Policies finished!");

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

    /**
    * Tests different container allocation policies
    */
    private static void testAllocationPolicies() {
    // Define policies to test
    ContainerAllocationPolicy[] policies = {
    new PowerContainerAllocationPolicySimple(), // Default policy
    new CustomContainerAllocationPolicy(0.8, 0.8), // Custom with 80% threshold
    new CustomContainerAllocationPolicy(0.6, 0.7), // Custom with stricter thresholds
    new LoadBalancingContainerAllocationPolicy() // Load balancing policy
    };

    String[] policyNames = {
    "Default Policy",
    "Custom Policy (80% threshold)",
    "Custom Policy (60/70% threshold)",
    "Load Balancing Policy"
    };

    List results = new ArrayList<>();

    for (int i = 0; i < policies.length; i++) {
    Log.printLine("\n" + "=".repeat(70));
    Log.printLine("TESTING ALLOCATION POLICY: " + policyNames[i]);
    Log.printLine("=".repeat(70));

    PolicyResult result = runSimulationWithPolicy(policies[i], policyNames[i]);
    results.add(result);

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

    // Print comparative results
    printPolicyComparison(results);
    }

    /**
    * Runs a simulation with a specific allocation policy
    */
    private static PolicyResult runSimulationWithPolicy(ContainerAllocationPolicy policy, String policyName) {
    PolicyResult result = new PolicyResult(policyName);

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

    // Use the provided allocation policy
    ContainerAllocationPolicy containerAllocationPolicy = policy;

    // Define other policies
    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();

    // FIX: Use the correct type and proper casting
    PowerContainerVmAllocationPolicyMigrationAbstractHostSelection vmAllocationPolicy =
    new PowerContainerVmAllocationPolicyMigrationAbstractHostSelection(
    hostList, vmSelectionPolicy, hostSelectionPolicy, overUtilizationThreshold, underUtilizationThreshold);

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

    // Create entities
    cloudletList = createContainerCloudletList(brokerId, ConstantsExamples.NUMBER_CLOUDLETS);
    containerList = createContainerList(brokerId, ConstantsExamples.NUMBER_CLOUDLETS);
    vmList = createVmList(brokerId, ConstantsExamples.NUMBER_VMS);

    String logAddress = "~/Results";

    // Create datacenter with the specified policy
    // FIX: Cast to the correct type
    PowerContainerDatacenter datacenter = (PowerContainerDatacenter) createDatacenter("datacenter",
    PowerContainerDatacenterCM.class, hostList,
    (org.cloudbus.cloudsim.container.resourceAllocators.ContainerVmAllocationPolicy) vmAllocationPolicy,
    containerAllocationPolicy,
    getExperimentName("AllocationPolicy", policyName.replace(" ", "_")),
    ConstantsExamples.SCHEDULING_INTERVAL, 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();

    // Calculate metrics
    calculatePolicyMetrics(result, completedCloudlets, vmList);
    result.setSimulationTime(endTime - startTime);

    // Print policy-specific statistics
    if (policy instanceof CustomContainerAllocationPolicy) {
    ((CustomContainerAllocationPolicy) policy).printAllocationStatistics();
    } else if (policy instanceof LoadBalancingContainerAllocationPolicy) {
    ((LoadBalancingContainerAllocationPolicy) policy).printAllocationStatistics();
    }

    printPolicyResults(result, completedCloudlets);

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

    return result;
    }

    /**
    * Calculates metrics for policy evaluation
    */
    private static void calculatePolicyMetrics(PolicyResult result, List cloudlets, List vms) {
    int successfulCloudlets = 0;
    double totalExecutionTime = 0;
    double totalWaitTime = 0;

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

    // Calculate VM utilization statistics
    double totalCpuUtilization = 0;
    double totalRamUtilization = 0;
    int utilizedVms = 0;

    for (ContainerVm vm : vms) {
    double cpuUtil = vm.getTotalUtilizationOfCpu(CloudSim.clock());
    double ramUtil = (double) vm.getContainerRamProvisioner().getUsedVmRam() / vm.getRam();

    if (cpuUtil > 0 || ramUtil > 0) {
    utilizedVms++;
    totalCpuUtilization += cpuUtil;
    totalRamUtilization += ramUtil;
    }
    }

    result.setSuccessfulCloudlets(successfulCloudlets);
    result.setTotalCloudlets(cloudlets.size());
    result.setAvgExecutionTime(successfulCloudlets > 0 ? totalExecutionTime / successfulCloudlets : 0);
    result.setAvgWaitTime(successfulCloudlets > 0 ? totalWaitTime / successfulCloudlets : 0);
    result.setAvgCpuUtilization(utilizedVms > 0 ? totalCpuUtilization / utilizedVms : 0);
    result.setAvgRamUtilization(utilizedVms > 0 ? totalRamUtilization / utilizedVms : 0);
    result.setUtilizedVms(utilizedVms);
    }

    /**
    * Prints results for a single policy
    */
    private static void printPolicyResults(PolicyResult result, List completedCloudlets) {
    Log.printLine("\n--- RESULTS for " + result.getPolicyName() + " ---");
    Log.printLine("Successful Cloudlets: " + result.getSuccessfulCloudlets() + "/" + result.getTotalCloudlets());
    Log.printLine("Success Rate: " + String.format("%.1f", result.getSuccessRate()) + "%");
    Log.printLine("Average Execution Time: " + String.format("%.2f", result.getAvgExecutionTime()) + " seconds");
    Log.printLine("Average Wait Time: " + String.format("%.2f", result.getAvgWaitTime()) + " seconds");
    Log.printLine("Average CPU Utilization: " + String.format("%.1f", result.getAvgCpuUtilization() * 100) + "%");
    Log.printLine("Average RAM Utilization: " + String.format("%.1f", result.getAvgRamUtilization() * 100) + "%");
    Log.printLine("Utilized VMs: " + result.getUtilizedVms() + "/" + ConstantsExamples.NUMBER_VMS);
    Log.printLine("Simulation Runtime: " + result.getSimulationTime() + " ms");
    }

    /**
    * Prints comparative results across all policies
    */
    private static void printPolicyComparison(List results) {
    Log.printLine("\n" + "=".repeat(100));
    Log.printLine("COMPARATIVE RESULTS: CONTAINER ALLOCATION POLICIES");
    Log.printLine("=".repeat(100));

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

    Log.printLine(String.format(headerFormat,
    "Policy", "Success Rate", "Util VMs", "Avg Exec Time", "Avg Wait Time",
    "Avg CPU Util", "Avg RAM Util", "Sim Time(ms)"));
    Log.printLine("-".repeat(100));

    for (PolicyResult result : results) {
    Log.printLine(String.format(dataFormat,
    result.getPolicyName(),
    result.getSuccessRate(),
    result.getUtilizedVms(),
    result.getAvgExecutionTime(),
    result.getAvgWaitTime(),
    result.getAvgCpuUtilization() * 100,
    result.getAvgRamUtilization() * 100,
    result.getSimulationTime()));
    }

    // Find best performing policy based on multiple criteria
    PolicyResult bestPolicy = null;
    double bestScore = 0;

    for (PolicyResult result : results) {
    // Scoring: higher success rate and better resource utilization
    double score = (result.getSuccessRate() * 0.4) +
    ((1 - result.getAvgCpuUtilization()) * 0.3) +
    ((1 - result.getAvgRamUtilization()) * 0.3);

    if (score > bestScore) {
    bestScore = score;
    bestPolicy = result;
    }
    }

    if (bestPolicy != null) {
    Log.printLine("\n★ BEST PERFORMING POLICY: " + bestPolicy.getPolicyName());
    Log.printLine(" - Success Rate: " + String.format("%.1f", bestPolicy.getSuccessRate()) + "%");
    Log.printLine(" - CPU Utilization: " + String.format("%.1f", bestPolicy.getAvgCpuUtilization() * 100) + "%");
    Log.printLine(" - RAM Utilization: " + String.format("%.1f", bestPolicy.getAvgRamUtilization() * 100) + "%");
    }
    }

    /**
    * Data class to store policy results
    */
    private static class PolicyResult {
    private String policyName;
    private int successfulCloudlets;
    private int totalCloudlets;
    private double avgExecutionTime;
    private double avgWaitTime;
    private double avgCpuUtilization;
    private double avgRamUtilization;
    private int utilizedVms;
    private long simulationTime;

    public PolicyResult(String policyName) {
    this.policyName = policyName;
    }

    public double getSuccessRate() {
    return totalCloudlets > 0 ? (successfulCloudlets * 100.0 / totalCloudlets) : 0;
    }

    // Getters and setters
    public String getPolicyName() { return policyName; }
    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 getAvgCpuUtilization() { return avgCpuUtilization; }
    public void setAvgCpuUtilization(double avgCpuUtilization) { this.avgCpuUtilization = avgCpuUtilization; }
    public double getAvgRamUtilization() { return avgRamUtilization; }
    public void setAvgRamUtilization(double avgRamUtilization) { this.avgRamUtilization = avgRamUtilization; }
    public int getUtilizedVms() { return utilizedVms; }
    public void setUtilizedVms(int utilizedVms) { this.utilizedVms = utilizedVms; }
    public long getSimulationTime() { return simulationTime; }
    public void setSimulationTime(long simulationTime) { this.simulationTime = simulationTime; }
    }

    // The following methods remain the same as in the original code
    // (createHostList, createVmList, createContainerList, createContainerCloudletList,
    // createDatacenter, createBroker, getExperimentName, printCloudletList)

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

    /**
    * Prints the Cloudlet objects.
    */
    private static void printCloudletList(List list) {
    int size = list.size();
    ContainerCloudlet cloudlet;
    String indent = " ";
    Log.printLine();
    Log.printLine("========== OUTPUT ==========");
    Log.printLine("Cloudlet ID" + indent + "Container ID" + indent + "STATUS" + indent
    + "Data center ID" + indent + "VM ID" + 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);
    Log.print(cloudlet.getContainerId() + indent);

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

    /**
    * Create the Virtual machines and add them to the list
    */
    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;
    }

    /**
    * Create the host list
    */
    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,
    org.cloudbus.cloudsim.container.resourceAllocators.ContainerVmAllocationPolicy vmAllocationPolicy, // Use fully qualified name
    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
    */
    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;
    }

    /**
    * Creating the cloudlet list
    */
    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
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90