Skip to content

ethpandaops/benchmarkoor

Repository files navigation

Benchmarkoor

Dispatchoor Logo

Overview

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.

Documentation

Docker Quickstart

The easiest way to get started is using Docker Compose:

Start the UI and API. By default the UI will be listening on http://localhost:8080 and the API on http://localhost:9090.

# Starts the UI (port 8080) and API (port 9090)
make docker-run

# Alternatively, you can also choose your own ports like
make docker-run UI_PORT=3000 API_PORT=9091

Next 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.yaml

After each run, if you refresh the UI, you should see new results there.

To stop the services:

make docker-down

Development Quickstart

Build the binary

make build-core

Run the UI (On a different tab):

make run-ui

It 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.yaml

If 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.yaml

After 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

License

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

About

Ethereum execution clients benchmarking tool

Resources

License

Stars

Watchers

Forks

Packages