git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] t/perf/perf-lib.sh: remove test_times.* at the end test_perf_()

From
Jeff King <peff@peff.net>
Date
Oct 8, 2021, 19:57 UTC
Message-ID
<YWCilnNa2eAakoX0@coredump.intra.peff.net>
In-Reply-To
<xmqqee8vl90e.fsf@gitster.g>
On Fri, Oct 08, 2021 at 10:30:09AM -0700, Junio C Hamano wrote:
Show 18 quoted lines
> > There are cases it doesn't help, though. For instance, in one of the
> > scripts we measure the time to run "git repack -adb" to generate
> > bitmaps. But the first run has to do more work, because we can reuse
> > results for subsequent ones! It would help to "rm -f
> > objects/pack/*.bitmap", but even that's not entirely fair, as it will be
> > repacking from a single pack, versus whatever state we started with.
> 
> You need a "do this too for each iteration but do not time it", i.e.
> 
>     test_perf 'repack performance' --prepare '
> 	make a messy original repository
>     ' --per-iteration-prepare '
> 	prepare a test repository from the messy original
>     ' --time-this-part-only '
>         git repack -adb
>     '
> 
> Syntactically, eh, Yuck.

If any step doesn't need to be per-iteration, you can do it in a separate test_expect_success block. So --prepare would always be per-iteration, I think.

The tricky thing I meant to highlight in that example is that the preparation step is non-obvious, since the timed command actually throws away the original state. But we can probably stash away what we need. With the test_perf_prepare I showed earlier, maybe:

  test_expect_success 'stash original state' '
	cp -al objects objects.orig
  '
  test_perf_prepare 'set up original state' '
	rm -rf objects &&
	cp -al objects.orig objects
  '
  test_perf 'repack' '
	git repack -adb
  '

which is not too bad. Of course it is made a lot easier by my use of the unportable "cp -l", but you get the general idea. ;) This is all a rough sketch anyway, and not something I plan on working on anytime soon.

For Jeff's case, the preparation would hopefully just be some sequence of reset/read-tree/etc to manipulate the index and working tree to the original state.

-Peff
Previous: Junio C HamanoNext: SZEDER Gábor
Message 9 of 11 in “t/perf/perf-lib.sh: remove test_times.* at the end test_perf_()”
  1. t/perf/perf-lib.sh: remove test_times.* at the end test_perf_()Jeff Hostetler via GitGitGadget, Oct 4, 2021
  2. Taylor BlauOct 5, 2021
  3. Jeff KingOct 6, 2021
  4. Taylor BlauOct 6, 2021
  5. Jeff HostetlerOct 7, 2021
  6. Jeff KingOct 8, 2021
  7. A hard dependency on "hyperfine" for t/perfÆvar Arnfjörð Bjarmason, Oct 8, 2021
  8. Junio C HamanoOct 8, 2021
  9. Jeff KingOct 8, 2021
  10. SZEDER GáborOct 10, 2021
  11. Jeff HostetlerOct 13, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.