Benchmarkoor is a benchmarking tool for Ethereum execution clients. It runs standardized tests against multiple clients (Geth, Nethermind, Besu, Erigon, Reth, Nimbus) in isolated Docker containers and collects performance metrics.
- Configuration Reference - All configuration options explained
- Docker Guide - Docker setup, requirements, and troubleshooting
The easiest way to get started is using Docker Compose:
Start the UI. By default it will be listening on http://localhost:8080
# Starts the UI on default port 8080
make docker-run-ui
# Alternatively, you can also choose your own port like
make docker-run-ui UI_PORT=3000Next we'll run a benchmark. By default it will use the config.example.docker.yaml configuration file. By default, it just runs a subset of tests, via the filter: bn128. Have a look at the file and change it as you want. If you're just experimenting, you can leave it as it is.
To run the benchmark we can do the following:
# Run the default config.example.docker.yaml with all clients
make docker-run-benchmark
# Limit the client. In this case, just run geth
make docker-run-benchmark CLIENT=geth
# Run with your custom configuration
make docker-run-benchmark CONFIG=config.custom.yamlAfter each run, if you refresh the UI, you should see new results there.
To stop the services:
make docker-downBuild the binary
make build-coreRun the UI (On a different tab):
make run-uiIt should print the address where you can access it. By default it's http://localhost:5173/ .
Now we want to run benchmarkoor. We'll be using an example configuration file that contains some stateless tests. By default we'll be just running the bn128 subset of that suite. Have a look at the config file for more details:
./bin/benchmarkoor run --config examples/configuration/config.stateless.eest.yamlIf you don't always want to build and run, you can also use it like this:
go run cmd/benchmarkoor/*.go run --config examples/configuration/config.stateless.eest.yamlAfter the run, you should be able to see the results on the UI.
Note: If you want to limit your runs to a specific client that is on the config, you can either comment out those that you don't want, or use the --limit-instance-client flag. This allows you to limit the execution to certain clients. For example --limit-instance-client=nethermind would only run any instances that are of the nethermind client type.
Example:
./bin/benchmarkoor run \
--config examples/configuration/config.stateless.eest.yaml \
--limit-instance-client=nethermind
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
