forked from cerc-io/plugeth
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:
parent
ffae2043f0
commit
3258211f68
@ -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)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user