-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.sh
executable file
·161 lines (143 loc) · 4 KB
/
test.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
156
157
158
159
160
161
#!/bin/bash
# Test Runner
SHARE="/cs/scratch/${USER}"
#get the number of test times to capture
if [ -z $1 ]; then
echo "expected number"
exit 1
fi
N_TEST=$1
shift
#get the list of clients to connect to
if [ -z $1 ]; then
echo "expected list of clients to test with"
exit 1
fi
CLIENTS=()
while [ ! -z $1 ]; do
CLIENTS+=( $1 )
shift
done
mkdir -p results
mkdir -p logs
WORKING_DIR=$(pwd)
if [ ! -d measure/ ] || [ -z "$(ls -A ${WORKING_DIR}/measure/)" ]; then
echo "expected directory measure to contain test data"
exit 1
fi
TTY=$(tty)
average() {
ELEMENTS=("$@")
SUM="0"
for item in "${ELEMENTS[@]}"; do
SUM=$(echo "x=${SUM} + ${item}; if(x<1) print 0; x" | bc)
done
AVG=$(echo "scale=10; x=${SUM} / ${#ELEMENTS[@]}; if(x<1) print 0; x" | bc)
echo "${AVG}"
}
#attempt the test over all files in measure/
measureTime() {
CMD="$1"
shift
ARGS="$@"
T_START=$(date +"%s.%N")
bash -c "${CMD} ${ARGS}" > "${TTY}" 2> "${TTY}"
T_FINISH=$(date +"%s.%N")
T_TOTAL=$(echo "x=${T_FINISH} - ${T_START}; if(x<1) print 0; x" | bc)
echo "${T_TOTAL}"
}
declare -A FILETIMES
declare -A DSTTIMES
declare -A SCPTIMES
declare -A SFTPTIMES
#get a row of CSV output
measureAverageTimeDst() {
N=$1
shift
FILE=$1
shift
ROW=()
SHARED_FILE="${WORKING_DIR}/measure/${FILE}"
COPIED_FILE="${SHARE}/${FILE}"
#measure for dst
echo "=========================================================="
echo "getting average for dst"
DATA=()
for i in `seq "${N}"`; do
./cleanscratch.sh "${CLIENTS[@]}"
DATA+=( $(measureTime "./dst.sh ${SHARED_FILE} logs ${CLIENTS[@]}") )
./verify.sh "${SHARED_FILE}" "${COPIED_FILE}" "${CLIENTS[@]}"
done
echo "averaging data: ${DATA[@]}"
AVG=$(average "${DATA[@]}")
DSTTIMES["${FILE}"]="${AVG}"
}
measureAverageTimeScp() {
N=$1
shift
FILE=$1
shift
ROW=()
SHARED_FILE="${WORKING_DIR}/measure/${FILE}"
COPIED_FILE="${SHARE}/${FILE}"
#measure for scp
echo "=========================================================="
echo "getting average for scp"
DATA=()
for i in `seq "${N}"`; do
./cleanscratch.sh "${CLIENTS[@]}"
SUM_TIME="0"
for client in "${CLIENTS[@]}"; do
T=$(measureTime "scp ${SHARED_FILE} ${client}:${SHARE}/${FILE}")
SUM_TIME=$(echo "x=${SUM_TIME} + ${T}; if(x<1) print 0; x" | bc)
done
DATA+=( "${SUM_TIME}" )
done
#./verify.sh "${SHARED_FILE}" "${COPIED_FILE}" "${CLIENTS[@]}"
echo "averaging data: (${DATA[@]})"
AVG=$(average "${DATA[@]}")
SCPTIMES["${FILE}"]="${AVG}"
}
measureAverageTimeSftp() {
N=$1
shift
FILE=$1
shift
ROW=()
SHARED_FILE="${WORKING_DIR}/measure/${FILE}"
COPIED_FILE="${SHARE}/${FILE}"
#measure for sftp
echo "=========================================================="
echo "getting average for sftp"
DATA=()
for i in `seq "${N}"`; do
./cleanscratch.sh "${CLIENTS[@]}"
SUM_TIME="0"
for client in "${CLIENTS[@]}"; do
T=$(measureTime "sftp ${client}:${SHARE} <<< $'put ${SHARED_FILE}'")
SUM_TIME=$(echo "x=${SUM_TIME} + ${T}; if(x<1) print 0; x" | bc)
done
DATA+=( "${SUM_TIME}" )
done
#./verify.sh "${SHARED_FILE}" "${COPIED_FILE}" "${CLIENTS[@]}"
echo "averaging data: ${DATA[@]}"
AVG=$(average "${DATA[@]}")
SFTPTIMES["${FILE}"]="${AVG}"
}
for file in $(ls measure); do
measureAverageTimeDst "${N_TEST}" "${file}"
measureAverageTimeScp "${N_TEST}" "${file}"
measureAverageTimeSftp "${N_TEST}" "${file}"
done
echo "====================RESULTS======================="
echo "results in seconds, averaged over ${N_TEST} runs; for replication to ${#CLIENTS[@]} nodes"
for file in $(ls measure); do
DST="${DSTTIMES[${file}]}"
SCP="${SCPTIMES[${file}]}"
SFTP="${SFTPTIMES[${file}]}"
echo "${file}: "
echo "DST : ${DST}"
echo "SCP : ${SCP}"
echo "SFTP: ${SFTP}"
echo ""
done