
The mobile processing units are simulated via CloudSim. It is assumed that the mobile devices operate Hosts and VMs like a server. Therefore, the classes located in the mobile_processing_unit package have a similar naming convention to the other Cloud and Edge components.
132 lines
4.9 KiB
Java
132 lines
4.9 KiB
Java
/*
|
|
* Title: EdgeCloudSim - Main Application
|
|
*
|
|
* Description: Main application for Sample App3
|
|
*
|
|
* Licence: GPL - http://www.gnu.org/copyleft/gpl.html
|
|
* Copyright (c) 2017, Bogazici University, Istanbul, Turkey
|
|
*/
|
|
|
|
package edu.boun.edgecloudsim.applications.sample_app3;
|
|
|
|
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 MainApp {
|
|
|
|
/**
|
|
* Creates main() to run this example
|
|
*/
|
|
public static void main(String[] args) {
|
|
//disable console output of cloudsim library
|
|
Log.disable();
|
|
|
|
//enable console ourput and file output of 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/sample_app3/config/default_config.properties";
|
|
applicationsFile = "scripts/sample_app3/config/applications.xml";
|
|
edgeDevicesFile = "scripts/sample_app3/config/edge_devices.xml";
|
|
outputFolder = "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(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()/60 + " min (warm up period: "+ SS.getWarmUpPeriod()/60 +" min) - #devices: " + j);
|
|
SimLogger.getInstance().simStarted(outputFolder,"SIMRESULT_" + simScenario + "_" + orchestratorPolicy + "_" + j + "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(j,SS.getSimulationTime(), orchestratorPolicy, simScenario);
|
|
|
|
// Generate EdgeCloudSim Simulation Manager
|
|
SimManager manager = new SimManager(sampleFactory, j, simScenario, orchestratorPolicy);
|
|
|
|
// Start simulation
|
|
manager.startSimulation();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
SimLogger.printLine("The simulation has been terminated due to an unexpected error");
|
|
e.printStackTrace();
|
|
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 orchestrators loop
|
|
}//End of scenarios loop
|
|
}//End of mobile devices loop
|
|
|
|
Date SimulationEndDate = Calendar.getInstance().getTime();
|
|
now = df.format(SimulationEndDate);
|
|
SimLogger.printLine("Simulation finished at " + now + ". It took " + SimUtils.getTimeDifference(SimulationStartDate,SimulationEndDate));
|
|
}
|
|
}
|