Prechádzať zdrojové kódy

Enable multiple versions of the PRAC docker on the same machine

Set $PRAC_DOCKER_PREFIX to some unique string to build and use
a separate set of dockers.
Ian Goldberg 5 mesiacov pred
rodič
commit
6798d99243

+ 1 - 1
docker/build-docker

@@ -6,4 +6,4 @@ if [[ $BASH_SOURCE = */* ]]; then
 fi
 
 cd ..
-docker build $* -t prac -f docker/Dockerfile .
+docker build $* -t ${PRAC_DOCKER_PREFIX}prac -f docker/Dockerfile .

+ 18 - 31
docker/run-experiment

@@ -1,13 +1,13 @@
 #!/bin/bash
 
 # Get the IP addresses
-p0addr=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' prac_p0)
-p1addr=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' prac_p1)
+p0addr=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' ${PRAC_DOCKER_PREFIX}prac_p0)
+p1addr=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' ${PRAC_DOCKER_PREFIX}prac_p1)
 
 # Gather options and arguments
 preproc=0
 opts=""
-while getopts paot:ex arg; do
+while getopts paoC:t:ex arg; do
     opts+=" -${arg} ${OPTARG}"
     if [ "$arg" = "p" -o "$arg" = "a" ]; then
         preproc=1
@@ -20,27 +20,14 @@ ncores_p0=1
 ncores_p1=1
 ncores_p2=1
 if [ "$whichexps" != "none" ]; then
-    ncores_p0=`docker exec -i prac_p0 $PRAC_NUMA_P0 nproc 2>/dev/null`
-    ncores_p1=`docker exec -i prac_p1 $PRAC_NUMA_P1 nproc 2>/dev/null`
-    ncores_p2=`docker exec -i prac_p2 $PRAC_NUMA_P2 nproc 2>/dev/null`
+    ncores_p0=`docker exec -i ${PRAC_DOCKER_PREFIX}prac_p0 $PRAC_NUMA_P0 nproc 2>/dev/null`
+    ncores_p1=`docker exec -i ${PRAC_DOCKER_PREFIX}prac_p1 $PRAC_NUMA_P1 nproc 2>/dev/null`
+    ncores_p2=`docker exec -i ${PRAC_DOCKER_PREFIX}prac_p2 $PRAC_NUMA_P2 nproc 2>/dev/null`
 fi
 
-ptarg_p0=""
-ptarg_p1=""
-ptarg_p2=""
-targ_p0=""
-targ_p1=""
-targ_p2=""
-
-if [ "$preproc" = 1 ]; then
-    ptarg_p0="p:${ncores_p0}"
-    ptarg_p1="p:${ncores_p1}"
-    ptarg_p2="p:${ncores_p2}"
-else
-    targ_p0="-t ${ncores_p0}"
-    targ_p1="-t ${ncores_p1}"
-    targ_p2="-t ${ncores_p2}"
-fi
+targ_p0="-t ${ncores_p0}"
+targ_p1="-t ${ncores_p1}"
+targ_p2="-t ${ncores_p2}"
 
 echo ===== Running prac $opts -- $*
 date "+===== Start %s %F %T"
@@ -49,17 +36,17 @@ date "+===== Start %s %F %T"
 savefile0=$$.p0.out
 savefile1=$$.p1.out
 savefile2=$$.p2.out
-docker exec -w /root/prac prac_p0 bash -c "$PRAC_NUMA_P0 stdbuf -o 0 ./prac $opts $targ_p0 0 $* $ptarg_p0 > $savefile0 2>&1" &
-docker exec -w /root/prac prac_p1 bash -c "$PRAC_NUMA_P1 stdbuf -o 0 ./prac $opts $targ_p1 1 $p0addr $* $ptarg_p1 > $savefile1 2>&1" &
-docker exec -w /root/prac prac_p2 bash -c "$PRAC_NUMA_P2 stdbuf -o 0 ./prac $opts $targ_p2 2 $p0addr $p1addr $* $ptarg_p2 > $savefile2 2>&1" &
+docker exec -w /root/prac ${PRAC_DOCKER_PREFIX}prac_p0 bash -c "$PRAC_NUMA_P0 stdbuf -o 0 ./prac $opts $targ_p0 0 $* > $savefile0 2>&1" &
+docker exec -w /root/prac ${PRAC_DOCKER_PREFIX}prac_p1 bash -c "$PRAC_NUMA_P1 stdbuf -o 0 ./prac $opts $targ_p1 1 $p0addr $* > $savefile1 2>&1" &
+docker exec -w /root/prac ${PRAC_DOCKER_PREFIX}prac_p2 bash -c "$PRAC_NUMA_P2 stdbuf -o 0 ./prac $opts $targ_p2 2 $p0addr $p1addr $* > $savefile2 2>&1" &
 wait
 echo ===== P0 output
-docker exec -w /root/prac prac_p0 cat $savefile0
-docker exec -w /root/prac prac_p0 rm -f $savefile0
+docker exec -w /root/prac ${PRAC_DOCKER_PREFIX}prac_p0 cat $savefile0
+docker exec -w /root/prac ${PRAC_DOCKER_PREFIX}prac_p0 rm -f $savefile0
 echo ===== P1 output
-docker exec -w /root/prac prac_p1 cat $savefile1
-docker exec -w /root/prac prac_p1 rm -f $savefile1
+docker exec -w /root/prac ${PRAC_DOCKER_PREFIX}prac_p1 cat $savefile1
+docker exec -w /root/prac ${PRAC_DOCKER_PREFIX}prac_p1 rm -f $savefile1
 echo ===== P2 output
-docker exec -w /root/prac prac_p2 cat $savefile2
-docker exec -w /root/prac prac_p2 rm -f $savefile2
+docker exec -w /root/prac ${PRAC_DOCKER_PREFIX}prac_p2 cat $savefile2
+docker exec -w /root/prac ${PRAC_DOCKER_PREFIX}prac_p2 rm -f $savefile2
 date "+===== End %s %F %T"

+ 6 - 25
docker/run-experiment-ssh

@@ -52,28 +52,9 @@ if [ "$whichexps" != "none" ]; then
     ncores_p2=`ssh -n $PRAC_SSH_P2_SSHOPTS $PRAC_SSH_P2_USERHOST $PRAC_NUMA_P2 nproc 2>/dev/null`
 fi
 
-if [ $ncores_p0 != $ncores_p1 -o $ncores_p1 != $ncores_p2 ]; then
-    echo "Error: all players must have the same number of cores available to use." >&2
-    echo "Use PRAC_NUMA_P[012] to set that if needed." >&2
-    exit 1
-fi
-
-ptarg_p0=""
-ptarg_p1=""
-ptarg_p2=""
-targ_p0=""
-targ_p1=""
-targ_p2=""
-
-if [ "$preproc" = 1 ]; then
-    ptarg_p0="p:${ncores_p0}"
-    ptarg_p1="p:${ncores_p1}"
-    ptarg_p2="p:${ncores_p2}"
-else
-    targ_p0="-t ${ncores_p0}"
-    targ_p1="-t ${ncores_p1}"
-    targ_p2="-t ${ncores_p2}"
-fi
+targ_p0="-t ${ncores_p0}"
+targ_p1="-t ${ncores_p1}"
+targ_p2="-t ${ncores_p2}"
 
 echo ===== Running prac $opts -- $*
 date "+===== Start %s %F %T"
@@ -82,9 +63,9 @@ date "+===== Start %s %F %T"
 savefile0=$$.p0.out
 savefile1=$$.p1.out
 savefile2=$$.p2.out
-ssh -n $PRAC_SSH_P0_SSHOPTS $PRAC_SSH_P0_USERHOST "cd $PRAC_SSH_P0_DIR && $PRAC_NUMA_P0 stdbuf -o 0 ./prac $opts $targ_p0 0 $* $ptarg_p0 > $savefile0 2>&1" &
-ssh -n $PRAC_SSH_P1_SSHOPTS $PRAC_SSH_P1_USERHOST "cd $PRAC_SSH_P1_DIR && $PRAC_NUMA_P1 stdbuf -o 0 ./prac $opts $targ_p1 1 $p0addr $* $ptarg_p1 > $savefile1 2>&1" &
-ssh -n $PRAC_SSH_P2_SSHOPTS $PRAC_SSH_P2_USERHOST "cd $PRAC_SSH_P2_DIR && $PRAC_NUMA_P2 stdbuf -o 0 ./prac $opts $targ_p2 2 $p0addr $p1addr $* $ptarg_p2 > $savefile2 2>&1" &
+ssh -n $PRAC_SSH_P0_SSHOPTS $PRAC_SSH_P0_USERHOST "cd $PRAC_SSH_P0_DIR && $PRAC_NUMA_P0 stdbuf -o 0 ./prac $opts $targ_p0 0 $* > $savefile0 2>&1" &
+ssh -n $PRAC_SSH_P1_SSHOPTS $PRAC_SSH_P1_USERHOST "cd $PRAC_SSH_P1_DIR && $PRAC_NUMA_P1 stdbuf -o 0 ./prac $opts $targ_p1 1 $p0addr $* > $savefile1 2>&1" &
+ssh -n $PRAC_SSH_P2_SSHOPTS $PRAC_SSH_P2_USERHOST "cd $PRAC_SSH_P2_DIR && $PRAC_NUMA_P2 stdbuf -o 0 ./prac $opts $targ_p2 2 $p0addr $p1addr $* > $savefile2 2>&1" &
 wait
 echo ===== P0 output
 ssh -n $PRAC_SSH_P0_SSHOPTS $PRAC_SSH_P0_USERHOST "cd $PRAC_SSH_P0_DIR && cat $savefile0 && rm -f $savefile0"

+ 3 - 3
docker/set-networking

@@ -15,6 +15,6 @@ if [ "$2" != "" ]; then
     bw="$2"
 fi
 ./unset-networking
-docker exec --privileged prac_p0 tc qdisc add dev eth0 root netem delay $latency rate $bw
-docker exec --privileged prac_p1 tc qdisc add dev eth0 root netem delay $latency rate $bw
-docker exec --privileged prac_p2 tc qdisc add dev eth0 root netem delay $latency rate $bw
+docker exec --privileged ${PRAC_DOCKER_PREFIX}prac_p0 tc qdisc add dev eth0 root netem delay $latency rate $bw
+docker exec --privileged ${PRAC_DOCKER_PREFIX}prac_p1 tc qdisc add dev eth0 root netem delay $latency rate $bw
+docker exec --privileged ${PRAC_DOCKER_PREFIX}prac_p2 tc qdisc add dev eth0 root netem delay $latency rate $bw

+ 3 - 3
docker/start-docker

@@ -3,7 +3,7 @@
 # The SYS_NICE capability allows you to use numactl to pin processes to
 # NUMA nodes and/or individual cores
 
-docker run -d --cap-add SYS_NICE --rm --name prac_p0 -h prac_p0 -t prac
-docker run -d --cap-add SYS_NICE --rm --name prac_p1 -h prac_p1 -t prac
-docker run -d --cap-add SYS_NICE --rm --name prac_p2 -h prac_p2 -t prac
+docker run -d --cap-add SYS_NICE --rm --name ${PRAC_DOCKER_PREFIX}prac_p0 -h ${PRAC_DOCKER_PREFIX}prac_p0 -t ${PRAC_DOCKER_PREFIX}prac
+docker run -d --cap-add SYS_NICE --rm --name ${PRAC_DOCKER_PREFIX}prac_p1 -h ${PRAC_DOCKER_PREFIX}prac_p1 -t ${PRAC_DOCKER_PREFIX}prac
+docker run -d --cap-add SYS_NICE --rm --name ${PRAC_DOCKER_PREFIX}prac_p2 -h ${PRAC_DOCKER_PREFIX}prac_p2 -t ${PRAC_DOCKER_PREFIX}prac
 echo "All dockers launched"

+ 3 - 3
docker/stop-docker

@@ -1,6 +1,6 @@
 #!/bin/bash
 
-docker stop -t 0 prac_p0 &
-docker stop -t 0 prac_p1 &
-docker stop -t 0 prac_p2 &
+docker stop -t 0 ${PRAC_DOCKER_PREFIX}prac_p0 &
+docker stop -t 0 ${PRAC_DOCKER_PREFIX}prac_p1 &
+docker stop -t 0 ${PRAC_DOCKER_PREFIX}prac_p2 &
 wait

+ 1 - 1
docker/unset-networking

@@ -1,5 +1,5 @@
 #!/bin/bash
 
-for ctnr in prac_p0 prac_p1 prac_p2; do
+for ctnr in ${PRAC_DOCKER_PREFIX}prac_p0 ${PRAC_DOCKER_PREFIX}prac_p1 ${PRAC_DOCKER_PREFIX}prac_p2; do
     docker exec --privileged $ctnr bash -c "if tc qdisc list dev eth0 | grep -q netem; then tc qdisc del dev eth0 root; fi"
 done

+ 1 - 1
repro/repro

@@ -149,7 +149,7 @@ parse() {
     if [ "$PRAC_PARSE_HOST" = "1" ]; then
         ./parse_logs $*
     else
-        cat $* | docker exec -w /root/prac/repro -i prac_p0 ./parse_logs
+        cat $* | docker exec -w /root/prac/repro -i ${PRAC_DOCKER_PREFIX}prac_p0 ./parse_logs
     fi
 }