Skip to content

perf(levm): use a stack pool #3386

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Jul 3, 2025
Merged

perf(levm): use a stack pool #3386

merged 11 commits into from
Jul 3, 2025

Conversation

edg-l
Copy link
Contributor

@edg-l edg-l commented Jun 30, 2025

Motivation

Fixes #3385

https://share.firefox.dev/44uRnnn

The perfomance gain from this pr cannot be seen with the factorial recursive bench, because it doesn't reuse the stack, it always goes full deep and then up.

With a fibonacci recursive bench it can be seen:

Main
image

PR
image

Needs #3391 to show the perf gains in benches

Copy link

github-actions bot commented Jun 30, 2025

Lines of code report

Total lines added: 20
Total lines removed: 0
Total lines changed: 20

Detailed view
+-----------------------------------------------------+-------+------+
| File                                                | Lines | Diff |
+-----------------------------------------------------+-------+------+
| ethrex/crates/vm/levm/src/call_frame.rs             | 268   | +5   |
+-----------------------------------------------------+-------+------+
| ethrex/crates/vm/levm/src/opcode_handlers/system.rs | 776   | +12  |
+-----------------------------------------------------+-------+------+
| ethrex/crates/vm/levm/src/vm.rs                     | 214   | +3   |
+-----------------------------------------------------+-------+------+

Copy link

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.259 ± 0.054 3.217 3.380 1.03 ± 0.02
main_levm_BubbleSort 4.413 ± 0.024 4.388 4.469 1.39 ± 0.01
pr_revm_BubbleSort 3.171 ± 0.022 3.146 3.214 1.00
pr_levm_BubbleSort 4.525 ± 0.025 4.494 4.570 1.43 ± 0.01

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.046 ± 0.018 1.038 1.095 1.02 ± 0.02
main_levm_ERC20Approval 1.553 ± 0.024 1.537 1.609 1.51 ± 0.03
pr_revm_ERC20Approval 1.026 ± 0.006 1.018 1.033 1.00
pr_levm_ERC20Approval 1.556 ± 0.008 1.544 1.567 1.52 ± 0.01

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 140.1 ± 2.0 138.5 145.1 1.03 ± 0.02
main_levm_ERC20Mint 265.7 ± 2.3 263.0 270.1 1.95 ± 0.02
pr_revm_ERC20Mint 136.3 ± 0.7 135.5 137.4 1.00
pr_levm_ERC20Mint 264.3 ± 1.9 262.3 267.5 1.94 ± 0.02

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 246.5 ± 2.4 244.1 250.2 1.03 ± 0.01
main_levm_ERC20Transfer 406.5 ± 2.9 402.7 413.3 1.69 ± 0.01
pr_revm_ERC20Transfer 240.5 ± 0.8 239.6 242.4 1.00
pr_levm_ERC20Transfer 410.2 ± 2.1 408.0 415.4 1.71 ± 0.01

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 237.3 ± 1.4 235.9 239.9 1.02 ± 0.01
main_levm_Factorial 449.3 ± 4.6 446.4 461.9 1.92 ± 0.02
pr_revm_Factorial 233.6 ± 1.3 231.1 236.4 1.00
pr_levm_Factorial 462.3 ± 8.3 456.9 484.8 1.98 ± 0.04

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.618 ± 0.025 1.586 1.668 1.02 ± 0.02
main_levm_FactorialRecursive 2.778 ± 0.017 2.757 2.809 1.76 ± 0.03
pr_revm_FactorialRecursive 1.582 ± 0.022 1.554 1.619 1.00
pr_levm_FactorialRecursive 2.757 ± 0.013 2.739 2.788 1.74 ± 0.03

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 207.8 ± 0.7 206.9 208.8 1.00
main_levm_Fibonacci 446.8 ± 9.1 438.2 462.4 2.15 ± 0.04
pr_revm_Fibonacci 211.0 ± 2.6 207.3 216.8 1.02 ± 0.01
pr_levm_Fibonacci 451.9 ± 4.4 449.3 464.1 2.18 ± 0.02

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.8 ± 0.1 8.7 9.1 1.01 ± 0.02
main_levm_ManyHashes 13.4 ± 0.3 13.2 14.2 1.55 ± 0.04
pr_revm_ManyHashes 8.7 ± 0.2 8.5 9.1 1.00
pr_levm_ManyHashes 13.4 ± 0.1 13.2 13.6 1.54 ± 0.03

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 291.1 ± 1.8 289.5 295.7 1.00
main_levm_Push 1054.6 ± 3.3 1050.6 1062.1 3.62 ± 0.03
pr_revm_Push 292.7 ± 0.9 291.4 294.3 1.01 ± 0.01
pr_levm_Push 1125.1 ± 55.7 1102.2 1282.5 3.86 ± 0.19

