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

Office Address

Social List

How to Place the Application in Edge and Fog Devices?

Place the Application in Edge and Fog Devices

Condition for Place the Application in Edge and Fog Devices

  • Description:
    Application placement in edge and fog devices involves assigning tasks to devices based on their capabilities and proximity to data sources. Edge devices, like sensors or cameras, handle lightweight tasks or data collection, while fog devices process latency-sensitive operations. Resource-intensive tasks are offloaded to the cloud. The goal is to optimize performance, reduce latency, and balance resource usage across the network.
Sample Code
  • ApplicationPlacementFog.java:
    package fogsamples;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.LinkedList;
    import java.util.List;
    import org.cloudbus.cloudsim.Host;
    import org.cloudbus.cloudsim.Log;
    import org.cloudbus.cloudsim.Pe;
    import org.cloudbus.cloudsim.Storage;
    import org.cloudbus.cloudsim.core.CloudSim;
    import org.cloudbus.cloudsim.power.PowerHost;
    import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;
    import org.cloudbus.cloudsim.sdn.overbooking.BwProvisionerOverbooking;
    import org.cloudbus.cloudsim.sdn.overbooking.PeProvisionerOverbooking;
    import org.fog.application.AppEdge;
    import org.fog.application.AppLoop;
    import org.fog.application.Application;
    import org.fog.entities.Actuator;
    import org.fog.entities.FogBroker;
    import org.fog.entities.FogDevice;
    import org.fog.entities.FogDeviceCharacteristics;
    import org.fog.entities.Sensor;
    import org.fog.entities.Tuple;
    import org.fog.placement.Controller;
    import org.fog.placement.ModuleMapping;
    import org.fog.placement.ModulePlacementEdgewards;
    import org.fog.placement.ModulePlacementMapping;
    import org.fog.policy.AppModuleAllocationPolicy;
    import org.fog.scheduler.StreamOperatorScheduler;
    import org.fog.utils.FogLinearPowerModel;
    import org.fog.utils.FogUtils;
    import org.fog.utils.TimeKeeper;
    import org.fog.utils.distribution.DeterministicDistribution;
    public class ApplicationPlacementFog {
    static List fogDevices = new ArrayList();
    static List sensors = new ArrayList();
    static List actuators = new ArrayList();
    static int numOfAreas = 1;
    static int numOfCamerasPerArea = 4;
    private static boolean CLOUD = true;
    public static void main(String[] args) {
    Log.printLine("Starting Place application...");
    try {
    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
    FogBroker broker = new FogBroker("broker");
    Application application = createApplication(appId, broker.getId());
    application.setUserId(broker.getId());
    createFogDevices(broker.getId(), appId);
    Controller controller = null;
    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", "fog"); // fixing 1 instance of the Motion Detector module to each Smart Camera
    }
    }
    moduleMapping.addModuleToDevice("user_interface", "fog"); // fixing instances of User Interface module in the Cloud
    if (CLOUD) {
    // if the mode of deployment is cloud-based
    moduleMapping.addModuleToDevice("object_detector", "fog"); // placing all instances of Object Detector module in the Cloud
    moduleMapping.addModuleToDevice("object_tracker", "fog"); // placing all instances of Object Tracker module in the Cloud
    moduleMapping.addModuleToDevice("motion_detector", "fog");
    }
    controller = new Controller("master-controller", fogDevices, sensors, actuators);
    controller.submitApplication(application, (CLOUD) ? (new ModulePlacementMapping(fogDevices, application, moduleMapping))
    : (new ModulePlacementEdgewards(fogDevices, sensors, actuators, application, moduleMapping)));
    TimeKeeper.getInstance().setSimulationStartTime(Calendar.getInstance().getTimeInMillis());
    CloudSim.startSimulation();
    CloudSim.stopSimulation();
    Log.printLine("Simulation finished!");
    } catch (Exception e) {
    e.printStackTrace();
    Log.printLine("Unwanted errors happen");
    }
    }
    private static void createFogDevices(int userId, String appId) {
    // Create cloud device
    FogDevice cloud = createFogDevice("fog", 44800, 40000, 100, 10000, 0, 0.01, 16 * 103, 16 * 83.25);
    cloud.setParentId(-1);
    fogDevices.add(cloud);
    // Create proxy server
    FogDevice proxy = createFogDevice("proxy-server", 2800, 4000, 10000, 10000, 1, 0.0, 107.339, 83.4333);
    proxy.setParentId(cloud.getId());
    proxy.setUplinkLatency(100); // latency of connection between proxy server and cloud is 100 ms
    fogDevices.add(proxy);
    for (int i = 0; i < numOfAreas; i++) {
    addArea(i + "", userId, appId, proxy.getId());
    }
    }
    private static FogDevice 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++) {
    String mobileId = id + "-" + i;
    FogDevice camera = addCamera(mobileId, userId, appId, router.getId()); // adding a smart camera to the physical topology.
    camera.setUplinkLatency(2); // latency of connection between camera and router is 2 ms
    fogDevices.add(camera);
    }
    router.setParentId(parentId);
    return router;
    }
    private static FogDevice addCamera(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)
    sensors.add(sensor);
    Actuator ptz = new Actuator("ptz-" + id, userId, appId, "PTZ_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
    ptz.setGatewayDeviceId(camera.getId());
    ptz.setLatency(1.0); // latency of connection between PTZ Control and the parent Smart Camera is 1 ms
    return camera;
    }
    private static FogDevice createFogDevice(String nodeName, long mips, int ram, long upBw, long downBw, int level, double ratePerMips, double busyPower, double idlePower) {
    List peList = new ArrayList();
    peList.add(new Pe(0, new PeProvisionerOverbooking(mips))); // Creating PEs for device
    int hostId = FogUtils.generateEntityId();
    long storage = 1000000;
    int bw = 10000;
    PowerHost host = new PowerHost(
    hostId,
    new RamProvisionerSimple(ram),
    new BwProvisionerOverbooking(bw),
    storage,
    peList,
    new StreamOperatorScheduler(peList),
    new FogLinearPowerModel(busyPower, idlePower)
    );
    List hostList = new ArrayList();
    hostList.add(host);
    String arch = "x86";
    String os = "Linux";
    String vmm = "Xen";
    double time_zone = 10.0;
    double cost = 3.0;
    double costPerMem = 0.05;
    double costPerStorage = 0.001;
    double costPerBw = 0.0;
    LinkedList storageList = new LinkedList();
    FogDeviceCharacteristics characteristics = new FogDeviceCharacteristics(
    arch, os, vmm, host, time_zone, cost, costPerMem,
    costPerStorage, costPerBw);
    }
    }
    costPerStorage, costPerBw);
    FogDevice fogdevice = null;
    try {
    fogdevice = new FogDevice(nodeName, characteristics,
    new AppModuleAllocationPolicy(hostList), storageList, 10, upBw, downBw, 0, ratePerMips);
    } catch (Exception e) {
    e.printStackTrace();
    }
    fogdevice.setLevel(level);
    return fogdevice;
    }
    private static Application createApplication(String appId, int userId) {
    Application application = Application.createApplication(appId, userId);
    // Adding modules (vertices)
    application.addAppModule("object_detector", 10);
    application.addAppModule("motion_detector", 10);
    application.addAppModule("object_tracker", 10);
    application.addAppModule("user_interface", 10);
    // Adding edges
    application.addAppEdge("CAMERA", "object_detector", 1000, 1000, "SENSOR", Tuple.UP, AppEdge.SENSOR);
    application.addAppEdge("object_detector", "object_tracker", 1000, 1000, "VIDEO_STREAM", Tuple.UP, AppEdge.MODULE);
    application.addAppEdge("object_tracker", "user_interface", 1000, 1000, "DISPLAY", Tuple.UP, AppEdge.ACTUATOR);
    final AppLoop loop1 = new AppLoop(new ArrayList() {
    {
    add("motion_detector");
    add("object_detector");
    add("object_tracker");
    }
    });
    final AppLoop loop2 = new AppLoop(new ArrayList() {
    {
    add("object_tracker");
    add("PTZ_CONTROL");
    }
    });
    List loops = new ArrayList() {
    {
    add(loop1);
    add(loop2);
    }
    };
    application.setLoops(loops);
    return application;
    }
    }
ScreenShots
  • Application Placement Fog