Awesome
ECSNeT++
ECSNeT++ is a simulation toolkit for simulating the execution of Distributed Stream Processing applications on Edge anc Cloud Computing environments. ECSNeT++ is implemented using the OMNeT++ and the INET framework.
For more information please contact gamarasinghe@student.unimelb.edu.au.
Dependencies
Building the project
After cloning the repository run make makefiles
followed by make
.
Running the example
- Set up OMNeT++ as instructed in installation guide.
- Set up the INET framework.
- Import ECSNeT++ to the OMNeT++ IDE.
- Browse to
Project Properties -> Project References
and addinet
project as reference. - Build the project.
- Run
omnetpp.ini
file as an OMNeT++ simulation. - Select
ETL-Pi3B-1-Plan
and run the simulation and observe thesimulation/results
directory for simulation measurements.
Extending the project
Host devices
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.
See src/host
package for examples.
Network Support
We have created a LTE plugin for ECSNeT++ to add LTE User Plane connectivity to the networking model using the SimuLTE simulation tool. An example is available in the github project of the plugin.
Similarly, other network models can also be adopted in to ECSNeT++ by creating hosts that use the network model.
Distributed Stream Processing application
StreamingSource
, StreamingOperator
, StreamingSink
module are represent each Source, Operator and Sink in the topology. ECSNeT++
expects an adjacency matrix of the application topology (See configs/etl_app_topology.txt
) and a placement plan
(See configs/1.xml
).
An example placement plan is shown below. The XML schema for generating the placement plan is available here.
<?xml version="1.0" ?>
<devices>
<device>
<name>danio-2</name>
<index-range>0..49</index-range>
<tasks>
<task>
<name>source</name>
<category>source</category>
<type>ecsnetpp.stask.StreamingSource</type>
<processingdelay>
<measuredtime>33406899</measuredtime>
</processingdelay>
<msgsize>6880</msgsize>
<sourceevdistribution>
<name>FixedSourceEventRateDistribution</name>
<type>ecsnetpp.model.source.eventrate.FixedSourceEventRateDistribution</type>
</sourceevdistribution>
</task>
<task>
<name>parser</name>
<category>operator</category>
<type>ecsnetpp.stask.StreamingOperator</type>
<selectivitydistribution>
<name>FixedSelectivityDistribution</name>
<type>ecsnetpp.model.operator.selectivity.FixedSelectivityDistribution</type>
<values>
<selectivityratio>2</selectivityratio>
</values>
</selectivitydistribution>
.
.
.
</task>
</tasks>
</device>
<device>
<name>stargazer3</name>
<index-range>0</index-range>
<tasks>
.
.
.
</tasks>
</device>
</devices>
Source Characteristics
Source Event Rate
The ecsnetpp.model.source.eventrate.ISourceEventRateDistribution
interface should be extended to implement different source event rate distributions.
See ecsnetpp.model.source.eventrate.FixedSourceEventRateDistribution
module for an example.
Source Message Size
The ecsnetpp.model.source.msgsize.IMessageSizeDistribution
interface should be extended to implement different source message size distributions.
See ecsnetpp.model.source.msgsize.FixedMessageSizeDistribution
module for an example.
Operator Characteristics
Operator Selectivity Ratio
The ecsnetpp.model.operator.selectivity.IOperatorSelectivityDistribution
interface should be extended to implement different operator selectivity ratio distributions.
See ecsnetpp.model.operator.selectivity.FixedSelectivityDistribution
module for an example.
Operator Productivity Ratio
The ecsnetpp.model.operator.productivity.IOperatorProductivityDistribution
interface should be extended to implement different operator productivity ratio distributions.
See ecsnetpp.model.operator.productivity.FixedProductivityDistribution
module for an example.
CPU Scheduling
Changing the behaviour of the CPU scheduler
We 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.
The 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).