-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbenchmark_node.sh
executable file
·146 lines (116 loc) · 4.04 KB
/
benchmark_node.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
#!/bin/bash
# Constants used along the program
readonly PROGNAME=$(basename $0)
readonly PROGDIR=$(readlink -m $(dirname $0))
readonly ARGS="$@"
start_benchmark() {
local readonly NODE_ID=$1
local readonly DATADIR=$2
local readonly NETWORKID=$3
local readonly PORT=$4
local readonly IPC_PATH=$5
local readonly BOOTNODES=$6
local readonly KEYSTORE="keystore"
local readonly JS_SCRIPT_PATH=$7
local readonly OUTPUT_FILE=$8
local readonly ROLE=$9
local readonly TEST_TIMEOUT=${10}
local readonly ETHASH_DIR=${11}
local readonly ETHASH_CACHE_DIR="$ETHASH_DIR/cache"
local readonly ETHASH_DAG_DIR="$ETHASH_DIR/dag"
# if [[ "$ROLE" = "miner" ]]; then
# printf "Node is miner...\n"
# extra_option=" --mine --minerthreads 1 "
# fi
# js_cmd="js $JS_SCRIPT_PATH"
# extra_option=$(eval echo $extra_option)
# js_cmd=$(eval echo $js_option)
local extra_option=""
local js_cmd=""
if [[ "$ROLE" = "miner" ]]; then
printf "$ROLE is miner...\n"
extra_option="--mine --minerthreads 1"
fi
if [[ "$ROLE" = "client" ]]; then
printf "$ROLE is client...\n"
js_cmd="js $JS_SCRIPT_PATH"
fi
js_cmd=$(eval echo $js_cmd)
extra_option=$(eval echo $extra_option)
printf "Node $NODE_ID"
echo "$OUTPUT_FILE"
nohup timeout -s SIGUSR1 "$TEST_TIMEOUT" ./geth_with_catch.sh \
"$NODE_ID" \
"--datadir" "$DATADIR" \
"--keystore" "$KEYSTORE" \
"--ipcpath" "$IPC_PATH" \
"--port" "$PORT" \
"--networkid" "$NETWORKID" \
"--bootnodes" "$BOOTNODES" \
"--metrics" \
"--ethash.cachedir" "$ETHASH_CACHE_DIR" \
"--ethash.dagdir" "$ETHASH_DAG_DIR" \
"--ethash.dagsondisk" "1" \
"$extra_option" \
"$js_cmd" \
>> $OUTPUT_FILE 2>&1 &
}
read_chainid() {
grep -E -o '"chainId"\s*:\s*[0-9]+' conf/genesis_block.json | grep -E -o '[0-9]+'
}
main() {
# check arguments
if [ $# -lt 5 ]; then
printf "Usage: `basename "$0"` <role_list> <first-node-index> <bootnodes> <timeout-interval> <tx-interval>\n"
exit 1
fi
local readonly FIRST_NODE_INDEX=$2
local readonly ROLE_LIST="$1"
local readonly NODES_AMOUNT=$(echo $ROLE_LIST | jq "length")
local readonly BASE_ETHASH_DIR="$HOME/ethash"
local readonly BASE_DATADIR="ethtest-datadir-"
local readonly OUTPUT_DIR="logs"
local readonly JS_SCRIPTS_DIR="js-scripts"
local readonly BOOTNODES=$3
local readonly TIMEOUT_INTERVAL=$4
local readonly TX_INTERVAL=$5
# start geth node in background
NETWORKID=$(read_chainid)
printf "Let's start $ROLE_LIST $NODES_AMOUNT nodes\n"
# Get the run number to create different logs
RUN=0
while [[ -a "$OUTPUT_DIR/node-0-$RUN.out" ]];
do
RUN=$((RUN+1))
done
for node in $(seq 0 $(($NODES_AMOUNT - 1))); do
# build datadir and output file string
local readonly DATADIR=$BASE_DATADIR$node
local readonly ETHASH_DIR=$BASE_ETHASH_DIR$node
local readonly OUTPUT_FILE="$OUTPUT_DIR/node-$node-$RUN.out"
local readonly ROLE=$(echo $ROLE_LIST | jq -r ".[$node]")
local readonly JS_SCRIPT_PATH="$JS_SCRIPTS_DIR/node-$node.js"
local readonly IPC_PATH="$HOME/geth-$node.ipc"
echo $ROLE > $OUTPUT_DIR/role-$node.out
printf "Starting node $node with role $ROLE...\n"
PORT=$((30300 + $node))
printf "conf = {};
conf.accountIndex = $(($FIRST_NODE_INDEX + $node));
conf.txDelay = $TX_INTERVAL;
" | cat - sendTransactions.js > "$JS_SCRIPT_PATH"
start_benchmark \
"$node" \
"$DATADIR" \
"$NETWORKID" \
"$PORT" \
"$IPC_PATH" \
"$BOOTNODES" \
"$JS_SCRIPT_PATH" \
"$OUTPUT_FILE" \
"$ROLE" \
"$TIMEOUT_INTERVAL" \
"$ETHASH_DIR" &
# printf "Node started. Output in $OUTPUT_FILE\n"
done
}
main $ARGS