diff --git a/tooling/import_benchmark/Makefile b/tooling/import_benchmark/Makefile index e0c8915ac6c..5f373fe3614 100644 --- a/tooling/import_benchmark/Makefile +++ b/tooling/import_benchmark/Makefile @@ -1,15 +1,20 @@ BENCH_ID ?= 1 NETWORK ?= hoodi +NUM_REPETITIONS ?= 3 help: @printf "run-bench: ## Runs a bench for the current pr. \nParameters:\n -BENCH_ID: number for the log file where it will\ - be saved with the format bench-BENCH_ID.log\n -NETWORK: which network to acesss (hoodi, mainnet)\nRequirements:\n This tool assumes we are running on Linux,\ + be saved with the format bench-BENCH_ID.log\n -NETWORK: which network to access (hoodi, mainnet)\nRequirements:\n This tool assumes we are running on Linux,\ + and that we have a valid db in ~/.local/share/ethrex_NETWORK_bench/ethrex\n with a valid state and a list of blocks for import\ + in ~/.local/share/ethrex_NETWORK_bench/chain.rlp\n\n" + @printf "run-benches: ## Runs multiple repetitions of the bench for the current pr. \nParameters:\n -NUM_REPETITIONS: number of runs\n -NETWORK: which network to access (hoodi, mainnet)\nRequirements:\n This tool assumes we are running on Linux,\ and that we have a valid db in ~/.local/share/ethrex_NETWORK_bench/ethrex\n with a valid state and a list of blocks for import\ in ~/.local/share/ethrex_NETWORK_bench/chain.rlp\n\n" @printf "python3 parse_bench.py bench_num_1 bench_num_2: ## Parses the bench log files from [bench_num_1 to bench_num_2) to find average ggas\nRequirements\n\ This script assumes we have the bench logs on the ethrex folder\n\n" -run-bench: ## Runs a bench for the current pr. parameters -BENCH_ID: number for the log file where it will be saved -NETWORK: which network to acesss - rm -rf ~/.local/share/temp - cp -r ~/.local/share/ethrex_$(NETWORK)_bench/ethrex ~/.local/share/temp - cd ../.. && cargo r --release -- --network $(NETWORK) --datadir ~/.local/share/temp import-bench ~/.local/share/ethrex_$(NETWORK)_bench/chain.rlp | tee bench-$(BENCH_ID).log +run-bench: ## Runs a bench for the current pr. parameters -BENCH_ID: number for the log file where it will be saved -NETWORK: which network to access + ./benchmark.sh $(NETWORK) 1 $(BENCH_ID) + +run-benches: ## Runs multiple repetitions of the bench for the current pr. parameters -NUM_REPETITIONS: number of runs -NETWORK: which network to access + ./benchmark.sh $(NETWORK) $(NUM_REPETITIONS) diff --git a/tooling/import_benchmark/benchmark.sh b/tooling/import_benchmark/benchmark.sh new file mode 100644 index 00000000000..be47d190f43 --- /dev/null +++ b/tooling/import_benchmark/benchmark.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# tooling/import_benchmark/benchmark.sh +# ---------------------------------- +# Usage: tooling/import_benchmark/benchmark.sh +# +# Arguments: +# Name of the network to use (e.g.: 'mainnet', 'hoodi', 'sepolia'). +# Number of times to run the benchmark (positive integer). +# +# Description: +# This script runs the import benchmark repeatedly and saves each run's output +# to an incrementally numbered log file named `bench-.log`. +# +# Example: +# ./tooling/import_benchmark/benchmark.sh mainnet 5 # run 5 repetitions with mainnet +# ./tooling/import_benchmark/benchmark.sh mainnet 5 10 # same, but start with bench_id 10 +# +set -euo pipefail + +NETWORK=$1 +NUM_REPETITIONS=$2 +# Optional third argument: starting bench id. If provided, this value is used +# as the current `bench_id` (the script will increment it before the first run). +START_BENCH_ID=${3:-} + +if [ -n "$START_BENCH_ID" ]; then + if ! [[ "$START_BENCH_ID" =~ ^[0-9]+$ ]]; then + echo "Error: START_BENCH_ID must be a non-negative integer" >&2 + exit 2 + fi + bench_id=$START_BENCH_ID +else + touch bench-0.log + bench_id=$(ls bench-*.log | cut -d '-' -f 2 | cut -d '.' -f 1 | sort -n | tail -1) + # When no START_BENCH_ID is supplied, start from the next available id + bench_id=$((bench_id + 1)) +fi + +cd ../.. + +for i in $(seq 1 $NUM_REPETITIONS); do + rm -rf ~/.local/share/temp + cp -r ~/.local/share/ethrex_${NETWORK}_bench/ethrex ~/.local/share/temp + cargo run --release -- --network $NETWORK --datadir ~/.local/share/temp import-bench ~/.local/share/ethrex_${NETWORK}_bench/chain.rlp | tee bench-${bench_id}.log + + bench_id=$((bench_id + 1)) +done