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,13 +81,19 @@ 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() | ||||||
| 		codeBitmapInternal(code, bits) | 		for i := 0; i < b.N; i++ { | ||||||
|  | 			for j := range bits { | ||||||
|  | 				bits[j] = 0 | ||||||
|  | 			} | ||||||
|  | 			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