mirror of
https://gitlab.com/manzerbredes/paper-lowrate-iot.git
synced 2025-04-19 04:09:43 +00:00
Add new simulations
This commit is contained in:
parent
7c9410246f
commit
1875f45231
16 changed files with 248249 additions and 85375 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
|||
*.tex
|
||||
**/#*#
|
||||
|
|
136
g5k/init-nodes-opt.sh
Executable file
136
g5k/init-nodes-opt.sh
Executable file
|
@ -0,0 +1,136 @@
|
|||
#!/bin/bash
|
||||
|
||||
##### Parameters #####
|
||||
if [ -z ${nbSensors+x} ] # If nbSensors exists, so all parameters are already define
|
||||
then
|
||||
delay=60 # Delay before starting simulation (let CPU energy going down on the server)
|
||||
nbSensors=30 # Number of sensors that will send request to de server
|
||||
nbSensorsFactor=3 # nbSensors*nbSensorFactor
|
||||
simulationTime=300 # Approximative
|
||||
sensorsSendInterval=10 # Delay between sensors requests
|
||||
vmSize=2048 # Number of alocated ram
|
||||
simKey="NONE"
|
||||
fi
|
||||
nHours=3 # Reservation dutation
|
||||
requestPerSensor=$(( simulationTime / sensorsSendInterval )) # Theorical simulation time is $requestPerSensor*$sensorsSendInterval
|
||||
######################
|
||||
|
||||
|
||||
logFile="./simLogs.txt"
|
||||
log () {
|
||||
echo -e "\033[0;34m$@\033[0m"
|
||||
}
|
||||
|
||||
sshWait () {
|
||||
log "Waiting for for an ssh connection to a vm ($1)"
|
||||
error=255
|
||||
until [ $error -eq 0 ]
|
||||
do
|
||||
ssh -q root@$1 echo "Connected to $(hostname)"
|
||||
error=$?
|
||||
sleep 4
|
||||
done
|
||||
}
|
||||
|
||||
if [ "$1" = "subscribe" ] && [ $# -eq 1 ]
|
||||
then
|
||||
log "Subscribing..."
|
||||
oarsub -l slash_22=1+{"virtual!='NO' AND cluster='nova'"}/nodes=2,walltime=$nHours 'sleep "10d"' # On node send request to the other
|
||||
# oarsub -l slash_22=1+{"virtual!='NO'"}/nodes=2,walltime=$nHours 'sleep "10d"' # On node send request to the other
|
||||
|
||||
elif [ "$1" = "deploy" ] && [ $# -eq 1 ]
|
||||
then
|
||||
# Get machine mac address
|
||||
serverSubnet=$(g5k-subnets -im|sed "1q;d")
|
||||
serverMac=$(echo "$serverSubnet"|sed "s/^.*\t//g")
|
||||
serverIp=$(echo "$serverSubnet"|sed "s/\t.*$//g")
|
||||
clientIp=$(hostname) # Not really a IP but :P
|
||||
clientNode=$(hostname)
|
||||
serverNode=$(cat $OAR_NODE_FILE|uniq|sed "s/$clientNode//g"|sed "s/ //g")
|
||||
onS="oarsh $serverNode" # For convenience
|
||||
|
||||
|
||||
# Init vm images
|
||||
log "Create server vm image"
|
||||
$onS cp -n /grid5000/virt-images/debian9-x64-base.qcow2 /tmp/
|
||||
$onS qemu-img create -f qcow2 -o backing_file=/tmp/debian9-x64-base.qcow2 /tmp/img.qcow2
|
||||
sleep 1 # Wait for fun
|
||||
|
||||
# Build cloud init iso (to have ssh access witouth password
|
||||
log "Create server cloud-init image"
|
||||
$onS cp /grid5000/virt-images/cloud-init-example.sh /tmp/
|
||||
$onS "cd /tmp && export cloud_init_key=\$(cat ~/.ssh/id_rsa.pub) && ./cloud-init-example.sh"
|
||||
$onS "cd /tmp && genisoimage -output cloud-init-data.iso -volid cidata -joliet -rock cloud-init-data/user-data cloud-init-data/meta-data"
|
||||
|
||||
# Launch vm
|
||||
log "Launch server vm"
|
||||
$onS kvm -m ${vmSize}M -hda /tmp/img.qcow2 -netdev bridge,id=br0 -device virtio-net-pci,netdev=br0,id=nic1,mac=$serverMac -cdrom /tmp/cloud-init-data.iso -display none -daemonize &
|
||||
|
||||
|
||||
##### Server #####
|
||||
onS="ssh root@$serverIp" # Don't forget to use vm
|
||||
sshWait $serverIp
|
||||
# One apt-get update seems to be not enought to get mysql-server
|
||||
$onS "apt-get update && apt-get update"
|
||||
$onS apt-get -y install mysql-server
|
||||
# Enable mysql connection from outside
|
||||
$onS sed -i "s/bind-address/#bind-address/g" /etc/mysql/mariadb.conf.d/50-server.cnf
|
||||
$onS 'echo -e "[mysqld]\nmax_connections = 100000" >> /etc/mysql/my.cnf' # Otherwise you will have the error "TOO MANY CONNECTION"
|
||||
$onS systemctl restart mysql
|
||||
rsync -avh setup-mysql.sql root@$serverIp:/tmp/ # Send mysl setup script
|
||||
$onS "mysql < /tmp/setup-mysql.sql" # Then execute it
|
||||
|
||||
##### Start Simulation #####
|
||||
serverNodeName=$(echo $serverNode|grep -o ^.*[-][0-9]*|tr -d '\n') # For logging
|
||||
log "Simulation will start in ${delay}s"
|
||||
sleep $delay
|
||||
simStart=$(date "+%s")
|
||||
echo "---------- Simulation (key=${simKey}) start at $simStart ($(date -d @${simStart}))" >> $logFile
|
||||
python ./clients.py $serverIp $nbSensors $nbSensorsFactor $requestPerSensor $sensorsSendInterval
|
||||
simEnd=$(date "+%s")
|
||||
echo "Simulation parameters: serverNode:$serverNode serverIp:$serverIp serverMac:$serverMac clientNode:$clientNode clientNode:$clientNode clientMac:$clientMac delay:$delay nbSensors:$nbSensors nbSensorsFactor:$nbSensorsFactor requestPerSensors:$requestPerSensor sensorsRequestPerSec:$sensorsRequestPerSec simKey:${simKey} simStart:${simStart} simEnd:${simEnd} duration:$(( simEnd - simStart )) serverNodeName:${serverNodeName} vmSize:${vmSize}" >> $logFile
|
||||
echo "./recordEnergy.sh nova $serverNodeName $simStart $simEnd energy_${simKey}_${nbSensors}NS_${vmSize}vmSize_${simStart}_${simEnd}.csv" >> $logFile
|
||||
echo -e "---------- Simulation (key=${simKey}) end at ${simEnd} ($(date -d @${simEnd}))\n" >> $logFile
|
||||
log "Simulation end ! Please see $logFile for more infos"
|
||||
##### End Simulation #####
|
||||
|
||||
##### Print some infos #####
|
||||
log "Network Settings:"
|
||||
log " - Server $serverNode, $serverIp, $serverMac"
|
||||
log " - Client $clientNode, $clientIp, $clientMac"
|
||||
log "Simulation Settings:"
|
||||
log " - Simulation delay ${delay}s"
|
||||
log " - Number of sensors $(( nbSensors * nbSensorsFactor))"
|
||||
log " - Number of request per sensors $requestPerSensor"
|
||||
log " - Number of request per seconds on eachsensors $sensorsRequestPerSec"
|
||||
|
||||
elif [ "$1" = "kill" ] && [ $# -eq 1 ]
|
||||
then
|
||||
##### Kill all kvm on the subscribed nodes #####
|
||||
isServer=1
|
||||
finished=0
|
||||
for node in $(cat $OAR_NODE_FILE|uniq)
|
||||
do
|
||||
[ $isServer -eq 1 ] && { curMac=$serverMac; isServer=0; serverNode=$node; } || { curMac=$clientMac; finished=1; clientNode=$node; }
|
||||
log "Killing vm on node $node"
|
||||
oarsh $node pkill -9 qemu &
|
||||
[ $finished -eq 1 ] && break
|
||||
done
|
||||
elif [ "$1" = "inspect" ] && [ $# -eq 2 ]
|
||||
then
|
||||
##### Show content of the database #####
|
||||
mysql --host="$2" -u user --password="mysql" experiment -e "SELECT * FROM temperature;"
|
||||
elif [ "$1" = "flush" ] && [ $# -eq 2 ]
|
||||
then
|
||||
##### Flush content of the temperature table #####
|
||||
log "Cleaning database table..."
|
||||
mysql --host="$2" -u user --password="mysql" experiment -e "TRUNCATE TABLE temperature;"
|
||||
else
|
||||
echo "Usage:"
|
||||
echo " - $0 subscribe"
|
||||
echo " - $0 deploy"
|
||||
echo " - $0 kill"
|
||||
echo " - $0 inspect <serverIP>"
|
||||
echo " - $0 flush <serverIP>"
|
||||
fi
|
||||
|
|
@ -1 +0,0 @@
|
|||
loic@lguegan.5093:1558079377
|
|
@ -5,12 +5,17 @@
|
|||
* Logs Analysis
|
||||
** R Scripts
|
||||
*** Generate all plots script
|
||||
#+BEGIN_SRC R
|
||||
#<<RUtils>>
|
||||
#+BEGIN_SRC R :results graphics :file second-try/plot.png :noweb yes
|
||||
<<RUtils>>
|
||||
data=loadData("./second-try/data.csv")
|
||||
|
||||
|
||||
energy=loadEnergy
|
||||
data=data%>%filter(simKey=="nbSensors")%>%filter(nbSensors==20)
|
||||
ggplot(data,aes(x=time,y=energy))+geom_point(position="jitter")+xlab(getLabel("time"))+expand_limits(y=0)#+geom_hline(aes(group=nbSensors,color=nbSensors,yintercept=mean(energy)))
|
||||
ggsave("./second-try/plot.png",dpi=80)
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS:
|
||||
[[file:second-try/plot.png]]
|
||||
|
||||
|
||||
*** R Utils
|
||||
|
@ -22,17 +27,10 @@
|
|||
library("tidyverse")
|
||||
|
||||
# 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)", 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")
|
||||
|
||||
labels=c(time="Time (s)")
|
||||
|
||||
loadData=function(path){
|
||||
data=read_csv(path)
|
||||
data%>%mutate(time=ts-min(ts))
|
||||
}
|
||||
|
||||
# Get label according to varName
|
||||
|
@ -83,17 +81,15 @@
|
|||
emacs $orgFile --batch -f org-latex-export-to-pdf --kill
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS:
|
||||
|
||||
|
||||
|
||||
** CSVs -> CSV
|
||||
Merge all energy file into one (and add additional fields).
|
||||
|
||||
#+NAME: mergeCSV
|
||||
#+BEGIN_SRC sh :results output
|
||||
#+BEGIN_SRC sh
|
||||
#!/bin/bash
|
||||
|
||||
whichLog="first-try"
|
||||
whichLog="second-try"
|
||||
|
||||
|
||||
logFile="$(dirname $(readlink -f $0))"/$whichLog/simLogs.txt
|
||||
|
@ -118,13 +114,14 @@
|
|||
simKey=$(getValue $cmd simKey)
|
||||
csvFile="$whichLog/${simKey}_${vmSize}VMSIZE_${nbSensors}NBSENSORS_${from}${to}.csv"
|
||||
tmpFile=${csvFile}_tmp
|
||||
echo ts,energy,simKey,vmSize,nbSensors > $tmpFile
|
||||
tail -n+2 ${csvFile} | awk '{print $0",'$simKey','$vmSize','$nbSensors'"}' >> $tmpFile
|
||||
echo ts,energy,simKey,vmSize,nbSensors,time > $tmpFile
|
||||
minEnergy=$(tail -n+2 $csvFile|awk -F"," 'BEGIN{min=0}$1<min||min==0{min=$1}END{print(min)}') # To compute ts field
|
||||
tail -n+2 ${csvFile} | awk -F"," '{print $0",'$simKey','$vmSize','$nbSensors',"$1-'$minEnergy'}' >> $tmpFile
|
||||
done
|
||||
|
||||
|
||||
##### File dataFile #####
|
||||
echo ts,energy,simKey,vmSize,nbSensors > $dataFile
|
||||
echo ts,energy,simKey,vmSize,nbSensors,time > $dataFile
|
||||
for tmpFile in $(find ${whichLog}/*_tmp -type f)
|
||||
do
|
||||
tail -n+2 $tmpFile >> $dataFile
|
||||
|
@ -132,7 +129,9 @@
|
|||
done
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS:
|
||||
#+RESULTS: mergeCSV
|
||||
|
||||
|
||||
|
||||
** Custom Plots
|
||||
|
||||
|
|
170702
g5k/logs/first-try/data.csv
170702
g5k/logs/first-try/data.csv
File diff suppressed because it is too large
Load diff
4
g5k/logs/second-try/README.md
Normal file
4
g5k/logs/second-try/README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
Some energies values are missing for the file:
|
||||
nbSensors_2048VMSIZE_20NBSENSORS_15581087311558109034.csv
|
||||
|
||||
I don't know whether G5K add somes bugs or whatever.
|
81350
g5k/logs/second-try/data.csv
Normal file
81350
g5k/logs/second-try/data.csv
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
BIN
g5k/logs/second-try/plot.png
Normal file
BIN
g5k/logs/second-try/plot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
30
g5k/logs/second-try/simLogs.txt
Normal file
30
g5k/logs/second-try/simLogs.txt
Normal file
|
@ -0,0 +1,30 @@
|
|||
---------- Simulation (key=vmSize) start at 1558107414 (Fri May 17 17:36:54 CEST 2019)
|
||||
Simulation parameters: serverNode:nova-15.lyon.grid5000.fr serverIp:10.140.16.1 serverMac:00:16:3E:8C:10:01 clientNode:nova-10.lyon.grid5000.fr clientNode:nova-10.lyon.grid5000.fr clientMac: delay:60 nbSensors:20 nbSensorsFactor:3 requestPerSensors:30 sensorsRequestPerSec: simKey:vmSize simStart:1558107414 simEnd:1558107717 duration:303 serverNodeName:nova-15 vmSize:1024
|
||||
./recordEnergy.sh nova nova-15 1558107414 1558107717 energy_vmSize_20NS_1024vmSize_1558107414_1558107717.csv
|
||||
---------- Simulation (key=vmSize) end at 1558107717 (Fri May 17 17:41:57 CEST 2019)
|
||||
|
||||
---------- Simulation (key=vmSize) start at 1558107853 (Fri May 17 17:44:13 CEST 2019)
|
||||
Simulation parameters: serverNode:nova-15.lyon.grid5000.fr serverIp:10.140.16.1 serverMac:00:16:3E:8C:10:01 clientNode:nova-10.lyon.grid5000.fr clientNode:nova-10.lyon.grid5000.fr clientMac: delay:60 nbSensors:20 nbSensorsFactor:3 requestPerSensors:30 sensorsRequestPerSec: simKey:vmSize simStart:1558107853 simEnd:1558108156 duration:303 serverNodeName:nova-15 vmSize:2048
|
||||
./recordEnergy.sh nova nova-15 1558107853 1558108156 energy_vmSize_20NS_2048vmSize_1558107853_1558108156.csv
|
||||
---------- Simulation (key=vmSize) end at 1558108156 (Fri May 17 17:49:16 CEST 2019)
|
||||
|
||||
---------- Simulation (key=vmSize) start at 1558108293 (Fri May 17 17:51:33 CEST 2019)
|
||||
Simulation parameters: serverNode:nova-15.lyon.grid5000.fr serverIp:10.140.16.1 serverMac:00:16:3E:8C:10:01 clientNode:nova-10.lyon.grid5000.fr clientNode:nova-10.lyon.grid5000.fr clientMac: delay:60 nbSensors:20 nbSensorsFactor:3 requestPerSensors:30 sensorsRequestPerSec: simKey:vmSize simStart:1558108293 simEnd:1558108595 duration:302 serverNodeName:nova-15 vmSize:4096
|
||||
./recordEnergy.sh nova nova-15 1558108293 1558108595 energy_vmSize_20NS_4096vmSize_1558108293_1558108595.csv
|
||||
---------- Simulation (key=vmSize) end at 1558108595 (Fri May 17 17:56:35 CEST 2019)
|
||||
|
||||
---------- Simulation (key=nbSensors) start at 1558108731 (Fri May 17 17:58:51 CEST 2019)
|
||||
Simulation parameters: serverNode:nova-15.lyon.grid5000.fr serverIp:10.140.16.1 serverMac:00:16:3E:8C:10:01 clientNode:nova-10.lyon.grid5000.fr clientNode:nova-10.lyon.grid5000.fr clientMac: delay:60 nbSensors:20 nbSensorsFactor:3 requestPerSensors:30 sensorsRequestPerSec: simKey:nbSensors simStart:1558108731 simEnd:1558109034 duration:303 serverNodeName:nova-15 vmSize:2048
|
||||
./recordEnergy.sh nova nova-15 1558108731 1558109034 energy_nbSensors_20NS_2048vmSize_1558108731_1558109034.csv
|
||||
---------- Simulation (key=nbSensors) end at 1558109034 (Fri May 17 18:03:54 CEST 2019)
|
||||
|
||||
---------- Simulation (key=nbSensors) start at 1558109171 (Fri May 17 18:06:11 CEST 2019)
|
||||
Simulation parameters: serverNode:nova-15.lyon.grid5000.fr serverIp:10.140.16.1 serverMac:00:16:3E:8C:10:01 clientNode:nova-10.lyon.grid5000.fr clientNode:nova-10.lyon.grid5000.fr clientMac: delay:60 nbSensors:100 nbSensorsFactor:3 requestPerSensors:30 sensorsRequestPerSec: simKey:nbSensors simStart:1558109171 simEnd:1558109482 duration:311 serverNodeName:nova-15 vmSize:2048
|
||||
./recordEnergy.sh nova nova-15 1558109171 1558109482 energy_nbSensors_100NS_2048vmSize_1558109171_1558109482.csv
|
||||
---------- Simulation (key=nbSensors) end at 1558109482 (Fri May 17 18:11:22 CEST 2019)
|
||||
|
||||
---------- Simulation (key=nbSensors) start at 1558109621 (Fri May 17 18:13:41 CEST 2019)
|
||||
Simulation parameters: serverNode:nova-15.lyon.grid5000.fr serverIp:10.140.16.1 serverMac:00:16:3E:8C:10:01 clientNode:nova-10.lyon.grid5000.fr clientNode:nova-10.lyon.grid5000.fr clientMac: delay:60 nbSensors:300 nbSensorsFactor:3 requestPerSensors:30 sensorsRequestPerSec: simKey:nbSensors simStart:1558109621 simEnd:1558109955 duration:334 serverNodeName:nova-15 vmSize:2048
|
||||
./recordEnergy.sh nova nova-15 1558109621 1558109955 energy_nbSensors_300NS_2048vmSize_1558109621_1558109955.csv
|
||||
---------- Simulation (key=nbSensors) end at 1558109955 (Fri May 17 18:19:15 CEST 2019)
|
||||
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -11,7 +11,7 @@ vmSize=2048 # Number of alocated ram
|
|||
simKey="NONE"
|
||||
|
||||
# Where script is located
|
||||
simScript=$(dirname $(readlink -f "$0"))/init-nodes.sh
|
||||
simScript=$(dirname $(readlink -f "$0"))/init-nodes-opt.sh
|
||||
|
||||
# Build a function using the script
|
||||
initNodes () {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue