* Run simulations ** Experiments *** Number of sensors #+BEGIN_SRC bash :noweb yes :results output <> for sensorsNumber in $(seq 0 20) do run done #+END_SRC #+RESULTS: ** Single Run #+NAME: singleRun #+BEGIN_SRC bash :noweb yes simulator="ns3-simulator/simulator" parseEnergyScript="./parseEnergy.awk" parseDelayScript="./parseDelay.awk" logFolder="logs/" export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${NS3_PATH}/build/lib run () { [ -z ${sensorsSendInterval+x} ] && sensorsSendInterval=1 [ -z ${sensorsPktSize+x} ] && sensorsPktSize=10 [ -z ${sensorsNumber+x} ] && sensorsNumber=2 [ -z ${nbHop+x} ] && nbHop=2 [ -z ${linksBandwidth+x} ] && linksBandwidth=10 [ -z ${linksLatency+x} ] && linksLatency=10 logFile="${logFolder}/ns-3_${sensorsSendInterval}SSI_${sensorsPktSize}SPS_${sensorsNumber}SN_${nbHop}NH_${linksBandwidth}LB_${linksLatency}LL.org" simCMD="$simulator --sensorsSendInterval=${sensorsSendInterval} --sensorsPktSize=${sensorsPktSize} --sensorsNumber=${sensorsNumber} --nbHop=${nbHop} --linksBandwidth=${linksBandwidth} --linksLatency=${linksLatency} 2>&1" log=$(bash -c "$simCMD") # Compute some metrics energyLog=$(echo "$log" | $parseEnergyScript) avgDelay=$(echo "$log" | $parseDelayScript) totalEnergy=$(echo "$energyLog"| awk 'BEGIN{power=0;FS=","}NR!=1{power+=$2}END{print(power)}') nbPacketCloud=$(echo "$log"|grep -c "CloudSwitch receive") nbNodes=$(echo "$log"|awk '/Simulation used/{print($3)}') ns3Version=$(echo "$log"|awk '/NS-3 Version/{print($3)}') # Save logs echo -e "#+TITLE: $(date) ns-3 (version ${ns3Version}) simulation\n" > $logFile echo "* Environment Variables" >> $logFile env >> $logFile echo "* Full Command" >> $logFile echo "$simCMD" >> $logFile echo "* Output" >> $logFile echo "$log" >> $logFile echo "* Energy CSV (negative nodeId = WIFI, 0 = AP (Wireless+Wired), positive nodeId = ECOFEN" >> $logFile echo "$energyLog" >> $logFile echo "* Metrics" >> $logFile echo "-METRICSLINE- sensorsSendInterval:${sensorsSendInterval} sensorsPktSize:${sensorsPktSize} sensorsNumber:${sensorsNumber} nbHop:${nbHop} linksBandwidth:${linksBandwidth} linksLatency:${linksLatency} totalEnergy:$totalEnergy nbPacketCloud:$nbPacketCloud nbNodes:$nbNodes avgDelay:${avgDelay} ns3Version:${ns3Version}" >> $logFile } #+END_SRC #+RESULTS: : Processing logs/logs/log.txt : Processing logs/logs/log.txt.csv-energy.csv : Processing logs/logs/log.txt.csv : Processing logs/logs/log.txt-energy.csv * Logs Analysis ** Log -> CSV #+NAME: logToCSV #+BEGIN_SRC bash :results none csvOutput="logs/data.csv" # First save csv header line aLog=$(find logs/ -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 $csvOutput # Second save all values for logFile in $(find logs/ -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> $csvOutput done #+END_SRC ** R Scripts *** Load Data #+NAME: loadData #+BEGIN_SRC R :var genLog=logToCSV() library("tidyverse") getLabel=function(varName){ labels=c(nbNodes="Node Number",nbSensors="Sensor Number",totalEnergy="Total Energy (J)") if(is.na(labels[varName])){ return(varName) } return(labels[varName]) } # Load Data data=read_csv("logs/data.csv") ggplot(data,aes(x=nbNodes,y=totalEnergy))+geom_point()+geom_line()+xlab(getLabel("nbNodes"))+ylab(getLabel("totalEnergy")) ggsave("plot.png") #+END_SRC