On 2024.03.05 13:10, Patrick Steinhardt wrote: > Hi, > > this patch series does the same as all the preceding patch series that > optimized how the reftable library iterates through refs, but for > reflogs instead. > > The goal of this patch series is to arrive at a constant number of > allocations when iterating refs. This is achieved in mostly the same way > we did it for ref iteration, namely by reusing already-allocated memory. > Overall, this brings us down from 8 allocations per reflog record to > essentially 0 allocations per reflog. Iterating through 1 million > reflogs with `git reflog list` thus goes down from 8.068m allocations to > only around 68.5k. > > This series is built on top of "master" at b387623c12 (The third batch, > 2024-03-01) with Junio's "ps/reftable-iteration-perf-part2" at > 43f70eaea0 (refs/reftable: precompute prefix length, 2024-03-04) merged > into it. > > Patrick > > Patrick Steinhardt (7): > refs/reftable: reload correct stack when creating reflog iter > reftable/record: convert old and new object IDs to arrays > reftable/record: avoid copying author info > reftable/record: reuse refnames when decoding log records > reftable/record: reuse message when decoding log records > reftable/record: use scratch buffer when decoding records > refs/reftable: track last log record name via strbuf > > refs/reftable-backend.c | 52 +++++---------- > reftable/block.c | 4 +- > reftable/block.h | 2 + > reftable/merged_test.c | 11 ++-- > reftable/readwrite_test.c | 62 +++++++----------- > reftable/record.c | 129 ++++++++++++++----------------------- > reftable/record.h | 5 +- > reftable/record_test.c | 68 ++++++++++--------- > reftable/reftable-record.h | 6 +- > reftable/stack_test.c | 26 ++++---- > 10 files changed, 154 insertions(+), 211 deletions(-) > > -- > 2.44.0 > This series looks good to me (with one request that we add a test for patch #1 if possible). Reviewed-by: Josh Steadmon <steadmon@xxxxxxxxxx>