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 # X-Lap: A Systems Approach for Cross-Layer Profiling and Latency Analysis for Cyber-Physical Networks
## Conventions ## How to install X-Lap?
* Stampnames:
`_T`: Timestamp (us precision)
`_C`: Clockstamp
`_D`: Duration (us precision)
* Reserved Names:
* `Channel`
* `Sender`
* `Receiver`
* `EndToEnd`
Enter the project directory and type `python setup.py install` to install `xlap` on your system.
## How to use X-lap? ## How to use X-lap?
...@@ -36,13 +24,69 @@ Define time- and cyclestamps: ...@@ -36,13 +24,69 @@ Define time- and cyclestamps:
### Step 2: Use the provided xlap analysis tools ### Step 2: Use the provided xlap analysis tools
* Write your xlap.yml file as follows: * Write your `xlap.yml` file as follows:
```yaml ```yml
data_files: ads data_files:
stamps: ads sender: sender.csv
durations: asd 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: * You can run a jitter analysis via `xlap jitter`. The parameter `-e` exports the diagrams as `pdf`.
* Jitter Analysis (`jitter`)
* 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.
This diff is collapsed.
...@@ -2,6 +2,8 @@ import numpy as np ...@@ -2,6 +2,8 @@ import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from xlap.analyse.util import extract_durations from xlap.analyse.util import extract_durations
from ipywidgets import interact
import ipywidgets as widgets
def _create_line(config): def _create_line(config):
...@@ -62,3 +64,11 @@ def trace(data_frame, config, export=False, file_name="TraceJitter.pdf"): ...@@ -62,3 +64,11 @@ def trace(data_frame, config, export=False, file_name="TraceJitter.pdf"):
if export: if export:
plt.savefig(file_name) plt.savefig(file_name)
plt.show() 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): ...@@ -73,7 +73,7 @@ def evaluate(sender_file, receiver_file, config, kind=0):
# Generate Durations # Generate Durations
for name, duration in config["durations"].items(): for name, duration in config["durations"].items():
diff = df[duration["Stop"] + "_C"] - df[duration["Start"] + "_C"] 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[name + "_D"] = diff * df[duration["Source"].capitalize() + "Cycle_D"]
df["EndToEnd_D"] = df["Sender_D"] + df["Receiver_D"] df["EndToEnd_D"] = df["Sender_D"] + df["Receiver_D"]
......
Markdown is supported
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