Add new simulations

This commit is contained in:
Loic Guegan 2019-05-20 09:13:04 +02:00
parent 7c9410246f
commit 1875f45231
16 changed files with 248249 additions and 85375 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
*.tex
**/#*#

136
g5k/init-nodes-opt.sh Executable file
View 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

View file

@ -1 +0,0 @@
loic@lguegan.5093:1558079377

View file

@ -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

File diff suppressed because it is too large Load diff

View 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

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View 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

View file

@ -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 () {