From: Patrick Steinhardt <ps@pks.im>
To: Justin Tobler <jltobler@gmail.com>
Cc: Miklos Vajna <vmiklos@collabora.com>,
gitster@pobox.com, szeder.dev@gmail.com, git@vger.kernel.org
Subject: Re: [PATCH v5 0/5] log: speed up --follow following renames for non-linear history
Date: Wed, 11 Nov 2026 11:43:50 +0100 [thread overview]
Message-ID: <avRG5r8DPrS23Nmk@pks.im> (raw)
In-Reply-To: <avOzVCHdGBNIG8sT@jtobler--20250820-SHC54>
On Tue, Nov 10, 2026 at 06:40:00PM -0600, Justin Tobler wrote:
> On 26/11/09 09:03AM, Miklos Vajna wrote:
> > Hi Patrick,
> >
> > Thanks for the reviews of v4. Changes in v5:
> >
> > - The fix of the old 6/6 is now squashed into the speedup patch (5/5),
> > so no commit in the series loses history, and its test is moved to
> > 1/5. While at it, I simplified 5/5: instead of two passes of diffs
> > against the parents, it first finds a parent where the path is
> > unchanged, and then only diffs against the other parents if they
> > still need renames to be followed. Because of the squash, the
> > range-diff pairs the new 5/5 with the old 6/6.
> >
> > - 5/5 now also follows renames when a parent has no merge base with
> > the parent where the path is unchanged, e.g. a subtree merge of
> > unrelated histories. Added a test for this to 1/5.
> >
> > - 5/5 now also follows copies, not only renames, when the merge dropped
> > the edit of the copy source. Added your test for this to 1/5. With
> > this, the linux.git case takes about 42s, instead of 37s.
>
> I'm a bit late to the party, but I decided to run some benchmarks
> against linux.git to showcase performance with 304812ed33de (log:
> improve --follow following renames for non-linear history, 2026-06-22)
> reverted, at the regression, and with v5 of this series applied:
>
> Benchmark 1: git log --stat --follow -- include/linux/rsc_table.h (rev = 304812ed33 reverted)
> Time (mean ± σ): 23.493 s ± 0.645 s [User: 23.001 s, System: 0.389 s]
> Range (min … max): 22.748 s … 23.883 s 3 runs
>
> Benchmark 2: git log --stat --follow -- include/linux/rsc_table.h (rev = 304812ed33)
> Time (mean ± σ): 335.883 s ± 4.866 s [User: 333.773 s, System: 0.577 s]
> Range (min … max): 332.296 s … 341.422 s 3 runs
>
> Benchmark 3: git log --stat --follow -- include/linux/rsc_table.h (rev = v5)
> Time (mean ± σ): 38.688 s ± 0.379 s [User: 38.081 s, System: 0.415 s]
> Range (min … max): 38.250 s … 38.923 s 3 runs
>
> Summary
> git log --stat --follow -- include/linux/rsc_table.h (rev = 304812ed33 reverted) ran
> 14.30 ± 0.44 times faster than git log --stat --follow -- include/linux/rsc_table.h (rev = 304812ed33)
> 1.65 ± 0.05 times faster than git log --stat --follow -- include/linux/rsc_table.h (rev = v5)
>
> While the fix in this series does improve the state of things, it is
> still overall a significant performance regression that I expect will
> result in increased file history timeouts on the server-side for some
> repositories we host at GitLab. Rename following for a file's history
> even prior to this regression can be expensive for large repositories.
>
> While the original patch and this series do improve correctness of
> following a file through history, I wonder if the increased cost is
> ultimately worth it in most scenarios. Maybe this could be something
> opt-in with another flag instead of toggled on my default?
Yeah, by now I'm also leaning into this direction. The performance cost
is definitely way too high for us, so we need a way to disable this new
feature altogether at GitLab.
> With this in mind, maybe it would be worth it to revert 304812ed33de
> (log: improve --follow following renames for non-linear history,
> 2026-06-22) and restart with a fresh series. IMO, it might make the
> changes here a bit easier to validate also.
I don't have a strong sense on whether or not we should revert the whole
series. I find the patches quite hard to review, but that may not be
because we're fixing things incrementally and rather be because I myself
am not familiar with this subsystem.
But in case we decide to not revert I'd like to see a toggle to disable
this feature as a first step. As mentioned, this change has caused a
rather big regression for GitLab, so we'd ideally have a way to disable
this feature soon so that we can mitigate it.
I don't want to make you (Miklos) responsible for delivering that of
course, I just want us to align on a fast path forward. In case we don't
revert we can help out and contribute such a default-disabled toggle.
And if so, that would also give us more time to fix the issue properly.
Thanks!
Patrick
next prev parent reply other threads:[~2026-11-11 10:43 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-13 13:55 Performance regression in `git log --follow` Patrick Steinhardt
2026-10-13 21:24 ` SZEDER Gábor
2026-10-15 14:48 ` [PATCH] log: speed up --follow following renames for non-linear history Miklos Vajna
2026-10-15 16:57 ` Junio C Hamano
2026-10-19 6:10 ` [PATCH v2] " Miklos Vajna
2026-10-22 20:45 ` [PATCH v3 0/4] " Miklos Vajna
2026-10-22 20:45 ` [PATCH v3 1/4] t4219: test more --follow cases across merges Miklos Vajna
2026-10-22 20:46 ` [PATCH v3 2/4] log: extract showing the remerge/combined diff of a merge commit Miklos Vajna
2026-10-22 20:46 ` [PATCH v3 3/4] log: simplify --follow following renames for non-linear history Miklos Vajna
2026-10-26 11:40 ` Patrick Steinhardt
2026-10-22 20:47 ` [PATCH v3 4/4] log: speed up " Miklos Vajna
2026-10-26 11:40 ` Patrick Steinhardt
2026-10-26 11:42 ` [PATCH v3 0/4] " Patrick Steinhardt
2026-10-30 20:07 ` [PATCH v4 0/6] " Miklos Vajna
2026-10-30 20:07 ` [PATCH v4 1/6] t4219: test more --follow cases across merges Miklos Vajna
2026-10-30 20:07 ` [PATCH v4 2/6] log: extract showing the remerge/combined diff of a merge commit Miklos Vajna
2026-10-30 20:08 ` [PATCH v4 3/6] log: fix -m --follow losing the history of later parents Miklos Vajna
2026-10-30 20:08 ` [PATCH v4 4/6] log: simplify --follow following renames for non-linear history Miklos Vajna
2026-10-30 20:09 ` [PATCH v4 5/6] log: speed up " Miklos Vajna
2026-11-06 14:14 ` Patrick Steinhardt
2026-11-09 8:02 ` Miklos Vajna
2026-10-30 20:10 ` [PATCH v4 6/6] log: fix --follow following an edit on a side the merge did not take Miklos Vajna
2026-11-06 14:14 ` Patrick Steinhardt
2026-11-09 8:03 ` Miklos Vajna
2026-11-06 14:14 ` [PATCH v4 0/6] log: speed up --follow following renames for non-linear history Patrick Steinhardt
2026-11-09 8:01 ` Miklos Vajna
2026-11-09 8:03 ` [PATCH v5 0/5] " Miklos Vajna
2026-11-09 8:04 ` [PATCH v5 1/5] t4219: test more --follow cases across merges Miklos Vajna
2026-11-10 23:06 ` Justin Tobler
2026-11-09 8:05 ` [PATCH v5 2/5] log: extract showing the remerge/combined diff of a merge commit Miklos Vajna
2026-11-09 8:05 ` [PATCH v5 3/5] log: fix -m --follow losing the history of later parents Miklos Vajna
2026-11-09 8:05 ` [PATCH v5 4/5] log: simplify --follow following renames for non-linear history Miklos Vajna
2026-11-10 16:45 ` Toon Claes
2026-11-09 8:06 ` [PATCH v5 5/5] log: speed up " Miklos Vajna
2026-11-11 0:40 ` [PATCH v5 0/5] " Justin Tobler
2026-11-11 10:43 ` Patrick Steinhardt [this message]
2026-11-11 12:41 ` Miklos Vajna
2026-11-11 13:29 ` Patrick Steinhardt
2026-11-12 9:05 ` [PATCH] log: make --follow following renames for non-linear history optional Miklos Vajna
2026-11-11 16:44 ` [PATCH v5 0/5] log: speed up --follow following renames for non-linear history Junio C Hamano
2026-10-16 20:37 ` [PATCH] " Junio C Hamano
2026-10-14 6:16 ` Performance regression in `git log --follow` Miklos Vajna
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=avRG5r8DPrS23Nmk@pks.im \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jltobler@gmail.com \
--cc=szeder.dev@gmail.com \
--cc=vmiklos@collabora.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox