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 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:
data_files: ads
stamps: ads
durations: asd
sender: sender.csv
receiver: receiver.csv
sender: StampA
receiver: SampB
sender: StampC
receiver: StampE
Source: receiver
Type: time
Source: receiver
Type: time
Source: receiver
Type: time
Source: receiver
Type: cycle
Source: receiver
Type: time
Start: StampA
Stop: StampB
Source: sender
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]( 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
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:
def traces(df, config):
Display a slider to select sequence numbers and the respective trace.
def _f(seq_no):
......@@ -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"]
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