Re: [PATCH 05/10] refs: use "initial" transaction semantics to migrate refs
- From
karthik nayak <karthik.188@gmail.com>
- Date
- Nov 11, 2024, 10:43 UTC
- Message-ID
- <CAOLa=ZSOVYKgwkm-4w6cr_SSpGTJ2QMC-5pa3xm3mR5sBWmYMQ@mail.gmail.com>
- In-Reply-To
- <20241108-pks-refs-optimize-migrations-v1-5-7fd37fa80e35@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
Show 27 quoted lines
> Until now, we couldn't use "initial" transaction semantics to migrate > refs because the "files" backend only supported writing regular refs via > the initial transaction because it simply mapped the transaction to a > "packed-refs" transaction. But with the preceding commit, the "files" > backend has learned to also write symbolic and root refs in the initial > transaction by creating a second transaction for all refs that need to > be written as loose refs. > > Adapt the code to migrate refs to commit the transaction as an initial > transaction. This results in a signiticant speedup when migrating many > refs: > > Benchmark 1: migrate reftable:files (refcount = 100000, revision = HEAD~) > Time (mean ± σ): 3.247 s ± 0.034 s [User: 0.485 s, System: 2.722 s] > Range (min … max): 3.216 s … 3.309 s 10 runs > > Benchmark 2: migrate reftable:files (refcount = 100000, revision = HEAD) > Time (mean ± σ): 453.6 ms ± 1.9 ms [User: 214.6 ms, System: 230.5 ms] > Range (min … max): 451.5 ms … 456.4 ms 10 runs > > Summary > migrate reftable:files (refcount = 100000, revision = HEAD) ran > 7.16 ± 0.08 times faster than migrate reftable:files (refcount = 100000, revision = HEAD~) > > As the reftable backend doesn't (yet) special-case initial transactions > there is no comparable speedup for that backend. >
Nice. Really like how the actual perf changes were built up to a single line change.
[snip]