diff options
| author | Loic Guegan <manzerberdes@gmx.com> | 2019-05-24 15:54:00 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerberdes@gmx.com> | 2019-05-24 15:54:00 +0200 |
| commit | 3979a58065edeeb5cbc66eaf8fc326c95e598c34 (patch) | |
| tree | e502308c20abeb6979396f643b86d1fc528bcdca /2019-Mascots.org | |
| parent | d9608926832c164e7f77fb20a5c8812eae9505a8 (diff) | |
Update
Diffstat (limited to '2019-Mascots.org')
| -rw-r--r-- | 2019-Mascots.org | 669 |
1 files changed, 323 insertions, 346 deletions
diff --git a/2019-Mascots.org b/2019-Mascots.org index c518667..18220e4 100644 --- a/2019-Mascots.org +++ b/2019-Mascots.org @@ -190,10 +190,50 @@ component, formatting, style, styling, insert consumption. According a report \cite{shehabi_united_2016-1} on United States data center energy usage, the average Power Usage Effectiveness (PUE) of an hyperscale data center is 1.2. Thus, in our analysis, all energy measurement on cloud server will account for this PUE. - + + In a first place, we analyse the impact of the VM allocated memory on the server energy + consumption. Figure \ref{fig:vmSize} depict the server energy consumption according to the VM + allocated memory for 20 sensors sending data every 10s. Note that red horizontal line represent + the average energy consumption for sample of energy value. We can see that at each sensing + interval, server face to peaks of energy consumption. However, VM allocated memory do not + influence energy consumption. In fact, simple database requests do not need any particular hudge + memory access. Thus, remaining experiments are based on VM allocated memory of 1024MB. + + #+BEGIN_EXPORT latex + \begin{figure} + \centering + \includegraphics[width=0.8\linewidth]{./plots/vmSize-cloud.png} + \caption{VM size impact on the server energy consumption using 20 sensors sending data every 10s} + \label{fig:vmSize} + \end{figure} + #+END_EXPORT -*** Virtual Machine Size Impact + Next, we study the effects of increasing the number of sensors on the server energy consumption. + Figure \ref{fig:sensorsNumber-server} present the results of the average server energy + consumption when varying the number of sensors from 20 to 500 while Figure + \ref{fig:sensorsNumber-WPS} present the average server energy cost per sensors according to the + number of sensors. This Figure shows a clear linear relation between the number of sensors and + the server energy consumption. + + #+BEGIN_EXPORT latex + \begin{figure} + \centering + \subfigure[Average server energy consumption]{ + \includegraphics[width=0.4\linewidth]{./plots/sensorsNumberLine-cloud.png} + \label{fig:sensorsNumber-server} + } + \hspace{0.5cm} + \subfigure[Average sensors energy cost on server]{ + \includegraphics[width=0.4\linewidth]{./plots/WPS-cloud.png} + \label{fig:sensorsNumber-WPS} + } + \caption{Server energy consumption for sensors sending data every 10s} + \label{fig:sensorsNumber-cloud} + \end{figure} + #+END_EXPORT + + ** End-To-End Consumption * Discussion [1 col] * Conclusion [1 col] @@ -206,64 +246,36 @@ component, formatting, style, styling, insert :PROPERTIES: :header-args: :eval never-export :END: -** Data Analysis -*** NS3 - To Generate all the plots, please execute the following line: - #+NAME: runAnalysis - #+CALL: plotToPDF(plots=genAllPlots(data=NS3-logToCSV())) - - #+RESULTS: runAnalysis - -**** R Scripts -***** Generate all plots script - Available variables: - |---------------------| - | Name | - |---------------------| - | sensorsSendInterval | - | sensorsPktSize | - | sensorsNumber | - | nbHop | - | linksBandwidth | - | linksLatency | - | totalEnergy | - | nbPacketCloud | - | nbNodes | - | avgDelay | - | simKey | - |---------------------| - - #+NAME: genAllPlots - #+BEGIN_SRC R :noweb yes :results output - <<NS3-RUtils>> - data=read_csv("logs/ns3/last/data.csv") - # easyPlotGroup("linksLatency","totalEnergy", "LATENCY","sensorsNumber") - # easyPlotGroup("linksBandwidth","totalEnergy", "BW","sensorsNumber") - easyPlot("sensorsNumber","totalEnergy", "NBSENSORS") - easyPlotGroup("positionSeed", "totalEnergy","SENSORSPOS","sensorsNumber") - easyPlotGroup("positionSeed", "avgDelay","SENSORSPOS","sensorsNumber") - easyPlotGroup("sensorsSendInterval","sensorsEnergy","SENDINTERVAL","sensorsNumber") - easyPlotGroup("sensorsSendInterval","networkEnergy","SENDINTERVAL","sensorsNumber") - - #+END_SRC - - #+RESULTS: genAllPlots - -***** R Utils +** Data Analysis (R Scripts) +*** Utils +**** R RUtils is intended to load logs (data.csv) and providing simple plot function for them. - #+NAME: NS3-RUtils + #+NAME: RUtils #+BEGIN_SRC R :eval never library("tidyverse") # Fell free to update the following - labels=c(nbNodes="Number of nodes",sensorsNumber="Number of sensors",totalEnergy="Total Energy (J)", - nbHop="Number of hop (AP to Cloud)", linksBandwidth="Links Bandwidth (Mbps)", avgDelay="Average Application Delay (s)", - linksLatency="Links Latency (ms)", sensorsSendInterval="Sensors Send Interval (s)", positionSeed="Position Seed", - sensorsEnergy="Sensors Wifi Energy Consumption (J)", networkEnergy="Network Energy Consumption (J)") + labels=c(time="Time (s)",sensorsSendInterval="Sensors Send Interval (s)", sensorsNumber="Number of sensors") + PUE=1.2 + ns3SimTime=1800 + g5kSimTime=300 + + loadData=function(path){ + data=read_csv(path) + if("sensorsEnergy"%in%colnames(data)){ # If it is ns3 logs + data=data%>%mutate(sensorsEnergy=sensorsEnergy/ns3SimTime) # Convert to watts + data=data%>%mutate(networkEnergy=networkEnergy/ns3SimTime) + data=data%>%mutate(totalEnergy=totalEnergy/ns3SimTime) + } + else{ # Log from g5k + data=data%>%mutate(energy=energy*PUE) # Take into account PUE + data=data%>%filter(time<=g5kSimTime) # Remove extrats values (theorical sim time != real sim time) + } + } - # Get label according to varName + # Get label according to varName getLabel=function(varName){ if(is.na(labels[varName])){ return(varName) @@ -271,22 +283,17 @@ component, formatting, style, styling, insert return(labels[varName]) } - easyPlot=function(X,Y,KEY){ - curData=data%>%filter(simKey==KEY) - stopifnot(NROW(curData)>0) - ggplot(curData,aes_string(x=X,y=Y))+geom_point()+geom_line()+xlab(getLabel(X))+ylab(getLabel(Y)) - ggsave(paste0("plots/",KEY,"-",X,"_",Y,".png")) - } - - easyPlotGroup=function(X,Y,KEY,GRP){ - curData=data%>%filter(simKey==KEY) %>% mutate(!!GRP:=as.character(UQ(rlang::sym(GRP)))) # %>%mutate(sensorsNumber=as.character(sensorsNumber)) - stopifnot(NROW(curData)>0) - ggplot(curData,aes_string(x=X,y=Y,color=GRP,group=GRP))+geom_point()+geom_line()+xlab(getLabel(X))+ylab(getLabel(Y)) + labs(color = getLabel(GRP)) - ggsave(paste0("plots/",KEY,"-",X,"_",Y,".png")) + applyTheme=function(plot,...){ + palette<- c("#00AFBB", "#E7B800", "#FC4E07","#0abb00") + plot=plot+ + theme_bw(...)+ + scale_fill_manual(values=palette)+ + scale_colour_manual(values=palette) + return(plot) } #+END_SRC - -**** Plots -> PDF +**** Bash +***** Plots -> PDF Merge all plots in plots/ folder into a pdf file. #+NAME: plotToPDF #+BEGIN_SRC bash :results output :noweb yes @@ -325,61 +332,137 @@ component, formatting, style, styling, insert emacs $orgFile --batch -f org-latex-export-to-pdf --kill #+END_SRC - #+RESULTS: +***** CSVs -> data.csv (G5K) + Merge all energy file into one (and add additional fields). -**** Log -> CSV - logToCSV extract usefull data from logs and put them into logs/data.csv. + #+NAME: G5K-mergeCSV + #+BEGIN_SRC sh + #!/bin/bash - #+NAME: NS3-logToCSV - #+BEGIN_SRC bash :results output - logsFolder="./logs/ns3/last/" - csvOutput="$logsFolder/data.csv" + whichLog="last" + + logsLocation="logs/g5k" + whichLog="${logsLocation}/${whichLog}" + + + + 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) + sendInterval=$(getValue $cmd sensorsSendInterval) + 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,sendInterval > $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,"'$sendInterval'}' >> $tmpFile + tail -n+2 ${csvFileIDLE} | awk -F"," '{print $0",'$simKey','$vmSize','$nbSensors',"$1-'$minTsIDLE'",IDLE,"'$sendInterval'}' >> $tmpFile + done - # First save csv header line - aLog=$(find $logsFolder -type f -name "*.org"|head -n 1) - metrics=$(cat $aLog|grep "\-METRICSLINE\-"|sed "s/-METRICSLINE-//g") - echo $metrics | awk '{for(i=1;i<=NF;i++){split($i,elem,":");printf(elem[1]);if(i<NF)printf(",");else{print("")}}}' > $csvOutput - # Second save all values - for logFile in $(find $logsFolder -type f -name "*.org") + ##### Fill dataFile ##### + echo ts,energy,simKey,vmSize,nbSensors,time,state,sendInterval > $dataFile + for tmpFile in $(find ${whichLog}/*_tmp -type f) do - metrics=$(cat $logFile|grep "\-METRICSLINE\-"|sed "s/-METRICSLINE-//g") - echo $metrics | awk '{for(i=1;i<=NF;i++){split($i,elem,":");printf(elem[2]);if(i<NF)printf(",");else{print("")}}}' >> $csvOutput + tail -n+2 $tmpFile >> $dataFile + rm $tmpFile # Pay attention to this line :D done #+END_SRC - #+RESULTS: NS3-logToCSV + #+RESULTS: G5K-mergeCSV + + #+RESULTS: mergeCSV + + + +***** Log -> data.csv (ns3) + logToCSV extract usefull data from logs and put them into logs/data.csv. + + #+NAME: NS3-logToCSV + #+BEGIN_SRC bash :results output + logsFolder="./logs/ns3/last/" + csvOutput="$logsFolder/data.csv" + + # First save csv header line + aLog=$(find $logsFolder -type f -name "*.org"|head -n 1) + metrics=$(cat $aLog|grep "\-METRICSLINE\-"|sed "s/-METRICSLINE-//g") + echo $metrics | awk '{for(i=1;i<=NF;i++){split($i,elem,":");printf(elem[1]);if(i<NF)printf(",");else{print("")}}}' > $csvOutput + + # Second save all values + for logFile in $(find $logsFolder -type f -name "*.org") + do + metrics=$(cat $logFile|grep "\-METRICSLINE\-"|sed "s/-METRICSLINE-//g") + echo $metrics | awk '{for(i=1;i<=NF;i++){split($i,elem,":");printf(elem[2]);if(i<NF)printf(",");else{print("")}}}' >> $csvOutput + done + #+END_SRC + + #+RESULTS: NS3-logToCSV - -**** Custom Plots +*** Plot Scripts +**** Random R Scripts + Watt per sensor on server + #+BEGIN_SRC R :noweb yes :results output + <<RUtils>> + # Load data + data=loadData("./logs/g5k/last/data.csv") + data=data%>%filter(state=="sim",simKey=="nbSensors")%>%ungroup() - Effect of sensors position on app delay - #+BEGIN_SRC R :noweb yes :results graphics :file plots/sensorsPosition-delayenergy.png - <<NS3-RUtils>> - simTime=1800 + data=data%>%group_by(nbSensors)%>%mutate(avgEnergy=mean(energy))%>%distinct()%>%ungroup() + data=data%>%distinct(nbSensors,.keep_all=TRUE) + data=data%>%mutate(WPS=(avgEnergy/nbSensors)) - cbPalette <- c("#0000B0", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7") + print(data%>%select(WPS,nbSensors)) + #+END_SRC - # Load Data - data=read_csv("logs/ns3/last/data.csv") - data=data%>%mutate(sensorsEnergyW=sensorsEnergy/simTime) - data%>%filter(simKey=="SENSORSPOS",sensorsNumber==10) %>% ggplot(aes(y=sensorsEnergyW,x=positionSeed,color="Energy"))+xlab(getLabel("Sensors Position Seed"))+ylab(getLabel("Sensors Energy Consumption (W)"))+ - geom_line()+geom_point()+geom_line(aes(y=(avgDelay+5),color="Delay"))+geom_point(aes(y=(avgDelay+5),color="Delay"))+expand_limits(y=c(0,15))+scale_y_continuous(sec.axis = sec_axis(~.-5, name = "Application Delay (s)")) +theme_bw() + scale_fill_manual(values=cbPalette) + scale_colour_manual(values=cbPalette)+guides(color=guide_legend(title="Curves")) - ggsave("plots/sensorsPosition-delayenergy.png",dpi=80, width=4, height=3.2) + + Impact of vm size + #+BEGIN_SRC R :results graphics :file plots/vmSizeBar-cloud.png + library("tidyverse") + PUE=1.2 + # Load data + data=read_csv("./logs/g5k/last/data.csv") + + data=data%>%filter(state=="sim",simKey=="vmSize")%>%mutate(energy=PUE*energy)%>%filter(time<=300) + + data=data%>%group_by(vmSize)%>%mutate(energy=mean(energy))%>%slice(1L)%>%ungroup() + data=data%>%mutate(vmSize=as.character(vmSize)) + + ggplot(data) + geom_bar(aes(x=vmSize,y=energy),stat="identity")+expand_limits(y=c(75,100))+ylab("Server Energy Consumption (W)")+ + xlab("Simulation Time (s)")+scale_y_log10() + + + ggsave("plots/vmSizeBar-cloud.png",dpi=90,height=3,width=6) #+END_SRC #+RESULTS: - [[file:plots/sensorsPosition-delayenergy.png]] - + [[file:plots/vmSizeBar-cloud.png]] @@ -443,215 +526,23 @@ component, formatting, style, styling, insert ggsave("plot-final.png",dpi=80) #+END_SRC - - -*** Cloud -**** 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 - - - -****** 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]] - - -***** R Utils - RUtils is intended to load logs (data.csv) and providing - simple plot function for them. - - #+NAME: G5K-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: G5K-mergeCSV - #+BEGIN_SRC sh - #!/bin/bash - - whichLog="last" - - logsLocation="logs/g5k" - whichLog="${logsLocation}/${whichLog}" - - - - 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: G5K-mergeCSV - - #+RESULTS: mergeCSV -*** Final Plots - +**** Plot In Paper Figure #+BEGIN_SRC R :noweb yes :results graphics :file plots/sendFrequency-energy.png - <<NS3-RUtils>> - simTime=1800 - tr=171 - - - cbPalette <- c("#00AFBB", "#E7B800", "#FC4E07","#0abb00") - # Load Data - data=read_csv("logs/ns3/last/data.csv") - data=data%>%mutate(energy=totalEnergy/simTime) + <<RUtils>> + data=loadData("logs/ns3/last/data.csv") data=data%>%filter(simKey=="SENDINTERVAL",sensorsNumber==15) - ggplot(data,aes(y=energy,x=sensorsSendInterval))+xlab(getLabel("sensorsSendInterval"))+ylab(getLabel("Sensors And Network\nEnergy Consumption (W)"))+ - geom_line()+geom_point()+expand_limits(y=c(0,50)) +theme_bw() + scale_fill_manual(values=cbPalette) + scale_colour_manual(values=cbPalette)+guides(color=guide_legend(title="Curves"))+ - theme(axis.title.y.right = element_text(margin = margin(t = 0, r = -12, b = 0, l = 7))) - + p=ggplot(data,aes(y=totalEnergy,x=sensorsSendInterval))+ + xlab(getLabel("sensorsSendInterval"))+ylab(getLabel("Sensors And Network\nEnergy Consumption (W)"))+ + geom_line()+geom_point()+expand_limits(y=c(0,50))+ + guides(color=guide_legend(title="Curves"))+ + theme(axis.title.y.right = element_text(margin = margin(t = 0, r = -13, b = 0, l = 7))) + p=applyTheme(p) + ggsave("plots/sendFrequency-energy.png",dpi=100, width=3, height=2.8) #+END_SRC @@ -662,21 +553,22 @@ component, formatting, style, styling, insert Figure Sensors Position ~ Energy/Delay #+BEGIN_SRC R :noweb yes :results graphics :file plots/sensorsPosition-delayenergy.png - <<NS3-RUtils>> - simTime=1800 - tr=171 - + <<RUtils>> + tr=171 # Offset to center delay plot + data=loadData("logs/ns3/last/data.csv") - cbPalette <- c("#00AFBB", "#E7B800", "#FC4E07","#0abb00") - # Load Data - data=read_csv("logs/ns3/last/data.csv") - data=data%>%mutate(sensorsEnergyW=sensorsEnergy/simTime) + data=data%>%filter(simKey=="SENSORSPOS",sensorsNumber==9) - data%>%filter(simKey=="SENSORSPOS",sensorsNumber==9) %>% ggplot(aes(y=sensorsEnergyW,x=positionSeed,color="Energy"))+xlab(getLabel("Sensors Position Seed"))+ylab(getLabel("Sensors Energy Consumption (W)"))+ + p=ggplot(data,aes(y=sensorsEnergy,x=positionSeed,color="Energy"))+xlab(getLabel("Sensors Position Seed"))+ylab(getLabel("Sensors Energy Consumption (W)"))+ geom_line()+geom_point()+geom_line(aes(y=(avgDelay-tr),color="Delay"))+geom_point(aes(y=(avgDelay-tr),color="Delay"))+expand_limits(y=c(0,15))+ - scale_y_continuous(sec.axis = sec_axis(~.+tr, name = "Application Delay (s)")) +theme_bw() + scale_fill_manual(values=cbPalette) + scale_colour_manual(values=cbPalette)+guides(color=guide_legend(title="Curves"))+ - theme(axis.title.y.right = element_text(margin = margin(t = 0, r = -12, b = 0, l = 7))) - + scale_y_continuous(sec.axis = sec_axis(~.+tr, name = "Application Delay (s)")) + + guides(color=guide_legend(title="Curves")) + + p=applyTheme(p) + p=p+theme(axis.title.y.right = element_text(margin = margin(t = 0, r = -8, b = 0, l = 10))) + + + ggsave("plots/sensorsPosition-delayenergy.png",dpi=80, width=4, height=3.2) #+END_SRC @@ -687,28 +579,21 @@ component, formatting, style, styling, insert #+BEGIN_SRC R :noweb yes :results graphics :file plots/numberSensors-WIFINET.png :session *R* - <<NS3-RUtils>> - simTime=1800 - + <<RUtils>> - cbPalette <- c("#00AFBB", "#E7B800", "#FC4E07","#0abb00") - - # Load Data - data=read_csv("logs/ns3/last/data.csv") + data=loadData("logs/ns3/last/data.csv") data=data%>%filter(simKey=="NBSENSORS") - dataW=data%>%mutate(energy=sensorsEnergy/simTime)%>% mutate(type="Sensors") %>% select(sensorsNumber,energy,type) - dataN=data%>%mutate(energy=networkEnergy/simTime)%>% mutate(type="Network") %>% select(sensorsNumber,energy,type) + dataW=data%>%mutate(energy=sensorsEnergy)%>% mutate(type="Sensors") %>% select(sensorsNumber,energy,type) + dataN=data%>%mutate(energy=networkEnergy)%>% mutate(type="Network") %>% select(sensorsNumber,energy,type) data=rbind(dataN,dataW) data=data%>%mutate(sensorsNumber=as.character(sensorsNumber)) data=data%>%mutate(sensorsNumber=fct_reorder(sensorsNumber,as.numeric(sensorsNumber))) data=data%>%filter(sensorsNumber%in%c(2,4,6,8,10)) - ggplot(data)+geom_bar(aes(x=sensorsNumber,y=energy,fill=type),position="identity",stat="identity")+ - theme_bw()+ - theme(text = element_text(size=16))+ - scale_fill_manual(values=cbPalette) + scale_colour_manual(values=cbPalette)+ + p=ggplot(data)+geom_bar(aes(x=sensorsNumber,y=energy,fill=type),position="identity",stat="identity")+ xlab(getLabel("sensorsNumber"))+ ylab("Energy Consumption (W)") + guides(fill=guide_legend(title="")) +coord_flip() + p=applyTheme(p)+theme(text = element_text(size=15)) size=5 ggsave("plots/numberSensors-WIFINET.png",dpi=90,width=size,height=size-1) @@ -727,17 +612,14 @@ component, formatting, style, styling, insert library("tidyverse") # Load data - data=read_csv("./logs/g5k/last/data.csv") + data=loadData("./logs/g5k/last/data.csv") data=data%>%filter(state=="sim",simKey=="nbSensors") - PUE=1.2 # 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) - dataCloud=dataCloud%>%mutate(energy=energy*PUE) - approx=function(data1, data2,nbSensors){ x1=data1$sensorsNumber @@ -776,14 +658,12 @@ component, formatting, style, styling, insert 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")+ + p=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")) + p=applyTheme(p) ggsave("plots/final.png",dpi=80) #+END_SRC @@ -794,32 +674,129 @@ component, formatting, style, styling, insert - #+BEGIN_SRC R :results graphics :file plots/vmSize-cloud.png - library("tidyverse") + Impact of vm size + #+BEGIN_SRC R :noweb yes :results graphics :noweb yes :file plots/vmSize-cloud.png + <<RUtils>> - # Load data - data=read_csv("./logs/g5k/last/data.csv") - data=data%>%filter(simKey=="nbSensors") + # Load data + data=loadData("./logs/g5k/last/data.csv") + + data=data%>%filter(state=="sim",simKey=="vmSize")%>%filter(time<=300) + + data=data%>%mutate(vmSize=paste0(vmSize," MB")) + data=data%>%group_by(vmSize)%>%mutate(avgEnergy=mean(energy))%>%ungroup() + p=ggplot(data,aes(x=time, y=energy)) + geom_line()+facet_wrap(~vmSize)+geom_hline(aes(yintercept=avgEnergy),color="Red",size=1.0)+expand_limits(y=c(0,40))+ylab("Server Energy Consumption (W)")+ + xlab("Simulation Time (s)") + + p=applyTheme(p) + + ggsave("plots/vmSize-cloud.png",dpi=90,height=3,width=6) + #+END_SRC - dataI=data%>%filter(state=="IDLE")%>%group_by(nbSensors)%>%mutate(energy=mean(energy)) - dataS=data%>%filter(state=="sim")%>%group_by(nbSensors)%>%mutate(energy=mean(energy)) + #+RESULTS: + [[file:plots/vmSize-cloud.png]] + + + Impact of sensors number + #+BEGIN_SRC R :noweb yes :results graphics :file plots/sensorsNumber-cloud.png + <<RUtils>> + # Load data + data=loadData("./logs/g5k/last/data.csv") + data=data%>%filter(state=="sim",simKey=="nbSensors")%>%ungroup() - data=rbind(dataI,dataS) + data=data%>%mutate(nbSensorsSort=nbSensors) + data=data%>%mutate(nbSensors=paste0(nbSensors," Sensors")) + data$nbSensors=fct_reorder(data$nbSensors, data$nbSensorsSort) + + data=data%>%group_by(nbSensors)%>%mutate(avgEnergy=mean(energy))%>%ungroup() + p=ggplot(data,aes(x=time, y=energy)) + geom_line()+facet_wrap(~nbSensors)+expand_limits(y=c(0,40))+ylab("Server Energy Consumption (W)")+ + xlab("Simulation Time (s)")+geom_hline(aes(yintercept=avgEnergy),color="Red",size=1.0) + + p=applyTheme(p) + ggsave("plots/sensorsNumber-cloud.png",dpi=90,height=3,width=6) + #+END_SRC + + #+RESULTS: + [[file:plots/sensorsNumber-cloud.png]] -# data1024=data%>%filter(vmSize==1024)%>%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) - ggplot(data,aes(x=time, y=energy,color=state)) + geom_point()+facet_wrap(~nbSensors) + + #+BEGIN_SRC R :noweb yes :results graphics :file plots/sensorsNumberLine-cloud.png :session *R:2* + <<RUtils>> + # Load data + data=loadData("./logs/g5k/last/data.csv") + data=data%>%filter(state=="sim",simKey=="nbSensors")%>%ungroup() - ggsave("plots/vmSize-cloud.png",dpi=80) + data=data%>%group_by(nbSensors)%>%mutate(avgEnergy=mean(energy))%>%distinct()%>%ungroup() + data=data%>%distinct(nbSensors,.keep_all=TRUE) + data=data%>%mutate(WPS=(avgEnergy/nbSensors)) + + p=ggplot(data,aes(x=nbSensors, y=avgEnergy)) + geom_point() +geom_line()+ + xlab(getLabel("sensorsNumber"))+ylab("Average Server Energy (W)") + + p=applyTheme(p)+theme(text = element_text(size=14))+ expand_limits(y=108) + ggsave("plots/sensorsNumberLine-cloud.png",dpi=90,height=4,width=4) #+END_SRC #+RESULTS: - [[file:plots/vmSize-cloud.png]] + [[file:plots/sensorsNumberLine-cloud.png]] + + + #+BEGIN_SRC R :noweb yes :results graphics :file plots/WPS-cloud.png :session *R:2* + <<RUtils>> + # Load data + data=loadData("./logs/g5k/last/data.csv") + + data=data%>%filter(state=="sim",simKey=="nbSensors")%>%ungroup() + + + data=data%>%group_by(nbSensors)%>%mutate(avgEnergy=mean(energy))%>%distinct()%>%ungroup() + data=data%>%distinct(nbSensors,.keep_all=TRUE) + data=data%>%mutate(WPS=(avgEnergy/nbSensors)) + + oldNb=data$nbSensors + data=data%>%mutate(nbSensors=as.character(nbSensors)) + data$nbSensors=fct_reorder(data$nbSensors,oldNb) + p=ggplot(data,aes(x=nbSensors, y=WPS)) + geom_bar(stat="identity")+ + xlab(getLabel("sensorsNumber"))+ylab("Server energy cost per sensors (W)") + + p=applyTheme(p)+theme(text = element_text(size=14)) + ggsave("plots/WPS-cloud.png",dpi=90,height=4,width=4) + #+END_SRC + + #+RESULTS: + [[file:plots/WPS-cloud.png]] + + + + + + + #+BEGIN_SRC R :noweb yes :results graphics :file plots/sendInterval-cloud.png + <<RUtils>> + # Load data + data=loadData("./logs/g5k/last/data.csv") + + data=data%>%filter(state=="sim",simKey=="sendInterval")%>%ungroup() + + oldSendInterval=data$sendInterval + data=data%>%mutate(sendInterval=paste0(sendInterval,"s")) + data$sendInterval=fct_reorder(data$sendInterval,oldSendInterval) + + data=data%>%group_by(sendInterval)%>%mutate(avgEnergy=mean(energy))%>%ungroup() + p=ggplot(data,aes(x=time, y=energy)) + geom_line()+facet_wrap(~sendInterval)+expand_limits(y=c(0,40))+ylab("Server Energy Consumption (W)")+ + xlab("Simulation Time (s)")+geom_hline(aes(yintercept=avgEnergy),color="Red",size=1.0) + + p=applyTheme(p) + ggsave("plots/sendInterval-cloud.png",dpi=90,height=3,width=6) + #+END_SRC + + #+RESULTS: + [[file:plots/sendInterval-cloud.png]] + |
