Skip to content
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

perf(l2): add prover benchmarks from L1 RPC downloaded blocks #1705

Open
wants to merge 102 commits into
base: main
Choose a base branch
from

Conversation

xqft
Copy link
Contributor

@xqft xqft commented Jan 13, 2025

Motivation

We want to benchmark the L2 prover against rsp, using Ethereum mainnet/testnet blocks. For this we need to fetch state from an Ethereum chain.

Description

  • adds l2/prover/bench crate

  • adds state fetching functions from the JSON-RPC API (account, block, storage, proofs)

  • adds a RpcDB type to download and cache needed state during block execution

  • adds an execute() function to the Prover type

  • fixes state verification (via state and storage MPTs), verify_db()

  • fixes withdrawals not being processed when using ExecutionDB

  • fixes beacon root call state changes not being comitted when using ExecutionDB

Copy link

github-actions bot commented Jan 13, 2025

| File                                                                       | Lines | Diff |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/cmd/ethrex/cli.rs                          | 143   | -8   |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/cmd/ethrex/ethrex.rs                       | 404   | -24  |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/common/types/block.rs               | 648   | -1   |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/l2/proposer/prover_server.rs        | 459   | +8   |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/l2/prover/bench/src/cache.rs        | 23    | +23  |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/l2/prover/bench/src/constants.rs    | 35    | +35  |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/l2/prover/bench/src/lib.rs          | 3     | +3   |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/l2/prover/bench/src/main.rs         | 101   | +101 |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/l2/prover/bench/src/rpc/db.rs       | 416   | +416 |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/l2/prover/bench/src/rpc/mod.rs      | 319   | +319 |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/l2/prover/src/prover.rs             | 140   | +22  |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/l2/prover/zkvm/interface/src/lib.rs | 179   | +15  |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/l2/utils/prover/proving_systems.rs  | 127   | +4   |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/l2/utils/test_data_io.rs            | 88    | +3   |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/vm/backends/revm.rs                 | 498   | +17  |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/vm/db.rs                            | 279   | +104 |
+----------------------------------------------------------------------------+-------+------+
| /home/runner/work/ethrex/ethrex/crates/vm/execution_db.rs                  | 171   | -58  |
+----------------------------------------------------------------------------+-------+------+

Total lines added: +1070
Total lines removed: 91
Total lines changed: 1161

@xqft xqft changed the base branch from main to l2/touched_state January 15, 2025 20:46
Copy link

github-actions bot commented Feb 10, 2025

Summary: 11318/14408 (78.55%)

Prague: 2373/2373 (100.00%)
Cancun: 3579/3579 (100.00%)
Shanghai: 221/221 (100.00%)
Paris: 62/62 (100.00%)
London: 39/39 (100.00%)
Berlin: 2/35 (5.71%)
Istanbul: 34/35 (97.14%)
Constantinople: 1685/2439 (69.09%)
Byzantium: 1795/2330 (77.04%)
Homestead: 612/1324 (46.22%)
Frontier: 149/742 (20.08%)

Copy link

github-actions bot commented Feb 10, 2025

Benchmark Results Comparison

PR Results

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
revm_Factorial 231.6 ± 1.1 230.5 233.6 1.00
levm_Factorial 902.0 ± 8.9 894.8 917.5 3.90 ± 0.04

Benchmark Results: Factorial - Recursive

Command Mean [s] Min [s] Max [s] Relative
revm_FactorialRecursive 1.454 ± 0.062 1.354 1.577 1.00
levm_FactorialRecursive 15.687 ± 0.028 15.647 15.723 10.79 ± 0.46

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
revm_Fibonacci 208.6 ± 3.2 206.5 216.8 1.00
levm_Fibonacci 901.9 ± 7.6 892.3 919.4 4.32 ± 0.08

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ManyHashes 8.8 ± 0.7 8.5 10.8 1.00
levm_ManyHashes 18.5 ± 0.2 18.1 18.7 2.09 ± 0.17

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
revm_BubbleSort 3.206 ± 0.026 3.191 3.274 1.00
levm_BubbleSort 6.205 ± 0.042 6.166 6.273 1.94 ± 0.02

Benchmark Results: ERC20 - Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ERC20Transfer 248.3 ± 1.1 247.1 250.6 1.00
levm_ERC20Transfer 547.4 ± 6.8 539.8 564.4 2.20 ± 0.03

Benchmark Results: ERC20 - Mint

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ERC20Mint 140.5 ± 0.5 139.8 141.2 1.00
levm_ERC20Mint 356.3 ± 2.6 353.7 361.1 2.54 ± 0.02

Benchmark Results: ERC20 - Approval

Command Mean [s] Min [s] Max [s] Relative
revm_ERC20Approval 1.052 ± 0.036 1.024 1.150 1.00
levm_ERC20Approval 2.052 ± 0.012 2.039 2.078 1.95 ± 0.07

Main Results

Benchmark Results: Factorial

Command Mean [ms] Min [ms] Max [ms] Relative
revm_Factorial 240.1 ± 21.7 229.8 301.4 1.00
levm_Factorial 917.1 ± 41.3 896.3 1033.4 3.82 ± 0.39

Benchmark Results: Factorial - Recursive

Command Mean [s] Min [s] Max [s] Relative
revm_FactorialRecursive 1.429 ± 0.101 1.324 1.569 1.00
levm_FactorialRecursive 15.682 ± 0.028 15.627 15.731 10.97 ± 0.78

Benchmark Results: Fibonacci

Command Mean [ms] Min [ms] Max [ms] Relative
revm_Fibonacci 208.2 ± 2.0 206.2 212.4 1.00
levm_Fibonacci 931.1 ± 55.8 884.2 1045.5 4.47 ± 0.27

Benchmark Results: ManyHashes

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ManyHashes 8.7 ± 0.1 8.6 8.8 1.00
levm_ManyHashes 18.4 ± 0.5 18.0 19.7 2.12 ± 0.06

Benchmark Results: BubbleSort

Command Mean [s] Min [s] Max [s] Relative
revm_BubbleSort 3.223 ± 0.014 3.204 3.243 1.00
levm_BubbleSort 6.170 ± 0.045 6.117 6.249 1.91 ± 0.02

Benchmark Results: ERC20 - Transfer

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ERC20Transfer 249.2 ± 2.4 246.5 253.6 1.00
levm_ERC20Transfer 543.6 ± 2.6 540.6 549.0 2.18 ± 0.02

Benchmark Results: ERC20 - Mint

Command Mean [ms] Min [ms] Max [ms] Relative
revm_ERC20Mint 140.7 ± 0.7 139.7 141.9 1.00
levm_ERC20Mint 356.8 ± 4.9 352.7 367.8 2.54 ± 0.04

Benchmark Results: ERC20 - Approval

Command Mean [s] Min [s] Max [s] Relative
revm_ERC20Approval 1.038 ± 0.005 1.029 1.044 1.00
levm_ERC20Approval 2.054 ± 0.059 2.022 2.221 1.98 ± 0.06

@xqft xqft marked this pull request as ready for review February 11, 2025 17:01
@xqft xqft requested a review from a team as a code owner February 11, 2025 17:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants