core/vm: less allocations for various call variants (#21222)
* core/vm/runtime/tests: add more benchmarks
* core/vm: initial work on improving alloc count for calls to precompiles
name old time/op new time/op delta
SimpleLoop/identity-precompile-10M-6 117ms ±75% 43ms ± 1% -63.09% (p=0.008 n=5+5)
SimpleLoop/loop-10M-6 79.6ms ± 4% 70.5ms ± 1% -11.42% (p=0.008 n=5+5)
name old alloc/op new alloc/op delta
SimpleLoop/identity-precompile-10M-6 24.4MB ± 0% 4.9MB ± 0% -79.94% (p=0.008 n=5+5)
SimpleLoop/loop-10M-6 13.2kB ± 0% 13.2kB ± 0% ~ (p=0.357 n=5+5)
name old allocs/op new allocs/op delta
SimpleLoop/identity-precompile-10M-6 382k ± 0% 153k ± 0% -59.99% (p=0.000 n=5+4)
SimpleLoop/loop-10M-6 40.0 ± 0% 40.0 ± 0% ~ (all equal)
* core/vm: don't allocate big.int for touch
name old time/op new time/op delta
SimpleLoop/identity-precompile-10M-6 43.3ms ± 1% 42.4ms ± 7% ~ (p=0.151 n=5+5)
SimpleLoop/loop-10M-6 70.5ms ± 1% 76.7ms ± 1% +8.67% (p=0.008 n=5+5)
name old alloc/op new alloc/op delta
SimpleLoop/identity-precompile-10M-6 4.90MB ± 0% 2.46MB ± 0% -49.83% (p=0.008 n=5+5)
SimpleLoop/loop-10M-6 13.2kB ± 0% 13.2kB ± 1% ~ (p=0.571 n=5+5)
name old allocs/op new allocs/op delta
SimpleLoop/identity-precompile-10M-6 153k ± 0% 76k ± 0% -49.98% (p=0.029 n=4+4)
SimpleLoop/loop-10M-6 40.0 ± 0% 40.0 ± 0% ~ (all equal)
* core/vm: reduce allocs in staticcall
name old time/op new time/op delta
SimpleLoop/identity-precompile-10M-6 42.4ms ± 7% 37.5ms ± 6% -11.68% (p=0.008 n=5+5)
SimpleLoop/loop-10M-6 76.7ms ± 1% 69.1ms ± 1% -9.82% (p=0.008 n=5+5)
name old alloc/op new alloc/op delta
SimpleLoop/identity-precompile-10M-6 2.46MB ± 0% 0.02MB ± 0% -99.35% (p=0.008 n=5+5)
SimpleLoop/loop-10M-6 13.2kB ± 1% 13.2kB ± 0% ~ (p=0.143 n=5+5)
name old allocs/op new allocs/op delta
SimpleLoop/identity-precompile-10M-6 76.4k ± 0% 0.1k ± 0% ~ (p=0.079 n=4+5)
SimpleLoop/loop-10M-6 40.0 ± 0% 40.0 ± 0% ~ (all equal)
* trie: better use of hasher keccakState
* core/state/statedb: reduce allocations in getDeletedStateObject
* core/vm: reduce allocations in all call derivates
* core/vm: reduce allocations in call variants
- Make returnstack `uint32`
- Use a `sync.Pool` of `stack`s
* core/vm: fix tests
* core/vm: goimports
* core/vm: tracer fix + staticcall gas fix
* core/vm: add back snapshot to staticcall
* core/vm: review concerns + make returnstack pooled + enable returndata in traces
* core/vm: fix some test tracer method signatures
* core/vm: run gencodec, minor comment polish
Co-authored-by:
Péter Szilágyi <peterke@gmail.com>
Showing
- cmd/evm/internal/t8ntool/flags.go 4 additions, 0 deletionscmd/evm/internal/t8ntool/flags.go
- cmd/evm/internal/t8ntool/transition.go 4 additions, 3 deletionscmd/evm/internal/t8ntool/transition.go
- cmd/evm/main.go 11 additions, 0 deletionscmd/evm/main.go
- cmd/evm/runner.go 5 additions, 3 deletionscmd/evm/runner.go
- cmd/evm/staterunner.go 4 additions, 2 deletionscmd/evm/staterunner.go
- core/state/statedb.go 10 additions, 5 deletionscore/state/statedb.go
- core/vm/contracts.go 12 additions, 5 deletionscore/vm/contracts.go
- core/vm/contracts_test.go 11 additions, 18 deletionscore/vm/contracts_test.go
- core/vm/evm.go 109 additions, 84 deletionscore/vm/evm.go
- core/vm/gen_structlog.go 8 additions, 2 deletionscore/vm/gen_structlog.go
- core/vm/instructions.go 28 additions, 6 deletionscore/vm/instructions.go
- core/vm/interpreter.go 10 additions, 3 deletionscore/vm/interpreter.go
- core/vm/logger.go 23 additions, 12 deletionscore/vm/logger.go
- core/vm/logger_json.go 4 additions, 1 deletioncore/vm/logger_json.go
- core/vm/logger_test.go 1 addition, 1 deletioncore/vm/logger_test.go
- core/vm/runtime/runtime.go 14 additions, 7 deletionscore/vm/runtime/runtime.go
- core/vm/runtime/runtime_test.go 158 additions, 29 deletionscore/vm/runtime/runtime_test.go
- core/vm/stack.go 29 additions, 5 deletionscore/vm/stack.go
- eth/tracers/tracer.go 1 addition, 1 deletioneth/tracers/tracer.go
- eth/tracers/tracer_test.go 2 additions, 2 deletionseth/tracers/tracer_test.go
Loading
Please register or sign in to comment