Copy link

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.309 ± 0.048 3.263 3.406 1.04 ± 0.02
main_levm_BubbleSort 4.492 ± 0.034 4.453 4.560 1.41 ± 0.02
pr_revm_BubbleSort 3.189 ± 0.028 3.165 3.245 1.00
pr_levm_BubbleSort 4.500 ± 0.072 4.444 4.694 1.41 ± 0.03

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.082 ± 0.012 1.073 1.113 1.05 ± 0.01
main_levm_ERC20Approval 1.562 ± 0.014 1.539 1.584 1.51 ± 0.02
pr_revm_ERC20Approval 1.033 ± 0.008 1.021 1.048 1.00
pr_levm_ERC20Approval 1.553 ± 0.019 1.537 1.600 1.50 ± 0.02

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 144.2 ± 3.3 141.5 149.9 1.05 ± 0.03
main_levm_ERC20Mint 262.3 ± 1.8 259.8 266.1 1.92 ± 0.04
pr_revm_ERC20Mint 136.8 ± 2.9 135.2 144.8 1.00
pr_levm_ERC20Mint 263.1 ± 2.4 260.4 267.8 1.92 ± 0.04

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 251.7 ± 2.4 249.3 255.6 1.04 ± 0.01
main_levm_ERC20Transfer 407.8 ± 1.7 405.5 410.1 1.69 ± 0.01
pr_revm_ERC20Transfer 241.8 ± 1.4 240.4 244.9 1.00
pr_levm_ERC20Transfer 408.6 ± 3.4 404.1 415.1 1.69 ± 0.02

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 236.3 ± 1.3 233.3 238.2 1.02 ± 0.01
main_levm_Factorial 450.8 ± 7.1 444.8 464.2 1.95 ± 0.03
pr_revm_Factorial 231.7 ± 1.1 230.6 233.9 1.00
pr_levm_Factorial 448.9 ± 1.8 446.0 450.7 1.94 ± 0.01

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.608 ± 0.017 1.582 1.631 1.01 ± 0.02
main_levm_FactorialRecursive 2.760 ± 0.013 2.733 2.781 1.73 ± 0.03
pr_revm_FactorialRecursive 1.596 ± 0.027 1.555 1.648 1.00
pr_levm_FactorialRecursive 2.650 ± 0.032 2.603 2.699 1.66 ± 0.03

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 207.2 ± 0.4 206.8 207.9 1.00 ± 0.00
main_levm_Fibonacci 435.5 ± 2.0 433.4 440.4 2.11 ± 0.01
pr_revm_Fibonacci 206.8 ± 0.9 205.4 208.2 1.00
pr_levm_Fibonacci 448.5 ± 12.8 441.6 484.4 2.17 ± 0.06

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 9.0 ± 0.2 8.8 9.6 1.00
main_levm_ManyHashes 14.0 ± 0.1 13.9 14.4 1.55 ± 0.04
pr_revm_ManyHashes 9.3 ± 0.9 8.9 11.8 1.03 ± 0.10
pr_levm_ManyHashes 14.2 ± 0.4 13.9 15.3 1.58 ± 0.06

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 290.4 ± 1.0 288.9 292.4 1.00
main_levm_Push 1055.9 ± 7.2 1051.4 1075.3 3.64 ± 0.03
pr_revm_Push 291.2 ± 0.5 290.4 291.8 1.00 ± 0.00
pr_levm_Push 1103.4 ± 5.0 1097.4 1111.2 3.80 ± 0.02

Copy link

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.248 ± 0.044 3.200 3.332 1.02 ± 0.01
main_levm_BubbleSort 4.416 ± 0.026 4.392 4.480 1.38 ± 0.01
pr_revm_BubbleSort 3.192 ± 0.011 3.179 3.218 1.00
pr_levm_BubbleSort 4.603 ± 0.053 4.535 4.705 1.44 ± 0.02

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.038 ± 0.009 1.031 1.058 1.01 ± 0.01
main_levm_ERC20Approval 1.544 ± 0.025 1.525 1.608 1.50 ± 0.03
pr_revm_ERC20Approval 1.030 ± 0.008 1.024 1.050 1.00
pr_levm_ERC20Approval 1.564 ± 0.054 1.534 1.714 1.52 ± 0.05

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 138.2 ± 2.1 136.6 143.5 1.01 ± 0.02
main_levm_ERC20Mint 263.7 ± 1.4 261.9 265.8 1.93 ± 0.01
pr_revm_ERC20Mint 136.9 ± 0.7 136.2 138.8 1.00
pr_levm_ERC20Mint 264.3 ± 4.4 260.2 274.6 1.93 ± 0.03

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 242.9 ± 3.1 240.4 248.9 1.01 ± 0.01
main_levm_ERC20Transfer 406.3 ± 4.9 401.6 419.2 1.68 ± 0.02
pr_revm_ERC20Transfer 241.6 ± 1.7 239.3 245.1 1.00
pr_levm_ERC20Transfer 411.6 ± 10.2 402.0 437.8 1.70 ± 0.04

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 238.4 ± 0.7 237.8 240.0 1.03 ± 0.01
main_levm_Factorial 447.6 ± 4.8 444.2 460.6 1.93 ± 0.02
pr_revm_Factorial 232.2 ± 0.9 231.1 234.5 1.00
pr_levm_Factorial 478.2 ± 85.9 447.8 722.4 2.06 ± 0.37

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.608 ± 0.027 1.563 1.645 1.01 ± 0.02
main_levm_FactorialRecursive 2.843 ± 0.022 2.809 2.881 1.78 ± 0.03
pr_revm_FactorialRecursive 1.598 ± 0.026 1.558 1.630 1.00
pr_levm_FactorialRecursive 2.614 ± 0.019 2.592 2.658 1.64 ± 0.03

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 210.3 ± 0.8 208.9 211.5 1.02 ± 0.00
main_levm_Fibonacci 439.0 ± 3.7 435.6 447.5 2.12 ± 0.02
pr_revm_Fibonacci 207.1 ± 0.3 206.6 207.6 1.00
pr_levm_Fibonacci 445.5 ± 5.7 441.5 458.7 2.15 ± 0.03

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.8 ± 0.0 8.7 8.9 1.02 ± 0.01
main_levm_ManyHashes 13.8 ± 0.1 13.7 13.9 1.60 ± 0.01
pr_revm_ManyHashes 8.6 ± 0.1 8.5 8.7 1.00
pr_levm_ManyHashes 13.7 ± 0.2 13.5 14.0 1.59 ± 0.03

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 289.5 ± 0.7 288.5 290.6 1.00
main_levm_Push 1069.1 ± 3.6 1059.8 1072.3 3.69 ± 0.02
pr_revm_Push 291.2 ± 1.4 288.6 293.2 1.01 ± 0.01
pr_levm_Push 1083.3 ± 6.3 1075.5 1097.0 3.74 ± 0.02

Copy link

Benchmark for 9a1c789

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Copy link

Benchmark for f8c5fb7

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Copy link

Benchmark for 7e78336

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Copy link

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.282 ± 0.019 3.258 3.321 1.04 ± 0.01
main_levm_BubbleSort 4.392 ± 0.023 4.355 4.428 1.39 ± 0.01
pr_revm_BubbleSort 3.162 ± 0.021 3.139 3.218 1.00
pr_levm_BubbleSort 4.470 ± 0.019 4.455 4.516 1.41 ± 0.01

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.058 ± 0.004 1.053 1.066 1.03 ± 0.01
main_levm_ERC20Approval 1.527 ± 0.005 1.520 1.535 1.49 ± 0.01
pr_revm_ERC20Approval 1.027 ± 0.004 1.023 1.037 1.00
pr_levm_ERC20Approval 1.554 ± 0.006 1.547 1.568 1.51 ± 0.01

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 141.3 ± 1.5 140.0 145.2 1.04 ± 0.01
main_levm_ERC20Mint 257.3 ± 1.1 255.6 259.5 1.89 ± 0.01
pr_revm_ERC20Mint 135.8 ± 0.7 134.9 137.1 1.00
pr_levm_ERC20Mint 255.3 ± 2.0 253.1 259.3 1.88 ± 0.02

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 250.2 ± 4.9 246.2 259.4 1.04 ± 0.02
main_levm_ERC20Transfer 406.3 ± 4.6 401.3 416.4 1.69 ± 0.02
pr_revm_ERC20Transfer 240.9 ± 1.9 239.2 245.2 1.00
pr_levm_ERC20Transfer 403.2 ± 2.5 400.5 408.2 1.67 ± 0.02

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 242.3 ± 19.4 233.9 297.5 1.05 ± 0.08
main_levm_Factorial 447.2 ± 4.5 443.9 459.4 1.94 ± 0.02
pr_revm_Factorial 230.7 ± 0.5 229.7 231.3 1.00
pr_levm_Factorial 444.1 ± 2.8 442.4 451.9 1.93 ± 0.01

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.617 ± 0.020 1.593 1.651 1.03 ± 0.02
main_levm_FactorialRecursive 2.740 ± 0.017 2.718 2.768 1.74 ± 0.03
pr_revm_FactorialRecursive 1.572 ± 0.023 1.551 1.620 1.00
pr_levm_FactorialRecursive 2.669 ± 0.025 2.642 2.717 1.70 ± 0.03

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 208.5 ± 1.9 207.3 213.8 1.00
main_levm_Fibonacci 439.2 ± 5.3 434.3 448.0 2.11 ± 0.03
pr_revm_Fibonacci 209.0 ± 3.1 207.7 217.9 1.00 ± 0.02
pr_levm_Fibonacci 439.8 ± 2.7 437.7 447.0 2.11 ± 0.02

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.8 ± 0.1 8.7 9.0 1.02 ± 0.01
main_levm_ManyHashes 13.2 ± 0.1 13.2 13.5 1.54 ± 0.02
pr_revm_ManyHashes 8.6 ± 0.0 8.6 8.7 1.00
pr_levm_ManyHashes 13.4 ± 0.1 13.3 13.6 1.55 ± 0.01

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 291.1 ± 1.8 288.8 294.0 1.00
main_levm_Push 1059.2 ± 1.9 1056.7 1063.1 3.64 ± 0.02
pr_revm_Push 292.4 ± 1.3 290.9 295.6 1.00 ± 0.01
pr_levm_Push 1045.1 ± 3.6 1040.2 1052.0 3.59 ± 0.02

@edg-l edg-l marked this pull request as ready for review June 30, 2025 13:44
@edg-l edg-l requested a review from a team as a code owner June 30, 2025 13:44
Copy link

Benchmark for 2df5e75

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Copy link

Benchmark for 20ddfbc

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Copy link

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.160 ± 0.011 3.149 3.183 1.00
main_levm_BubbleSort 4.470 ± 0.052 4.409 4.561 1.41 ± 0.02
pr_revm_BubbleSort 3.183 ± 0.015 3.168 3.213 1.01 ± 0.01
pr_levm_BubbleSort 4.485 ± 0.024 4.455 4.525 1.42 ± 0.01

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.045 ± 0.005 1.040 1.055 1.00
main_levm_ERC20Approval 1.567 ± 0.008 1.560 1.585 1.50 ± 0.01
pr_revm_ERC20Approval 1.046 ± 0.011 1.037 1.074 1.00 ± 0.01
pr_levm_ERC20Approval 1.567 ± 0.016 1.558 1.613 1.50 ± 0.02

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 139.0 ± 0.6 138.3 140.0 1.01 ± 0.01
main_levm_ERC20Mint 269.7 ± 3.2 265.9 274.8 1.96 ± 0.02
pr_revm_ERC20Mint 137.8 ± 0.5 137.4 138.8 1.00
pr_levm_ERC20Mint 257.9 ± 2.2 255.5 262.0 1.87 ± 0.02

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 244.8 ± 1.3 243.8 248.2 1.00
main_levm_ERC20Transfer 411.7 ± 3.1 407.1 416.7 1.68 ± 0.02
pr_revm_ERC20Transfer 245.8 ± 4.1 242.9 256.3 1.00 ± 0.02
pr_levm_ERC20Transfer 420.1 ± 33.0 404.9 507.3 1.72 ± 0.14

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 230.5 ± 0.4 229.8 231.2 1.00
main_levm_Factorial 449.2 ± 14.0 425.7 481.2 1.95 ± 0.06
pr_revm_Factorial 232.4 ± 0.5 231.8 233.7 1.01 ± 0.00
pr_levm_Factorial 438.9 ± 7.9 434.5 461.1 1.90 ± 0.03

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.630 ± 0.019 1.596 1.666 1.02 ± 0.01
main_levm_FactorialRecursive 2.854 ± 0.053 2.793 2.928 1.78 ± 0.04
pr_revm_FactorialRecursive 1.606 ± 0.011 1.590 1.624 1.00
pr_levm_FactorialRecursive 2.727 ± 0.027 2.698 2.779 1.70 ± 0.02

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 207.2 ± 1.5 205.4 210.2 1.00 ± 0.01
main_levm_Fibonacci 439.5 ± 12.4 428.2 462.1 2.13 ± 0.06
pr_revm_Fibonacci 206.6 ± 1.0 205.1 208.8 1.00
pr_levm_Fibonacci 438.6 ± 11.5 430.3 464.2 2.12 ± 0.06

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.8 ± 0.1 8.7 9.0 1.01 ± 0.01
main_levm_ManyHashes 14.0 ± 0.4 13.7 15.0 1.60 ± 0.05
pr_revm_ManyHashes 8.7 ± 0.1 8.6 8.8 1.00
pr_levm_ManyHashes 13.4 ± 0.1 13.3 13.7 1.54 ± 0.02

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 295.2 ± 1.4 293.4 298.4 1.02 ± 0.01
main_levm_Push 1222.2 ± 19.0 1169.1 1235.6 4.21 ± 0.07
pr_revm_Push 290.0 ± 1.2 288.5 292.4 1.00
pr_levm_Push 1035.8 ± 1.7 1033.0 1038.5 3.57 ± 0.02

Copy link

Benchmark for 2822e71

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Copy link

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.174 ± 0.017 3.157 3.210 1.00
main_levm_BubbleSort 4.431 ± 0.043 4.375 4.513 1.40 ± 0.02
pr_revm_BubbleSort 3.234 ± 0.018 3.201 3.259 1.02 ± 0.01
pr_levm_BubbleSort 4.432 ± 0.028 4.406 4.503 1.40 ± 0.01

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.070 ± 0.005 1.065 1.078 1.02 ± 0.01
main_levm_ERC20Approval 1.576 ± 0.008 1.565 1.589 1.50 ± 0.01
pr_revm_ERC20Approval 1.049 ± 0.004 1.045 1.056 1.00
pr_levm_ERC20Approval 1.517 ± 0.011 1.503 1.537 1.45 ± 0.01

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 141.2 ± 0.4 140.5 141.8 1.01 ± 0.01
main_levm_ERC20Mint 265.8 ± 3.0 263.9 274.2 1.91 ± 0.03
pr_revm_ERC20Mint 139.2 ± 1.5 138.1 142.7 1.00
pr_levm_ERC20Mint 254.2 ± 0.9 253.1 255.6 1.83 ± 0.02

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 249.3 ± 0.6 248.7 250.8 1.01 ± 0.01
main_levm_ERC20Transfer 411.5 ± 4.5 407.2 421.9 1.67 ± 0.02
pr_revm_ERC20Transfer 245.9 ± 1.1 244.6 247.9 1.00
pr_levm_ERC20Transfer 398.9 ± 4.3 394.8 409.0 1.62 ± 0.02

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 231.2 ± 0.7 230.1 232.4 1.00
main_levm_Factorial 455.6 ± 28.7 437.5 532.4 1.97 ± 0.12
pr_revm_Factorial 234.4 ± 3.5 232.4 244.3 1.01 ± 0.02
pr_levm_Factorial 433.7 ± 2.2 431.8 439.3 1.88 ± 0.01

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.619 ± 0.026 1.589 1.669 1.01 ± 0.02
main_levm_FactorialRecursive 2.704 ± 0.044 2.659 2.788 1.68 ± 0.03
pr_revm_FactorialRecursive 1.605 ± 0.015 1.576 1.624 1.00
pr_levm_FactorialRecursive 2.629 ± 0.027 2.586 2.687 1.64 ± 0.02

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 205.9 ± 0.9 204.8 207.8 1.00
main_levm_Fibonacci 464.7 ± 11.1 458.4 495.0 2.26 ± 0.05
pr_revm_Fibonacci 206.1 ± 0.8 204.0 206.8 1.00 ± 0.01
pr_levm_Fibonacci 425.7 ± 0.9 424.5 427.1 2.07 ± 0.01

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.7 ± 0.1 8.6 8.9 1.00
main_levm_ManyHashes 13.4 ± 0.1 13.3 13.5 1.54 ± 0.02
pr_revm_ManyHashes 8.7 ± 0.0 8.7 8.8 1.01 ± 0.01
pr_levm_ManyHashes 12.9 ± 0.2 12.7 13.3 1.49 ± 0.02

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 296.8 ± 1.1 295.2 299.1 1.03 ± 0.01
main_levm_Push 1076.3 ± 9.2 1059.9 1088.6 3.73 ± 0.04
pr_revm_Push 288.9 ± 1.4 286.6 292.0 1.00
pr_levm_Push 1032.2 ± 3.6 1029.0 1039.3 3.57 ± 0.02

Copy link

Benchmark for 54b8fd0

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Copy link

Benchmark for 8d2e632

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Copy link

github-actions bot commented Jun 30, 2025

Benchmark Block Execution Results Comparison Against Main

Command Mean [s] Min [s] Max [s] Relative
base 211.368 ± 1.903 209.338 214.475 1.00 ± 0.01
head 210.807 ± 0.717 209.345 211.711 1.00

Copy link

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.163 ± 0.029 3.143 3.229 1.00
main_levm_BubbleSort 4.564 ± 0.108 4.483 4.839 1.44 ± 0.04
pr_revm_BubbleSort 3.192 ± 0.026 3.171 3.245 1.01 ± 0.01
pr_levm_BubbleSort 4.467 ± 0.094 4.408 4.731 1.41 ± 0.03

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.043 ± 0.005 1.035 1.052 1.00
main_levm_ERC20Approval 1.531 ± 0.031 1.506 1.605 1.47 ± 0.03
pr_revm_ERC20Approval 1.044 ± 0.007 1.038 1.062 1.00 ± 0.01
pr_levm_ERC20Approval 1.538 ± 0.015 1.524 1.572 1.47 ± 0.02

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 138.2 ± 0.7 137.1 139.5 1.00
main_levm_ERC20Mint 254.5 ± 2.7 251.7 260.5 1.84 ± 0.02
pr_revm_ERC20Mint 138.4 ± 0.4 137.6 139.1 1.00 ± 0.01
pr_levm_ERC20Mint 259.3 ± 1.7 257.2 262.0 1.88 ± 0.02

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 250.1 ± 9.7 245.0 277.0 1.03 ± 0.04
main_levm_ERC20Transfer 398.6 ± 3.3 395.4 405.8 1.63 ± 0.02
pr_revm_ERC20Transfer 243.9 ± 2.7 241.6 249.8 1.00
pr_levm_ERC20Transfer 402.6 ± 1.3 400.1 404.6 1.65 ± 0.02

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 235.2 ± 2.1 232.6 239.5 1.01 ± 0.01
main_levm_Factorial 445.7 ± 6.6 441.5 460.0 1.91 ± 0.03
pr_revm_Factorial 233.6 ± 0.4 232.7 234.3 1.00
pr_levm_Factorial 438.3 ± 7.6 432.7 457.0 1.88 ± 0.03

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.629 ± 0.025 1.593 1.682 1.02 ± 0.03
main_levm_FactorialRecursive 2.692 ± 0.048 2.654 2.781 1.69 ± 0.05
pr_revm_FactorialRecursive 1.589 ± 0.034 1.536 1.631 1.00
pr_levm_FactorialRecursive 2.718 ± 0.025 2.670 2.746 1.71 ± 0.04

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 207.2 ± 1.4 205.9 209.3 1.00 ± 0.01
main_levm_Fibonacci 437.9 ± 6.7 429.6 450.7 2.12 ± 0.04
pr_revm_Fibonacci 206.7 ± 2.1 204.2 211.7 1.00
pr_levm_Fibonacci 431.7 ± 4.6 428.1 443.0 2.09 ± 0.03

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.8 ± 0.2 8.7 9.2 1.02 ± 0.02
main_levm_ManyHashes 13.6 ± 1.0 13.3 16.5 1.58 ± 0.12
pr_revm_ManyHashes 8.6 ± 0.1 8.6 8.7 1.00
pr_levm_ManyHashes 13.5 ± 0.1 13.4 13.6 1.56 ± 0.01

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 295.2 ± 1.1 293.7 297.5 1.02 ± 0.00
main_levm_Push 1071.9 ± 9.3 1051.0 1086.3 3.71 ± 0.03
pr_revm_Push 289.0 ± 0.8 287.4 289.9 1.00
pr_levm_Push 1068.4 ± 7.8 1057.3 1087.2 3.70 ± 0.03

Copy link

Benchmark for e3f4bfd

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

@edg-l
Copy link
Contributor Author

edg-l commented Jun 30, 2025

External benchmarks show an improved result

Copy link

github-actions bot commented Jul 1, 2025

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.164 ± 0.040 3.143 3.274 1.00 ± 0.01
main_levm_BubbleSort 4.438 ± 0.017 4.415 4.471 1.40 ± 0.01
pr_revm_BubbleSort 3.161 ± 0.021 3.146 3.215 1.00
pr_levm_BubbleSort 4.415 ± 0.036 4.385 4.485 1.40 ± 0.01

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.044 ± 0.004 1.039 1.056 1.02 ± 0.01
main_levm_ERC20Approval 1.556 ± 0.006 1.549 1.563 1.51 ± 0.01
pr_revm_ERC20Approval 1.028 ± 0.009 1.018 1.044 1.00
pr_levm_ERC20Approval 1.543 ± 0.010 1.533 1.565 1.50 ± 0.02

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 138.1 ± 1.7 136.8 142.7 1.01 ± 0.01
main_levm_ERC20Mint 260.7 ± 3.2 255.5 265.4 1.91 ± 0.02
pr_revm_ERC20Mint 136.5 ± 0.6 135.4 137.7 1.00
pr_levm_ERC20Mint 265.5 ± 13.6 257.2 294.6 1.95 ± 0.10

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 244.1 ± 1.2 242.9 245.8 1.02 ± 0.01
main_levm_ERC20Transfer 406.9 ± 1.4 404.3 408.7 1.70 ± 0.01
pr_revm_ERC20Transfer 239.5 ± 1.1 238.6 241.9 1.00
pr_levm_ERC20Transfer 405.5 ± 1.8 401.8 408.7 1.69 ± 0.01

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 233.5 ± 1.6 231.8 236.5 1.00
main_levm_Factorial 449.8 ± 9.6 444.1 472.8 1.93 ± 0.04
pr_revm_Factorial 235.2 ± 6.1 232.3 252.4 1.01 ± 0.03
pr_levm_Factorial 447.7 ± 1.6 445.8 451.1 1.92 ± 0.01

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.577 ± 0.084 1.351 1.638 1.00
main_levm_FactorialRecursive 2.689 ± 0.011 2.672 2.708 1.70 ± 0.09
pr_revm_FactorialRecursive 1.607 ± 0.021 1.574 1.633 1.02 ± 0.06
pr_levm_FactorialRecursive 2.679 ± 0.013 2.659 2.699 1.70 ± 0.09

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 205.2 ± 0.9 204.6 207.5 1.00 ± 0.01
main_levm_Fibonacci 436.0 ± 2.9 434.2 443.8 2.13 ± 0.03
pr_revm_Fibonacci 205.1 ± 2.6 198.7 209.0 1.00
pr_levm_Fibonacci 448.1 ± 15.2 440.8 490.9 2.18 ± 0.08

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.8 ± 0.0 8.7 8.8 1.01 ± 0.01
main_levm_ManyHashes 13.4 ± 0.1 13.3 13.6 1.56 ± 0.01
pr_revm_ManyHashes 8.6 ± 0.1 8.6 8.7 1.00
pr_levm_ManyHashes 13.9 ± 2.2 12.9 20.1 1.61 ± 0.26

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 293.5 ± 0.6 292.5 294.3 1.01 ± 0.00
main_levm_Push 1030.9 ± 4.2 1026.8 1040.4 3.56 ± 0.02
pr_revm_Push 289.6 ± 0.9 288.6 290.7 1.00
pr_levm_Push 1049.2 ± 22.3 1036.4 1111.8 3.62 ± 0.08

