-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrunSynthetic.sh
executable file
·155 lines (137 loc) · 4.69 KB
/
runSynthetic.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#!/bin/bash
# This script is used to run synthetic workload
cleanup_coretrace()
{
server=$1
echo "Cleanup corestats on the server"
cmd="kill -SIGUSR2 \$(pidof memcached)"
sshcmd="ssh -p 22 $server \"nohup $cmd > /dev/null 2>&1 < /dev/null &\""
echo $sshcmd
ssh -p 22 $server "nohup $cmd > /dev/null 2>&1 < /dev/null & "
}
scriptname=`basename "$0"`
if [[ "$#" -lt 8 ]]; then
echo "Usage: $scriptname <server> <key-min> <key-max> <data-size>" \
"<iterations> <synthetic_bench> <video[0/1]> <prefix: arachne/origin>" \
"[list of clients...]"
echo "Example: $scriptname n1 1000000 9000000 200 1 workloads/Synthetic16.bench 0 arachne_0vid n3"
exit
fi
# Go to the correct directory
dirPATH=$(dirname $(dirname $(readlink -f $0)))
scriptPATH=$(dirname $(readlink -f $0))
cd ${dirPATH}
videoPATH=${scriptPATH}/videoScripts
server=$1
keymin=$2
keymax=$3
datasize=$4
iters=$5
benchfile=$6
videos=$7
prefix=$8
clients=20
threads=16
ratio="0:1"
pipeline=10
irdist="POISSON"
keyprefix="memtierxxxxxxxxxxxxxxx-" # Pad key to achieve 30-byte
keypattern="G:G"
logdir=exp_logs/${prefix}_iters${iters}_synthetic_logs
qpsprefix="qps"
latencyprefix="latency"
runlog=exp_logs/${prefix}_iters${iters}_synthetic_runlog.log
echo "Saving logs to: $logdir"
mkdir -p $logdir
rm -rf $logdir/* # Clear previous logs
rm -f $runlog
# Load data into Memcached and warm up
cmd="bash $scriptPATH/loadonly.sh $server $keymin $keymax $datasize $keyprefix"
echo $cmd
$cmd >> $runlog 2>&1
# read -p "Press enter to continue. (may need to cleanup coretrace on server.)"
# Wait the memcached fully ramped down.
sleep 5
cleanup_coretrace $server
# Execute experiments multiple times
for iter in `seq 1 $iters`;
do
# $9... will be client addresses, start clients!
if [[ "$#" -gt 8 ]]; then
# shift previous ones
for argn in `seq 1 8`;
do
shift
done
clientlogdir=$dirPATH/$logdir
clientbench=$dirPATH/$benchfile
mkdir -p $clientlogdir
rm -rf $clientlogdir/*
for client in "$@";
do
echo "Starting client: $client ..."
clientqpsfile=${qpsprefix}_iter${iter}_${client}.csv
clientRunLog=$dirPATH/${runlog}_${client}
cmd="$dirPATH/memtier_benchmark -s $server \
-p 11211 -P memcache_binary --clients $clients --threads $threads \
--ratio $ratio --pipeline=$pipeline \
--key-prefix=$keyprefix \
--key-minimum=$keymin --key-maximum=$keymax \
--data-size=$datasize --random-data --hide-histogram \
--key-pattern=$keypattern --run-count=1 \
--distinct-client-seed --randomize \
--test-time=1 -b \
--config-file=$clientbench --ir-dist=$irdist \
--log-dir=${clientlogdir} \
--log-qpsfile=$clientqpsfile"
#echo $cmd
sshcmd="ssh -p 22 $client \"nohup $cmd > $clientRunLog 2>&1 < /dev/null &\""
echo $sshcmd
ssh -p 22 $client "nohup $cmd > $clientRunLog 2>&1 < /dev/null & "
done
# Change parameters for the master
clients=1
threads=8
pipeline=1
irdist="UNIFORM"
benchfile=workloads/Synthetic16-master.bench
fi
# Start the main master node
logqpsfile=${qpsprefix}_iter${iter}.csv
latencyfile=${latencyprefix}_iter${iter}.csv
cmd="./memtier_benchmark -s $server -p 11211 -P memcache_binary \
--clients $clients --threads $threads --ratio $ratio \
--pipeline=$pipeline \
--key-prefix=$keyprefix \
--key-minimum=$keymin --key-maximum=$keymax \
--data-size=$datasize --random-data --hide-histogram \
--key-pattern=$keypattern --run-count=1 \
--distinct-client-seed --randomize \
--test-time=1 -b \
--config-file=$benchfile --ir-dist=$irdist --log-dir=$logdir \
--log-qpsfile=$logqpsfile --log-latencyfile=$latencyfile \
--videos=$videos --video-path=${videoPATH}"
# execute the commnad
echo $cmd
$cmd 2>&1 | tee -a $runlog
done
cleanup_coretrace $server
# Move throughput logs and latency logs to different directory
cd ${dirPATH}
qpsdir=$logdir/throughput
latencydir=$logdir/latency
mkdir -p $qpsdir
mkdir -p $latencydir
# Clean those directories
rm -f $qpsdir/*
rm -f $latencydir/*
mv $logdir/${qpsprefix}_iter* $qpsdir > /dev/null 2>&1
mv $logdir/${latencyprefix}_iter* $latencydir > /dev/null 2>&1
# Merge the data
#cmd="scripts/mergeStats.py ${qpsdir} ${prefix}_iters${iters}_qps"
#echo $cmd
#$cmd >> $runlog 2>&1
#
#cmd="scripts/mergeStats.py ${latencydir} ${prefix}_iters${iters}_latency"
#echo $cmd
#$cmd >> $runlog 2>&1