lighthouse/consensus
Michael Sproul 9c785a9b33 Optimize process_attestation with active balance cache (#2560)
## Proposed Changes

Cache the total active balance for the current epoch in the `BeaconState`. Computing this value takes around 1ms, and this was negatively impacting block processing times on Prater, particularly when reconstructing states.

With a large number of attestations in each block, I saw the `process_attestations` function taking 150ms, which means that reconstructing hot states can take up to 4.65s (31 * 150ms), and reconstructing freezer states can take up to 307s (2047 * 150ms).

I opted to add the cache to the beacon state rather than computing the total active balance at the start of state processing and threading it through. Although this would be simpler in a way, it would waste time, particularly during block replay, as the total active balance doesn't change for the duration of an epoch. So we save ~32ms for hot states, and up to 8.1s for freezer states (using `--slots-per-restore-point 8192`).
2021-09-03 07:50:43 +00:00
..
cached_tree_hash Updates to make crates publishable (#2472) 2021-09-03 01:10:25 +00:00
fork_choice Updates to make crates publishable (#2472) 2021-09-03 01:10:25 +00:00
int_to_bytes Update to tokio 1.1 (#2172) 2021-02-10 23:29:49 +00:00
merkle_proof Updates to make crates publishable (#2472) 2021-09-03 01:10:25 +00:00
proto_array Updates to make crates publishable (#2472) 2021-09-03 01:10:25 +00:00
safe_arith Remove saturating arith from state_processing (#1644) 2020-09-25 05:18:21 +00:00
serde_utils Updates to make crates publishable (#2472) 2021-09-03 01:10:25 +00:00
ssz Updates to make crates publishable (#2472) 2021-09-03 01:10:25 +00:00
ssz_derive Updates to make crates publishable (#2472) 2021-09-03 01:10:25 +00:00
ssz_types Updates to make crates publishable (#2472) 2021-09-03 01:10:25 +00:00
state_processing Optimize process_attestation with active balance cache (#2560) 2021-09-03 07:50:43 +00:00
swap_or_not_shuffle Updates to make crates publishable (#2472) 2021-09-03 01:10:25 +00:00
tree_hash Updates to make crates publishable (#2472) 2021-09-03 01:10:25 +00:00
tree_hash_derive Updates to make crates publishable (#2472) 2021-09-03 01:10:25 +00:00
types Optimize process_attestation with active balance cache (#2560) 2021-09-03 07:50:43 +00:00