c1c48a8af5
* Begin benchmarks file for block processing * Complete block processing benchmarks * Begin epoch benchmarks * Write most of epoch benchmarks * Start config * Make cases for max conditions * Begin work on benchmarking doc * Update benchmark numbers * Complete epoch benchmarks * Minor changes * Make createFullBlock function * Clean up block benchmarks * Begin fixing merge issues * Start adding 4M benchmarks * Almost finish epoch benchmarks * Test blocks under real life conditions * More progress on benchmarks * Fixes * Fix benchmark errors * Begin fixing benchmarks * More progress on tests * Complete epoch benchmarks * More progress on block benches * Finish epoch benchmarks, get progress on block benchmarks * Undo unneeded changes * Fix * Fix block benchmarks * Complete block benchmarks * Finish block benchmarks * Complete benchmarks * Increase block benchmarks to 65536 * Fix everything * Reset configs after benchmarks * Fix logging and suggestions * Fix comments * Fix benchmarks after merge * Fix merge issues * Add sanity tests for benchmark * Make sanity check simpler * Begin fixing after merge * Add log * Remove extra line * Remove unneeded change * Finally get block benchmarks to pass * Begin fixing epoch test * Finetuning constants * Revert "Finetuning constants" This reverts commit a872790d675154e1ce213285e76fb6e08ef21d79. * Finetuning * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Add benches for helper functions * Abstract block generation to testutil * Create block generation util in testutil * Gazelle * Fix deps * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into block-util * Fix imports * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into block-util * Merge branch 'master' into block-util * Change tests to use config and fix integer division * Merge branch 'block-util' of https://github.com/0xKiwi/prysm into block-util * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into block-util * Remove logs * Fix build * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Merge branch 'master' into block-util * Add test to ensure finalization occurs * Add check for finalization * Merge branch 'block-util' of https://github.com/0xKiwi/prysm into block-util * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into block-util * Add comment for incrementing the state * Fix test * Fix test * Merge branch 'master' into block-util * Fix testutil use * Fix tests * Change var name * Merge branch 'master' into block-util * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Merge branch 'block-util' of https://github.com/0xKiwi/prysm into new-benchmarks * Begin cleaning benchmarks * Get some numbers going * Use state saved to disk * Remove cruft * Cleanup * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Fix merge arrows * Set up block util and benchmarks for 128 attestations * Use intended config for benchmark * Add more benchmark functions * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Add benchmark epoch and modify block gen config to exclude signing * Cleanup * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Begin unstaleling * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Update block gen util to v0.9 changes * Prepare benchmarks to use marshalled files * Cleanup block gen tool some more * split up into file generation and benchmarking * Remove logrus * Merge branch 'master' into new-benchmarks * Get benchmarks work, start work on process epoch benchmark * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Merge branch 'new-benchmarks' of https://github.com/0xKiwi/prysm into new-benchmarks * All benchmarks working * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Fix after merge * Cleanup * Add bazel target * Added TestBenchmarkExecuteStateTransition_WithCache * Change tests to use SSZ and begin making binary * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Merge branch 'new-benchmarks' of https://github.com/0xKiwi/prysm into new-benchmarks * bazel binary * Fully change to binary * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Create go_binary to handle benchmark files * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Gofmt * Remove genesis state from generated files * Fix tests * Gazelle * Fix tests * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Fix block util * Allow attestations to be in future for block util * Fix inclusion delay issue * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Finally fix test * Add README detailing usage and results * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Change test to run with bazel test * Fix imports * Merge branch 'master' into new-benchmarks * Accidentally removed config change * Merge branch 'new-benchmarks' of https://github.com/0xKiwi/prysm into new-benchmarks * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into new-benchmarks * Move to core/state/ * Update readme * Gazelle * Remove test for cached block |
||
---|---|---|
.. | ||
benchmark_files | ||
benchmarks_test.go | ||
BUILD.bazel | ||
config.go | ||
README.md |
Benchmarks for Prysm State Transition
This package contains the functionality needed for benchmarking Prysms state transitions, this includes its block processing (with and without caching) and epoch processing functions. There is also a benchmark for HashTreeRoot on a large beacon state.
Benchmark Configuration
The following configs are in config.go
:
ValidatorCount
: Sets the amount of active validators to perform the benchmarks with. Default is 65536.AttestationsPerEpoch
: Sets the amount of attestations per epoch for the benchmarks to perform with, this affects the amount of attestations in a full block and the amount of attestations per epoch in the state for theProcessEpoch
andHashTreeRoot
benchmark. Default is 128.
Generating new SSZ files
Due to the sheer size of the benchmarking configurations (65536 validators), the files used for benchmarking are pregenerated so there's no wasted computations on generating a genesis state with 65536 validators. This should only be needed if there is a breaking spec change and the tests fail from SSZ issues.
To generate new files to use for benchmarking, run the below command in the root of Prysm.
go run beacon-chain/core/state/benchmarks/benchmark_files/generate_bench_files.go
Bazel does not allow writing to the project directory, so running with go run
is needed.
Current Results as of November 2019
BenchmarkExecuteStateTransition-4 25 35901941409 ns/op 7465058127 B/op 111046635 allocs/op
BenchmarkExecuteStateTransition_WithCache-4 25 24352836461 ns/op 716078697 B/op 22348530 allocs/op
BenchmarkProcessEpoch_2FullEpochs-4 5 177559078808 ns/op 12754314974 B/op 176571470 allocs/op
BenchmarkHashTreeRoot_FullState-4 50 1321382095 ns/op 253959577 B/op 9645648 allocs/op