Description: Creating applications in EdgeCloudSim involves defining the structure of tasks, their resource requirements, execution times, and dependencies using the Application class and AppModule instances. Tasks are assigned resources like CPU, memory, and bandwidth, along with execution constraints. Interdependencies between tasks are also defined, specifying execution order. After defining the application, it is instantiated and assigned to edge devices or cloud resources in the simulation, where tasks can be scheduled and executed dynamically based on resource availability and system state.
Sample Code
EdgeCloud.java: package EdgeCloud;
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.utils.SimLogger;
import edu.boun.edgecloudsim.utils.SimUtils;
public class EdgeCloud {
/**
* Creates main() to run this example
*/
public void runSimulation(String[] args) {
//disable console output of cloudsim library
Log.disable();
//enable console output and file output of this application
SimLogger.enablePrintLog();
int iterationNumber = 4;
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 = "src/scripts/Edge_Application/config/default_config.properties";
applicationsFile = "src/scripts/Edge_Application/config/applications.xml";
edgeDevicesFile = "src/scripts/Edge_Application/config/edge_devices.xml";
outputFolder = "src/sim_results/ite" + iterationNumber;
}
//load settings from configuration file
SimSettings SS = SimSettings.getInstance();
if (SS.initialize(configFile, edgeDevicesFile, applicationsFile) == false) {
SimLogger.printLine("cannot initialize simulation settings!");
System.exit(1);
}
//String configName = "default";
if (SS.getFileLoggingEnabled()) {
SimUtils.cleanOutputFolder(outputFolder);
SimLogger.enableFileLog();
}
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("----------------------------------------------------------------------");
//String wekaModelsFolder = configFile.substring(0, configFile.lastIndexOf('/')) + "/weka/";
//WekaWrapper.getInstance().initialize("MultilayerPerceptron", "LinearRegression", wekaModelsFolder);
for (int i = SS.getMinNumOfMobileDev(); i <= SS.getNumOfEdgeDevices(); i += 1) {
for (int s = 0; s < SS.getSimulationScenarios().length; s++) {
for (int p = 0; p < SS.getOrchestratorPolicies().length; p++) {
mainHelper(outputFolder, SS.getSimulationScenarios()[s], SS.getOrchestratorPolicies()[p], iterationNumber, i);
}
}
}
Date SimulationEndDate = Calendar.getInstance().getTime();
now = df.format(SimulationEndDate);
SimLogger.printLine("Simulation finished at " + now + ". It took " + SimUtils.getTimeDifference(SimulationStartDate, SimulationEndDate));
}
public static void mainHelper(String outputFolder, String simulationScenario, String orchestratorPolicy, int iterationNumber, int numOfMobileDevice) {
DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date ScenarioStartDate = Calendar.getInstance().getTime();
String now = df.format(ScenarioStartDate);
SimSettings SS = SimSettings.getInstance();
SimLogger.printLine("Scenario started at " + now);
SimLogger.printLine("Scenario: " + simulationScenario + " - Policy: " + orchestratorPolicy + " - #iteration: " + iterationNumber);
SimLogger.printLine("Duration: " + SS.getSimulationTime() / 60 + " min (warm up period: " + SS.getWarmUpPeriod() / 60 + " min) - #devices: " + numOfMobileDevice);
SimLogger.getInstance().simStarted(outputFolder, "SIMRESULT_" + simulationScenario + "_" + orchestratorPolicy + "_" + numOfMobileDevice + "DEVICES");
try {
// First step: Initialize the CloudSim package. It should be called
// before creating any entities.
int num_user = 2; // number of grid users
Calendar calendar = Calendar.getInstance();
boolean trace_flag = false; // mean trace events
// Initialize the CloudSim library
CloudSim.init(num_user, calendar, trace_flag, 0.01);
// Generate EdgeCloudsim Scenario Factory
ScenarioFactory sampleFactory = new SampleScenarioFactory(numOfMobileDevice, SS.getSimulationTime(), orchestratorPolicy, simulationScenario);
// Generate EdgeCloudSim Simulation Manager
SimManager manager = new SimManager(sampleFactory, numOfMobileDevice, simulationScenario, orchestratorPolicy);
if (orchestratorPolicy.equals("EDGE_CLOUD")) {
SimLogger.disableFileLog();
((SampleEdgeOrchestrator) manager.getEdgeOrchestrator()).openTrainerOutputFile();
}
// Start simulation
manager.startSimulation();
double wan = ((SampleNetworkModel) manager.getNetworkModel()).maxWanDelay;
double wlan = ((SampleNetworkModel) manager.getNetworkModel()).maxWlanDelay;
double bw = SS.getWanBandwidth() * wan * wlan / SS.getSimulationTime();
System.out.println("Bandwidth: " + bw + " bps");
Date ScenarioEndDate = Calendar.getInstance().getTime();
String responseTime = SimUtils.getTimeDifference(ScenarioStartDate, ScenarioEndDate);
SimLogger.printLine("Response Time: " + responseTime);
// double bandwidth = SS.getWanBandwidth();
// SimLogger.printLine("Bandwidth: " + bandwidth + "Mbps");
String latency = SimUtils.getLatency(ScenarioStartDate, ScenarioEndDate);
SimLogger.printLine("Latency: " + latency);
//SimLogger.printLine("maxWanDelay: " + ((SampleNetworkModel)manager.getNetworkModel()).maxWanDelay);
//SimLogger.printLine("maxGsmDelay: " + ((SampleNetworkModel)manager.getNetworkModel()).maxGsmDelay);
//SimLogger.printLine("maxWlanDelay: " + ((SampleNetworkModel)manager.getNetworkModel()).maxWlanDelay);
if (orchestratorPolicy.equals("EDGE_CLOUD")) {
((SampleEdgeOrchestrator) manager.getEdgeOrchestrator()).closeTrainerOutputFile();
}
} 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("------------------------------------------------------------------------");
}//End of scenarios loop
}