Skip to content

Conversation

@JereSalo
Copy link
Contributor

@JereSalo JereSalo commented Nov 29, 2025

Motivation

  • Try to see if we can optimize mulmod becuase we've seen mainnet blocks in which it's an expensive operation

Description

  • Optimize mulmod for SP1. This is in draft and has experimental changes but using a SP1 patched function (not in a pretty manner) yielded 57x in Mulmod in Block 23890684, which is great.

Closes #issue_number

@github-actions github-actions bot added L1 Ethereum client L2 Rollup client performance Block execution throughput and performance in general labels Nov 29, 2025
@github-actions
Copy link

Lines of code report

Total lines added: 63
Total lines removed: 0
Total lines changed: 63

Detailed view
+---------------------------------------------------------+-------+------+
| File                                                    | Lines | Diff |
+---------------------------------------------------------+-------+------+
| ethrex/crates/vm/levm/src/opcode_handlers/arithmetic.rs | 275   | +63  |
+---------------------------------------------------------+-------+------+

@github-actions
Copy link

Benchmark Results Comparison

Benchmark Results: Fibonacci

Command Mean [s] Min [s] Max [s] Relative
main_revm_Fibonacci 247.3 ± 125.1 206.2 603.2 1.22 ± 0.62
main_levm_Fibonacci 251.9 ± 3.3 247.7 259.2 1.24 ± 0.02
pr_revm_Fibonacci 202.3 ± 1.5 200.9 205.8 1.00
Detailed Results

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
main_revm_BubbleSort 3.017 ± 0.027 2.994 3.085 1.00
main_levm_BubbleSort 3.160 ± 0.027 3.128 3.225 1.05 ± 0.01
pr_revm_BubbleSort 3.023 ± 0.046 2.978 3.110 1.00 ± 0.02
pr_levm_BubbleSort 3.133 ± 0.021 3.109 3.162 1.04 ± 0.01

Benchmark Results: ERC20Approval

Command Mean [s] Min [s] Max [s] Relative
main_revm_ERC20Approval 1.017 ± 0.010 1.008 1.035 1.01 ± 0.01
main_levm_ERC20Approval 1.093 ± 0.017 1.078 1.135 1.09 ± 0.02
pr_revm_ERC20Approval 1.002 ± 0.006 0.994 1.015 1.00
pr_levm_ERC20Approval 1.084 ± 0.016 1.069 1.121 1.08 ± 0.02

Benchmark Results: ERC20Mint

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Mint 135.7 ± 1.6 133.9 138.0 1.00
main_levm_ERC20Mint 160.6 ± 1.4 158.7 162.6 1.18 ± 0.02
pr_revm_ERC20Mint 135.9 ± 2.3 134.7 142.3 1.00 ± 0.02
pr_levm_ERC20Mint 159.3 ± 1.0 157.9 161.2 1.17 ± 0.02

Benchmark Results: ERC20Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_ERC20Transfer 244.3 ± 4.1 240.4 253.7 1.04 ± 0.02
main_levm_ERC20Transfer 280.1 ± 2.6 275.5 283.2 1.19 ± 0.01
pr_revm_ERC20Transfer 234.8 ± 1.8 231.2 238.5 1.00
pr_levm_ERC20Transfer 280.2 ± 4.3 274.9 289.4 1.19 ± 0.02

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Factorial 223.1 ± 1.0 221.4 225.4 1.00 ± 0.01
main_levm_Factorial 272.8 ± 2.6 269.3 278.5 1.23 ± 0.01
pr_revm_Factorial 222.7 ± 0.9 221.5 224.5 1.00
pr_levm_Factorial 273.5 ± 2.1 271.2 276.8 1.23 ± 0.01

Benchmark Results: FactorialRecursive

Command Mean [s] Min [s] Max [s] Relative
main_revm_FactorialRecursive 1.658 ± 0.041 1.596 1.713 1.00
main_levm_FactorialRecursive 8.578 ± 0.063 8.483 8.668 5.17 ± 0.13
pr_revm_FactorialRecursive 1.659 ± 0.031 1.609 1.700 1.00 ± 0.03
pr_levm_FactorialRecursive 8.483 ± 0.079 8.368 8.628 5.12 ± 0.14

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Fibonacci 247.3 ± 125.1 206.2 603.2 1.22 ± 0.62
main_levm_Fibonacci 251.9 ± 3.3 247.7 259.2 1.24 ± 0.02
pr_revm_Fibonacci 202.3 ± 1.5 200.9 205.8 1.00
pr_levm_Fibonacci 260.9 ± 6.4 249.0 273.7 1.29 ± 0.03

Benchmark Results: FibonacciRecursive

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_FibonacciRecursive 864.6 ± 9.4 855.0 883.7 1.19 ± 0.02
main_levm_FibonacciRecursive 725.8 ± 5.1 719.3 736.2 1.00
pr_revm_FibonacciRecursive 850.8 ± 7.9 842.1 866.7 1.17 ± 0.01
pr_levm_FibonacciRecursive 727.9 ± 9.6 719.2 754.0 1.00 ± 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.00 ± 0.01
main_levm_ManyHashes 9.2 ± 0.1 9.0 9.5 1.05 ± 0.02
pr_revm_ManyHashes 8.8 ± 0.1 8.7 8.9 1.00
pr_levm_ManyHashes 9.1 ± 0.1 9.1 9.3 1.04 ± 0.01

Benchmark Results: MstoreBench

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_MstoreBench 252.1 ± 1.7 250.4 255.1 1.08 ± 0.01
main_levm_MstoreBench 237.4 ± 5.4 233.2 251.6 1.01 ± 0.02
pr_revm_MstoreBench 255.3 ± 7.4 250.3 272.1 1.09 ± 0.03
pr_levm_MstoreBench 234.2 ± 1.8 231.8 238.3 1.00

Benchmark Results: Push

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_Push 284.1 ± 0.5 283.3 285.0 1.00
main_levm_Push 302.8 ± 1.5 301.1 305.6 1.07 ± 0.01
pr_revm_Push 286.0 ± 1.5 284.5 288.8 1.01 ± 0.01
pr_levm_Push 295.5 ± 13.5 290.0 333.7 1.04 ± 0.05

Benchmark Results: SstoreBench_no_opt

Command Mean [ms] Min [ms] Max [ms] Relative
main_revm_SstoreBench_no_opt 166.0 ± 2.4 161.0 168.0 1.84 ± 0.06
main_levm_SstoreBench_no_opt 91.0 ± 3.0 88.1 98.8 1.01 ± 0.04
pr_revm_SstoreBench_no_opt 167.4 ± 6.0 161.2 182.5 1.85 ± 0.08
pr_levm_SstoreBench_no_opt 90.3 ± 2.4 88.0 96.5 1.00

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

Labels

L1 Ethereum client L2 Rollup client performance Block execution throughput and performance in general

Projects

Status: No status
Status: No status
Status: Todo

Development

Successfully merging this pull request may close these issues.

2 participants