From ceb25e5d18fddf645b42f12fa2d9ef48bff9b7d5 Mon Sep 17 00:00:00 2001 From: Rodrigo Arias Mallo Date: Tue, 23 Feb 2021 17:52:48 +0100 Subject: [PATCH] osu: add figure for latency tests --- garlic/exp/osu/latency.nix | 2 +- garlic/fig/index.nix | 12 +++++++++++ garlic/fig/osu/latency.R | 43 ++++++++++++++++++++++++++++++++++++++ garlic/index.nix | 1 + garlic/pp/osu-latency.nix | 31 +++++++++++++++++++++++++++ 5 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 garlic/fig/osu/latency.R create mode 100644 garlic/pp/osu-latency.nix diff --git a/garlic/exp/osu/latency.nix b/garlic/exp/osu/latency.nix index e168dd7..facd4fa 100644 --- a/garlic/exp/osu/latency.nix +++ b/garlic/exp/osu/latency.nix @@ -12,7 +12,7 @@ let # Initial variable configuration varConf = with bsc; { - mpi = [ impi bsc.openmpi mpich ]; + mpi = [ impi bsc.openmpi mpich ]; #psmpi ]; }; # Generate the complete configuration for each unit diff --git a/garlic/fig/index.nix b/garlic/fig/index.nix index eef5ce5..24b516a 100644 --- a/garlic/fig/index.nix +++ b/garlic/fig/index.nix @@ -40,4 +40,16 @@ in creams = with exp.creams; { ss = rPlotExp ./creams/ss.R [ ss.hybrid ss.pure ]; }; + + osu = with exp.osu; { + #latency = pp.osu-latency latency.result; + latency = + let + resultJson = pp.osu-latency latency.result; + in + rPlot { + script = ./osu/latency.R; + dataset = resultJson; + }; + }; } diff --git a/garlic/fig/osu/latency.R b/garlic/fig/osu/latency.R new file mode 100644 index 0000000..ade4819 --- /dev/null +++ b/garlic/fig/osu/latency.R @@ -0,0 +1,43 @@ +library(ggplot2) +library(dplyr) +library(scales) +library(jsonlite) + +args=commandArgs(trailingOnly=TRUE) + +# Read the timetable from args[1] +input_file = "input.json" +if (length(args)>0) { input_file = args[1] } + +# Load the dataset in NDJSON format +dataset = jsonlite::stream_in(file(input_file)) %>% + jsonlite::flatten() + +# We only need the nblocks and time +df = select(dataset, config.unitName, size, latency) %>% + rename(unitName=config.unitName) + +df$unitName = as.factor(df$unitName) +df$sizeFactor = as.factor(df$size) + +ppi=300 +h=8 +w=12 + +png("latency.png", width=w*ppi, height=h*ppi, res=ppi) + +p = ggplot(data=df, aes(x=size, y=latency)) + + labs(x="Size (bytes)", y="Latency (us)", + title="OSU latency benchmark", + subtitle=input_file) + + geom_boxplot(aes(color=unitName, group=interaction(unitName, sizeFactor))) + + scale_y_continuous(trans=log10_trans()) + + scale_x_continuous(trans=log2_trans()) + + theme_bw() + + theme(legend.position = c(0.15, 0.9)) + +# Render the plot +print(p) + +## Save the png image +dev.off() diff --git a/garlic/index.nix b/garlic/index.nix index 59faad9..e49a20f 100644 --- a/garlic/index.nix +++ b/garlic/index.nix @@ -111,6 +111,7 @@ inherit trebuchetStage; }); timetable = callPackage ./pp/timetable.nix { }; + osu-latency = callPackage ./pp/osu-latency.nix { }; rPlot = callPackage ./pp/rplot.nix { }; timetableFromTrebuchet = tre: timetable (resultFromTrebuchet tre); mergeDatasets = callPackage ./pp/merge.nix { }; diff --git a/garlic/pp/osu-latency.nix b/garlic/pp/osu-latency.nix new file mode 100644 index 0000000..c37397e --- /dev/null +++ b/garlic/pp/osu-latency.nix @@ -0,0 +1,31 @@ +{ + stdenv +, jq +}: + +inputResult: + +stdenv.mkDerivation { + name = "osu-latency.json"; + preferLocalBuild = true; + phases = [ "installPhase" ]; + buildInputs = [ jq ]; + installPhase = '' + touch $out + cd ${inputResult} + for exp in *-experiment; do + cd ${inputResult}/$exp + for unit in *-unit; do + cd ${inputResult}/$exp/$unit + conf=garlic_config.json + for run in $(ls -d [0-9]* | sort -n); do + awk '/^[0-9]+ +[0-9\.]+$/{print $1, $2}' $run/stdout.log | ( + while read -r size latency; do + jq -cn "{ exp:\"$exp\", unit:\"$unit\", config:inputs, run:$run, \ + size:$size, latency:$latency }" $conf >> $out + done) + done + done + done + ''; +}