diff --git a/configs/mutilate.sh b/configs/mutilate.sh index b363770563e6c8c02f4616e3d259fabcfb107c68..c43ed77237a05ff3d84569571c46ec6b3941632c 100644 --- a/configs/mutilate.sh +++ b/configs/mutilate.sh @@ -2,7 +2,8 @@ MEMSERVER_IP=192.168.199.1 # List of Mutilate clients MEMCLIENTS=tilly03,tilly04,tilly05,tilly06,tilly07,tilly08 +MEMCTRL=tilly02 # Command shorthands -MUTILATE="ssh tilly02 taskset -c 0-7 mutilate -T8" +MUTILATE="ssh $MEMCTRL taskset -c 0-7 mutilate -T8" MUTILATE+=" -s $MEMSERVER_IP -d1 -K fb_key -V fb_value -i fb_ia -r1000000" MUTCLIENTS=$(for m in $(echo $MEMCLIENTS|tr , ' '); do echo " -a $m";done) diff --git a/experiments/extra.shared.sh b/experiments/extra.shared.sh index 6907853f25abe9e95600d5978984bc8eabe8b690..d3987d92edc56676048a9e237120b47aa507241d 100644 --- a/experiments/extra.shared.sh +++ b/experiments/extra.shared.sh @@ -12,9 +12,15 @@ perf_stat_stop() { } extra_data_start() { + for m in $(echo "$1" | tr , ' '); do + sudo -u $SSH_USER ssh $m "bash -s $NET_IF" < "$EXP_ROOT/tcp.sh" > /dev/null + done "$EXP_ROOT/irq.sh" > /dev/null } extra_data_stop() { - "$EXP_ROOT/irq.sh" > "$DATA_OUT/irq_$1$EXP_AUX_SUFFIX.txt" + "$EXP_ROOT/irq.sh" > "$DATA_OUT/irq_$2$EXP_AUX_SUFFIX.txt" + for m in $(echo "$1" | tr , ' '); do + sudo -u $SSH_USER ssh $m "bash -s $NET_IF" < "$EXP_ROOT/tcp.sh" >> "$DATA_OUT/tcp_$2$EXP_AUX_SUFFIX.txt" + done } diff --git a/experiments/memcached.shared.sh b/experiments/memcached.shared.sh index 49ad70c819d69aacd476e308fccfac9fe3bd2001..d6423f1677a21d2555c1a8eb31ab94141de5b97b 100644 --- a/experiments/memcached.shared.sh +++ b/experiments/memcached.shared.sh @@ -59,9 +59,9 @@ run_mutilate() { fi echo "Running mutilate with $CONNS connections per agent (core) and QPS = $QPS" perf_stat_start "$1" - extra_data_start + extra_data_start $MEMCTRL,$MEMCLIENTS sudo -u $SSH_USER $MUTILATE --noload -c$CONNS $MUTCLIENTS -t30 -u 0 -q $QPS | tee $DATA_OUT/$1$EXP_AUX_SUFFIX.txt - extra_data_stop "$1" + extra_data_stop $MEMCTRL,$MEMCLIENTS "$1" perf_stat_stop NO_RUNS=$((NO_RUNS + 1)) } diff --git a/tcp.sh b/tcp.sh new file mode 100644 index 0000000000000000000000000000000000000000..241b693a5de629e5b901e3ff1cea6be94803b8a4 --- /dev/null +++ b/tcp.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +function error() { + echo $* + echo "usage $9 <device> [clear]" + exit 1 +} + +if [ $# -lt 1 ] || [ ! ip link show dev $1 >/dev/null 2>&1 ]; then + error "device $1 not found" +fi + +cntfile=$HOME/.tcp.sh.count +[ -f $cntfile ] || touch $cntfile + +[ "$2" = "clear" ] && { + sentprev=0 + retransprev=0 + timeoutprev=0 +} || { + sentprev=$((grep -F sent: $cntfile || echo ":0")|cut -f2 -d:) + retransprev=$((grep -F retrans: $cntfile || echo ":0")|cut -f2 -d:) + timeoutprev=$((grep -F timeout: $cntfile || echo ":0")|cut -f2 -d:) +} + +sentnow=$((netstat -s|grep -F "segments sent out" || echo 0)|awk '{print $1}') +retransnow=$((netstat -s|grep -F "segments retransmitted" || echo 0)|awk '{print $1}') +timeoutnow=$((netstat -s|grep -F "TCPTimeout" || echo 0 0 0)|awk '{print $2}') + +echo "sent:$sentnow" > $cntfile +echo "retrans:$retransnow" >> $cntfile +echo "timeout:$timeoutnow" >> $cntfile + +sent=$(expr $sentnow - $sentprev) +retrans=$(expr $retransnow - $retransprev) +timeout=$(expr $timeoutnow - $timeoutprev) + +[ $sent -gt 0 ] && loss=$(printf "scale=6\n$timeout / $sent\n"|bc) || loss=0 + +[ $(expr $sent + $retrans + $timeout) -gt 0 ] && printf "sent %10d | retrans %10d | timeout %10d | loss rate %3.4f%%\n" $sent $retrans $timeout $loss + +exit 0 +