Patrick Steinhardt <ps@xxxxxx> writes: > 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]
Attachment:
signature.asc
Description: PGP signature