Description: Creating a cloud server in EdgeCloudSim involves defining a custom class extending CloudServerManager to configure datacenters and hosts. The setup specifies characteristics like architecture, operating system, and resource costs, with hosts defined by cores, memory, storage, and bandwidth. Hosts are grouped into datacenters managed by a virtual machine allocation policy, ensuring consistency with SimSettings. This process integrates the cloud server as a functional component within the simulation.
Sample Code
EdgeCloudServerCreation.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.utils.SimLogger;
import edu.boun.edgecloudsim.utils.SimUtils;
import org.cloudbus.cloudsim.Datacenter;
public class EdgeCloudServerCreation {
/**
* Creates main() to run this example
*/
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;
}
// 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() / 3600 + " hour(s) - Poisson: " + SS.getTaskLookUpTable()[0][2] + " - #devices: " + j);
SimLogger.getInstance().simStarted(outputFolder, "SIMRESULT_" + simScenario + "_" + orchestratorPolicy + "_" + j + "DEVICES");
try {
// First step: Initialize the CloudSim package
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 the newCloudServerManager and create the Datacenter
NewCloudServerManager cloudServerManager = new NewCloudServerManager();
Datacenter datacenter = cloudServerManager.createDatacenter(1); // Create Datacenter 1
// 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");
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));
}
}
NewCloudServerManager.java: package EdgeApplication;
import edu.boun.edgecloudsim.cloud_server.DefaultCloudServerManager;
import edu.boun.edgecloudsim.core.SimSettings;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.cloudbus.cloudsim.Datacenter;
import org.cloudbus.cloudsim.DatacenterCharacteristics;
import org.cloudbus.cloudsim.Host;
import org.cloudbus.cloudsim.Pe;
import org.cloudbus.cloudsim.Storage;
import org.cloudbus.cloudsim.VmAllocationPolicy;
import org.cloudbus.cloudsim.VmSchedulerSpaceShared;
import org.cloudbus.cloudsim.provisioners.BwProvisionerSimple;
import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple;
import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;
public class NewCloudServerManager extends DefaultCloudServerManager {
/**
* Creates a Datacenter instance.
*
* @param index Index of the datacenter
* @return The created Datacenter instance
*/
Datacenter createDatacenter(int index) throws Exception {
// Define characteristics for the Datacenter
String arch = "x86"; // Architecture
String os = "Linux"; // Operating system
String vmm = "Xen"; // Virtual machine manager
double costPerBw = 0; // Cost per bandwidth
double costPerSec = 0; // Cost per processing power
double costPerMem = 0; // Cost per memory
double costPerStorage = 0; // Cost per storage
// Create hosts for the datacenter
List hostList = createHosts();
// Name and characteristics of the Datacenter
String name = "CloudDatacenter_" + index;
double timeZone = 3.0; // Example timezone offset
LinkedList storageList = new LinkedList<>(); // No storage initially
DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
arch, os, vmm, hostList, timeZone, costPerSec, costPerMem, costPerStorage, costPerBw
);
// Create the Datacenter with the specified allocation policy
VmAllocationPolicy vmPolicy = getVmAllocationPolicy(hostList, index);
Datacenter datacenter = null;
datacenter = new Datacenter(name, characteristics, vmPolicy, storageList, 0.0);
return datacenter;
}
/**
* Creates a list of hosts for the Datacenter.
*
* @return List of Host instances
*/
private List createHosts() {
List hostList = new ArrayList<>();
int numCloudHosts = SimSettings.getInstance().getNumOfCloudHost();
for (int i = 0; i < numCloudHosts; i++) {
// Retrieve settings for Cloud VMs
int numOfVMPerHost = SimSettings.getInstance().getNumOfCloudVMsPerHost();
int numOfCores = SimSettings.getInstance().getCoreForCloudVM() * numOfVMPerHost;
double mips = SimSettings.getInstance().getMipsForCloudVM() * numOfVMPerHost;
int ram = SimSettings.getInstance().getRamForCloudVM() * numOfVMPerHost;
long storage = SimSettings.getInstance().getStorageForCloudVM() * numOfVMPerHost;
long bandwidth = 0; // Example bandwidth
// Create processing elements (PEs) for the host
List peList = new ArrayList<>();
for (int j = 0; j < numOfCores; j++) {
peList.add(new Pe(j, new PeProvisionerSimple(mips)));
}
// Create the Host instance
int uniqueHostId = i + SimSettings.getInstance().getNumOfEdgeHosts();
Host host = new Host(
uniqueHostId,
new RamProvisionerSimple(ram),
new BwProvisionerSimple(bandwidth),
storage,
peList,
new VmSchedulerSpaceShared(peList)
);
// Print Host details
System.out.println("Host ID: " + uniqueHostId + " | MIPS: " + mips);
hostList.add(host);
}
System.out.println(numCloudHosts + " number of hosts created successfully.");
return hostList;
}
}