mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-03 00:31:50 +00:00
Hierarchical state diffs in hot DB (#6750)
This PR implements https://github.com/sigp/lighthouse/pull/5978 (tree-states) but on the hot DB. It allows Lighthouse to massively reduce its disk footprint during non-finality and overall I/O in all cases.
Closes https://github.com/sigp/lighthouse/issues/6580
Conga into https://github.com/sigp/lighthouse/pull/6744
### TODOs
- [x] Fix OOM in CI https://github.com/sigp/lighthouse/pull/7176
- [x] optimise store_hot_state to avoid storing a duplicate state if the summary already exists (should be safe from races now that pruning is cleaner)
- [x] mispelled: get_ancenstor_state_root
- [x] get_ancestor_state_root should use state summaries
- [x] Prevent split from changing during ancestor calc
- [x] Use same hierarchy for hot and cold
### TODO Good optimization for future PRs
- [ ] On the migration, if the latest hot snapshot is aligned with the cold snapshot migrate the diffs instead of the full states.
```
align slot time
10485760 Nov-26-2024
12582912 Sep-14-2025
14680064 Jul-02-2026
```
### TODO Maybe things good to have
- [ ] Rename anchor_slot https://github.com/sigp/lighthouse/compare/tree-states-hot-rebase-oom...dapplion:lighthouse:tree-states-hot-anchor-slot-rename?expand=1
- [ ] Make anchor fields not public such that they must be mutated through a method. To prevent un-wanted changes of the anchor_slot
### NOTTODO
- [ ] Use fork-choice and a new method [`descendants_of_checkpoint`](ca2388e196 (diff-046fbdb517ca16b80e4464c2c824cf001a74a0a94ac0065e635768ac391062a8)) to filter only the state summaries that descend of finalized checkpoint]
This commit is contained in:
@@ -171,10 +171,10 @@ Options:
|
||||
Specify your custom graffiti to be included in blocks. Defaults to the
|
||||
current version and commit, truncated to fit in 32 bytes.
|
||||
--hdiff-buffer-cache-size <SIZE>
|
||||
Number of hierarchical diff (hdiff) buffers to cache in memory. Each
|
||||
buffer is around the size of a BeaconState so you should be cautious
|
||||
about setting this value too high. This flag is irrelevant for most
|
||||
nodes, which run with state pruning enabled. [default: 16]
|
||||
Number of cold hierarchical diff (hdiff) buffers to cache in memory.
|
||||
Each buffer is around the size of a BeaconState so you should be
|
||||
cautious about setting this value too high. This flag is irrelevant
|
||||
for most nodes, which run with state pruning enabled. [default: 16]
|
||||
--hierarchy-exponents <EXPONENTS>
|
||||
Specifies the frequency for storing full state snapshots and
|
||||
hierarchical diffs in the freezer DB. Accepts a comma-separated list
|
||||
@@ -187,6 +187,12 @@ Options:
|
||||
--historic-state-cache-size <SIZE>
|
||||
Specifies how many states from the freezer database should be cached
|
||||
in memory [default: 1]
|
||||
--hot-hdiff-buffer-cache-size <SIZE>
|
||||
Number of hot hierarchical diff (hdiff) buffers to cache in memory.
|
||||
Each buffer is around the size of a BeaconState so you should be
|
||||
cautious about setting this value too high. Setting this value higher
|
||||
can reduce the time taken to store new states on disk at the cost of
|
||||
higher memory usage. [default: 1]
|
||||
--http-address <ADDRESS>
|
||||
Set the listen address for the RESTful HTTP API server.
|
||||
--http-allow-origin <ORIGIN>
|
||||
|
||||
Reference in New Issue
Block a user