#!/bin/zsh F1="rand32mb" F2="$HOME/music/Inuyasha - Best of Inuyasha/Best of Inuyasha - 06 - Dearest.mp3" if [[ -z $STY ]]; then echo "Must be run in screen" exit fi server() { screen zsh -c \ "CWNDPREFIX=$CWNDPREFIX python manyservers.py $* & ; \ echo \$! >> pids ; \ wait" } client() { screen zsh -c \ "python client.py --port $1 --loss $3 \ --file ${(q)2} --output out$1 & ; \ echo \$! >> pids ; \ wait" } onego() { TYPE=$1 N=$2 RUN=$3 export CWNDPREFIX=results/$TYPE-run$RUN-n$N echo "Starting $TYPE experiment with n = $N, run = $RUN ($CWNDPREFIX)" echo > pids args=() for (( i = 0; i < $N; i++ )); do getparameters $i echo " $i: delay $DELAY loss $LOSS" args=($args --port $((6829 + i)) --delay $DELAY --loss $LOSS) done server $args --rate 20 --queue-size 10 for (( i = 0; i < $N; i++ )); do sleep 2 getparameters $i client $((6829 + i)) $F1 $LOSS done sleep 1 screen -X select 0 sleep 2 NPIDS=`wc -w < pids` if (( $NPIDS != $N + 1 )); then kill `cat pids` echo "Set up failed. Retrying" false else sleep 60 kill `cat pids` true fi } go() { sleep 3 while ! onego $*; do sleep 3; done } gortt() { getparameters() { DELAY=$(( .5 * ($1+1) )) LOSS=0 } for (( run = 0 ; run < 5 ; run++ )); do go rtt 2 $run go rtt 3 $run go rtt 4 $run done } goloss() { getparameters() { DELAY=0.1 LOSS=$(( .05 * ($1+1) )) } for (( run = 0 ; run < 5 ; run++ )); do go loss 2 $run go loss 3 $run go loss 4 $run done } mhserver() { screen zsh -c \ "CWNDPREFIX=$CWNDPREFIX CWNDSCREW=true \ python mhserver.py $* & ; \ echo \$! >> pids ; \ wait" } mhstart() { echo "Starting batch" echo > pids NPIDS=0 } mhwait() { if ((NPIDS == 0)); then return fi screen -X select 0 echo "Waiting for batch" sleep 2 PIDS=`wc -w < pids` if (( $PIDS != $NPIDS )); then kill `cat pids` echo "Set up failed." exit else sleep 45 kill `cat pids` sleep 2 true fi } mh() { echo "Starting $VTYPE $1 $2 $3 $4" mhserver --port $((6829 + NPIDS)) --vserver-type $VTYPE \ --network $1 --network $2 --network $3 --network $4 sleep 0.2 client $((6829 + NPIDS)) $F1 0 sleep 0.2 NPIDS=$((NPIDS + 2)) if ((NPIDS >= 12)); then mhwait mhstart fi } gop2() { mhstart for (( RUN = 0; RUN < 5; RUN++ )); do echo "Starting run $RUN" for VTYPE in aimd shared; do # a export CWNDPREFIX="results/p2-run$RUN-$VTYPE-a" for LOSS in 0 .05 .1 .15; do network=() for DELAY in .5 1 1.5 2; do network=($network $LOSS,20,10,$DELAY) done mh $network done # b export CWNDPREFIX="results/p2-run$RUN-$VTYPE-b" for DELAY in 0 .5 1 1.5; do network=() for LOSS in .05 .1 .15 .2; do network=($network $LOSS,20,10,$DELAY) done mh $network done # c export CWNDPREFIX="results/p2-run$RUN-$VTYPE-c" for LOSS in 0 .05 .1 .15; do network=() for I in 1 2 3 4; do network=($network $LOSS,$((10*I)),$((5*I)),.5) done mh $network done done done mhwait } if [[ ! -d results ]]; then mkdir results fi #gortt #goloss gop2