summaryrefslogtreecommitdiff
path: root/ns3-simulations/g5k-worker.sh
diff options
context:
space:
mode:
Diffstat (limited to 'ns3-simulations/g5k-worker.sh')
-rwxr-xr-xns3-simulations/g5k-worker.sh68
1 files changed, 68 insertions, 0 deletions
diff --git a/ns3-simulations/g5k-worker.sh b/ns3-simulations/g5k-worker.sh
new file mode 100755
index 0000000..00a1aff
--- /dev/null
+++ b/ns3-simulations/g5k-worker.sh
@@ -0,0 +1,68 @@
+#!/bin/bash
+g5kLogFolder="/tmp/logs/"
+mkdir -p $g5kLogFolder # Create log folder just in case
+rm -rf $g5kLogFolder/* # Clean previous logs just in case
+
+hostname=$(hostname)
+
+# Run simulations with sourced arguments :D
+simArgsLoc=~/args/ # Don't change this path without changing it in root scripts
+
+argsId=0
+argsFile="$simArgsLoc/${hostname}-args-${argsId}.sh" # Arguments generated by Root Node
+for argsFile in $(find $simArgsLoc -type f -name "$hostname*")
+do
+ simulator="simulator/simulator"
+ parseEnergyScript="./parseEnergy.awk"
+ parseDelayScript="./parseDelay.awk"
+ logFolder="logs/"
+ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${NS3_PATH}/build/lib
+
+ # Default Parameters
+ sensorsSendInterval=10
+ sensorsPktSize=5 # 1 byte temperature (-128 à +128 °C) and 4Byte sensorsId
+ sensorsNumber=10
+ nbHop=10 # Cf paper AC/Yunbo
+ linksBandwidth=10
+ linksLatency=2
+ 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"
+ [ -f "$logFile" ] && return
+ 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} simKey:${simKey}" >> $logFile
+
+ }
+
+ logFolder=$g5kLogFolder # Don't forget override default g5kLogFolder
+ source $argsFile # Fetch argument
+ run
+done
+
+cp -r $g5kLogFolder/* "$logsFinalDst" # Fetch log from tmp into nfs
+echo $(hostname) >> $finishedFile # Just say I finished