Commit cdb8a8c6 authored by Andreas Schmidt's avatar Andreas Schmidt
Browse files

Improved README, example notebook. Added interaction for traces.

parent e9da367f
# X-Lap: A Systems Approach for Cross-Layer Profiling and Latency Analysis for Cyber-Physical Networks
## Conventions
* Stampnames:
`_T`: Timestamp (us precision)
`_C`: Clockstamp
`_D`: Duration (us precision)
* Reserved Names:
* `Channel`
* `Sender`
* `Receiver`
* `EndToEnd`
## How to install X-Lap?
Enter the project directory and type `python setup.py install` to install `xlap` on your system.
## How to use X-lap?
......@@ -36,13 +24,69 @@ Define time- and cyclestamps:
### Step 2: Use the provided xlap analysis tools
* Write your xlap.yml file as follows:
* Write your `xlap.yml` file as follows:
```yaml
data_files: ads
stamps: ads
durations: asd
```yml
data_files:
sender: sender.csv
receiver: receiver.csv
cycle_reference:
sender: StampA
receiver: SampB
time_reference:
sender: StampC
receiver: StampE
stamps:
StampA:
Source: receiver
Type: time
StampB:
Source: receiver
Type: time
StampC:
Source: receiver
Type: time
StampD:
Source: receiver
Type: cycle
StampE:
Source: receiver
Type: time
durations:
DurationA:
Start: StampA
Stop: StampB
Source: sender
DurationB:
Start: StampC
Stop: StampD
Source: receiver
```
* Run one of the following analyses on the data set:
* Jitter Analysis (`jitter`)
* You can run a jitter analysis via `xlap jitter`. The parameter `-e` exports the diagrams as `pdf`.
* The best way to interact with `xlap` is through a [Jupyter Python 3 Notebook](http://jupyter.org/). An example can be found in `notebook.ipynb`.
* `xlap.analyse.trace.traces()` can be used to investigate individual packet traces.
## Conventions
* Suffixes (indicate type):
* `_T`: Timestamp (us precision)
* `_C`: Clockstamp
* `_D`: Duration (us precision)
* Reserved Names (including suffixes as mentioned before):
* `Channel`
* `Sender`
* `SenderCycle`
* `Receiver`
* `ReceiverCycle`
* `EndToEnd`
* Note that expressions with other suffixes such as `SenderQueueing_T` would be allowed.
%% Cell type:markdown id: tags:
# X-Lap in Action
%% Cell type:markdown id: tags:
## Imports
%% Cell type:code id: tags:
``` python
from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets
from xlap.parse import evaluate, parse_config
import xlap.analyse.jitter as jitter
from xlap.analyse.regress import linear as linear_regression
from xlap.analyse.trace import trace
from xlap.analyse.common import extract_durations
from xlap.analyse.trace import traces
from xlap.analyse.util import extract_durations
```
%% Cell type:markdown id: tags:
## Data Retrieval
%% Cell type:code id: tags:
``` python
config = parse_config()
data_files = config["data_files"]
original = evaluate(data_files["sender"], data_files["receiver"], config=config, kind=0)
```
%% Cell type:markdown id: tags:
## Traces
%% Cell type:code id: tags:
``` python
trace(original.iloc[47],config)
traces(original, config)
```
%% Output
/usr/local/lib/python3.5/dist-packages/matplotlib/figure.py:1742: UserWarning: This figure includes Axes that are not compatible with tight_layout, so its results might be incorrect.
warnings.warn("This figure includes Axes that are not "
%% Cell type:markdown id: tags:
## Jitter Analysis
%% Cell type:code id: tags:
``` python
df = jitter.prep(original, config=config)
jitter.trace_jitter(df)
```
%% Output
4018 / 4095 are no outliers.
/usr/local/lib/python3.5/dist-packages/matplotlib/figure.py:1742: UserWarning: This figure includes Axes that are not compatible with tight_layout, so its results might be incorrect.
warnings.warn("This figure includes Axes that are not "
%% Cell type:code id: tags:
``` python
linear_regression(original,"Feedback_D")
```
%% Output
R-Score: 0.0444517602497
/usr/local/lib/python3.5/dist-packages/matplotlib/figure.py:1742: UserWarning: This figure includes Axes that are not compatible with tight_layout, so its results might be incorrect.
warnings.warn("This figure includes Axes that are not "
%% Cell type:code id: tags:
``` python
```
......
......@@ -2,6 +2,8 @@ import numpy as np
import matplotlib.pyplot as plt
from xlap.analyse.util import extract_durations
from ipywidgets import interact
import ipywidgets as widgets
def _create_line(config):
......@@ -62,3 +64,11 @@ def trace(data_frame, config, export=False, file_name="TraceJitter.pdf"):
if export:
plt.savefig(file_name)
plt.show()
def traces(df, config):
"""
Display a slider to select sequence numbers and the respective trace.
"""
@interact(seq_no=widgets.IntSlider(min=1,max=len(df),step=1,value=47))
def _f(seq_no):
trace(df.ix[seq_no],config)
......@@ -73,7 +73,7 @@ def evaluate(sender_file, receiver_file, config, kind=0):
# Generate Durations
for name, duration in config["durations"].items():
diff = df[duration["Stop"] + "_C"] - df[duration["Start"] + "_C"]
df[name + "Cycles"] = diff
df[name + "_C"] = diff
df[name + "_D"] = diff * df[duration["Source"].capitalize() + "Cycle_D"]
df["EndToEnd_D"] = df["Sender_D"] + df["Receiver_D"]
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment