core/vm: rework jumpdest analysis benchmarks (#23499)

* core/vm: rework jumpdest analysis benchmarks

For BenchmarkJumpdestOpAnalysis use fixed code size of ~1.2MB
and classic benchmark loop.

* core/vm: clear bitvec in jumpdest analysis benchmark
This commit is contained in:
Paweł Bylica 2021-08-30 14:13:06 +02:00 committed by GitHub
parent ffae2043f0
commit 3258211f68
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -55,9 +55,12 @@ func TestJumpDestAnalysis(t *testing.T) {
} }
} }
const analysisCodeSize = 1200 * 1024
func BenchmarkJumpdestAnalysis_1200k(bench *testing.B) { func BenchmarkJumpdestAnalysis_1200k(bench *testing.B) {
// 1.4 ms // 1.4 ms
code := make([]byte, 1200000) code := make([]byte, analysisCodeSize)
bench.SetBytes(analysisCodeSize)
bench.ResetTimer() bench.ResetTimer()
for i := 0; i < bench.N; i++ { for i := 0; i < bench.N; i++ {
codeBitmap(code) codeBitmap(code)
@ -66,7 +69,8 @@ func BenchmarkJumpdestAnalysis_1200k(bench *testing.B) {
} }
func BenchmarkJumpdestHashing_1200k(bench *testing.B) { func BenchmarkJumpdestHashing_1200k(bench *testing.B) {
// 4 ms // 4 ms
code := make([]byte, 1200000) code := make([]byte, analysisCodeSize)
bench.SetBytes(analysisCodeSize)
bench.ResetTimer() bench.ResetTimer()
for i := 0; i < bench.N; i++ { for i := 0; i < bench.N; i++ {
crypto.Keccak256Hash(code) crypto.Keccak256Hash(code)
@ -77,14 +81,20 @@ func BenchmarkJumpdestHashing_1200k(bench *testing.B) {
func BenchmarkJumpdestOpAnalysis(bench *testing.B) { func BenchmarkJumpdestOpAnalysis(bench *testing.B) {
var op OpCode var op OpCode
bencher := func(b *testing.B) { bencher := func(b *testing.B) {
code := make([]byte, 32*b.N) code := make([]byte, analysisCodeSize)
b.SetBytes(analysisCodeSize)
for i := range code { for i := range code {
code[i] = byte(op) code[i] = byte(op)
} }
bits := make(bitvec, len(code)/8+1+4) bits := make(bitvec, len(code)/8+1+4)
b.ResetTimer() b.ResetTimer()
for i := 0; i < b.N; i++ {
for j := range bits {
bits[j] = 0
}
codeBitmapInternal(code, bits) codeBitmapInternal(code, bits)
} }
}
for op = PUSH1; op <= PUSH32; op++ { for op = PUSH1; op <= PUSH32; op++ {
bench.Run(op.String(), bencher) bench.Run(op.String(), bencher)
} }