-
Notifications
You must be signed in to change notification settings - Fork 148
Open
Labels
Description
Depends on EIP-7928 being implemented first which is being tracked here: #3735
The main benefit of BALs is that they enable deterministic transaction parallelization because the transaction dependencies and storage access locations are known up front.
The areas that we may be able to parallelize to improve performance include:
- IO - All state read by the block can be pre-fetched in parallel using the account and storage locations contained in the BAL.
- Execution - Transactions can be executed in parallel regardless of dependencies between them using the post execution values in the BAL.
- Stateroot computation - We should in theory be able to parallelize the stateroot computation to some extent after applying the state updates to the database.
To-Do:
- Optimize single threaded performance - It makes sense to start by profiling the existing code before adding in multi-threaded execution.
- Optimize IO - Can start by using the RocksDb multiGet API to prefetch all the block state and then also using multiple threads to fetch in parallel (one task per transaction).
- Implement parallel transaction execution using the TaskPool threadpool scheduler. One task per transaction.
- Implement parallel stateroot computation.
kdeme