Re: [PATCH 02/11] Introduce a performance test for git-rebase
From: Thomas Rast <hidden>
Date: 2016-06-15 22:53:17
Thomas Rast [off-list ref] writes:
The perf framework lets the user run the test in an arbitrary repo, which makes writing a test for rebase a bit finicky. This one uses a perl script to determine a longest linear segment of history, that is, a range A..B which is completely linear. (For a full clone of git.git, this is the (whole) 'html' branch.) The number of commits that are rebased is capped at 50, however. That is, if A..B is more than 50 commits, it uses B~50..B instead. Having determined a suitable range, it then runs rebase with all combinations of rerere (on/off), -i / noninteractive, and -m / normal. Signed-off-by: Thomas Rast <redacted> ---
I forgot to put the interesting part here:
Test this tree
------------------------------------------------------
3400.4: rebase -f (rerere off) 4.64(2.12+1.80)
3400.5: rebase -m -f (rerere off) 4.17(2.07+1.53) to .4: -10% ***
3400.6: rebase -i -f (rerere off) 4.51(2.30+1.57) to .4: -3% *
3400.7: rebase -i -m -f (rerere off) 4.51(2.31+1.57)
------------------------------------------------------
Significance hints: '.' 0.1 '*' 0.05 '**' 0.01 '***' 0.001
I did the change/significance manually here, so I might have made a
mistake in the exact numbers.
However, it's pretty obvious that 'rebase -f' is slow compared to
'rebase -m'. So slow in fact that the user would be better off running
an *interactive* rebase.
So what's the advantage of not using -m? I always thought it was
because plain rebase was supposed to be *faster* than -m, and I
confirmed this in an extremely scientific test on #git-devel:
[09 Mar 14:05] <charon> hrm, what's the advantage of straight rebase over 'rebase -m' ?
[09 Mar 14:06] <mhagger> charon: It's supposed to be significantly faster
[09 Mar 14:06] <charon> mhagger: ah thanks, that's what i suspected
This wasn't always the case; back in v1.7.0 you would see this picture:
Test v1.7.0
---------------------------------------------------
3400.4: rebase -f (rerere off) 3.75(2.12+1.18)
3400.5: rebase -m -f (rerere off) 4.05(2.29+1.32) to .4: +8% ***
This comes from the i18n support added in adc3b2b27..a9f578685, and from
43c2325 (am: use get_author_ident_from_commit instead of mailinfo when
rebasing, 2010-06-16).
Now I'm not really keen on hacking on git-am until it gets back its
performance, as for most uses it's probably still fast enough. But I
think one important question is: can we get rid of the
git-format-patch|git-am mode of git-rebase, which has historically been
a source of pain (see, e.g., the aforementioned 43c2325)?
Ok, perhaps not: certain features like --whitespace depend on it :-(
--
Thomas Rast
trast@{inf,student}.ethz.ch