Skip to content

Conversation

edg-l
Copy link
Contributor

@edg-l edg-l commented Jul 8, 2025

Motivation

Locally the sstore bench from #3552 goes from 2x worse to a bit better than revm

Gas benchmarks improve 2x

Description

Closes #issue_number

Copy link

github-actions bot commented Jul 8, 2025

Lines of code report

Total lines added: 10
Total lines removed: 0
Total lines changed: 10

Detailed view
+------------------------------------------------------------------------+-------+------+
| File                                                                   | Lines | Diff |
+------------------------------------------------------------------------+-------+------+
| ethrex/crates/vm/levm/src/db/gen_db.rs                                 | 244   | +8   |
+------------------------------------------------------------------------+-------+------+
| ethrex/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs | 268   | +2   |
+------------------------------------------------------------------------+-------+------+

Copy link

github-actions bot commented Jul 8, 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.175 ± 0.016 3.158 3.211 1.00
main_levm_BubbleSort 4.397 ± 0.016 4.378 4.430 1.39 ± 0.01
pr_revm_BubbleSort 3.200 ± 0.032 3.165 3.263 1.01 ± 0.01
pr_levm_BubbleSort 4.328 ± 0.015 4.306 4.349 1.36 ± 0.01

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.047 ± 0.005 1.043 1.060 1.02 ± 0.01
main_levm_ERC20Approval 1.545 ± 0.014 1.530 1.583 1.51 ± 0.02
pr_revm_ERC20Approval 1.024 ± 0.006 1.017 1.039 1.00
pr_levm_ERC20Approval 1.503 ± 0.013 1.482 1.526 1.47 ± 0.02

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 138.9 ± 1.1 137.3 140.5 1.02 ± 0.01
main_levm_ERC20Mint 261.3 ± 1.6 259.5 265.2 1.91 ± 0.01
pr_revm_ERC20Mint 136.6 ± 0.6 135.4 137.3 1.00
pr_levm_ERC20Mint 242.3 ± 2.3 239.1 246.1 1.77 ± 0.02

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 244.5 ± 2.4 241.5 248.6 1.02 ± 0.01
main_levm_ERC20Transfer 405.0 ± 1.4 402.5 407.8 1.69 ± 0.01
pr_revm_ERC20Transfer 239.8 ± 1.5 238.6 243.6 1.00
pr_levm_ERC20Transfer 386.5 ± 2.1 383.8 390.4 1.61 ± 0.01

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 234.6 ± 3.8 231.5 241.5 1.00 ± 0.02
main_levm_Factorial 442.7 ± 3.2 439.6 450.6 1.89 ± 0.03
pr_revm_Factorial 233.8 ± 3.0 232.1 240.9 1.00
pr_levm_Factorial 436.7 ± 1.2 434.9 439.0 1.87 ± 0.02

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.622 ± 0.040 1.532 1.667 1.00
main_levm_FactorialRecursive 2.762 ± 0.032 2.695 2.803 1.70 ± 0.05
pr_revm_FactorialRecursive 1.622 ± 0.028 1.580 1.655 1.00 ± 0.03
pr_levm_FactorialRecursive 2.687 ± 0.024 2.649 2.730 1.66 ± 0.04

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 208.9 ± 3.8 206.5 218.5 1.00
main_levm_Fibonacci 439.9 ± 4.0 435.5 447.7 2.11 ± 0.04
pr_revm_Fibonacci 210.6 ± 5.7 206.6 221.6 1.01 ± 0.03
pr_levm_Fibonacci 429.7 ± 3.0 426.9 437.1 2.06 ± 0.04

Benchmark Results: FibonacciRecursive

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_FibonacciRecursive 886.1 ± 9.0 869.2 895.8 1.01 ± 0.02
main_levm_FibonacciRecursive 1425.8 ± 17.5 1403.5 1456.2 1.63 ± 0.03
pr_revm_FibonacciRecursive 874.1 ± 11.8 855.5 888.6 1.00
pr_levm_FibonacciRecursive 1390.7 ± 20.5 1372.8 1439.1 1.59 ± 0.03

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.6 ± 0.0 8.6 8.7 1.00
main_levm_ManyHashes 14.0 ± 0.1 13.9 14.1 1.62 ± 0.01
pr_revm_ManyHashes 8.6 ± 0.1 8.6 8.8 1.00 ± 0.01
pr_levm_ManyHashes 13.2 ± 0.1 13.0 13.4 1.53 ± 0.02

