paper-lowrate-iot/ns3-simulations/simulate.org

109 lines
4 KiB
Org Mode
Raw Normal View History

2019-04-24 16:49:40 +02:00
* Run simulations
2019-04-25 15:51:05 +02:00
** Experiments
*** Number of sensors
#+BEGIN_SRC bash :noweb yes :results output
<<singleRun>>
for sensorsNumber in $(seq 0 20)
do
run
done
#+END_SRC
2019-04-24 16:49:40 +02:00
2019-04-25 15:51:05 +02:00
#+RESULTS:
2019-04-24 16:49:40 +02:00
** Single Run
#+NAME: singleRun
#+BEGIN_SRC bash :noweb yes
simulator="ns3-simulator/simulator"
parseEnergyScript="./parseEnergy.awk"
2019-04-25 15:51:05 +02:00
parseDelayScript="./parseDelay.awk"
2019-04-24 16:49:40 +02:00
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")
2019-04-25 09:00:11 +02:00
# Compute some metrics
energyLog=$(echo "$log" | $parseEnergyScript)
2019-04-25 15:51:05 +02:00
avgDelay=$(echo "$log" | $parseDelayScript)
2019-04-25 09:00:11 +02:00
totalEnergy=$(echo "$energyLog"| awk 'BEGIN{power=0;FS=","}NR!=1{power+=$2}END{print(power)}')
nbPacketCloud=$(echo "$log"|grep -c "CloudSwitch receive")
2019-04-25 15:51:05 +02:00
nbNodes=$(echo "$log"|awk '/Simulation used/{print($3)}')
ns3Version=$(echo "$log"|awk '/NS-3 Version/{print($3)}')
2019-04-24 16:49:40 +02:00
2019-04-25 09:00:11 +02:00
# Save logs
2019-04-25 15:51:05 +02:00
echo -e "#+TITLE: $(date) ns-3 (version ${ns3Version}) simulation\n" > $logFile
echo "* Environment Variables" >> $logFile
env >> $logFile
2019-04-24 16:49:40 +02:00
echo "* Full Command" >> $logFile
echo "$simCMD" >> $logFile
echo "* Output" >> $logFile
echo "$log" >> $logFile
2019-04-25 09:00:11 +02:00
echo "* Energy CSV (negative nodeId = WIFI, 0 = AP (Wireless+Wired), positive nodeId = ECOFEN" >> $logFile
echo "$energyLog" >> $logFile
2019-04-24 16:49:40 +02:00
echo "* Metrics" >> $logFile
2019-04-25 15:51:05 +02:00
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
2019-04-24 16:49:40 +02:00
}
#+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
2019-04-25 15:51:05 +02:00
* 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<NF)printf(",");else{print("")}}}' > $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<NF)printf(",");else{print("")}}}' >> $csvOutput
done
#+END_SRC
** R Scripts
*** Load Data
2019-04-25 16:51:15 +02:00
#+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")
2019-04-25 15:51:05 +02:00
#+END_SRC
2019-04-25 16:51:15 +02:00
2019-04-25 15:51:05 +02:00