diff options
Diffstat (limited to 'logs/g5k/analysis.org')
| -rw-r--r-- | logs/g5k/analysis.org | 292 |
1 files changed, 292 insertions, 0 deletions
diff --git a/logs/g5k/analysis.org b/logs/g5k/analysis.org new file mode 100644 index 0000000..7433c02 --- /dev/null +++ b/logs/g5k/analysis.org @@ -0,0 +1,292 @@ + + + + +* Logs Analysis +** R Scripts +*** Plots script + #+BEGIN_SRC R :results output :noweb yes :file second-final/plot.png + <<RUtils>> + dataOrig=loadData("./second-final/data.csv") + + data=dataOrig%>%filter(simKey=="nbSensors")%>%filter(state=="sim",nbSensors==100) + dataIDLE=dataOrig%>%filter(simKey=="nbSensors")%>%filter(state!="sim",nbSensors==100) + data=data%>%mutate(meanEnergy=mean(energy)) + dataIDLE=dataIDLE%>%mutate(meanEnergy=mean(energy)) + data=rbind(data,dataIDLE) + ggplot(data,aes(x=time,y=energy))+geom_point(position="jitter")+xlab(getLabel("time"))+expand_limits(y=0)+facet_wrap(~state)+geom_hline(aes(color=state,yintercept=mean(meanEnergy))) + ggsave("./second-final/plot.png",dpi=180) + #+END_SRC + + #+RESULTS: + #+begin_example + # A tibble: 3,050 x 8 + ts energy simKey vmSize nbSensors time state meanEnergy + <dbl> <dbl> <chr> <dbl> <dbl> <dbl> <chr> <dbl> + 1 1558429001. 90.2 nbSensors 2048 100 0 IDLE 90.8 + 2 1558429001. 89 nbSensors 2048 100 0.0199 IDLE 90.8 + 3 1558429001. 89 nbSensors 2048 100 0.0399 IDLE 90.8 + 4 1558429001. 90.8 nbSensors 2048 100 0.0599 IDLE 90.8 + 5 1558429001. 91 nbSensors 2048 100 0.0799 IDLE 90.8 + 6 1558429001. 90.5 nbSensors 2048 100 0.1000 IDLE 90.8 + 7 1558429001. 89.9 nbSensors 2048 100 0.120 IDLE 90.8 + 8 1558429001. 88.6 nbSensors 2048 100 0.140 IDLE 90.8 + 9 1558429001. 88.6 nbSensors 2048 100 0.160 IDLE 90.8 + 10 1558429001. 90.5 nbSensors 2048 100 0.180 IDLE 90.8 + # … with 3,040 more rows + #+end_example + + + + + + +**** Final plot + + #+BEGIN_SRC R :results graphics :noweb yes :file second-final/plot-final.png :session *R* + <<RUtils>> + data=loadData("./second-final/data.csv") + data=data%>%filter(state=="sim",simKey=="nbSensors") + + + # Cloud + data10=data%>%filter(nbSensors==20)%>%mutate(meanEnergy=mean(energy)) %>% slice(1L) + data100=data%>%filter(nbSensors==100)%>%mutate(meanEnergy=mean(energy)) %>% slice(1L) + data300=data%>%filter(nbSensors==300)%>%mutate(meanEnergy=mean(energy)) %>% slice(1L) + dataCloud=rbind(data10,data100,data300)%>%mutate(nbSensors=as.character(nbSensors)) + + # Network + dataNet=loadData("../../ns3-simulations/logs/data.csv") + dataNet=dataNet%>%filter(simKey=="NBSENSORS") + data5=dataNet%>%filter(sensorsNumber==5)%>%select(networkEnergy,sensorsNumber) + data10=dataNet%>%filter(sensorsNumber==10)%>%select(networkEnergy,sensorsNumber) + + print(data20) + + ggplot(dataCloud)+geom_bar(aes(x=nbSensors,y=meanEnergy),stat="identity")+xlab("Sensors Number")+ylab("Power Consumption (W)") + ggsave("./second-final/plot-final.png",dpi=80) + + #+END_SRC + + #+RESULTS: + + + + + #+BEGIN_SRC R :noweb yes :results graphics :file final.png :session *R* + <<RUtils>> + + + data=loadData("./second-final/data.csv") + data=data%>%filter(state=="sim",simKey=="nbSensors") + + # Cloud + data10=data%>%filter(nbSensors==20)%>%mutate(energy=mean(energy)) %>% slice(1L) + data100=data%>%filter(nbSensors==100)%>%mutate(energy=mean(energy)) %>% slice(1L) + data300=data%>%filter(nbSensors==300)%>%mutate(energy=mean(energy)) %>% slice(1L) + dataCloud=rbind(data10,data100,data300)%>%mutate(sensorsNumber=nbSensors)%>%mutate(type="Cloud")%>%select(sensorsNumber,energy,type) + + + + approx=function(data1, data2,nbSensors){ + x1=data1$sensorsNumber + y1=data1$energy + + x2=data2$sensorsNumber + y2=data2$energy + + a=((y2-y1)/(x2-x1)) + b=y1-a*x1 + + return(a*nbSensors+b) + + } + + + simTime=1800 + + # Network + data=read_csv("../../ns3-simulations/logs/data.csv") + data=data%>%filter(simKey=="NBSENSORS") + dataC5=data%>%filter(sensorsNumber==5)%>% mutate(energy=networkEnergy/simTime) %>%select(energy,sensorsNumber) + dataC10=data%>%filter(sensorsNumber==10)%>%mutate(energy=networkEnergy/simTime) %>%select(energy,sensorsNumber) + dataNet=rbind(dataC5,dataC10)%>%mutate(type="Network") + + # Sensors + dataS5=data%>%filter(sensorsNumber==5)%>% mutate(energy=sensorsEnergy/simTime) %>%select(energy,sensorsNumber) + dataS10=data%>%filter(sensorsNumber==10)%>%mutate(energy=sensorsEnergy/simTime) %>%select(energy,sensorsNumber) + dataS=rbind(dataS5,dataS10)%>%mutate(type="Sensors") + + fakeNetS=tibble( + sensorsNumber=c(20,100,300,20,100,300), + energy=c(dataC10$energy,approx(dataC5,dataC10,100),approx(dataC5,dataC10,300),dataS10$energy,approx(dataS5,dataS10,100),approx(dataS5,dataS10,300)), + type=c("Network","Network","Network","Sensors","Sensors","Sensors") + ) + + fakeNetS=fakeNetS%>%mutate(sensorsNumber=as.character(sensorsNumber)) + dataCloud=dataCloud%>%mutate(sensorsNumber=as.character(sensorsNumber)) + + data=rbind(fakeNetS,dataCloud)%>%mutate(sensorsNumber=as.character(sensorsNumber)) + + + data=data%>%mutate(sensorsNumber=fct_reorder(sensorsNumber,as.numeric(sensorsNumber))) + + ggplot(data)+geom_bar(position="dodge2",colour="black",aes(x=sensorsNumber,y=energy,fill=type),stat="identity")+ + xlab("Sensors Number")+ylab("Power Consumption (W)")+guides(fill=guide_legend(title="Part")) + ggsave("final.png",dpi=80) + + #+END_SRC + + #+RESULTS: + [[file:final.png]] + + + + + +*** R Utils + RUtils is intended to load logs (data.csv) and providing + simple plot function for them. + + #+NAME: RUtils + #+BEGIN_SRC R :eval never + library("tidyverse") + + # Fell free to update the following + labels=c(time="Time (s)") + + loadData=function(path){ + data=read_csv(path) + } + + # Get label according to varName + getLabel=function(varName){ + if(is.na(labels[varName])){ + return(varName) + } + return(labels[varName]) + } + #+END_SRC + +** Plots -> PDF + Merge all plots in plots/ folder into a pdf file. + #+NAME: plotToPDF + #+BEGIN_SRC bash :results output :noweb yes + orgFile="plots/plots.org" + <<singleRun>> # To get all default arguments + + # Write helper function + function write { + echo "$1" >> $orgFile + } + + echo "#+TITLE: Analysis" > $orgFile + write "#+LATEX_HEADER: \usepackage{fullpage}" + write "#+OPTIONS: toc:nil" + # Default arguments + write '\begin{center}' + write '\begin{tabular}{lr}' + write 'Parameters & Values\\' + write '\hline' + write "sensorsPktSize & ${sensorsPktSize} bytes\\\\" + write "sensorsSendInterval & ${sensorsSendInterval}s\\\\" + write "sensorsNumber & ${sensorsNumber}\\\\" + write "nbHop & ${nbHop}\\\\" + write "linksBandwidth & ${linksBandwidth}Mbps\\\\" + write "linksLatency & ${linksLatency}ms\\\\" + write '\end{tabular}' + write '\newline' + write '\end{center}' + + for plot in $(find plots/ -type f -name "*.png") + do + write "\includegraphics[width=0.5\linewidth]{$(basename ${plot})}" + done + + # Export to pdf + emacs $orgFile --batch -f org-latex-export-to-pdf --kill + #+END_SRC + + +** CSVs -> CSV + Merge all energy file into one (and add additional fields). + + #+NAME: mergeCSV + #+BEGIN_SRC sh + #!/bin/bash + + whichLog="second-final" + + + logFile="$(dirname $(readlink -f $0))"/$whichLog/simLogs.txt + dataFile=$(dirname "$logFile")/data.csv + + + getValue () { + line=$(echo "$1" | grep "Simulation para"|sed "s/Simulation parameters: //g") + key=$2 + echo "$line"|awk 'BEGIN{RS=" ";FS=":"}"'$key'"==$1{gsub("\n","",$0);print $2}' + } + + ##### Add extract info to energy ##### + IFS=$'\n' + for cmd in $(cat $logFile|grep "Simulation parameters") + do + nodeName=$(getValue $cmd serverNodeName) + from=$(getValue $cmd simStart) + to=$(getValue $cmd simEnd) + vmSize=$(getValue $cmd vmSize) + nbSensors=$(getValue $cmd nbSensors) + simKey=$(getValue $cmd simKey) + csvFile="$whichLog/${simKey}_${vmSize}VMSIZE_${nbSensors}NBSENSORS_${from}${to}.csv" + csvFileIDLE="$whichLog/${simKey}_${vmSize}VMSIZE_${nbSensors}NBSENSORS_${from}${to}_IDLE.csv" + tmpFile=${csvFile}_tmp + echo ts,energy,simKey,vmSize,nbSensors,time,state > $tmpFile + minTs=$(tail -n+2 $csvFile|awk -F"," 'BEGIN{min=0}$1<min||min==0{min=$1}END{print(min)}') # To compute ts field + minTsIDLE=$(tail -n+2 $csvFileIDLE|awk -F"," 'BEGIN{min=0}$1<min||min==0{min=$1}END{print(min)}') # To compute ts field + tail -n+2 ${csvFile} | awk -F"," '{print $0",'$simKey','$vmSize','$nbSensors',"$1-'$minTs'",sim"}' >> $tmpFile + tail -n+2 ${csvFileIDLE} | awk -F"," '{print $0",'$simKey','$vmSize','$nbSensors',"$1-'$minTsIDLE'",IDLE"}' >> $tmpFile + done + + + ##### Fill dataFile ##### + echo ts,energy,simKey,vmSize,nbSensors,time,state > $dataFile + for tmpFile in $(find ${whichLog}/*_tmp -type f) + do + tail -n+2 $tmpFile >> $dataFile + rm $tmpFile # Pay attention to this line :D + done + #+END_SRC + + #+RESULTS: mergeCSV + + + +** Custom Plots + + #+NAME: ssiNet + #+BEGIN_SRC R :noweb yes :results graphics :file plots/sensorsSendInterval-net.png + <<RUtils>> + + data%>%filter(simKey=="SENDINTERVAL",sensorsNumber==20) %>% ggplot(aes(x=sensorsSendInterval,y=networkEnergy))+xlab(getLabel("sensorsSendInterval"))+ylab(getLabel("networkEnergy"))+ + geom_line()+labs(title="For 20 sensors") + ggsave("plots/sensorsSendInterval-net.png",dpi=80) + #+END_SRC + + #+RESULTS: + [[file:plots/sensorsSendInterval-net.png]] + + + #+NAME: ssiWifi + #+BEGIN_SRC R :noweb yes :results graphics :file plots/sensorsSendInterval-wifi.png + <<RUtils>> + data%>%filter(simKey=="SENDINTERVAL",sensorsNumber==20) %>% ggplot(aes(x=sensorsSendInterval,y=sensorsEnergy))+xlab(getLabel("sensorsSendInterval"))+ylab(getLabel("sensorsEnergy"))+ + geom_line() + geom_line()+labs(title="For 20 sensors") + ggsave("plots/sensorsSendInterval-wifi.png",dpi=80) + #+END_SRC + + #+RESULTS: ssiWifi + [[file:plots/sensorsSendInterval-wifi.png]] + + #+RESULTS: + [[file:plots/sensorsSendInterval.png]] |
