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

Office Address

Social List

How to Simulate Host Failure and Recovery Mechanisms in Containercloudsim to Evaluate Fault Tolerance and Resource Migration Efficiency?

Host-Level Power Consumption Using Planetlab

Condition for Simulate Host Failure and Recovery Mechanisms in Containercloudsim

  • Description:
    This project focuses on the simulation of fault tolerance and recovery in a containerized cloud computing environment using ContainerCloudSim. The objective is to model how the system behaves when one or more hosts fail unexpectedly and to analyze how effectively the virtual machines (VMs) and containers are migrated or recovered to maintain system reliability and performance.The implementation introduces a failure injection mechanism that randomly or periodically simulates host failures during the simulation runtime. When a host fails, the simulation identifies the affected VMs and containers, attempts to migrate them to other healthy hosts based on resource availability and utilization thresholds, and records detailed recovery statistics, including migration success rates, recovery time, and impact on running cloudlets.By observing the system’s recovery behavior, this experiment helps researchers and cloud engineers understand how fault-tolerant resource management policies can minimize downtime and maintain Quality of Service (QoS) in dynamic cloud environments. The simulation also highlights the importance of VM migration efficiency, container restart behavior, and host selection policies in achieving resilient cloud operations.
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;

    /**
    * ContainerCloudSim with Failure Injection Simulation Task: Simulate host
    * failures and observe recovery behavior Learning Objective: Understand fault
    * tolerance in cloud systems
    */
    public class FaultTolerance {

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

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

    /**
    * The container list.
    */
    private static List containerList;

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

    /**
    * Statistics for failure simulation
    */
    private static class FailureStatistics {

    private int totalHostFailures = 0;
    private int affectedVMs = 0;
    private int successfullyMigratedVMs = 0;
    private int failedCloudlets = 0;
    private int recoveredCloudlets = 0;
    private long totalRecoveryTime = 0;

    public void printStatistics() {
    Log.printLine("\n" + "=".repeat(70));
    Log.printLine("FAILURE SIMULATION STATISTICS");
    Log.printLine("=".repeat(70));
    Log.printLine("Total Host Failures: " + totalHostFailures);
    Log.printLine("Affected VMs: " + affectedVMs);
    Log.printLine("Successfully Migrated VMs: " + successfullyMigratedVMs);
    Log.printLine("Migration Success Rate: "
    + (affectedVMs > 0 ? String.format("%.1f", (successfullyMigratedVMs * 100.0 / affectedVMs)) : "0") + "%");
    Log.printLine("Failed Cloudlets: " + failedCloudlets);
    Log.printLine("Recovered Cloudlets: " + recoveredCloudlets);
    Log.printLine("Recovery Rate: "
    + (failedCloudlets > 0 ? String.format("%.1f", (recoveredCloudlets * 100.0 / failedCloudlets)) : "0") + "%");
    Log.printLine("Average Recovery Time: "
    + (recoveredCloudlets > 0 ? String.format("%.2f", totalRecoveryTime / (double) recoveredCloudlets) : "0") + " seconds");
    }
    }

    private static FailureStatistics failureStats = new FailureStatistics();

    /**
    * Simulate host failure and recovery process
    */
    private static void simulateHostFailure(List hosts, int failedHostId, double failureTime) {
    Log.printLine("\n" + "=".repeat(50));
    Log.printLine(" SIMULATING HOST FAILURE AT TIME: " + String.format("%.2f", failureTime));
    Log.printLine("=".repeat(50));

    if (failedHostId >= hosts.size()) {
    Log.printLine(" Invalid host ID: " + failedHostId);
    return;
    }

    ContainerHost failedHost = hosts.get(failedHostId);
    failureStats.totalHostFailures++;

    // Mark host as failed
    failedHost.setFailed(true);
    Log.printLine("Host " + failedHostId + " has failed!");
    Log.printLine(" - Host ID: " + failedHost.getId());
    Log.printLine(" - Host MIPS: " + failedHost.getTotalMips());
    Log.printLine(" - Host RAM: " + failedHost.getRam());

    // Get VMs running on failed host
    List vmsOnFailedHost = new ArrayList<>();
    List containersOnFailedHost = new ArrayList<>();

    for (ContainerVm vm : vmList) {
    if (vm.getHost() == failedHost) {
    vmsOnFailedHost.add(vm);
    Log.printLine(" VM " + vm.getId() + " affected (MIPS: " + vm.getMips() + ", RAM: " + vm.getRam() + ")");

    // Get containers on this VM
    for (Container container : containerList) {
    if (container.getVm() == vm) {
    containersOnFailedHost.add(container);
    Log.printLine(" Container " + container.getId() + " affected");
    }
    }
    }
    }

    failureStats.affectedVMs += vmsOnFailedHost.size();
    Log.printLine(" Total Affected VMs: " + vmsOnFailedHost.size());
    Log.printLine(" Total Affected Containers: " + containersOnFailedHost.size());

    // Simulate migration to available hosts
    simulateVMMigration(vmsOnFailedHost, containersOnFailedHost, failedHostId, failureTime);

    Log.printLine(" Host failure simulation completed");
    }

    /**
    * Simulate VM migration to available hosts
    */
    private static void simulateVMMigration(List vmsToMigrate, List containersToMigrate,
    int failedHostId, double failureTime) {
    Log.printLine("\n--- VM MIGRATION PROCESS ---");

    int successfulMigrations = 0;
    int failedMigrations = 0;

    for (ContainerVm vm : vmsToMigrate) {
    ContainerHost targetHost = findSuitableHostForMigration(vm, failedHostId);

    if (targetHost != null) {
    // Simulate migration
    double migrationTime = calculateMigrationTime(vm, targetHost);
    Log.printLine(" Migrating VM " + vm.getId() + " to Host " + targetHost.getId()
    + " (Estimated time: " + String.format("%.2f", migrationTime) + " seconds)");

    // Update VM location
    vm.setHost(targetHost);
    successfulMigrations++;
    failureStats.successfullyMigratedVMs++;

    // Migrate containers
    migrateContainersForVM(vm, containersToMigrate, migrationTime);

    } else {
    Log.printLine(" No suitable host found for VM " + vm.getId() + " - VM will be terminated");
    failedMigrations++;
    failureStats.failedCloudlets += countCloudletsOnVM(vm);
    }
    }

    Log.printLine("Migration Results:");
    Log.printLine(" Successful migrations: " + successfulMigrations);
    Log.printLine(" Failed migrations: " + failedMigrations);
    Log.printLine(" Success rate: "
    + (vmsToMigrate.size() > 0 ? String.format("%.1f", (successfulMigrations * 100.0 / vmsToMigrate.size())) : "0") + "%");
    }

    /**
    * Find suitable host for VM migration
    */
    private static ContainerHost findSuitableHostForMigration(ContainerVm vm, int failedHostId) {
    ContainerHost bestHost = null;
    double bestScore = Double.MAX_VALUE;

    for (ContainerHost host : hostList) {
    // Skip failed host and hosts that are already overloaded
    if (host.getId() == failedHostId || host.isFailed()) {
    continue;
    }

    // Check if host has enough resources
    boolean hasEnoughMips = host.getAvailableMips() >= vm.getMips();
    boolean hasEnoughRam = host.getContainerVmRamProvisioner().getAvailableRam() >= vm.getRam();

    if (hasEnoughMips && hasEnoughRam) {
    // Calculate score based on current utilization (lower is better)
    double cpuUtilization = 1 - (host.getAvailableMips() / host.getTotalMips());
    double ramUtilization = 1 - ((double) host.getContainerVmRamProvisioner().getAvailableRam() / host.getRam());
    double score = (cpuUtilization * 0.6) + (ramUtilization * 0.4);

    if (score < bestScore) {
    bestScore = score;
    bestHost = host;
    }
    }
    }

    if (bestHost != null) {
    Log.printLine(" Selected Host " + bestHost.getId() + " for VM " + vm.getId()
    + " (Score: " + String.format("%.3f", bestScore) + ")");
    }

    return bestHost;
    }

    /**
    * Calculate migration time based on VM size and network bandwidth
    */
    private static double calculateMigrationTime(ContainerVm vm, ContainerHost targetHost) {
    // Simplified migration time calculation
    double vmSizeMB = (vm.getRam() / 1024.0); // Convert RAM to MB
    double networkBandwidthMbps = 1000; // Assume 1 Gbps network
    double migrationTime = (vmSizeMB * 8) / networkBandwidthMbps; // Convert to seconds

    // Add overhead
    migrationTime += 0.5;

    return Math.max(migrationTime, 1.0); // Minimum 1 second
    }

    /**
    * Migrate containers for a VM
    */
    private static void migrateContainersForVM(ContainerVm vm, List containersToMigrate, double migrationTime) {
    int migratedContainers = 0;
    int recoveredCloudlets = 0;

    for (Container container : containersToMigrate) {
    if (container.getVm() == vm) {
    // Simulate container restart/migration
    double recoveryTime = migrationTime + (Math.random() * 2.0); // Add some variability

    Log.printLine(" Container " + container.getId() + " recovered in "
    + String.format("%.2f", recoveryTime) + " seconds");

    migratedContainers++;
    recoveredCloudlets++;
    failureStats.recoveredCloudlets++;
    failureStats.totalRecoveryTime += (long) (recoveryTime * 1000); // Convert to milliseconds
    }
    }

    if (migratedContainers > 0) {
    Log.printLine(" Successfully migrated " + migratedContainers + " containers");
    }
    }

    /**
    * Count cloudlets on a VM
    */
    private static int countCloudletsOnVM(ContainerVm vm) {
    int count = 0;
    for (ContainerCloudlet cloudlet : cloudletList) {
    if (cloudlet.getVmId() == vm.getId()) {
    count++;
    }
    }
    return count;
    }

    /**
    * Simulate random host failures during simulation
    */
    private static void simulateRandomFailures() {
    Log.printLine("\n" + " INITIATING RANDOM FAILURE SIMULATION");
    Log.printLine("=".repeat(50));

    // Schedule multiple failures at different times
    scheduleFailure(0, 300.0); // Early failure
    scheduleFailure(1, 600.0); // Mid-simulation failure
    scheduleFailure(2, 900.0); // Late failure

    // Random failure
    int randomHostId = (int) (Math.random() * Math.min(3, hostList.size()));
    double randomTime = 400.0 + (Math.random() * 400.0);
    scheduleFailure(randomHostId, randomTime);
    }

    /**
    * Schedule a host failure at specific simulation time
    */
    private static void scheduleFailure(int hostId, double failureTime) {
    Log.printLine(" Scheduled failure: Host " + hostId + " at time " + String.format("%.2f", failureTime));
    }

    /**
    * Enhanced cloudlet list printing with failure information
    */
    private static void printCloudletListWithFailureInfo(List list) {
    int size = list.size();
    ContainerCloudlet cloudlet;

    String indent = " ";
    Log.printLine();
    Log.printLine("========== SIMULATION RESULTS WITH FAILURE ANALYSIS ==========");
    Log.printLine("Cloudlet ID" + indent + "Container ID" + indent + "STATUS" + indent
    + "VM ID" + indent + "Host ID" + indent + "Exec Time" + indent
    + "Start Time" + indent + "Finish Time" + indent + "Recovery Info");

    DecimalFormat dft = new DecimalFormat("###.##");
    int successCount = 0;
    int failureCount = 0;

    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");
    successCount++;

    Log.printLine(indent + indent + cloudlet.getVmId()
    + indent + indent + getHostIdForVm(cloudlet.getVmId())
    + indent + indent
    + dft.format(cloudlet.getActualCPUTime()) + indent
    + indent + dft.format(cloudlet.getExecStartTime())
    + indent + indent
    + dft.format(cloudlet.getFinishTime())
    + indent + "N/A");
    } else {
    Log.print(" FAILED");
    failureCount++;

    Log.printLine(indent + indent + cloudlet.getVmId()
    + indent + indent + getHostIdForVm(cloudlet.getVmId())
    + indent + indent
    + dft.format(cloudlet.getActualCPUTime()) + indent
    + indent + dft.format(cloudlet.getExecStartTime())
    + indent + indent
    + "N/A"
    + indent + "Affected by host failure");
    }
    }

    Log.printLine("\n SUMMARY:");
    Log.printLine(" Successful cloudlets: " + successCount);
    Log.printLine(" Failed cloudlets: " + failureCount);
    Log.printLine(" Success rate: " + String.format("%.1f", (successCount * 100.0 / size)) + "%");
    }

    /**
    * Get host ID for a VM
    */
    private static String getHostIdForVm(int vmId) {
    for (ContainerVm vm : vmList) {
    if (vm.getId() == vmId && vm.getHost() != null) {
    return String.valueOf(vm.getHost().getId());
    }
    }
    return "N/A";
    }

    /**
    * Creates main() to run this example with failure simulation
    */
    public static void main(String[] args) {
    Log.printLine("Starting ContainerCloudSim with Failure Injection Simulation...");
    Log.printLine("Objective: Understand fault tolerance and recovery in cloud systems");

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

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

    String logAddress = "~/Results";

    // Create datacenter
    PowerContainerDatacenter datacenter = (PowerContainerDatacenter) createDatacenter("datacenter",
    PowerContainerDatacenterCM.class, hostList, vmAllocationPolicy, containerAllocationPolicy,
    getExperimentName("FailureSimulation", String.valueOf(overBookingFactor)),
    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);

    // Schedule failures
    simulateRandomFailures();

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

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

    // Run simulation
    CloudSim.startSimulation();

    // Simulate failures during runtime
    Log.printLine("\n SIMULATION RUNNING - INJECTING FAILURES...");

    // Simulate failures at different times
    simulateHostFailure(hostList, 0, 300.0); // Early failure
    simulateHostFailure(hostList, 1, 600.0); // Mid-simulation failure

    CloudSim.stopSimulation();

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

    // Collect and print results
    List newList = broker.getCloudletReceivedList();
    printCloudletListWithFailureInfo(newList);

    // Print failure statistics
    failureStats.printStatistics();

    // Print simulation performance
    Log.printLine("\n Simulation Performance:");
    Log.printLine(" Total simulation time: " + (endTime - startTime) + " ms");
    Log.printLine(" Real-time vs Simulation time ratio: "
    + String.format("%.2f", (86400.0 / ((endTime - startTime) / 1000.0))) + "x");

    Log.printLine("\n ContainerCloudSim Failure Injection Simulation finished!");

    } catch (Exception e) {
    e.printStackTrace();
    Log.printLine("Unwanted errors occurred during simulation");
    }
    }

    // ========== ORIGINAL METHODS (Unchanged) ==========
    /**
    * 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) {
    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,
    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
    */
    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
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98