diff options
Diffstat (limited to 'ns3-simulations/simulate.org')
| -rw-r--r-- | ns3-simulations/simulate.org | 123 |
1 files changed, 96 insertions, 27 deletions
diff --git a/ns3-simulations/simulate.org b/ns3-simulations/simulate.org index ca6c266..c110e5f 100644 --- a/ns3-simulations/simulate.org +++ b/ns3-simulations/simulate.org @@ -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]] |
