Loading notebook.ipynb +78 −8 Original line number Diff line number Diff line %% Cell type:markdown id: tags: # X-Lap in Action %% Cell type:markdown id: tags: ## Imports %% Cell type:code id: tags: ``` python import logging logger = logging.getLogger() logger.setLevel(logging.DEBUG) from ipywidgets import interact, interactive, fixed, interact_manual import ipywidgets as widgets from xlap.parse import evaluate, evaluate_side, parse_config import xlap.analyse.jitter as jitter from xlap.analyse.cdf import multi_cdf from xlap.analyse.regress import linear as linear_regression from xlap.analyse.trace import traces from xlap.analyse.correlation import correlation from xlap.analyse.correlation import correlation, multi_correlation from xlap.analyse.latency import analyse import matplotlib.pyplot as plt import pandas as pd %matplotlib inline ``` %% 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) data_files = { "sender": "~/Work/Publications/rtn-2018/eval/20180417_testbed/", "receiver": "~/Work/Publications/rtn-2018/eval/20180417_testbed/" } original1 = evaluate(data_files["sender"] + "sender-1000000.csv", data_files["receiver"] + "receiver-1000000.csv", config=config, kind=0) original1.name = "1GHz" original2 = evaluate(data_files["sender"] + "sender-2000000.csv", data_files["receiver"] + "receiver-2000000.csv", config=config, kind=0) original2.name = "2GHz" original3 = evaluate(data_files["sender"] + "sender-3000000.csv", data_files["receiver"] + "receiver-3000000.csv", config=config, kind=0) original3.name = "3GHz" dfs = [original1, original2, original3] ``` %% Cell type:markdown id: tags: ## Traces %% Cell type:code id: tags: ``` python traces(original, config) traces(original1, config) ``` %% Cell type:markdown id: tags: ## Jitter Analysis %% Cell type:code id: tags: ``` python df = jitter.prep(original, config=config) jitter.trace_jitter(df, threshold=500) def multi_trace_jitter(dfs, config): for df in dfs: print("############################ {} ############################".format(df.name)) jitter.trace_jitter(df, config=config, threshold=300) multi_trace_jitter(dfs, config) ``` %% Cell type:markdown id: tags: ## CDFs %% Cell type:code id: tags: ``` python multi_cdf(dfs, config, export=True) ``` %% Cell type:markdown id: tags: ## Correlation %% Cell type:code id: tags: ``` python correlation(df[df["EndToEnd_D"] < 500], config) multi_correlation(dfs, config, export=True) ``` %% Cell type:markdown id: tags: ## Latency Criticality %% Cell type:code id: tags: ``` python d = analyse(original, config) d = analyse(original1, config) ``` %% Cell type:markdown id: tags: ### Correlations %% Cell type:code id: tags: ``` python d.corr.sort_values(ascending=False) ``` %% Cell type:markdown id: tags: ### Control Flow Graph %% Cell type:code id: tags: ``` python d.cfg ``` %% Cell type:markdown id: tags: # Kolmogorov %% Cell type:code id: tags: ``` python from scipy import stats from xlap.analyse.util import extract_durations import numpy as np def timing_behaviour(df1, df2, config, confidence=0.9): durations = [x + "_D" for x in extract_durations(config)] norm = lambda x: x / np.max(x) for duration in durations: rvs1 = norm(df1[duration]) rvs2 = norm(df2[duration]) stat, pvalue = stats.ks_2samp(rvs1, rvs2) result = "CANNOT REJECT" if pvalue < 1 - confidence: result = "REJECT" print(duration.ljust(20), "{:.6f}".format(pvalue), result, sep="\t\t") timing_behaviour(original1, original2, config) ``` %% Cell type:code id: tags: ``` python timing_behaviour(original1, original3, config) ``` %% Cell type:code id: tags: ``` python timing_behaviour(original2, original3, config) ``` %% Cell type:code id: tags: ``` python ``` xlap.yml +8 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,14 @@ stamps: Source: sender Thread: app_send Type: time PrrtSendPacketStart: Source: sender Thread: trans_send Type: none PrrtSendPacketEnd: Source: sender Thread: trans_send Type: none PrrtTransmitStart: Source: sender Loading Loading
notebook.ipynb +78 −8 Original line number Diff line number Diff line %% Cell type:markdown id: tags: # X-Lap in Action %% Cell type:markdown id: tags: ## Imports %% Cell type:code id: tags: ``` python import logging logger = logging.getLogger() logger.setLevel(logging.DEBUG) from ipywidgets import interact, interactive, fixed, interact_manual import ipywidgets as widgets from xlap.parse import evaluate, evaluate_side, parse_config import xlap.analyse.jitter as jitter from xlap.analyse.cdf import multi_cdf from xlap.analyse.regress import linear as linear_regression from xlap.analyse.trace import traces from xlap.analyse.correlation import correlation from xlap.analyse.correlation import correlation, multi_correlation from xlap.analyse.latency import analyse import matplotlib.pyplot as plt import pandas as pd %matplotlib inline ``` %% 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) data_files = { "sender": "~/Work/Publications/rtn-2018/eval/20180417_testbed/", "receiver": "~/Work/Publications/rtn-2018/eval/20180417_testbed/" } original1 = evaluate(data_files["sender"] + "sender-1000000.csv", data_files["receiver"] + "receiver-1000000.csv", config=config, kind=0) original1.name = "1GHz" original2 = evaluate(data_files["sender"] + "sender-2000000.csv", data_files["receiver"] + "receiver-2000000.csv", config=config, kind=0) original2.name = "2GHz" original3 = evaluate(data_files["sender"] + "sender-3000000.csv", data_files["receiver"] + "receiver-3000000.csv", config=config, kind=0) original3.name = "3GHz" dfs = [original1, original2, original3] ``` %% Cell type:markdown id: tags: ## Traces %% Cell type:code id: tags: ``` python traces(original, config) traces(original1, config) ``` %% Cell type:markdown id: tags: ## Jitter Analysis %% Cell type:code id: tags: ``` python df = jitter.prep(original, config=config) jitter.trace_jitter(df, threshold=500) def multi_trace_jitter(dfs, config): for df in dfs: print("############################ {} ############################".format(df.name)) jitter.trace_jitter(df, config=config, threshold=300) multi_trace_jitter(dfs, config) ``` %% Cell type:markdown id: tags: ## CDFs %% Cell type:code id: tags: ``` python multi_cdf(dfs, config, export=True) ``` %% Cell type:markdown id: tags: ## Correlation %% Cell type:code id: tags: ``` python correlation(df[df["EndToEnd_D"] < 500], config) multi_correlation(dfs, config, export=True) ``` %% Cell type:markdown id: tags: ## Latency Criticality %% Cell type:code id: tags: ``` python d = analyse(original, config) d = analyse(original1, config) ``` %% Cell type:markdown id: tags: ### Correlations %% Cell type:code id: tags: ``` python d.corr.sort_values(ascending=False) ``` %% Cell type:markdown id: tags: ### Control Flow Graph %% Cell type:code id: tags: ``` python d.cfg ``` %% Cell type:markdown id: tags: # Kolmogorov %% Cell type:code id: tags: ``` python from scipy import stats from xlap.analyse.util import extract_durations import numpy as np def timing_behaviour(df1, df2, config, confidence=0.9): durations = [x + "_D" for x in extract_durations(config)] norm = lambda x: x / np.max(x) for duration in durations: rvs1 = norm(df1[duration]) rvs2 = norm(df2[duration]) stat, pvalue = stats.ks_2samp(rvs1, rvs2) result = "CANNOT REJECT" if pvalue < 1 - confidence: result = "REJECT" print(duration.ljust(20), "{:.6f}".format(pvalue), result, sep="\t\t") timing_behaviour(original1, original2, config) ``` %% Cell type:code id: tags: ``` python timing_behaviour(original1, original3, config) ``` %% Cell type:code id: tags: ``` python timing_behaviour(original2, original3, config) ``` %% Cell type:code id: tags: ``` python ```
xlap.yml +8 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,14 @@ stamps: Source: sender Thread: app_send Type: time PrrtSendPacketStart: Source: sender Thread: trans_send Type: none PrrtSendPacketEnd: Source: sender Thread: trans_send Type: none PrrtTransmitStart: Source: sender Loading