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

[R4R]: Improve state prefetch #950

Merged
merged 2 commits into from
Jun 24, 2022

Conversation

setunapo
Copy link
Contributor

@setunapo setunapo commented Jun 17, 2022

Description

State Prefetch was first implemented in v1.1.8, see PR 704. It improved the performance of block process a lot by improving the snapshot cache hit rate.
This PR did not change its logic, but did some improvements.

Rationale

1.Use AsMessageNoNonceCheck to skip nonce check for prefetch transactions.
For state prefetch, no need to check transaction's nonce, since the transaction's result will be discarded anyway.
2.Improve the transaction dispatch policy
** Replace atomic read by channel close to interrupt state prefetch
** Try to do state prefetch when the prefetch thread is idle, no need to divide into 3 sub-arrays

Example

I add some tracing logs to show the workflow of state prefetch.
As the bellow tracing show, we have 3 prefetch thread. Before the PR, their workload is not balanced. After the PR, the workload is balanced.
image

Changes

No impact to users

For state prefetch, no need to check transaction's nonce,
since the transaction's result will be discarded anyway.
@setunapo setunapo force-pushed the improve_state_prefetch branch 2 times, most recently from 56eca61 to 5c63bf9 Compare June 17, 2022 22:56
@setunapo setunapo force-pushed the improve_state_prefetch branch 2 times, most recently from c224b6f to b188095 Compare June 20, 2022 01:10
core/blockchain.go Outdated Show resolved Hide resolved
@setunapo setunapo force-pushed the improve_state_prefetch branch 2 times, most recently from 52f630c to a14317d Compare June 20, 2022 05:50
unclezoro
unclezoro previously approved these changes Jun 20, 2022
@unclezoro unclezoro changed the title [WIP]: Improve state prefetch [R4R]: Improve state prefetch Jun 20, 2022
core/blockchain.go Outdated Show resolved Hide resolved
** replace atomic read by channel close to interrupt state prefetch
** try to do state prefetch when the prefetch thread is idle, no need to divide into 3 sub-arrays
   it will make the prefetchers workload balance
@brilliant-lx brilliant-lx merged commit 5b5cc00 into bnb-chain:develop Jun 24, 2022
This was referenced Jul 28, 2022
@setunapo setunapo deleted the improve_state_prefetch branch February 5, 2023 04:41
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.

None yet

7 participants