From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: Jeff Hostetler <git@jeffhostetler.com>,
Taylor Blau <me@ttaylorr.com>,
Jeff Hostetler via GitGitGadget <gitgitgadget@gmail.com>,
git@vger.kernel.org, Jeff Hostetler <jeffhost@microsoft.com>
Subject: Re: [PATCH] t/perf/perf-lib.sh: remove test_times.* at the end test_perf_()
Date: Fri, 08 Oct 2021 10:30:09 -0700 [thread overview]
Message-ID: <xmqqee8vl90e.fsf@gitster.g> (raw)
In-Reply-To: <YV+zFqi4VmBVJYex@coredump.intra.peff.net> (Jeff King's message of "Thu, 7 Oct 2021 22:55:18 -0400")
Jeff King <peff@peff.net> writes:
> What I'd propose instead is that we ought to have:
>
> test_perf 'checkout'
> --prepare '
> git reset --hard the_original_state
> ' '
> git checkout
> '
>
> Having two multi-line snippets is a bit ugly (check out that awful
> middle line), but I think this could be added without breaking existing
> tests (they just wouldn't have a --prepare option).
>
> If that syntax is too horrendous, we could have:
>
> # this saves the snippet in a variable internally, and runs
> # it before each trial of the next test_perf(), after which
> # it is discarded
> test_perf_prepare '
> git reset --hard the_original_state
> '
>
> test_perf 'checkout' '
> git checkout
> '
>
> I think that would be pretty easy to implement, and would solve the most
> common form of this problem. And there's plenty of prior art; just about
> every decent benchmarking system has a "do this before each trial"
> mechanism. Our t/perf suite (as you probably noticed) is rather more
> ad-hoc and less mature.
Nice.
> 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.
next prev parent reply other threads:[~2021-10-08 17:30 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-04 22:29 [PATCH] t/perf/perf-lib.sh: remove test_times.* at the end test_perf_() Jeff Hostetler via GitGitGadget
2021-10-05 17:45 ` Taylor Blau
2021-10-06 19:24 ` Jeff King
2021-10-06 19:26 ` Taylor Blau
2021-10-07 17:49 ` Jeff Hostetler
2021-10-08 2:55 ` Jeff King
2021-10-08 7:47 ` A hard dependency on "hyperfine" for t/perf Ævar Arnfjörð Bjarmason
2021-10-08 17:30 ` Junio C Hamano [this message]
2021-10-08 19:57 ` [PATCH] t/perf/perf-lib.sh: remove test_times.* at the end test_perf_() Jeff King
2021-10-10 21:26 ` SZEDER Gábor
2021-10-13 21:09 ` Jeff Hostetler
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=xmqqee8vl90e.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@jeffhostetler.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=jeffhost@microsoft.com \
--cc=me@ttaylorr.com \
--cc=peff@peff.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.