Copy link

github-actions bot commented Jul 1, 2025

Benchmark for b8d9533

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Copy link

github-actions bot commented Jul 1, 2025

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.177 ± 0.024 3.157 3.221 1.00
main_levm_BubbleSort 4.446 ± 0.018 4.427 4.485 1.40 ± 0.01
pr_revm_BubbleSort 3.180 ± 0.018 3.157 3.218 1.00 ± 0.01
pr_levm_BubbleSort 4.574 ± 0.182 4.494 5.089 1.44 ± 0.06

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.048 ± 0.006 1.042 1.062 1.02 ± 0.02
main_levm_ERC20Approval 1.550 ± 0.056 1.527 1.710 1.50 ± 0.06
pr_revm_ERC20Approval 1.030 ± 0.015 1.015 1.060 1.00
pr_levm_ERC20Approval 1.536 ± 0.009 1.526 1.558 1.49 ± 0.02

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 138.8 ± 0.6 137.8 139.7 1.03 ± 0.01
main_levm_ERC20Mint 255.4 ± 0.6 254.3 256.2 1.89 ± 0.01
pr_revm_ERC20Mint 134.9 ± 0.7 133.9 136.1 1.00
pr_levm_ERC20Mint 260.6 ± 3.7 257.1 269.3 1.93 ± 0.03

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 249.4 ± 2.8 246.0 255.7 1.04 ± 0.02
main_levm_ERC20Transfer 404.8 ± 4.1 400.8 414.1 1.68 ± 0.02
pr_revm_ERC20Transfer 240.8 ± 2.6 239.0 247.7 1.00
pr_levm_ERC20Transfer 408.0 ± 5.6 402.9 418.5 1.69 ± 0.03

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 233.8 ± 1.4 232.2 237.4 1.02 ± 0.01
main_levm_Factorial 463.9 ± 2.1 461.1 468.4 2.01 ± 0.01
pr_revm_Factorial 230.2 ± 0.9 229.2 231.8 1.00
pr_levm_Factorial 448.9 ± 8.5 443.8 472.7 1.95 ± 0.04

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.622 ± 0.019 1.597 1.670 1.01 ± 0.02
main_levm_FactorialRecursive 2.656 ± 0.018 2.634 2.695 1.66 ± 0.03
pr_revm_FactorialRecursive 1.600 ± 0.024 1.573 1.638 1.00
pr_levm_FactorialRecursive 2.696 ± 0.026 2.643 2.730 1.68 ± 0.03

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 207.8 ± 5.4 205.4 223.0 1.02 ± 0.03
main_levm_Fibonacci 437.1 ± 4.4 434.4 448.9 2.15 ± 0.02
pr_revm_Fibonacci 203.1 ± 0.5 202.5 203.9 1.00
pr_levm_Fibonacci 441.8 ± 2.8 439.3 448.8 2.17 ± 0.01

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.8 ± 0.1 8.7 8.9 1.02 ± 0.01
main_levm_ManyHashes 13.3 ± 0.2 13.2 14.0 1.54 ± 0.03
pr_revm_ManyHashes 8.6 ± 0.1 8.6 8.8 1.00
pr_levm_ManyHashes 13.3 ± 0.1 13.3 13.4 1.54 ± 0.01

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 293.6 ± 1.0 292.2 295.6 1.01 ± 0.01
main_levm_Push 1099.6 ± 5.1 1092.9 1110.9 3.80 ± 0.03
pr_revm_Push 289.4 ± 2.2 284.5 292.1 1.00
pr_levm_Push 1032.5 ± 2.8 1028.7 1037.6 3.57 ± 0.03

Copy link

github-actions bot commented Jul 1, 2025

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.187 ± 0.008 3.178 3.203 1.00 ± 0.01
main_levm_BubbleSort 4.469 ± 0.023 4.447 4.518 1.41 ± 0.01
pr_revm_BubbleSort 3.175 ± 0.014 3.150 3.198 1.00
pr_levm_BubbleSort 4.493 ± 0.009 4.474 4.504 1.42 ± 0.01

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.065 ± 0.006 1.059 1.080 1.03 ± 0.01
main_levm_ERC20Approval 1.550 ± 0.007 1.543 1.568 1.49 ± 0.01
pr_revm_ERC20Approval 1.038 ± 0.007 1.032 1.053 1.00
pr_levm_ERC20Approval 1.584 ± 0.007 1.572 1.595 1.53 ± 0.01

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 140.1 ± 0.6 139.3 141.2 1.01 ± 0.01
main_levm_ERC20Mint 259.8 ± 2.5 257.9 266.5 1.87 ± 0.03
pr_revm_ERC20Mint 138.8 ± 1.5 136.9 142.3 1.00
pr_levm_ERC20Mint 262.3 ± 1.6 259.8 264.8 1.89 ± 0.02

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 251.3 ± 2.2 249.5 255.7 1.04 ± 0.01
main_levm_ERC20Transfer 405.3 ± 1.3 403.2 407.0 1.68 ± 0.02
pr_revm_ERC20Transfer 241.4 ± 2.2 240.1 247.4 1.00
pr_levm_ERC20Transfer 413.8 ± 2.9 409.6 417.9 1.71 ± 0.02

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 232.6 ± 2.4 231.0 239.2 1.00
main_levm_Factorial 464.7 ± 1.3 462.1 467.0 2.00 ± 0.02
pr_revm_Factorial 234.5 ± 1.2 232.5 236.9 1.01 ± 0.01
pr_levm_Factorial 455.6 ± 2.5 451.6 461.7 1.96 ± 0.02

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.615 ± 0.039 1.515 1.651 1.01 ± 0.03
main_levm_FactorialRecursive 2.705 ± 0.037 2.653 2.766 1.68 ± 0.04
pr_revm_FactorialRecursive 1.606 ± 0.032 1.535 1.639 1.00
pr_levm_FactorialRecursive 2.698 ± 0.016 2.676 2.725 1.68 ± 0.03

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 206.9 ± 1.6 203.9 210.0 1.00
main_levm_Fibonacci 439.7 ± 6.7 434.0 455.6 2.13 ± 0.04
pr_revm_Fibonacci 211.8 ± 1.7 210.5 214.8 1.02 ± 0.01
pr_levm_Fibonacci 445.9 ± 2.4 442.8 451.0 2.16 ± 0.02

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.9 ± 0.2 8.8 9.6 1.01 ± 0.03
main_levm_ManyHashes 13.5 ± 0.1 13.4 13.7 1.53 ± 0.02
pr_revm_ManyHashes 8.8 ± 0.1 8.8 8.9 1.00
pr_levm_ManyHashes 14.0 ± 0.1 13.9 14.2 1.59 ± 0.02

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 294.7 ± 1.0 293.2 296.4 1.00
main_levm_Push 1075.3 ± 1.8 1073.1 1078.1 3.65 ± 0.01
pr_revm_Push 296.9 ± 0.5 296.2 297.9 1.01 ± 0.00
pr_levm_Push 1096.9 ± 4.4 1091.1 1103.4 3.72 ± 0.02

Copy link

github-actions bot commented Jul 1, 2025

Benchmark for 64bf484

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Copy link

github-actions bot commented Jul 1, 2025

Benchmark for 07f7206

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

github-merge-queue bot pushed a commit that referenced this pull request Jul 1, 2025
**Motivation**
The fibonacci recursive can show perfomance results of stack reuse that
the factorial recursive one can't because factorial will never be able
to "reuse" the stack.

See also #3386

**Description**

<!-- A clear and concise general description of the changes this PR
introduces -->

<!-- Link to issues: Resolves #111, Resolves #222 -->

Closes #issue_number
Copy link

github-actions bot commented Jul 1, 2025

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.160 ± 0.016 3.146 3.189 1.00 ± 0.01
main_levm_BubbleSort 4.478 ± 0.057 4.430 4.603 1.42 ± 0.02
pr_revm_BubbleSort 3.157 ± 0.013 3.138 3.176 1.00
pr_levm_BubbleSort 4.405 ± 0.012 4.392 4.434 1.40 ± 0.01

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.048 ± 0.010 1.038 1.067 1.01 ± 0.02
main_levm_ERC20Approval 1.549 ± 0.005 1.544 1.555 1.49 ± 0.03
pr_revm_ERC20Approval 1.041 ± 0.019 1.026 1.090 1.00
pr_levm_ERC20Approval 1.548 ± 0.003 1.543 1.553 1.49 ± 0.03

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 137.3 ± 0.6 136.3 138.2 1.00
main_levm_ERC20Mint 265.1 ± 1.6 263.2 267.8 1.93 ± 0.01
pr_revm_ERC20Mint 138.2 ± 1.2 137.1 141.1 1.01 ± 0.01
pr_levm_ERC20Mint 259.1 ± 1.3 257.5 261.8 1.89 ± 0.01

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 243.9 ± 1.7 242.5 248.0 1.01 ± 0.01
main_levm_ERC20Transfer 413.8 ± 21.6 404.2 475.3 1.71 ± 0.09
pr_revm_ERC20Transfer 242.2 ± 0.7 241.5 243.7 1.00
pr_levm_ERC20Transfer 405.6 ± 2.7 402.3 412.4 1.67 ± 0.01

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 231.4 ± 2.8 224.9 234.6 1.00
main_levm_Factorial 449.0 ± 1.4 447.5 452.4 1.94 ± 0.02
pr_revm_Factorial 234.5 ± 1.8 233.2 239.4 1.01 ± 0.01
pr_levm_Factorial 458.3 ± 14.3 451.4 498.2 1.98 ± 0.07

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.619 ± 0.021 1.574 1.646 1.02 ± 0.03
main_levm_FactorialRecursive 2.803 ± 0.037 2.755 2.859 1.77 ± 0.05
pr_revm_FactorialRecursive 1.588 ± 0.041 1.491 1.635 1.00
pr_levm_FactorialRecursive 2.698 ± 0.017 2.669 2.728 1.70 ± 0.05

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 206.3 ± 0.8 204.9 207.7 1.00
main_levm_Fibonacci 438.1 ± 2.5 435.8 444.7 2.12 ± 0.01
pr_revm_Fibonacci 208.2 ± 0.7 207.6 209.9 1.01 ± 0.01
pr_levm_Fibonacci 446.0 ± 2.3 443.7 452.1 2.16 ± 0.01

Benchmark Results: FibonacciRecursive

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_FibonacciRecursive 868.3 ± 12.7 838.6 881.7 1.00 ± 0.02
main_levm_FibonacciRecursive 1722.2 ± 11.9 1707.9 1747.6 1.99 ± 0.03
pr_revm_FibonacciRecursive 864.6 ± 11.0 846.2 881.0 1.00
pr_levm_FibonacciRecursive 1414.2 ± 11.5 1399.2 1439.9 1.64 ± 0.02

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.8 ± 0.1 8.7 9.1 1.00 ± 0.02
main_levm_ManyHashes 14.1 ± 0.1 13.9 14.2 1.60 ± 0.01
pr_revm_ManyHashes 8.8 ± 0.1 8.7 8.9 1.00
pr_levm_ManyHashes 13.5 ± 0.1 13.4 13.7 1.54 ± 0.02

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 294.4 ± 1.0 292.9 296.1 1.00
main_levm_Push 1068.8 ± 6.4 1063.5 1086.2 3.63 ± 0.03
pr_revm_Push 296.2 ± 2.9 294.1 303.9 1.01 ± 0.01
pr_levm_Push 1126.7 ± 2.4 1122.8 1130.0 3.83 ± 0.02

@JereSalo JereSalo self-requested a review July 1, 2025 14:29
Copy link

github-actions bot commented Jul 1, 2025

Benchmark for b6874dd

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Copy link
Contributor

