diff options
Diffstat (limited to 'ns3-simulations/g5k-root.sh')
| -rwxr-xr-x | ns3-simulations/g5k-root.sh | 309 |
1 files changed, 309 insertions, 0 deletions
diff --git a/ns3-simulations/g5k-root.sh b/ns3-simulations/g5k-root.sh new file mode 100755 index 0000000..0ec56b2 --- /dev/null +++ b/ns3-simulations/g5k-root.sh @@ -0,0 +1,309 @@ +#!/bin/bash +##### Arguments ##### +nHost=15 +nProcesses=8 # Max number of parrallel simulations +nHours=3 # Reservation duration +simArgsLoc=~/args/ # Don't change this path witouth changing it in workder scripts +finishedFile="$simArgsLoc/finished-microBenchmarks.txt" +logsFinalDst=~/logs/ +##################### + +# Check +[ "$1" == "subscribe" ] && subscribe=1 ||subscribe=0 +[ "$1" == "deploy" ] && deploy=1 || deploy=0 +[ "$1" == "-p" ] && progress=1 || progress=0 + + + +handleSim () { + outF="$simArgsLoc/$(uuidgen).sh" # Args file based on host name (avoid conflict) + + # Add Shebang + echo '#!/bin/bash' > $outF + echo "finishedFile=\"$finishedFile\"" >> $outF + echo "nProcesses=$nProcesses" >> $outF + echo "logsFinalDst=\"$logsFinalDst\"" >> $outF + # Save arguments + echo "sensorsSendInterval=${sensorsSendInterval}" >> $outF + echo "sensorsPktSize=${sensorsPktSize}" >> $outF + echo "nbHop=${nbHop}" >> $outF + echo "simKey=\"${simKey}\"" >> $outF + echo "sensorsNumber=${sensorsNumber}" >> $outF + echo "linksLatency=${linksLatency}" >> $outF + echo "sensorsNumber=${sensorsNumber}" >> $outF + echo "linksBandwidth=${linksBandwidth}" >> $outF +} + + +# Start subscribe/deploy +if [ $subscribe -eq 1 ] +then + echo "Starting oarsub..." + oarsub -l host=$nHost,walltime=$nHours 'sleep "10d"' # Start reservation + echo "Please join your node manually when your reservation is ready by using oarsub -C <job-id>" + exit 0 +elif [ $deploy -eq 1 ] +then + echo "Starting deployment..." + + ##### Usefull Variables ##### + wai=$(dirname "$(readlink -f $0)") # Where Am I ? + hostList=($(cat $OAR_NODE_FILE | uniq)) + ############################# + + # Initialize logsFinalDst + mkdir -p $logsFinalDst + rm -rf $logsFinalDst/* # Clean log dst just in case (it is dangerous but avoid conflict) + mkdir -p $simArgsLoc + rm -rf $simArgsLoc/* # Clean old args + + # Add your simulation code block here + 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 + + } + + simKey="NBHOP" + for sensorsNumber in $(seq 1 15) + do + for nbHop in $(seq 1 10) + do + run + done + done + 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 + + } + + simKey="BW" + for sensorsNumber in $(seq 1 15) + do + for linksBandwidth in $(seq 10 20 100) + do + run + done + done + 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 + + } + + simKey="LATENCY" + for sensorsNumber in $(seq 1 15) + do + for linksLatency in $(seq 1 1 10) + do + run + done + done + + 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 + + } + + simKey="NBSENSORS" + for sensorsNumber in $(seq 1 5) + do + run + done + + # Distribute argument according to subsribed nodes + cd $simArgsLoc + curHostId=0 + for file in $(find ./ -type f) + do + [ $curHostId -eq $nHost ] && curHostId=0 + mv -- ${file} ${hostList[$curHostId]}-$(basename ${file}) + curHostId=$(( curHostId + 1 )) + done + cd - + + + # Run simulations + echo "Host who finished their work:" > $finishedFile + for host in ${hostList[@]} + do + #oarsh lguegan@$host bash g5k-worker.sh & + echo "$host" + done + + exit 0 +elif [ $progress -eq 1 ] +then + alreadyFinished=$(cat $finishedFile| tail -n +2| wc -l) + percent=$(echo $alreadyFinished $nHost| awk '{print $1/$2*100}') + echo "Progression: " $alreadyFinished/$nHost "(${percent}%)" +else + echo "Invalid arguments, make sure you know what you are doing !" + exit 1 +fi |
