Metadata-Version: 2.1
Name: edgerun-ether
Version: 0.4.0.dev3
Summary: Ether - Synthesize plausible edge infrastructure topologies
Home-page: https://github.com/edgerun/ether
Author: Thomas Rausch
Author-email: t.rausch@dsg.tuwien.ac.at
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
Requires-Dist: matplotlib (==3.4.2)
Requires-Dist: networkx (==2.4)
Requires-Dist: numpy (==1.22.0)
Requires-Dist: pandas (==1.2.5)
Requires-Dist: scipy (==1.7.0)
Requires-Dist: simpy (==3.0.11)
Requires-Dist: srds (==0.1.0)
Requires-Dist: requests (==2.23.0)
Requires-Dist: scikit-learn (~=0.24.2)
Requires-Dist: setuptools (~=50.3.0)
Requires-Dist: pyvis (~=0.1.8.2)

ether: Edge Topology Synthesizer
================================

[![PyPI Version](https://badge.fury.io/py/edgerun-ether.svg)](https://badge.fury.io/py/edgerun-ether)
[![Python 3.7+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)

<img src="https://github.com/edgerun/ether/raw/master/logo/logo.png" height="100">

*Ether* is a Python tool to generate plausible edge infrastructure configurations.
It arose from the need to evaluate edge computing systems in different infrastructure scenarios where no appropriate
testbeds are available.


Use cases
---------

Some of the uses cases for *ether* include

* Evaluating resource allocation strategies
* Creating topologies for network simulations
* Infrastructure capacity planing

Examples
--------

### Code example

Creating a topology for an urban sensing scenario, similar to that of the
[Array of Things](http://arrayofthings.github.io/node-locations.html) could look like this:

```python
topology = Topology()

aot_node = IoTComputeBox(nodes=[nodes.rpi3, nodes.rpi3])
neighborhood = lambda size: SharedLinkCell(
    nodes=[
        [aot_node] * size,
        IoTComputeBox([nodes.nuc] + ([nodes.tx2] * size * 2))
    ],
    shared_bandwidth=500,
    backhaul=MobileConnection('internet_chix'))
city = GeoCell(
    5, nodes=[neighborhood], density=lognorm((0.82, 2.02)))
cloudlet = Cloudlet(
    5, 2, backhaul=FiberToExchange('internet_chix'))

topology.add(city)
topology.add(cloudlet)
```

We have pre-parameterized versions of these scenarios that can be readily used:

```python
topology = Topology()
UrbanSensingTopology().materialize(topology)
```

### Example usage

The following example shows how we used generated topology to evaluate the effect on uplink usage of different resource
allocation strategies in an edge computing platform.
The node-link diagram of the topology is augmented with a
[topographic attribute map](https://hydra.cgv.tugraz.at/preiner/papers/psksm20-tam.pdf) ([rpreiner/tam](https://github.com/rpreiner/tam)) that the data exchange in
log bytes.
The left part of the figure shows the baseline resource allocation strategy, the right part shows our improved strategy
that takes data-locality into account.
The visualization helps to see how much the backhaul network is relieved, and how data transfer is isolated into edge
networks.  

<a href="https://edgerun.io/static/ether/iiot-scenario-comparing-scheduling-strategies.jpg" target="_blank">
  <img src="https://edgerun.io/static/ether/iiot-scenario-comparing-scheduling-strategies.jpg" alt="Comparing  a sub-community in a generated IIoT-scenario topology" width="100%"/>
</a>

Related publications
--------------------

1. Rausch, T., Lachner, C., Frangoudis, P. A., Raith, P., & Dustdar, S. (2020).
   Synthesizing Plausible Infrastructure Configurations for Evaluating Edge Computing Systems.
   In *3rd USENIX Workshop on Hot Topics in Edge Computing (HotEdge 20)*. USENIX Association.
   [[Preprint](https://dsg.tuwien.ac.at/team/trausch/pub/hotedge20-synthesizing.pdf)]


