go-ethereum/triedb/pathdb
Delweng a487729d83
triedb/pathdb: improve the performance of parse index block (#32219)
The implementation of `parseIndexBlock` used a reverse loop with slice
appends to build the restart points, which was less cache-friendly and
involved unnecessary allocations and operations. In this PR we change
the implementation to read and validate the restart points in one single
forward loop.

Here is the benchmark test:

```bash
go test -benchmem -bench=BenchmarkParseIndexBlock ./triedb/pathdb/
```

The result as below:

```
benchmark                      old ns/op     new ns/op     delta
BenchmarkParseIndexBlock-8     52.9          37.5          -29.05%
```

about 29% improvements

---------

Signed-off-by: jsvisa <delweng@gmail.com>
2025-07-17 11:07:22 +08:00
..
buffer.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
context.go core, triedb/pathdb: final integration (snapshot integration pt 5) (#30661) 2025-05-16 18:29:38 +08:00
database.go triedb/pathdb: introduce file-based state journal (#32060) 2025-07-15 11:45:20 +08:00
database_test.go triedb/pathdb: introduce file-based state journal (#32060) 2025-07-15 11:45:20 +08:00
difflayer.go triedb/pathdb: introduce lookup structure to optimize state access (#30971) 2025-05-28 13:31:42 +02:00
difflayer_test.go all: implement state history v2 (#30107) 2025-01-17 02:59:02 +01:00
disklayer.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
errors.go core, triedb/pathdb: final integration (snapshot integration pt 5) (#30661) 2025-05-16 18:29:38 +08:00
execute.go all: reuse the global hash buffer (#31839) 2025-06-18 15:29:14 +08:00
fileutils_unix.go triedb/pathdb: introduce file-based state journal (#32060) 2025-07-15 11:45:20 +08:00
fileutils_windows.go triedb/pathdb: introduce file-based state journal (#32060) 2025-07-15 11:45:20 +08:00
flush.go core, triedb/pathdb: final integration (snapshot integration pt 5) (#30661) 2025-05-16 18:29:38 +08:00
generate.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
generate_test.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
history.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
history_index.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
history_index_block.go triedb/pathdb: improve the performance of parse index block (#32219) 2025-07-17 11:07:22 +08:00
history_index_block_test.go triedb/pathdb: improve the performance of parse index block (#32219) 2025-07-17 11:07:22 +08:00
history_index_test.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
history_indexer.go core/rawdb, triedb/pathdb: fix two inaccurate comments (#32130) 2025-07-02 08:46:03 +08:00
history_inspect.go all: update license comments and AUTHORS (#31133) 2025-02-05 23:01:17 +01:00
history_reader.go triedb/pathdb: avoid duplicate metadata reads (#32226) 2025-07-17 10:44:35 +08:00
history_reader_test.go triedb/pathdb: introduce file-based state journal (#32060) 2025-07-15 11:45:20 +08:00
history_test.go all: update license comments and AUTHORS (#31133) 2025-02-05 23:01:17 +01:00
holdable_iterator.go trie/pathdb: state iterator (snapshot integration pt 4) (#30654) 2024-12-16 21:10:08 +08:00
holdable_iterator_test.go trie/pathdb: state iterator (snapshot integration pt 4) (#30654) 2024-12-16 21:10:08 +08:00
iterator.go core, triedb/pathdb: final integration (snapshot integration pt 5) (#30661) 2025-05-16 18:29:38 +08:00
iterator_binary.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
iterator_fast.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
iterator_test.go triedb/pathdb: fix journal resolution in pathdb (#32097) 2025-06-26 17:19:02 +02:00
journal.go triedb/pathdb: introduce file-based state journal (#32060) 2025-07-15 11:45:20 +08:00
layertree.go triedb/pathdb: introduce lookup structure to optimize state access (#30971) 2025-05-28 13:31:42 +02:00
layertree_test.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
lookup.go triedb/pathdb: introduce lookup structure to optimize state access (#30971) 2025-05-28 13:31:42 +02:00
metrics.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
nodes.go triedb/pathdb: improve perf by separating nodes map (#31306) 2025-04-02 15:06:54 +08:00
reader.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
states.go triedb/pathdb: fix journal resolution in pathdb (#32097) 2025-06-26 17:19:02 +02:00
states_test.go all: update license comments and AUTHORS (#31133) 2025-02-05 23:01:17 +01:00
verifier.go cmd/geth, triedb: add pathdb state verification (#32086) 2025-06-24 21:06:20 +08:00