{"id":13769437,"url":"https://github.com/sedgecloud/ECSNeTpp","last_synced_at":"2025-05-11T02:32:36.977Z","repository":{"id":37490065,"uuid":"188021637","full_name":"sedgecloud/ECSNeTpp","owner":"sedgecloud","description":"ECSNeT++ is a simulation framework built on OMNeT++ for Distributed Stream Processing applications running on Edge and Cloud computing environments.","archived":false,"fork":false,"pushed_at":"2019-06-10T10:02:01.000Z","size":95,"stargazers_count":8,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-12-16T15:17:01.374Z","etag":null,"topics":["edge-computing","omnet-simulation","omnetpp","simulation-framework","stream-processing"],"latest_commit_sha":null,"homepage":"https://sedgecloud.github.io/ECSNeTpp/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sedgecloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-05-22T11:05:49.000Z","updated_at":"2023-10-30T08:48:24.000Z","dependencies_parsed_at":"2022-09-09T10:21:15.463Z","dependency_job_id":null,"html_url":"https://github.com/sedgecloud/ECSNeTpp","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sedgecloud%2FECSNeTpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sedgecloud%2FECSNeTpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sedgecloud%2FECSNeTpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sedgecloud%2FECSNeTpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sedgecloud","download_url":"https://codeload.github.com/sedgecloud/ECSNeTpp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253507137,"owners_count":21919157,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["edge-computing","omnet-simulation","omnetpp","simulation-framework","stream-processing"],"created_at":"2024-08-03T17:00:25.061Z","updated_at":"2025-05-11T02:32:36.475Z","avatar_url":"https://github.com/sedgecloud.png","language":"C++","readme":"# ECSNeT++\nECSNeT++ is a simulation toolkit for simulating the execution of \nDistributed Stream Processing applications on Edge anc Cloud Computing environments. \nECSNeT++ is implemented using the [OMNeT++](https://omnetpp.org/) and the [INET framework](https://inet.omnetpp.org/).\n\nFor more information please contact [gamarasinghe@student.unimelb.edu.au](mailto:gamarasinghe@student.unimelb.edu.au).\n\n# Dependencies\n* [INET Framework 3.6.0](https://inet.omnetpp.org/)\n* [TinyXML2](http://www.grinninglizard.com/tinyxml2/)\n\n# Building the project\n\nAfter cloning the repository run ```make makefiles``` followed by ```make```.\n\n# Running the example\n\n1. Set up OMNeT++ as instructed in [installation guide](https://doc.omnetpp.org/omnetpp/InstallGuide.pdf).\n2. Set up the [INET framework](https://inet.omnetpp.org/Installation.html).\n3. Import ECSNeT++ to the OMNeT++ IDE.\n4. Browse to ```Project Properties -\u003e Project References``` and add ```inet``` project as reference.\n5. Build the project.\n6. Run ```omnetpp.ini``` file as an OMNeT++ simulation.\n7. Select ```ETL-Pi3B-1-Plan``` and run the simulation and observe the ```simulation/results``` directory for simulation measurements.\n\n# Extending the project\n\n## Host devices\n\n```WirelessHost``` module or the ```StandardHost``` module of the INET framework can be extended to build either a IEEE 802.11 wireless enabled device or a Ethernet enabled host device respectively.\nSee ```src/host``` package for examples.\n\n### Network Support\nWe have created a [LTE plugin](https://github.com/sedgecloud/ECSNeT-LTE-Plugin) for ECSNeT++ to add LTE User Plane connectivity to the networking model using the [SimuLTE simulation tool](http://simulte.com/index.html).\nAn example is available in the github project of the plugin.\n\nSimilarly, other network models can also be adopted in to ECSNeT++ by creating hosts that use the network model.\n\n## Distributed Stream Processing application\n\n```StreamingSource```, ```StreamingOperator```, ```StreamingSink``` module are represent each Source, Operator and Sink in the topology. ECSNeT++\nexpects an adjacency matrix of the application topology (See ```configs/etl_app_topology.txt```) and a placement plan\n(See ```configs/1.xml```). \n\nAn example placement plan is shown below. The XML schema for generating the placement plan is available [here](https://github.com/sedgecloud/ECSNeTpp/blob/master/src/configs/placement-plan-schema.xsd).\n\n```xml\n\u003c?xml version=\"1.0\" ?\u003e\n\u003cdevices\u003e\n  \u003cdevice\u003e\n    \u003cname\u003edanio-2\u003c/name\u003e\n    \u003cindex-range\u003e0..49\u003c/index-range\u003e\n    \u003ctasks\u003e\n      \u003ctask\u003e\n        \u003cname\u003esource\u003c/name\u003e\n        \u003ccategory\u003esource\u003c/category\u003e\n        \u003ctype\u003eecsnetpp.stask.StreamingSource\u003c/type\u003e\n        \u003cprocessingdelay\u003e\n          \u003cmeasuredtime\u003e33406899\u003c/measuredtime\u003e\n        \u003c/processingdelay\u003e\n        \u003cmsgsize\u003e6880\u003c/msgsize\u003e\n        \u003csourceevdistribution\u003e\n          \u003cname\u003eFixedSourceEventRateDistribution\u003c/name\u003e\n          \u003ctype\u003eecsnetpp.model.source.eventrate.FixedSourceEventRateDistribution\u003c/type\u003e\n        \u003c/sourceevdistribution\u003e\t\t\t\n      \u003c/task\u003e\n      \u003ctask\u003e\n        \u003cname\u003eparser\u003c/name\u003e\n        \u003ccategory\u003eoperator\u003c/category\u003e\n        \u003ctype\u003eecsnetpp.stask.StreamingOperator\u003c/type\u003e\n        \u003cselectivitydistribution\u003e\n          \u003cname\u003eFixedSelectivityDistribution\u003c/name\u003e\n          \u003ctype\u003eecsnetpp.model.operator.selectivity.FixedSelectivityDistribution\u003c/type\u003e\n          \u003cvalues\u003e\n            \u003cselectivityratio\u003e2\u003c/selectivityratio\u003e\n          \u003c/values\u003e\n        \u003c/selectivitydistribution\u003e\n          .\n          .\n          .\n      \u003c/task\u003e\n    \u003c/tasks\u003e\n  \u003c/device\u003e\n  \u003cdevice\u003e\n    \u003cname\u003estargazer3\u003c/name\u003e\n    \u003cindex-range\u003e0\u003c/index-range\u003e\n    \u003ctasks\u003e\n      .\n      .\n      .\n    \u003c/tasks\u003e\n  \u003c/device\u003e\n\u003c/devices\u003e\n```\n\n### Source Characteristics\n\n##### Source Event Rate\nThe `ecsnetpp.model.source.eventrate.ISourceEventRateDistribution` interface should be extended to implement different source event rate distributions.\nSee `ecsnetpp.model.source.eventrate.FixedSourceEventRateDistribution` module for an example.\n\n#### Source Message Size\nThe `ecsnetpp.model.source.msgsize.IMessageSizeDistribution` interface should be extended to implement different source message size distributions. \nSee `ecsnetpp.model.source.msgsize.FixedMessageSizeDistribution` module for an example.\n\n### Operator Characteristics\n\n#### Operator Selectivity Ratio\nThe `ecsnetpp.model.operator.selectivity.IOperatorSelectivityDistribution` interface should be extended to implement different operator selectivity ratio distributions.\nSee `ecsnetpp.model.operator.selectivity.FixedSelectivityDistribution` module for an example.\n\n#### Operator Productivity Ratio\nThe `ecsnetpp.model.operator.productivity.IOperatorProductivityDistribution` interface should be extended to implement different operator productivity ratio distributions.\nSee `ecsnetpp.model.operator.productivity.FixedProductivityDistribution` module for an example.\n\n## CPU Scheduling\n\n### Changing the behaviour of the CPU scheduler\nWe have implemented a Round Robin Scheduler for selecting the CPU core for processing a streaming event at any task. It is possible to implement other scheduling strategies by implementing the `ecsnetpp.cpu.scheduling.ICpuCoreScheduler` interface.\nThe scheduler can be set at the host using the `cpuCoreSchedulerType` configuration (See one of the host devices for an example use of `ecsnetpp.cpu.scheduling.RoundRobinCpuCoreScheduler` as the core scheduler).\n","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsedgecloud%2FECSNeTpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsedgecloud%2FECSNeTpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsedgecloud%2FECSNeTpp/lists"}