Skip to content

Commit ec97521

Browse files
committed
Add a performance benchmark tool for aggregator
Runs a series of stress tests on a signers x clients range.
1 parent 23fcc40 commit ec97521

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# Debug mode
6+
if [ -v DEBUG ]; then
7+
set -x
8+
fi
9+
10+
# Check if all env vars are set
11+
if [ -z "${MIN_SIGNERS}" ]; then
12+
MIN_SIGNERS=1
13+
fi
14+
15+
if [ -z "${MAX_SIGNERS}" ]; then
16+
echo Missing environment variable: MAX_SIGNERS
17+
exit 1
18+
fi
19+
20+
if [ -z "${STEP_SIGNERS}" ]; then
21+
echo Missing environment variable: STEP_SIGNERS
22+
exit 1
23+
fi
24+
25+
if [ -z "${MIN_CLIENTS}" ]; then
26+
MIN_CLIENTS=0
27+
fi
28+
29+
if [ -z "${MAX_CLIENTS}" ]; then
30+
echo Missing environment variable: MAX_CLIENTS
31+
exit 1
32+
fi
33+
34+
if [ -z "${STEP_CLIENTS}" ]; then
35+
echo Missing environment variable: STEP_CLIENTS
36+
exit 1
37+
fi
38+
39+
if [ -z "${AGGREGATOR_DIR}" ]; then
40+
AGGREGATOR_DIR=../../target/release
41+
echo "Using the default AGGREGATOR_DIR: $AGGREGATOR_DIR"
42+
fi
43+
44+
if [ -z "${OUT_FILE}" ]; then
45+
OUT_FILE="benchmark/benchmark-data-[$MIN_SIGNERS,$MAX_SIGNERS;$STEP_SIGNERS]Sx[$MIN_CLIENTS,$MAX_CLIENTS;$STEP_CLIENTS]C-$(date +%Y-%m-%d-%H-%M-%S).tsv"
46+
echo "Using the default OUT_FILE: $OUT_FILE"
47+
fi
48+
mkdir -p $(dirname "$OUT_FILE")
49+
OUT_FILE_TMP=${OUT_FILE}.tmp
50+
51+
# Run stress test
52+
RUN_STRESS_TEST() {
53+
NUM_SIGNERS=$1
54+
NUM_SIGNERS=$(( NUM_SIGNERS > 0 ? NUM_SIGNERS : 1 ))
55+
NUM_CLIENTS=$2
56+
OUT_FILE=$3
57+
INDEX_RUN=$4
58+
TOTAL_RUN=$5
59+
echo ">> [#$INDEX_RUN/$TOTAL_RUN] Running stress test with $NUM_SIGNERS signers and $NUM_CLIENTS clients"
60+
COMMAND="./load-aggregator --cardano-cli-path ./script/mock-cardano-cli --aggregator-dir $AGGREGATOR_DIR --num-signers=$NUM_SIGNERS --num-clients=$NUM_CLIENTS"
61+
if $($COMMAND >> $OUT_FILE_TMP) ; then
62+
echo ">>>> Success"
63+
else
64+
echo "signers clients phase duration/ms" >> $OUT_FILE_TMP
65+
echo "$NUM_SIGNERS $NUM_CLIENTS failure 10" >> $OUT_FILE_TMP
66+
echo ">>>> Failure"
67+
fi
68+
if [[ $INDEX_RUN -gt 1 ]] ; then
69+
tail -n +2 $OUT_FILE_TMP >> $OUT_FILE
70+
else
71+
cat $OUT_FILE_TMP >> $OUT_FILE
72+
fi
73+
rm -f $OUT_FILE_TMP
74+
echo ""
75+
}
76+
77+
# Run aggregator benchmark over a range of signers and clients
78+
SIGNERS_RANGE=$(seq -s ' ' $MIN_SIGNERS $STEP_SIGNERS $MAX_SIGNERS)
79+
CLIENTS_RANGE=$(seq -s ' ' $MIN_CLIENTS $STEP_CLIENTS $MAX_CLIENTS)
80+
SIGNERS_RANGE_LENGTH=$(echo $SIGNERS_RANGE | grep -o " " | wc -l)
81+
CLIENTS_RANGE_LENGTH=$(echo $CLIENTS_RANGE | grep -o " " | wc -l)
82+
echo ""
83+
echo "Run aggregator benchmark over the range:"
84+
echo ">> Signers: [$SIGNERS_RANGE]"
85+
echo ">> Clients: [$CLIENTS_RANGE]"
86+
echo ""
87+
88+
INDEX_RUN=1
89+
TOTAL_RUN=$(( $SIGNERS_RANGE_LENGTH * CLIENTS_RANGE_LENGTH ))
90+
for NUM_SIGNERS in $SIGNERS_RANGE; do
91+
for NUM_CLIENTS in $CLIENTS_RANGE; do
92+
RUN_STRESS_TEST $NUM_SIGNERS $NUM_CLIENTS $OUT_FILE $INDEX_RUN $TOTAL_RUN
93+
INDEX_RUN=$(( ${INDEX_RUN} + 1))
94+
done
95+
done
96+
97+
# Clean directory
98+
rm -f $OUT_FILE_TMP
99+

0 commit comments

Comments
 (0)