diff options
| author | Loïc Guégan <loic.guegan@mailbox.org> | 2024-06-30 14:49:37 +0200 |
|---|---|---|
| committer | Loïc Guégan <loic.guegan@mailbox.org> | 2024-06-30 14:49:37 +0200 |
| commit | 8260634af49e26db25149515787b56610b922d56 (patch) | |
| tree | daa548f7fb2c314cb4011344d43d49db3ba4d5df /analysis/scheduler | |
| parent | 42594cfab44ec9ea7508ddaf0dc98e4d930f1da1 (diff) | |
Cleaning repository
Diffstat (limited to 'analysis/scheduler')
| -rwxr-xr-x | analysis/scheduler/analysis.sh | 18 | ||||
| -rwxr-xr-x | analysis/scheduler/data.awk | 15 | ||||
| -rwxr-xr-x | analysis/scheduler/hint.awk | 15 | ||||
| -rwxr-xr-x | analysis/scheduler/hint_fw.awk | 15 | ||||
| -rw-r--r-- | analysis/scheduler/wakeup.R | 65 | ||||
| -rwxr-xr-x | analysis/scheduler/wakeup.awk | 43 |
6 files changed, 171 insertions, 0 deletions
diff --git a/analysis/scheduler/analysis.sh b/analysis/scheduler/analysis.sh new file mode 100755 index 0000000..43f804d --- /dev/null +++ b/analysis/scheduler/analysis.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +wai=$(dirname $(readlink -f "$0")) # Current script directory + +log=$1 +out=$2 + +# Generate csv +cat $log | $wai/wakeup.awk > $wai/wakeup.csv +cat $log | $wai/data.awk > $wai/data.csv +cat $log | $wai/hint.awk > $wai/hint.csv +cat $log | $wai/hint_fw.awk > $wai/hint_fw.csv + +cd $wai +Rscript ./wakeup.R &> /dev/null || { echo "Schduler data analysis failed"; exit 1; } +cd - > /dev/null + +mv $wai/schedule.png $out
\ No newline at end of file diff --git a/analysis/scheduler/data.awk b/analysis/scheduler/data.awk new file mode 100755 index 0000000..6049301 --- /dev/null +++ b/analysis/scheduler/data.awk @@ -0,0 +1,15 @@ +#!/usr/bin/awk -f + +BEGIN { + RS="\n" + FS=" " + CSV_HEADER="node,ts" + CSV_DATA="" + skip=1 + print(CSV_HEADER) +} + +/received data success/ { + gsub("]","",$0) + print($4","$2) +} diff --git a/analysis/scheduler/hint.awk b/analysis/scheduler/hint.awk new file mode 100755 index 0000000..2f996fc --- /dev/null +++ b/analysis/scheduler/hint.awk @@ -0,0 +1,15 @@ +#!/usr/bin/awk -f + +BEGIN { + RS="\n" + FS=" " + CSV_HEADER="node,wakets,duration,rcvat" + CSV_DATA="" + skip=1 + print(CSV_HEADER) +} + +/add a new hint/ { + gsub("]","",$0) + print($4","$10","$15","$2) +} diff --git a/analysis/scheduler/hint_fw.awk b/analysis/scheduler/hint_fw.awk new file mode 100755 index 0000000..594df94 --- /dev/null +++ b/analysis/scheduler/hint_fw.awk @@ -0,0 +1,15 @@ +#!/usr/bin/awk -f + +BEGIN { + RS="\n" + FS=" " + CSV_HEADER="node,ts" + CSV_DATA="" + skip=1 + print(CSV_HEADER) +} + +/forward a hint successfully/ { + gsub("]","",$0) + print($4","$2) +} diff --git a/analysis/scheduler/wakeup.R b/analysis/scheduler/wakeup.R new file mode 100644 index 0000000..d11d0c2 --- /dev/null +++ b/analysis/scheduler/wakeup.R @@ -0,0 +1,65 @@ +library("tidyverse") +library("gridExtra") + +pdf(NULL) + +# Load data +data=read_csv("wakeup.csv") +yorder=str_sort(unique(data$node),numeric=TRUE) +data=data%>%mutate(node=factor(node,levels=yorder)) + +# Load hint +hint=read_csv("hint.csv") + +# Load hint forward +hint_fw=read_csv("hint_fw.csv") + +# Load data +data_rcv=read_csv("data.csv") + + +# Configure axis +ts_range=seq(0, 24)*3600 +ts_labels=ts_range/3600 + +# Plot +p1=ggplot(data,aes(x=wakets,y=node)) + geom_hline(aes(yintercept=node),color="grey",size=3) +if(NROW(hint)!=0){ + p1=p1+geom_vline(data=hint,aes(xintercept=wakets,color="Hint slots"),show.legend = FALSE,linetype="longdash",size=0.3) +} +p1=p1+geom_linerange(aes(xmin=wakets,xmax=sleepts),size=10) +if(NROW(hint)!=0){ + p1=p1+geom_linerange(data=hint,aes(xmin=wakets,xmax=wakets+duration,color="Hint slots"),size=10) +} +if(NROW(data_rcv)!=0){ + p1=p1+geom_point(data=data_rcv,aes(x=ts,color="Data received"),shape=18,size=4) +} +if(NROW(hint)!=0){ + p1=p1+geom_point(data=hint,aes(x=rcvat,color="Hint received"),shape=18,size=3) +} +if(NROW(hint_fw)!=0){ + p1=p1+geom_point(data=hint_fw,aes(x=ts,color="Hint Forwarded"),shape=18,size=2) +} +p1=p1+ + xlab("Time (hours)")+ylab("Node")+ + scale_x_continuous(breaks = ts_range, labels=ts_labels,expand = c(0, 0))+ + scale_colour_manual(name="Legend",values=c("Hint slots"="blue","Data received"="red","Hint received"="green","Hint Forwarded"="purple"))+ + theme(panel.grid.major.x = element_line(size = 1.2),panel.grid.major.y = element_blank(),panel.grid.minor = element_blank()) + +stats=data%>%group_by(node)%>%summarise(n=n())%>%mutate(nwakeup=n-24) + +p2=ggplot(stats,aes(x=node,y=nwakeup))+ + geom_bar(stat="identity")+xlab("Node")+ylab("Extra wake up count")+ylim(0,10)+ + scale_y_continuous(breaks = seq(0,10)) + +stats2=tibble( + metric=c("Hint Received","Hint Forwarded","Data Received"), + count=c(NROW(hint),NROW(hint_fw),NROW(data_rcv)) +) + +p3=ggplot(stats2,aes(x=metric,y=count))+ + geom_bar(stat="identity")+xlab("Metric")+ylab("Count")+ylim(0,20) + + +p=grid.arrange(p1,p2,p3,heights=c(10,5,5)) +ggsave(plot=p,"schedule.png",dpi=300,width = 10,height=10) diff --git a/analysis/scheduler/wakeup.awk b/analysis/scheduler/wakeup.awk new file mode 100755 index 0000000..1bc8934 --- /dev/null +++ b/analysis/scheduler/wakeup.awk @@ -0,0 +1,43 @@ +#!/usr/bin/awk -f + +BEGIN { + RS="\n" + FS=" " + CSV_HEADER="node,wakets,sleepts,duration" + CSV_DATA="" + skip=1 +} + +/wakes up/{ + gsub("]","",$0) + wakets[$4][length(wakets[$4])+1]=$2 + skip=0 +} + +/is sleeping/{ + gsub("]","",$0) + if(!skip){ + sleepts[$4][length(sleepts[$4])+1]=$2 + } +} + +/LOG2PARSE/{ + gsub("]","",$0) + endts[$6][length(endts[$6])+1]=$2 +} + +END { + print(CSV_HEADER); + for(node in wakets){ + for(j=1;j<=length(wakets[node]);j++){ + start=wakets[node][j] + end=endts[node][1] + # Pay attention, the last sleep report for the last wake up is not printed + # so use the printed sleep only if available (otherwise we use the en of the simulation) + if(j<=length(sleepts[node])){ + end=sleepts[node][j] + } + print(node","start","end","end-start) + } + } +} |
