From fd6c6857955bc603c41017ae931110557bd6334d Mon Sep 17 00:00:00 2001 From: Peter Cai <peter.cai@uwaterloo.ca> Date: Thu, 16 Mar 2023 16:41:09 -0400 Subject: [PATCH] Add TCP script --- configs/mutilate.sh | 3 ++- experiments/extra.shared.sh | 8 +++++- experiments/memcached.shared.sh | 4 +-- tcp.sh | 43 +++++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 tcp.sh diff --git a/configs/mutilate.sh b/configs/mutilate.sh index b363770..c43ed77 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 6907853..d3987d9 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 49ad70c..d6423f1 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 0000000..241b693 --- /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 + -- GitLab