[PATCH 0/9] reftable: optimize table and block iterators
From: Patrick Steinhardt <hidden>
Date: 2024-03-27 06:36:56
Hi,
* The code to iterate over reftable blocks has seen some optimization
to reduce memory allocation and deallocation.
Preceding patch series have optimized memory allocation patterns when
iterating through ref or log records. This has led to a constant number
of allocations when decoding and yielding those records to our callers.
One thing that is still missing though is an optimization for the table
and block iterators which are responsible for iterating through the
separate blocks in the table. So while the number of allocations does
not scale with the number of refs (directly) anymore, it still scales
with the number of blocks.
This is getting tackled by this patch series now which refactors the
table and block iterators such that the former can reuse the latter
without reallocations. With this change iterating through records is now
using a truly constant number of allocations.
Patrick
Patrick Steinhardt (9):
reftable/block: rename `block_reader_start()`
reftable/block: merge `block_iter_seek()` and `block_reader_seek()`
reftable/block: better grouping of functions
reftable/block: introduce `block_reader_release()`
reftable/block: move ownership of block reader into `struct
table_iter`
reftable/reader: iterate to next block in place
reftable/block: reuse uncompressed blocks
reftable/block: open-code call to `uncompress2()`
reftable/block: reuse `zstream` state on inflation
reftable/block.c | 152 ++++++++++++++++++++++--------------
reftable/block.h | 49 +++++++-----
reftable/block_test.c | 6 +-
reftable/iter.c | 2 +-
reftable/reader.c | 176 ++++++++++++++++++++++--------------------
5 files changed, 222 insertions(+), 163 deletions(-)
--
2.44.GIT
Attachments
- signature.asc [application/pgp-signature] 833 bytes