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

Office Address

Social List

How Do I Can Change NetworkModel in EdgeCloudSim?

Change NetworkModel in EdgeCloudSim

Condition for Change NetworkModel in EdgeCloudSim

  • Description:
    In EdgeCloudSim, modifying the NetworkModel involves creating a custom class that extends the base NetworkModel or its variants like MM1Queue. This allows customization of network behaviors such as delays, bandwidth, and other parameters between devices and edge/cloud servers. Essential methods like initialize(), getUploadDelay(), and getDownloadDelay() can be overridden to configure network properties and data transfer rules. Once implemented, the custom network model is instantiated in the main simulation, influencing device-to-device and edge-to-cloud communication during the simulation.
Sample Code
  • EdgeNetworkModelChange.java:
    package EdgeApplication;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import org.cloudbus.cloudsim.Log;
    import org.cloudbus.cloudsim.core.CloudSim;
    import edu.boun.edgecloudsim.core.ScenarioFactory;
    import edu.boun.edgecloudsim.core.SimManager;
    import edu.boun.edgecloudsim.core.SimSettings;
    import edu.boun.edgecloudsim.network.NetworkModel;
    import edu.boun.edgecloudsim.utils.SimLogger;
    import edu.boun.edgecloudsim.utils.SimUtils;
    import edu.boun.edgecloudsim.edge_client.Task;
    import org.cloudbus.cloudsim.UtilizationModel;
    import org.cloudbus.cloudsim.UtilizationModelFull;
    public class EdgeNetworkModelChange {
    public static void main(String[] args) {
    // Disable console output of CloudSim library
    Log.disable();
    // Enable console output and file output for this application
    SimLogger.enablePrintLog();
    int iterationNumber = 1;
    String configFile = "";
    String outputFolder = "";
    String edgeDevicesFile = "";
    String applicationsFile = "";
    if (args.length == 5) {
    configFile = args[0];
    edgeDevicesFile = args[1];
    applicationsFile = args[2];
    outputFolder = args[3];
    iterationNumber = Integer.parseInt(args[4]);
    } else {
    SimLogger.printLine("Simulation setting file, output folder, and iteration number are not provided! Using default ones...");
    configFile = "scripts/Edge_Application/config/default_config.properties";
    applicationsFile = "scripts/Edge_Application/config/applications.xml";
    edgeDevicesFile = "scripts/Edge_Application/config/edge_devices.xml";
    outputFolder = "sim_results/ite" + iterationNumber;
    }
    SimSettings SS = SimSettings.getInstance();
    if (!SS.initialize(configFile, edgeDevicesFile, applicationsFile)) {
    SimLogger.printLine("Cannot initialize simulation settings!");
    System.exit(0);
    }
    if (SS.getFileLoggingEnabled()) {
    SimLogger.enableFileLog();
    SimUtils.cleanOutputFolder(outputFolder);
    }
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    Date SimulationStartDate = Calendar.getInstance().getTime();
    String now = df.format(SimulationStartDate);
    SimLogger.printLine("Simulation started at " + now);
    SimLogger.printLine("----------------------------------------------------------------------");
    for (int j = SS.getMinNumOfMobileDev(); j <= SS.getMaxNumOfMobileDev(); j += SS.getMobileDevCounterSize()) {
    for (int k = 0; k < SS.getSimulationScenarios().length; k++) {
    for (int i = 0; i < SS.getOrchestratorPolicies().length; i++) {
    String simScenario = SS.getSimulationScenarios()[k];
    String orchestratorPolicy = SS.getOrchestratorPolicies()[i];
    Date ScenarioStartDate = Calendar.getInstance().getTime();
    now = df.format(ScenarioStartDate);
    SimLogger.printLine("Scenario started at " + now);
    SimLogger.printLine("Scenario: " + simScenario + " - Policy: " + orchestratorPolicy + " - #iteration: " + iterationNumber);
    SimLogger.printLine("Duration: " + SS.getSimulationTime() / 3600 + " hour(s) - Poisson: " + SS.getTaskLookUpTable()[0][2] + " - #devices: " + j);
    SimLogger.getInstance().simStarted(outputFolder, "SIMRESULT_" + simScenario + "_" + orchestratorPolicy + "_" + j + "DEVICES");
    try {
    int num_user = 2;
    Calendar calendar = Calendar.getInstance();
    boolean trace_flag = false;
    CloudSim.init(num_user, calendar, trace_flag, 0.01);
    int numberOfMobileDevices = 10; // Example number of devices
    // Create new network model instance
    NetworkModel customNetworkModel = new newNetworkModel(numberOfMobileDevices, simScenario);
    // Initialize the custom network model
    customNetworkModel.initialize();
    int mobileDeviceId = 1; // Example mobile device ID
    int cloudletId = 101; // Cloudlet ID (or task ID)
    long cloudletLength = 1000; // Length of the task (in MIPS)
    int pesNumber = 1; // Number of processing elements
    long cloudletFileSize = 100; // Size of the input file (in KB)
    long cloudletOutputSize = 100; // Size of the output file (in KB)
    // Create UtilizationModel instances (CPU, RAM, BW)
    UtilizationModel utilizationModelCpu = new UtilizationModelFull();
    UtilizationModel utilizationModelRam = new UtilizationModelFull();
    UtilizationModel utilizationModelBw = new UtilizationModelFull();
    // Instantiate the Task class with the constructor you provided
    Task task = new Task(mobileDeviceId, cloudletId, cloudletLength, pesNumber,
    cloudletFileSize, cloudletOutputSize, utilizationModelCpu,
    utilizationModelRam, utilizationModelBw);
    double uploadDelay = customNetworkModel.getUploadDelay(1, 2, task); // Example devices: 1 and 2
    double downloadDelay = customNetworkModel.getDownloadDelay(10, 20, task); // Example devices: 1 and 2
    // Print the results
    System.out.println("Upload Delay: " + uploadDelay + " seconds");
    System.out.println("Download Delay: " + downloadDelay + " seconds");
    // Generate EdgeCloudSim Scenario Factory
    ScenarioFactory sampleFactory = new SampleScenarioFactory(j, SS.getSimulationTime(), orchestratorPolicy, simScenario);
    // Continue with the simulation setup and execution...
    SimManager manager = new SimManager(sampleFactory, j, simScenario, orchestratorPolicy);
    manager.startSimulation();
    } catch (Exception e) {
    SimLogger.printLine("The simulation has been terminated due to an unexpected error");
    System.exit(0);
    }
    Date ScenarioEndDate = Calendar.getInstance().getTime();
    now = df.format(ScenarioEndDate);
    SimLogger.printLine("Scenario finished at " + now + ". It took " + SimUtils.getTimeDifference(ScenarioStartDate, ScenarioEndDate));
    SimLogger.printLine("----------------------------------------------------------------------");
    }
    }
    }
    Date SimulationEndDate = Calendar.getInstance().getTime();
    now = df.format(SimulationEndDate);
    SimLogger.printLine("Simulation finished at " + now + ". It took " + SimUtils.getTimeDifference(SimulationStartDate, SimulationEndDate));
    }
    }

  • newNetworkModel.java:
    package EdgeApplication;
    import edu.boun.edgecloudsim.edge_client.Task;
    import edu.boun.edgecloudsim.network.MM1Queue;
    import edu.boun.edgecloudsim.network.NetworkModel;
    public class newNetworkModel extends MM1Queue {
    protected int numberOfMobileDevices;
    protected String simScenario;
    public newNetworkModel(int numberOfMobileDevices, String simScenario) {
    super(numberOfMobileDevices, simScenario);
    this.numberOfMobileDevices = numberOfMobileDevices;
    this.simScenario = simScenario;
    }
    @Override
    public void initialize() {
    // Custom initialization of the network model (e.g., setting up links, bandwidth, latency)
    // Example: Initialize custom properties, network bandwidth, etc.
    System.out.println("Initializing custom network model...");
    }
    @Override
    public double getUploadDelay(int sourceDeviceId, int destDeviceId, Task task) {
    // Calculate upload delay from source device to destination device
    // Example: Simple model, can be customized
    double bandwidth = 10.0; // example bandwidth in Mbps
    double distance = Math.abs(sourceDeviceId - destDeviceId); // simple distance model
    double delay = distance / bandwidth; // simplistic delay calculation
    return delay;
    }
    @Override
    public double getDownloadDelay(int sourceDeviceId, int destDeviceId, Task task) {
    // Calculate download delay from source device to destination device
    // Example: Same simplistic model for download delay
    double bandwidth = 10.0; // example bandwidth in Mbps
    double distance = Math.abs(sourceDeviceId - destDeviceId); // simple distance model
    double delay = distance / bandwidth; // simplistic delay calculation
    return delay;
    }
    }
ScreenShots
  • NetworkModel in EdgeCloudSim