Update simulators

This commit is contained in:
Loic Guegan 2019-05-16 14:32:18 +02:00
parent 9305e544d3
commit 026a84902c
505 changed files with 3375873 additions and 5912458 deletions

View file

@ -9,12 +9,41 @@
#+RESULTS: runSim
** Experiments
*** Sensors Position
#+NAME: runSensorsPos
#+BEGIN_SRC bash :noweb yes :results output
<<singleRun>>
simKey="SENSORSPOS"
for sensorsNumber in $(seq 5 5 20)
do
for positionSeed in $(seq 1 10)
do
run
done
done
#+END_SRC
*** Sensors Send Interval
#+NAME: runSendInterval
#+BEGIN_SRC bash :noweb yes :results output
<<singleRun>>
simKey="SENDINTERVAL"
for sensorsNumber in $(seq 5 5 20)
do
for sensorsSendInterval in $(seq 10 10 100)
do
run
done
done
#+END_SRC
*** Bandwidth
#+NAME: runBW
#+BEGIN_SRC bash :noweb yes :results output
<<singleRun>>
simKey="BW"
for sensorsNumber in $(seq 1 15)
for sensorsNumber in $(seq 1 10)
do
for linksBandwidth in $(seq 10 20 100)
do
@ -32,7 +61,7 @@
#+BEGIN_SRC bash :noweb yes :results output
<<singleRun>>
simKey="LATENCY"
for sensorsNumber in $(seq 1 15)
for sensorsNumber in $(seq 1 10)
do
for linksLatency in $(seq 1 1 10)
do
@ -50,7 +79,7 @@
#+BEGIN_SRC bash :noweb yes :results output
<<singleRun>>
simKey="NBSENSORS"
for sensorsNumber in $(seq 1 5)
for sensorsNumber in $(seq 1 10)
do
run
done
@ -63,7 +92,7 @@
#+BEGIN_SRC bash :noweb yes :results output
<<singleRun>>
simKey="NBHOP"
for sensorsNumber in $(seq 1 15)
for sensorsNumber in $(seq 1 10)
do
for nbHop in $(seq 1 10)
do
@ -76,7 +105,7 @@
** Single Run
#+NAME: singleRun
#+BEGIN_SRC bash :eval never :noweb yes :results output
simulator="simulator/simulator"
@ -86,27 +115,30 @@
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${NS3_PATH}/build/lib
# Default Parameters
sensorsSendInterval=10
sensorsSendInterval=10 # DON'T GO BELOW 1 SECONDS !!!!!!! Simulator will stay stuck
sensorsPktSize=5 # 1 byte temperature (-128 à +128 °C) and 4Byte sensorsId
sensorsNumber=10
nbHop=10 # Cf paper AC/Yunbo
linksBandwidth=10
linksLatency=2
positionSeed=5
simKey="NOKEY"
run () {
# If another function want to handle simulation (tipically used on g5k)
type -t handleSim > /dev/null && { handleSim; return; }
logFile="${logFolder}/${simKey}_${sensorsSendInterval}SSI_${sensorsPktSize}SPS_${sensorsNumber}SN_${nbHop}NH_${linksBandwidth}LB_${linksLatency}LL.org"
local logFile="${logFolder}/${simKey}_${sensorsSendInterval}SSI_${sensorsPktSize}SPS_${sensorsNumber}SN_${nbHop}NH_${linksBandwidth}LB_${linksLatency}LL_${positionSeed}PS.org"
[ -f "$logFile" ] && return
simCMD="$simulator --sensorsSendInterval=${sensorsSendInterval} --sensorsPktSize=${sensorsPktSize} --sensorsNumber=${sensorsNumber} --nbHop=${nbHop} --linksBandwidth=${linksBandwidth} --linksLatency=${linksLatency} 2>&1"
log=$(bash -c "$simCMD")
local simCMD="$simulator --sensorsSendInterval=${sensorsSendInterval} --sensorsPktSize=${sensorsPktSize} --sensorsNumber=${sensorsNumber} --nbHop=${nbHop} --linksBandwidth=${linksBandwidth} --linksLatency=${linksLatency} --positionSeed=${positionSeed} 2>&1"
local 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)}')
totalEnergy=$(echo "$energyLog" | awk 'BEGIN{power=0;FS=","}NR!=1{power+=$2}END{print(power)}')
sensorsEnergy=$(echo "$energyLog" |awk -F',' 'BEGIN{sumW=0}$1<0{sumW+=$2}END{print sumW}')
networkEnergy=$(echo "$energyLog" |awk -F',' 'BEGIN{sumN=0}$1>=0{sumN+=$2}END{print sumN}')
nbPacketCloud=$(echo "$log"|grep -c "CloudSwitch receive")
nbNodes=$(echo "$log"|awk '/Simulation used/{print($3)}')
ns3Version=$(echo "$log"|awk '/NS-3 Version/{print($3)}')
@ -122,8 +154,7 @@
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} simKey:${simKey}" >> $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} simKey:${simKey} positionSeed:${positionSeed} sensorsEnergy:${sensorsEnergy} networkEnergy:${networkEnergy}" >> $logFile
}
#+END_SRC
@ -134,9 +165,9 @@
run start their simulations processes:
#+BEGIN_SRC sh :tangle ./g5k-root.sh :shebang "#!/bin/bash" :noweb yes
##### Arguments #####
nHost=15
nProcesses=8 # Max number of parrallel simulations
nHours=3 # Reservation duration
nHost=20 # At least 20 host x)
nProcesses=3 # Max number of parrallel simulations (don't go too high, your process will be killed (arround 8))
nHours=4 # Reservation duration
simArgsLoc=~/args/ # Don't change this path witouth changing it in workder scripts
finishedFile="$simArgsLoc/finished-microBenchmarks.txt"
logsFinalDst=~/logs/
@ -165,6 +196,7 @@
echo "linksLatency=${linksLatency}" >> $outF
echo "sensorsNumber=${sensorsNumber}" >> $outF
echo "linksBandwidth=${linksBandwidth}" >> $outF
echo "positionSeed=${positionSeed}" >> $outF
}
@ -191,11 +223,9 @@
rm -rf $simArgsLoc/* # Clean old args
# Add your simulation code block here
<<runNbHop>>
<<runBW>>
<<runLat>>
<<nbSens>>
<<runNbSensors>>
<<runSendInterval>>
<<runSensorsPos>>
# Distribute argument according to subsribed nodes
cd $simArgsLoc
@ -213,8 +243,8 @@
echo "Host who finished their work:" > $finishedFile
for host in ${hostList[@]}
do
#oarsh lguegan@$host bash g5k-worker.sh &
echo "$host"
echo "Start simulations on node $host"
oarsh lguegan@$host bash g5k-worker.sh &
done
exit 0
@ -243,13 +273,17 @@
argsId=0
argsFile="$simArgsLoc/${hostname}-args-${argsId}.sh" # Arguments generated by Root Node
curNProcesses=0 # Start with no processes
for argsFile in $(find $simArgsLoc -type f -name "$hostname*")
do
<<singleRun>>
logFolder=$g5kLogFolder # Don't forget override default g5kLogFolder
source $argsFile # Fetch argument
run
run & # Run async
((curNProcesses+=1)) # Increase by 2
[ $curNProcesses -ge $nProcesses ] && { curNProcesses=0; wait; }
done
wait # Wait until the end of all simulations
cp -r $g5kLogFolder/* "$logsFinalDst" # Fetch log from tmp into nfs
echo $(hostname) >> $finishedFile # Just say I finished
@ -284,10 +318,14 @@
#+NAME: genAllPlots
#+BEGIN_SRC R :noweb yes :results output
<<RUtils>>
easyPlotGroup("linksLatency","totalEnergy", "LATENCY","sensorsNumber")
easyPlotGroup("linksBandwidth","totalEnergy", "BW","sensorsNumber")
# easyPlotGroup("linksLatency","totalEnergy", "LATENCY","sensorsNumber")
# easyPlotGroup("linksBandwidth","totalEnergy", "BW","sensorsNumber")
easyPlot("sensorsNumber","totalEnergy", "NBSENSORS")
easyPlotGroup("nbHop","totalEnergy", "NBHOP","sensorsNumber")
easyPlotGroup("positionSeed", "totalEnergy","SENSORSPOS","sensorsNumber")
easyPlotGroup("positionSeed", "avgDelay","SENSORSPOS","sensorsNumber")
easyPlotGroup("sensorsSendInterval","sensorsEnergy","SENDINTERVAL","sensorsNumber")
easyPlotGroup("sensorsSendInterval","networkEnergy","SENDINTERVAL","sensorsNumber")
#+END_SRC
#+RESULTS: genAllPlots
@ -302,8 +340,9 @@
# 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)",
linksLatency="Links Latency (ms)")
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)")
# Load Data
data=read_csv("logs/data.csv")
@ -395,3 +434,33 @@
** 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]]