this is as good as it gets
This commit is contained in:
parent
8d8bbbf0ae
commit
732f3724b0
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -6,6 +6,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.math3.util.Pair;
|
||||
import org.cloudbus.cloudsim.Log;
|
||||
import org.cloudbus.cloudsim.core.CloudSim;
|
||||
import org.fog.application.AppEdge;
|
||||
import org.fog.application.AppModule;
|
||||
|
@ -220,6 +221,8 @@ public class ModulePlacementEdgewards extends ModulePlacement{
|
|||
// FINDING OUT WHETHER PLACEMENT OF OPERATOR ON DEVICE IS POSSIBLE
|
||||
for(AppEdge edge : getApplication().getEdges()){ // take all incoming edges
|
||||
if(edge.getDestination().equals(moduleName)){
|
||||
Log.printLine(moduleName);
|
||||
Log.printLine(edge.getDestination());
|
||||
double rate = appEdgeToRate.get(edge);
|
||||
totalCpuLoad += rate*edge.getTupleCpuLength();
|
||||
}
|
||||
|
|
|
@ -74,15 +74,15 @@ public class Birbnetes {
|
|||
application.addAppModule("MainModule", 120);
|
||||
application.addAppModule("StorageModule", 120);
|
||||
|
||||
application.addAppEdge("Sensor", "ClientModule", 50, 8800,
|
||||
application.addAppEdge("Sensor", "ClientModule", 4500, 8800,
|
||||
"Sensor", Tuple.UP, AppEdge.SENSOR);
|
||||
application.addAppEdge("ClientModule", "MainModule", 100,
|
||||
application.addAppEdge("ClientModule", "MainModule", 3000,
|
||||
1000, "PreProcessedData", Tuple.UP, AppEdge.MODULE);
|
||||
application.addAppEdge("ClientModule", "StorageModule", 10,
|
||||
application.addAppEdge("ClientModule", "StorageModule", 2500,
|
||||
8800, "StoreData", Tuple.UP, AppEdge.MODULE);
|
||||
application.addAppEdge("MainModule", "ClientModule", 200,
|
||||
application.addAppEdge("MainModule", "ClientModule", 2000,
|
||||
1000, "ProcessedData", Tuple.DOWN, AppEdge.MODULE);
|
||||
application.addAppEdge("ClientModule", "Actuators", 50, 1000,
|
||||
application.addAppEdge("ClientModule", "Actuators", 6000, 1000,
|
||||
"OutputData", Tuple.DOWN, AppEdge.ACTUATOR);
|
||||
|
||||
application.addTupleMapping("ClientModule", "Sensor", "PreProcessedData", new FractionalSelectivity(1.0));
|
||||
|
@ -93,15 +93,27 @@ public class Birbnetes {
|
|||
"OutputData", new FractionalSelectivity(1.0));
|
||||
|
||||
final AppLoop loop1 = new AppLoop(new ArrayList<>() {{
|
||||
add("Sensor");
|
||||
add("ClientModule");
|
||||
add("StorageModule");
|
||||
}});
|
||||
final AppLoop loop2 = new AppLoop(new ArrayList<>() {{
|
||||
add("ClientModule");
|
||||
add("MainModule");
|
||||
add("ClientModule");
|
||||
}});
|
||||
final AppLoop loop3 = new AppLoop(new ArrayList<>() {{
|
||||
add("ClientModule");
|
||||
add("MainModule");
|
||||
}});
|
||||
final AppLoop loop4 = new AppLoop(new ArrayList<>() {{
|
||||
add("MainModule");
|
||||
add("ClientModule");
|
||||
add("Actuator");
|
||||
}});
|
||||
List<AppLoop> loops = new ArrayList<>() {{
|
||||
add(loop1);
|
||||
add(loop2);
|
||||
add(loop3);
|
||||
add(loop4);
|
||||
}};
|
||||
application.setLoops(loops);
|
||||
return application;
|
||||
|
@ -114,7 +126,7 @@ public class Birbnetes {
|
|||
Sensor sensor = new Sensor("s-" + id, "Sensor", brokerId, appId, new DeterministicDistribution(getValue(5.00)));
|
||||
sensors.add(sensor);
|
||||
Actuator actuator = new Actuator("a-" + id, brokerId, appId,
|
||||
"OutputData");
|
||||
"Actuators");
|
||||
actuators.add(actuator);
|
||||
sensor.setGatewayDeviceId(lowLevelFogDevice.getId());
|
||||
sensor.setLatency(10.0);
|
||||
|
|
|
@ -36,27 +36,25 @@ import java.util.List;
|
|||
*
|
||||
*/
|
||||
public class Birbnetes_copyofdcnsfog {
|
||||
static List<FogDevice> fogDevices = new ArrayList<FogDevice>();
|
||||
static List<Sensor> sensors = new ArrayList<Sensor>();
|
||||
static List<Actuator> actuators = new ArrayList<Actuator>();
|
||||
static List<FogDevice> fogDevices = new ArrayList<>();
|
||||
static List<Sensor> sensors = new ArrayList<>();
|
||||
static List<Actuator> actuators = new ArrayList<>();
|
||||
static int numOfAreas = 1;
|
||||
static int numOfCamerasPerArea = 4;
|
||||
|
||||
private static boolean CLOUD = false;
|
||||
|
||||
static int numOfClientsPerArea = 4;
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
Log.printLine("Starting DCNS...");
|
||||
Log.printLine("Starting birbnetes...");
|
||||
|
||||
try {
|
||||
Log.disable();
|
||||
//Log.disable();
|
||||
int num_user = 1; // number of cloud users
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
boolean trace_flag = false; // mean trace events
|
||||
|
||||
CloudSim.init(num_user, calendar, trace_flag);
|
||||
|
||||
String appId = "dcns"; // identifier of the application
|
||||
String appId = "birbnetes"; // identifier of the application
|
||||
|
||||
FogBroker broker = new FogBroker("broker");
|
||||
|
||||
|
@ -65,19 +63,20 @@ public class Birbnetes_copyofdcnsfog {
|
|||
|
||||
createFogDevices(broker.getId(), appId);
|
||||
|
||||
Controller controller = null;
|
||||
Controller controller;
|
||||
|
||||
ModuleMapping moduleMapping = ModuleMapping.createModuleMapping(); // initializing a module mapping
|
||||
for(FogDevice device : fogDevices){
|
||||
if(device.getName().startsWith("m")){ // names of all Smart Cameras start with 'm'
|
||||
moduleMapping.addModuleToDevice("motion_detector", device.getName()); // fixing 1 instance of the Motion Detector module to each Smart Camera
|
||||
moduleMapping.addModuleToDevice("input_svc", device.getName()); // fixing 1 instance of the Motion Detector module to each Smart Camera
|
||||
}
|
||||
}
|
||||
moduleMapping.addModuleToDevice("user_interface", "cloud"); // fixing instances of User Interface module in the Cloud
|
||||
moduleMapping.addModuleToDevice("alert_svc", "cloud"); // fixing instances of User Interface module in the Cloud
|
||||
boolean CLOUD = false;
|
||||
if(CLOUD){
|
||||
// if the mode of deployment is cloud-based
|
||||
moduleMapping.addModuleToDevice("object_detector", "cloud"); // placing all instances of Object Detector module in the Cloud
|
||||
moduleMapping.addModuleToDevice("object_tracker", "cloud"); // placing all instances of Object Tracker module in the Cloud
|
||||
moduleMapping.addModuleToDevice("detector_svc", "cloud"); // placing all instances of Object Detector module in the Cloud
|
||||
moduleMapping.addModuleToDevice("storage_svc", "cloud"); // placing all instances of Object Tracker module in the Cloud
|
||||
}
|
||||
|
||||
controller = new Controller("master-controller", fogDevices, sensors,
|
||||
|
@ -93,7 +92,7 @@ public class Birbnetes_copyofdcnsfog {
|
|||
|
||||
CloudSim.stopSimulation();
|
||||
|
||||
Log.printLine("VRGame finished!");
|
||||
Log.printLine("birbnetes finished!");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Log.printLine("Unwanted errors happen");
|
||||
|
@ -102,8 +101,8 @@ public class Birbnetes_copyofdcnsfog {
|
|||
|
||||
/**
|
||||
* Creates the fog devices in the physical topology of the simulation.
|
||||
* @param userId
|
||||
* @param appId
|
||||
* @param userId id of user/broker
|
||||
* @param appId id of app
|
||||
*/
|
||||
private static void createFogDevices(int userId, String appId) {
|
||||
FogDevice cloud = createFogDevice("cloud", 44800, 40000, 100, 10000, 0, 0.01, 16*103, 16*83.25);
|
||||
|
@ -118,26 +117,25 @@ public class Birbnetes_copyofdcnsfog {
|
|||
}
|
||||
}
|
||||
|
||||
private static FogDevice addArea(String id, int userId, String appId, int parentId){
|
||||
private static void addArea(String id, int userId, String appId, int parentId){
|
||||
FogDevice router = createFogDevice("d-"+id, 2800, 4000, 10000, 10000, 1, 0.0, 107.339, 83.4333);
|
||||
fogDevices.add(router);
|
||||
router.setUplinkLatency(2); // latency of connection between router and proxy server is 2 ms
|
||||
for(int i=0;i<numOfCamerasPerArea;i++){
|
||||
for(int i = 0; i< numOfClientsPerArea; i++){
|
||||
String mobileId = id+"-"+i;
|
||||
FogDevice camera = addCamera(mobileId, userId, appId, router.getId()); // adding a smart camera to the physical topology. Smart cameras have been modeled as fog devices as well.
|
||||
camera.setUplinkLatency(2); // latency of connection between camera and router is 2 ms
|
||||
fogDevices.add(camera);
|
||||
FogDevice client = addClient(mobileId, userId, appId, router.getId()); // adding a smart camera to the physical topology. Smart cameras have been modeled as fog devices as well.
|
||||
client.setUplinkLatency(2); // latency of connection between camera and router is 2 ms
|
||||
fogDevices.add(client);
|
||||
}
|
||||
router.setParentId(parentId);
|
||||
return router;
|
||||
}
|
||||
|
||||
private static FogDevice addCamera(String id, int userId, String appId, int parentId){
|
||||
private static FogDevice addClient(String id, int userId, String appId, int parentId){
|
||||
FogDevice camera = createFogDevice("m-"+id, 500, 1000, 10000, 10000, 3, 0, 87.53, 82.44);
|
||||
camera.setParentId(parentId);
|
||||
Sensor sensor = new Sensor("s-"+id, "CAMERA", userId, appId, new DeterministicDistribution(5)); // inter-transmission time of camera (sensor) follows a deterministic distribution
|
||||
Sensor sensor = new Sensor("s-"+id, "SOUND", userId, appId, new DeterministicDistribution(5)); // inter-transmission time of camera (sensor) follows a deterministic distribution
|
||||
sensors.add(sensor);
|
||||
Actuator ptz = new Actuator("ptz-"+id, userId, appId, "PTZ_CONTROL");
|
||||
Actuator ptz = new Actuator("mqtt-"+id, userId, appId, "MQTT_CONTROL");
|
||||
actuators.add(ptz);
|
||||
sensor.setGatewayDeviceId(camera.getId());
|
||||
sensor.setLatency(1.0); // latency of connection between camera (sensor) and the parent Smart Camera is 1 ms
|
||||
|
@ -155,14 +153,14 @@ public class Birbnetes_copyofdcnsfog {
|
|||
* @param downBw downlink bandwidth
|
||||
* @param level hierarchy level of the device
|
||||
* @param ratePerMips cost rate per MIPS used
|
||||
* @param busyPower
|
||||
* @param idlePower
|
||||
* @return
|
||||
* @param busyPower power consumption while busy
|
||||
* @param idlePower power consumption at idle
|
||||
* @return fogdevice
|
||||
*/
|
||||
private static FogDevice createFogDevice(String nodeName, long mips,
|
||||
int ram, long upBw, long downBw, int level, double ratePerMips, double busyPower, double idlePower) {
|
||||
|
||||
List<Pe> peList = new ArrayList<Pe>();
|
||||
List<Pe> peList = new ArrayList<>();
|
||||
|
||||
// 3. Create PEs and add these into a list.
|
||||
peList.add(new Pe(0, new PeProvisionerOverbooking(mips))); // need to store Pe id and MIPS Rating
|
||||
|
@ -181,7 +179,7 @@ public class Birbnetes_copyofdcnsfog {
|
|||
new FogLinearPowerModel(busyPower, idlePower)
|
||||
);
|
||||
|
||||
List<Host> hostList = new ArrayList<Host>();
|
||||
List<Host> hostList = new ArrayList<>();
|
||||
hostList.add(host);
|
||||
|
||||
String arch = "x86"; // system architecture
|
||||
|
@ -193,7 +191,7 @@ public class Birbnetes_copyofdcnsfog {
|
|||
double costPerStorage = 0.001; // the cost of using storage in this
|
||||
// resource
|
||||
double costPerBw = 0.0; // the cost of using bw in this resource
|
||||
LinkedList<Storage> storageList = new LinkedList<Storage>(); // we are not adding SAN
|
||||
LinkedList<Storage> storageList = new LinkedList<>(); // we are not adding SAN
|
||||
// devices by now
|
||||
|
||||
FogDeviceCharacteristics characteristics = new FogDeviceCharacteristics(
|
||||
|
@ -207,7 +205,8 @@ public class Birbnetes_copyofdcnsfog {
|
|||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
assert fogdevice != null;
|
||||
fogdevice.setLevel(level);
|
||||
return fogdevice;
|
||||
}
|
||||
|
@ -216,43 +215,48 @@ public class Birbnetes_copyofdcnsfog {
|
|||
* Function to create the Intelligent Surveillance application in the DDF model.
|
||||
* @param appId unique identifier of the application
|
||||
* @param userId identifier of the user of the application
|
||||
* @return
|
||||
* @return application
|
||||
*/
|
||||
@SuppressWarnings({"serial" })
|
||||
private static Application createApplication(String appId, int userId){
|
||||
|
||||
Application application = Application.createApplication(appId, userId);
|
||||
/*
|
||||
* Adding modules (vertices) to the application model (directed graph)
|
||||
*/
|
||||
application.addAppModule("object_detector", 10);
|
||||
application.addAppModule("motion_detector", 10);
|
||||
application.addAppModule("object_tracker", 10);
|
||||
application.addAppModule("user_interface", 10);
|
||||
application.addAppModule("input_svc", 10);
|
||||
application.addAppModule("detector_svc", 10);
|
||||
application.addAppModule("storage_svc", 10);
|
||||
application.addAppModule("alert_svc", 10);
|
||||
|
||||
/*
|
||||
* Connecting the application modules (vertices) in the application model (directed graph) with edges
|
||||
*/
|
||||
application.addAppEdge("CAMERA", "motion_detector", 1000, 20000, "CAMERA", Tuple.UP, AppEdge.SENSOR); // adding edge from CAMERA (sensor) to Motion Detector module carrying tuples of type CAMERA
|
||||
application.addAppEdge("motion_detector", "object_detector", 2000, 2000, "MOTION_VIDEO_STREAM", Tuple.UP, AppEdge.MODULE); // adding edge from Motion Detector to Object Detector module carrying tuples of type MOTION_VIDEO_STREAM
|
||||
application.addAppEdge("object_detector", "user_interface", 500, 2000, "DETECTED_OBJECT", Tuple.UP, AppEdge.MODULE); // adding edge from Object Detector to User Interface module carrying tuples of type DETECTED_OBJECT
|
||||
application.addAppEdge("object_detector", "object_tracker", 1000, 100, "OBJECT_LOCATION", Tuple.UP, AppEdge.MODULE); // adding edge from Object Detector to Object Tracker module carrying tuples of type OBJECT_LOCATION
|
||||
application.addAppEdge("object_tracker", "PTZ_CONTROL", 100, 28, 100, "PTZ_PARAMS", Tuple.DOWN, AppEdge.ACTUATOR); // adding edge from Object Tracker to PTZ CONTROL (actuator) carrying tuples of type PTZ_PARAMS
|
||||
application.addAppEdge("SOUND", "input_svc", 1000, 20000, "SOUND", Tuple.UP, AppEdge.SENSOR); // adding edge from CAMERA (sensor) to Motion Detector module carrying tuples of type CAMERA
|
||||
application.addAppEdge("input_svc", "detector_svc", 2000, 2000, "DATA", Tuple.UP, AppEdge.MODULE); // adding edge from Motion Detector to Object Detector module carrying tuples of type MOTION_VIDEO_STREAM
|
||||
application.addAppEdge("detector_svc", "storage_svc", 500, 2000, "STORAGE_DATA", Tuple.UP, AppEdge.MODULE); // adding edge from Object Detector to User Interface module carrying tuples of type DETECTED_OBJECT
|
||||
application.addAppEdge("detector_svc", "alert_svc", 1000, 100, "SMALL_DATA", Tuple.UP, AppEdge.MODULE); // adding edge from Object Detector to Object Tracker module carrying tuples of type OBJECT_LOCATION
|
||||
application.addAppEdge("alert_svc", "MQTT_CONTROL", 100, 28, 100, "MQTT_DATA", Tuple.DOWN, AppEdge.ACTUATOR); // adding edge from Object Tracker to PTZ CONTROL (actuator) carrying tuples of type PTZ_PARAMS
|
||||
|
||||
/*
|
||||
* Defining the input-output relationships (represented by selectivity) of the application modules.
|
||||
*/
|
||||
application.addTupleMapping("motion_detector", "CAMERA", "MOTION_VIDEO_STREAM", new FractionalSelectivity(1.0)); // 1.0 tuples of type MOTION_VIDEO_STREAM are emitted by Motion Detector module per incoming tuple of type CAMERA
|
||||
application.addTupleMapping("object_detector", "MOTION_VIDEO_STREAM", "OBJECT_LOCATION", new FractionalSelectivity(1.0)); // 1.0 tuples of type OBJECT_LOCATION are emitted by Object Detector module per incoming tuple of type MOTION_VIDEO_STREAM
|
||||
application.addTupleMapping("object_detector", "MOTION_VIDEO_STREAM", "DETECTED_OBJECT", new FractionalSelectivity(0.05)); // 0.05 tuples of type MOTION_VIDEO_STREAM are emitted by Object Detector module per incoming tuple of type MOTION_VIDEO_STREAM
|
||||
|
||||
application.addTupleMapping("input_svc", "SOUND", "DATA", new FractionalSelectivity(1.0)); // 1.0 tuples of type MOTION_VIDEO_STREAM are emitted by Motion Detector module per incoming tuple of type CAMERA
|
||||
application.addTupleMapping("detector_svc", "DATA", "SMALL_DATA", new FractionalSelectivity(1.0)); // 1.0 tuples of type OBJECT_LOCATION are emitted by Object Detector module per incoming tuple of type MOTION_VIDEO_STREAM
|
||||
application.addTupleMapping("detector_svc", "DATA", "STORAGE_DATA", new FractionalSelectivity(1.0)); // 1.0 tuples of type OBJECT_LOCATION are emitted by Object Detector module per incoming tuple of type MOTION_VIDEO_STREAM
|
||||
application.addTupleMapping("alert_svc", "SMALL_DATA", "MQTT_DATA", new FractionalSelectivity(1.0));
|
||||
|
||||
/*
|
||||
* Defining application loops (maybe incomplete loops) to monitor the latency of.
|
||||
* Here, we add two loops for monitoring : Motion Detector -> Object Detector -> Object Tracker and Object Tracker -> PTZ Control
|
||||
*/
|
||||
final AppLoop loop1 = new AppLoop(new ArrayList<String>(){{add("motion_detector");add("object_detector");add("object_tracker");}});
|
||||
final AppLoop loop2 = new AppLoop(new ArrayList<String>(){{add("object_tracker");add("PTZ_CONTROL");}});
|
||||
List<AppLoop> loops = new ArrayList<AppLoop>(){{add(loop1);add(loop2);}};
|
||||
final AppLoop loop1 = new AppLoop(new ArrayList<>(){{add("input_svc");add("detector_svc");add("alert_svc");}});
|
||||
final AppLoop loop2 = new AppLoop(new ArrayList<>(){{add("input_svc");add("detector_svc");add("storage_svc");}});
|
||||
final AppLoop loop3 = new AppLoop(new ArrayList<>(){{add("alert_svc");add("MQTT_CONTROL");}});
|
||||
final AppLoop loop4 = new AppLoop(new ArrayList<>(){{add("SOUND");add("input_svc");}});
|
||||
final AppLoop loop5 = new AppLoop(new ArrayList<>(){{add("input_svc");add("detector_svc");}});
|
||||
final AppLoop loop6 = new AppLoop(new ArrayList<>(){{add("detector_svc");add("storage_svc");}});
|
||||
final AppLoop loop7 = new AppLoop(new ArrayList<>(){{add("detector_svc");add("alert_svc");}});
|
||||
List<AppLoop> loops = new ArrayList<>(){{add(loop1);add(loop2);add(loop3);add(loop4);add(loop5);add(loop6);add(loop7);}};
|
||||
|
||||
application.setLoops(loops);
|
||||
return application;
|
||||
|
|
Loading…
Reference in New Issue