@JereSalo JereSalo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let’s say a real transaction in ethereum that is “call heavy” will have at most 50 created callframes. Is the stack pool beneficial in that scenario or is the difference negligible? I’m asking because even though this change impacts very positively on the Recursive Fibonacci test I think that we should care more about real case scenarios, and if there’s no difference then maybe it’s not worth adding it.

The codebase is becoming larger by the day and maybe we should prioritize changes that affect performance in real transactions. Let me know what you think though.

Edit: This comment doesn't apply to this PR, I've seen that it has improved another benchmarks too so for me it's good to go.

SDartayet pushed a commit that referenced this pull request Jul 1, 2025
**Motivation**
The fibonacci recursive can show perfomance results of stack reuse that
the factorial recursive one can't because factorial will never be able
to "reuse" the stack.

See also #3386

**Description**

<!-- A clear and concise general description of the changes this PR
introduces -->

<!-- Link to issues: Resolves #111, Resolves #222 -->

Closes #issue_number
ElFantasma pushed a commit that referenced this pull request Jul 1, 2025
**Motivation**
The fibonacci recursive can show perfomance results of stack reuse that
the factorial recursive one can't because factorial will never be able
to "reuse" the stack.

See also #3386

**Description**

<!-- A clear and concise general description of the changes this PR
introduces -->

<!-- Link to issues: Resolves #111, Resolves #222 -->

Closes #issue_number
Copy link
Collaborator

@Arkenan Arkenan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@edg-l edg-l enabled auto-merge July 3, 2025 10:53
@edg-l edg-l added this pull request to the merge queue Jul 3, 2025
Copy link

github-actions bot commented Jul 3, 2025

No significant difference was registered for any benchmark run.

Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.186 ± 0.018 3.167 3.226 1.00
main_levm_BubbleSort 4.424 ± 0.017 4.408 4.467 1.39 ± 0.01
pr_revm_BubbleSort 3.187 ± 0.022 3.162 3.238 1.00 ± 0.01
pr_levm_BubbleSort 4.504 ± 0.029 4.472 4.543 1.41 ± 0.01

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.062 ± 0.013 1.046 1.094 1.00 ± 0.02
main_levm_ERC20Approval 1.551 ± 0.015 1.542 1.592 1.46 ± 0.02
pr_revm_ERC20Approval 1.061 ± 0.012 1.042 1.083 1.00
pr_levm_ERC20Approval 1.531 ± 0.006 1.524 1.543 1.44 ± 0.02

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 139.0 ± 2.8 136.9 145.7 1.00
main_levm_ERC20Mint 258.8 ± 2.3 256.5 263.8 1.86 ± 0.04
pr_revm_ERC20Mint 140.5 ± 0.7 139.8 141.7 1.01 ± 0.02
pr_levm_ERC20Mint 258.2 ± 3.4 254.2 265.3 1.86 ± 0.04

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 247.9 ± 3.4 244.5 256.1 1.00
main_levm_ERC20Transfer 404.4 ± 2.8 400.0 408.5 1.63 ± 0.02
pr_revm_ERC20Transfer 251.4 ± 1.7 249.5 254.1 1.01 ± 0.02
pr_levm_ERC20Transfer 400.3 ± 0.8 398.8 401.3 1.61 ± 0.02

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 229.6 ± 0.4 228.8 230.2 1.00
main_levm_Factorial 447.6 ± 17.1 439.6 496.0 1.95 ± 0.07
pr_revm_Factorial 230.8 ± 0.3 230.3 231.4 1.01 ± 0.00
pr_levm_Factorial 451.3 ± 37.0 437.3 556.5 1.97 ± 0.16

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.606 ± 0.021 1.568 1.634 1.00
main_levm_FactorialRecursive 2.702 ± 0.017 2.682 2.742 1.68 ± 0.02
pr_revm_FactorialRecursive 1.630 ± 0.022 1.593 1.657 1.02 ± 0.02
pr_levm_FactorialRecursive 2.758 ± 0.018 2.713 2.778 1.72 ± 0.03

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 205.9 ± 2.5 200.6 210.9 1.00
main_levm_Fibonacci 438.6 ± 5.4 435.8 453.8 2.13 ± 0.04
pr_revm_Fibonacci 208.0 ± 2.3 205.9 212.5 1.01 ± 0.02
pr_levm_Fibonacci 433.6 ± 1.1 432.0 435.7 2.11 ± 0.03

Benchmark Results: FibonacciRecursive

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_FibonacciRecursive 852.7 ± 9.7 839.5 866.1 1.00
main_levm_FibonacciRecursive 1638.7 ± 7.6 1630.3 1653.6 1.92 ± 0.02
pr_revm_FibonacciRecursive 875.3 ± 12.1 862.0 900.9 1.03 ± 0.02
pr_levm_FibonacciRecursive 1440.2 ± 24.9 1420.2 1504.4 1.69 ± 0.03

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.8 ± 0.1 8.7 8.9 1.00
main_levm_ManyHashes 13.4 ± 0.2 13.2 13.8 1.53 ± 0.03
pr_revm_ManyHashes 8.8 ± 0.1 8.7 8.9 1.00 ± 0.01
pr_levm_ManyHashes 13.9 ± 0.1 13.8 14.1 1.59 ± 0.02

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 292.3 ± 0.9 291.4 293.7 1.00
main_levm_Push 1069.1 ± 2.6 1065.7 1073.6 3.66 ± 0.01
pr_revm_Push 296.5 ± 0.9 295.5 298.3 1.01 ± 0.00
pr_levm_Push 1078.4 ± 2.5 1074.6 1082.0 3.69 ± 0.01

Merged via the queue into main with commit 7ff4eea Jul 3, 2025
39 checks passed
@edg-l edg-l deleted the stack_pool branch July 3, 2025 11:19
Copy link

github-actions bot commented Jul 3, 2025

Benchmark for 2198890

Click to view benchmark
Test Base PR %
block payload building bench 0.2±0.00ns 0.2±0.00ns 0.00%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Use a pool for call frame stacks
3 participants