diff mbox series

p5310: stop timing non-bitmap pack-to-disk

Message ID 20200326075436.GA2199958@coredump.intra.peff.net (mailing list archive)
State New, archived
Headers show
Series p5310: stop timing non-bitmap pack-to-disk | expand

Commit Message

Jeff King March 26, 2020, 7:54 a.m. UTC
Commit 645c432d61 (pack-objects: use reachability bitmap index when
generating non-stdout pack, 2016-09-10) added two timing tests for
packing to an on-disk file, both with and without bitmaps. However, the
non-bitmap one isn't interesting to have as part of p5310's regression
suite. It _could_ be used as a baseline to show off the improvement in
the bitmap case, but:

  - the point of the t/perf suite is to find performance regressions,
    and it won't help with that. We don't compare the numbers between
    two tests (which the perf suite has no idea are even related), and
    any change in its numbers would have nothing to do with bitmaps.

  - it did show off the improvement in the commit message of 645c432d61,
    but it wasn't even necessary there. The bitmap case already shows an
    improvement (because before the patch, it behaved the same as the
    non-bitmap case), and the perf suite is even able to show the
    difference between the before and after measurements.

On top of that, it's one of the most expensive tests in the suite,
clocking in around 60s for linux.git on my machine (as compared to 16s
for the bitmapped version). And by default when using "./run", we'd run
it three times!

So let's just drop it. It's not useful and is adding minutes to perf
runs.

Signed-off-by: Jeff King <peff@peff.net>
---
I happened to be running p5310 today and was annoyed by this.

The other really expensive part is the actual "git repack" to generate
the bitmaps. We can't avoid running that (since we need the bitmaps it
generates), but it's mildly annoying that it runs all three times.
However, I think it's worth keeping as a timed test, as it would help us
find a performance regression in the bitmap generation code. It's too
bad we have to do the full repack for each trial, but we don't have a
way to just write bitmaps for an existing pack (it's conceptually
simple, but the code is pretty tied into pack-objects).

 t/perf/p5310-pack-bitmaps.sh | 4 ----
 1 file changed, 4 deletions(-)

Comments

Derrick Stolee March 26, 2020, 10:48 a.m. UTC | #1
On 3/26/2020 3:54 AM, Jeff King wrote:
> Commit 645c432d61 (pack-objects: use reachability bitmap index when
> generating non-stdout pack, 2016-09-10) added two timing tests for
> packing to an on-disk file, both with and without bitmaps. However, the
> non-bitmap one isn't interesting to have as part of p5310's regression
> suite. It _could_ be used as a baseline to show off the improvement in
> the bitmap case, but:
> 
>   - the point of the t/perf suite is to find performance regressions,
>     and it won't help with that. We don't compare the numbers between
>     two tests (which the perf suite has no idea are even related), and
>     any change in its numbers would have nothing to do with bitmaps.

This does make me think if there is a way to adjust "./run" to test two
different config settings or command-line options instead of just two
different build versions. Perhaps something like

 ./run "HEAD -c core.commitGraph=true" "HEAD -c core.commitGraph=false" -- p4200-line-log.sh

But that's just musing on my part.

>   - it did show off the improvement in the commit message of 645c432d61,
>     but it wasn't even necessary there. The bitmap case already shows an
>     improvement (because before the patch, it behaved the same as the
>     non-bitmap case), and the perf suite is even able to show the
>     difference between the before and after measurements.
> 
> On top of that, it's one of the most expensive tests in the suite,
> clocking in around 60s for linux.git on my machine (as compared to 16s
> for the bitmapped version). And by default when using "./run", we'd run
> it three times!
> 
> So let's just drop it. It's not useful and is adding minutes to perf
> runs.

I agree with your reasoning. This is not a critical path for clients,
and all servers should be using bitmaps.

Thanks,
-Stolee
Jeff King March 26, 2020, 11:12 a.m. UTC | #2
On Thu, Mar 26, 2020 at 06:48:37AM -0400, Derrick Stolee wrote:

> >   - the point of the t/perf suite is to find performance regressions,
> >     and it won't help with that. We don't compare the numbers between
> >     two tests (which the perf suite has no idea are even related), and
> >     any change in its numbers would have nothing to do with bitmaps.
> 
> This does make me think if there is a way to adjust "./run" to test two
> different config settings or command-line options instead of just two
> different build versions. Perhaps something like
> 
>  ./run "HEAD -c core.commitGraph=true" "HEAD -c core.commitGraph=false" -- p4200-line-log.sh
> 
> But that's just musing on my part.

I think that's the right direction, but it would require tests knowing
how to make use of those extra parameters. What I'd _really_ like is a
way to parameterize a whole bunch of things:

 - test repo
 - git version
 - particular config settings

do runs with whatever combinations of parameters you choose, and then
create tables showing differences across various settings of a
parameter. Some parameters would be automatically set up, but test
scripts would have to advertise other parameters they know about.

I don't think it's conceptually hard, but the existing perf code is
pretty hacked-together and relies on the filesystem for storage. So the
notion that we'd only ever compare different versions runs deep; that's
how the on-disk storage is organized.

> > So let's just drop it. It's not useful and is adding minutes to perf
> > runs.
> 
> I agree with your reasoning. This is not a critical path for clients,
> and all servers should be using bitmaps.

Yeah, I should have noted that we're not actually testing the
performance of a stock repack anywhere else. It wouldn't belong in
p5310, but in theory it might be of interest in another script. But I
agree for the reasons you gave that it's not all that interesting a
timing.

-Peff
diff mbox series

Patch

diff --git a/t/perf/p5310-pack-bitmaps.sh b/t/perf/p5310-pack-bitmaps.sh
index 7743f4f4c9..80c53edca7 100755
--- a/t/perf/p5310-pack-bitmaps.sh
+++ b/t/perf/p5310-pack-bitmaps.sh
@@ -31,10 +31,6 @@  test_perf 'simulated fetch' '
 	} | git pack-objects --revs --stdout >/dev/null
 '
 
-test_perf 'pack to file' '
-	git pack-objects --all pack1 </dev/null >/dev/null
-'
-
 test_perf 'pack to file (bitmap)' '
 	git pack-objects --use-bitmap-index --all pack1b </dev/null >/dev/null
 '