You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
023cd5a txgraph: add SingletonClusterImpl (mem optimization) (Pieter Wuille)
e346250 txgraph: give Clusters a range of intended tx counts (preparation) (Pieter Wuille)
e93b0f0 txgraph: abstract out creation of empty Clusters (refactor) (Pieter Wuille)
6baf126 txgraph: comment fixes (doc fix) (Pieter Wuille)
726b995 txgraph: make Cluster an abstract class (refactor) (Pieter Wuille)
2602d89 txgraph: avoid accessing other Cluster internals (refactor) (Pieter Wuille)
04c808a txgraph: expose memory usage estimate function (feature) (Pieter Wuille)
7680bb8 txgraph: keep track of Cluster memory usage (preparation) (Pieter Wuille)
4ba562e txgraph: keep data structures compact (mem optimization) (Pieter Wuille)
bb5cb22 depgraph: add memory usage control (feature) (Pieter Wuille)
b1637a9 txgraph: avoid holes in DepGraph positions (mem optimization) (Pieter Wuille)
2b1d302 txgraph: move some sanity checks from Cluster to TxGraphImpl (refactor) (Pieter Wuille)
d40302f txgraph: Make level of Cluster implicit (optimization) (Pieter Wuille)
Pull request description:
Part of #30289.
This adds a few optimizations to reduce `TxGraph`'s memory usage, and makes sure that dynamic memory it uses doesn't linger after shrinking clusters. Finally, it exposes a function `GetMainMemoryUsage()` to compute `TxGraph`'s approximate memory usage.
It makes the `Cluster` type abstract, with two instances (`SingletonClusterImpl` for 1-transaction clusters, and `GenericClusterImpl` for others).
On my 64-bit system, I obtain the following numbers:
* `SingletonClusterImpl`: 48 bytes, plus 16 bytes malloc overhead in its `unique_ptr`, plus 8-byte pointer in `m_clusters`
* `GenericClusterImpl`: 104 bytes, plus 16 bytes malloc overhead in its `unique_ptr`, plus 8-byte pointer in `m_clusters`, plus 72 bytes malloc overhead inside its vectors and `DepGraph`, plus 40 bytes per transaction in those.
* `TxGraphImpl::Entry`: 72 bytes per transaction
* `TxGraphImpl::ChunkData`: 8 bytes, plus 56 bytes in `std::set` overhead + malloc overhead, all per chunk.
* `TxGraph::Ref`: 16 bytes per transaction
This overall amounts to 200 bytes per cluster, plus 64 bytes per chunk, plus 128 bytes per transaction, but only 224 bytes overall per singleton cluster.
ACKs for top commit:
l0rinc:
code review reACK 023cd5a
instagibbs:
reACK 023cd5a
ismaelsadeeq:
reACK 023cd5a 🚢
glozow:
reACK 023cd5a
Tree-SHA512: c957b27f47318be7c25d71453df2ae9d4e7bf21dab13b6e5e975cca122a221a99b15c584872491225785d276a9165f090675ee0f4460a2775bd3271933e3b246
0 commit comments