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

@setunapo setunapo force-pushed the improve_state_prefetch branch from 17476e4 to 6e921f5 Compare June 17, 2022 08:02
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
@setunapo setunapo force-pushed the improve_state_prefetch branch from a14317d to 3510b90 Compare June 20, 2022 05:56
core/blockchain.go Outdated Show resolved Hide resolved
@setunapo setunapo force-pushed the improve_state_prefetch branch from 3510b90 to f79fa19 Compare June 20, 2022 06:45
** 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
@setunapo setunapo force-pushed the improve_state_prefetch branch from f79fa19 to 8c36d29 Compare June 20, 2022 07:00
@setunapo setunapo requested review from qinglin89 and unclezoro June 20, 2022 07:13
@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.

7 participants