Skip to content

Commit 5473aca

Browse files
pks-tgitster
authored andcommitted
reftable/merged: really reuse buffers to compute record keys
In 829231d (reftable/merged: reuse buffer to compute record keys, 2023-12-11), we have refactored the merged iterator to reuse a pair of long-living strbufs by relying on the fact that `reftable_record_key()` tries to reuse already allocated strbufs by calling `strbuf_reset()`, which should give us significantly fewer reallocations compared to the old code that used on-stack strbufs that are allocated for each and every iteration. Unfortunately, we called `strbuf_release()` on these long-living strbufs that we meant to reuse on each iteration, defeating the optimization. Fix this performance issue by not releasing those buffers on iteration anymore, where we instead rely on `merged_iter_close()` to release the buffers for us. Using `git show-ref --quiet` in a repository with ~350k refs this leads to a significant drop in allocations. Before: HEAP SUMMARY: in use at exit: 21,163 bytes in 193 blocks total heap usage: 1,410,148 allocs, 1,409,955 frees, 61,976,068 bytes allocated After: HEAP SUMMARY: in use at exit: 21,163 bytes in 193 blocks total heap usage: 708,058 allocs, 707,865 frees, 36,783,255 bytes allocated Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent b31e3cc commit 5473aca

File tree

1 file changed

+0
-2
lines changed

1 file changed

+0
-2
lines changed

reftable/merged.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,6 @@ static int merged_iter_next_entry(struct merged_iter *mi,
128128

129129
done:
130130
reftable_record_release(&entry.rec);
131-
strbuf_release(&mi->entry_key);
132-
strbuf_release(&mi->key);
133131
return err;
134132
}
135133

0 commit comments

Comments
 (0)