Benchmark Results: MstoreBench

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_MstoreBench 271.5 ± 5.5 266.1 282.4 1.01 ± 0.02
main_levm_MstoreBench 949.6 ± 8.2 942.3 970.5 3.54 ± 0.04
pr_revm_MstoreBench 268.6 ± 2.1 266.6 273.4 1.00
pr_levm_MstoreBench 957.8 ± 4.9 948.8 965.9 3.57 ± 0.03

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 302.4 ± 5.0 298.4 315.4 1.01 ± 0.02
main_levm_Push 1036.7 ± 4.1 1032.6 1047.3 3.46 ± 0.04
pr_revm_Push 300.0 ± 2.9 297.8 307.9 1.00
pr_levm_Push 1039.4 ± 3.5 1034.9 1047.6 3.46 ± 0.03

@edg-l edg-l changed the title perf(core): improve sstore perf(levm): improve sstore Jul 8, 2025
@edg-l edg-l added levm Lambda EVM implementation and removed L2 Rollup client L1 Ethereum client labels Jul 8, 2025
@edg-l edg-l removed this from ethrex_l1 Jul 8, 2025
@edg-l edg-l removed this from ethrex_l2 Jul 8, 2025
@edg-l edg-l moved this from Todo to In Progress in ethrex_performance Jul 8, 2025
@edg-l edg-l moved this from In Progress to In review in ethrex_performance Jul 9, 2025
@edg-l edg-l marked this pull request as ready for review July 9, 2025 11:13
@edg-l edg-l requested a review from a team as a code owner July 9, 2025 11:13
Copy link

github-actions bot commented Jul 9, 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.179 ± 0.016 3.161 3.214 1.00
main_levm_BubbleSort 4.481 ± 0.021 4.456 4.530 1.41 ± 0.01
pr_revm_BubbleSort 3.180 ± 0.006 3.171 3.186 1.00 ± 0.01
pr_levm_BubbleSort 4.460 ± 0.055 4.421 4.611 1.40 ± 0.02

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.055 ± 0.043 1.032 1.176 1.02 ± 0.04
main_levm_ERC20Approval 1.553 ± 0.004 1.549 1.560 1.50 ± 0.01
pr_revm_ERC20Approval 1.035 ± 0.010 1.023 1.049 1.00
pr_levm_ERC20Approval 1.530 ± 0.008 1.520 1.547 1.48 ± 0.02

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 137.2 ± 0.5 136.1 138.0 1.00 ± 0.01
main_levm_ERC20Mint 260.8 ± 4.0 257.7 270.0 1.91 ± 0.03
pr_revm_ERC20Mint 136.8 ± 0.8 135.9 138.2 1.00
pr_levm_ERC20Mint 247.1 ± 2.2 244.8 252.2 1.81 ± 0.02

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 242.4 ± 2.6 238.9 246.7 1.01 ± 0.01
main_levm_ERC20Transfer 409.7 ± 1.6 407.9 412.7 1.70 ± 0.02
pr_revm_ERC20Transfer 240.8 ± 2.2 238.6 245.0 1.00
pr_levm_ERC20Transfer 394.0 ± 4.1 391.0 404.8 1.64 ± 0.02

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 232.2 ± 1.3 231.2 235.4 1.00 ± 0.01
main_levm_Factorial 477.1 ± 2.2 474.9 481.6 2.05 ± 0.01
pr_revm_Factorial 232.2 ± 0.5 231.1 232.9 1.00
pr_levm_Factorial 487.7 ± 22.7 474.4 531.0 2.10 ± 0.10

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.634 ± 0.025 1.598 1.688 1.00 ± 0.02
main_levm_FactorialRecursive 2.715 ± 0.013 2.698 2.738 1.67 ± 0.03
pr_revm_FactorialRecursive 1.627 ± 0.028 1.578 1.684 1.00
pr_levm_FactorialRecursive 2.801 ± 0.056 2.764 2.915 1.72 ± 0.05

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 213.0 ± 15.5 205.3 255.2 1.03 ± 0.07
main_levm_Fibonacci 466.6 ± 4.0 463.5 475.9 2.26 ± 0.02
pr_revm_Fibonacci 206.7 ± 0.4 206.3 207.7 1.00
pr_levm_Fibonacci 470.9 ± 20.7 462.3 529.4 2.28 ± 0.10

Benchmark Results: FibonacciRecursive

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_FibonacciRecursive 887.1 ± 13.0 860.2 907.8 1.00 ± 0.02
main_levm_FibonacciRecursive 1425.4 ± 5.2 1416.4 1433.2 1.61 ± 0.03
pr_revm_FibonacciRecursive 885.9 ± 13.6 854.6 903.9 1.00
pr_levm_FibonacciRecursive 1481.4 ± 34.8 1444.7 1540.1 1.67 ± 0.05

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.6 ± 0.0 8.6 8.7 1.00
main_levm_ManyHashes 13.2 ± 0.1 13.0 13.4 1.53 ± 0.02
pr_revm_ManyHashes 8.7 ± 0.1 8.6 8.9 1.01 ± 0.01
pr_levm_ManyHashes 13.2 ± 0.4 12.9 14.3 1.53 ± 0.05

Benchmark Results: MstoreBench

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_MstoreBench 266.2 ± 0.8 265.0 267.7 1.00
main_levm_MstoreBench 943.0 ± 3.8 936.3 951.2 3.54 ± 0.02
pr_revm_MstoreBench 267.0 ± 1.4 265.4 270.2 1.00 ± 0.01
pr_levm_MstoreBench 947.8 ± 9.1 938.4 972.4 3.56 ± 0.04

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 296.8 ± 0.7 295.5 297.8 1.00
main_levm_Push 1071.2 ± 31.6 1057.4 1160.4 3.61 ± 0.11
pr_revm_Push 298.1 ± 1.0 296.3 299.8 1.00 ± 0.00
pr_levm_Push 1069.8 ± 4.1 1065.3 1077.9 3.60 ± 0.02

Copy link

github-actions bot commented Jul 9, 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.182 ± 0.015 3.159 3.207 1.00
main_levm_BubbleSort 4.493 ± 0.035 4.460 4.579 1.41 ± 0.01
pr_revm_BubbleSort 3.189 ± 0.010 3.174 3.208 1.00 ± 0.01
pr_levm_BubbleSort 4.485 ± 0.092 4.393 4.608 1.41 ± 0.03

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.030 ± 0.006 1.021 1.037 1.00 ± 0.01
main_levm_ERC20Approval 1.554 ± 0.004 1.550 1.560 1.51 ± 0.01
pr_revm_ERC20Approval 1.027 ± 0.003 1.023 1.031 1.00
pr_levm_ERC20Approval 1.528 ± 0.005 1.523 1.537 1.49 ± 0.01

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 137.4 ± 1.6 136.0 140.4 1.01 ± 0.01
main_levm_ERC20Mint 261.6 ± 1.8 259.0 264.8 1.93 ± 0.02
pr_revm_ERC20Mint 135.8 ± 0.8 135.2 137.1 1.00
pr_levm_ERC20Mint 248.3 ± 1.5 246.1 250.3 1.83 ± 0.02

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 240.1 ± 2.2 237.7 244.0 1.00
main_levm_ERC20Transfer 410.4 ± 3.2 406.7 418.7 1.71 ± 0.02
pr_revm_ERC20Transfer 241.4 ± 6.2 238.2 258.5 1.01 ± 0.03
pr_levm_ERC20Transfer 394.2 ± 3.6 390.9 401.6 1.64 ± 0.02

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 231.8 ± 1.1 229.9 233.4 1.00
main_levm_Factorial 472.6 ± 1.5 471.0 475.7 2.04 ± 0.01
pr_revm_Factorial 233.0 ± 0.9 232.3 235.5 1.01 ± 0.01
pr_levm_Factorial 481.1 ± 17.5 473.6 530.6 2.08 ± 0.08

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.647 ± 0.017 1.621 1.673 1.01 ± 0.02
main_levm_FactorialRecursive 2.753 ± 0.030 2.682 2.781 1.69 ± 0.03
pr_revm_FactorialRecursive 1.628 ± 0.021 1.579 1.656 1.00
pr_levm_FactorialRecursive 2.851 ± 0.074 2.764 2.972 1.75 ± 0.05

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 206.8 ± 0.4 206.1 207.5 1.00
main_levm_Fibonacci 462.8 ± 2.1 459.8 465.6 2.24 ± 0.01
pr_revm_Fibonacci 207.6 ± 1.3 206.6 211.2 1.00 ± 0.01
pr_levm_Fibonacci 464.2 ± 4.2 460.0 475.0 2.24 ± 0.02

