eth/tracers: update benchmark

The updated benchmark is a lot slower than previously, since previously
the json-encoding was deferred to later. Also, storing the data as json-encoded
strings is larger than the raw bytes.

The BenchmarkTransactionTraceV2 is thus renamed from the original
This commit is contained in:
Martin Holst Swende 2024-11-27 14:28:58 +01:00
parent 2b0c1f42fe
commit 5f82cec478
No known key found for this signature in database
GPG key ID: 683B438C05A5DDF0

View file

@ -23,10 +23,10 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/core/tracing"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/eth/tracers/logger"
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/tests" "github.com/ethereum/go-ethereum/tests"
) )
@ -78,14 +78,8 @@ func BenchmarkTransactionTraceV2(b *testing.B) {
state := tests.MakePreState(rawdb.NewMemoryDatabase(), alloc, false, rawdb.HashScheme) state := tests.MakePreState(rawdb.NewMemoryDatabase(), alloc, false, rawdb.HashScheme)
defer state.Close() defer state.Close()
// Create a tracer which records the number of steps evm := vm.NewEVM(context, state.StateDB, params.AllEthashProtocolChanges, vm.Config{})
var steps = 0
tracer := &tracing.Hooks{
OnOpcode: func(pc uint64, op byte, gas, cost uint64, scope tracing.OpContext, rData []byte, depth int, err error) {
steps++
},
}
evm := vm.NewEVM(context, state.StateDB, params.AllEthashProtocolChanges, vm.Config{Tracer: tracer})
msg, err := core.TransactionToMessage(tx, signer, context.BaseFee) msg, err := core.TransactionToMessage(tx, signer, context.BaseFee)
if err != nil { if err != nil {
b.Fatalf("failed to prepare transaction for tracing: %v", err) b.Fatalf("failed to prepare transaction for tracing: %v", err)
@ -94,15 +88,15 @@ func BenchmarkTransactionTraceV2(b *testing.B) {
b.ReportAllocs() b.ReportAllocs()
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
tracer := logger.NewStructLogger(&logger.Config{Debug: false}).Hooks()
tracer.OnTxStart(evm.GetVMContext(), tx, msg.From)
evm.Config.Tracer = tracer
snap := state.StateDB.Snapshot() snap := state.StateDB.Snapshot()
_, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas())) _, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas()))
if err != nil { if err != nil {
b.Fatal(err) b.Fatal(err)
} }
state.StateDB.RevertToSnapshot(snap) state.StateDB.RevertToSnapshot(snap)
if have, want := steps, 244752; have != want {
b.Fatalf("trace wrong, want %d steps, have %d", want, have)
}
steps = 0
} }
} }