Benchmark Results: FibonacciRecursive

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_FibonacciRecursive 894.4 ± 6.9 882.8 903.7 1.02 ± 0.02
main_levm_FibonacciRecursive 1419.0 ± 7.1 1408.1 1428.8 1.62 ± 0.02
pr_revm_FibonacciRecursive 873.8 ± 11.6 848.1 886.4 1.00
pr_levm_FibonacciRecursive 1481.2 ± 27.9 1455.1 1551.4 1.70 ± 0.04

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ManyHashes 8.6 ± 0.0 8.6 8.7 1.00
main_levm_ManyHashes 13.4 ± 0.2 13.2 13.7 1.55 ± 0.02
pr_revm_ManyHashes 8.7 ± 0.1 8.6 8.8 1.01 ± 0.01
pr_levm_ManyHashes 13.2 ± 0.1 13.1 13.3 1.53 ± 0.01

Benchmark Results: MstoreBench

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_MstoreBench 267.8 ± 1.7 265.9 270.5 1.00 ± 0.01
main_levm_MstoreBench 946.9 ± 3.0 943.9 953.5 3.55 ± 0.02
pr_revm_MstoreBench 267.0 ± 0.8 265.9 268.7 1.00
pr_levm_MstoreBench 946.5 ± 2.1 944.2 950.1 3.55 ± 0.01

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 297.5 ± 1.2 296.1 299.4 1.00 ± 0.00
main_levm_Push 1051.3 ± 2.9 1045.4 1053.9 3.54 ± 0.01
pr_revm_Push 296.9 ± 0.5 296.2 297.6 1.00
pr_levm_Push 1077.3 ± 69.1 1051.0 1273.5 3.63 ± 0.23

Copy link

github-actions bot commented Jul 9, 2025

Benchmark for feb08df

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 9, 2025

Benchmark for 60d97d5

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

Copy link

github-actions bot commented Jul 9, 2025

Benchmark Block Execution Results Comparison Against Main

Command Mean [s] Min [s] Max [s] Relative
base 213.448 ± 0.710 212.321 214.597 1.00
head 214.634 ± 0.737 213.818 215.982 1.01 ± 0.00

@edg-l edg-l added this pull request to the merge queue Jul 9, 2025
Merged via the queue into main with commit d454a1b Jul 9, 2025
46 checks passed
@edg-l edg-l deleted the improve_sstore branch July 9, 2025 16:39
@github-project-automation github-project-automation bot moved this from In review to Done in ethrex_performance Jul 9, 2025
d-roak pushed a commit to 1sixtech/ethrex that referenced this pull request Jul 17, 2025
**Motivation**

Locally the sstore bench from
lambdaclass#3552 goes from 2x worse to a
bit better than revm

Gas benchmarks improve 2x

<!-- Why does this pull request exist? What are its goals? -->

**Description**

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

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

Closes #issue_number
pedrobergamini pushed a commit to pedrobergamini/ethrex that referenced this pull request Aug 24, 2025
**Motivation**

Locally the sstore bench from
lambdaclass#3552 goes from 2x worse to a
bit better than revm

Gas benchmarks improve 2x

<!-- Why does this pull request exist? What are its goals? -->

**Description**

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

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

Closes #issue_number
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
levm Lambda EVM implementation performance
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

3 participants